{"openapi":"3.1.0","info":{"title":"Cozy Fables public catalog API","version":"1.0.0","description":"Read-only public facts about Cozy Fables for AI agents: when to use the product, pricing, themes, FAQ, and health. Story generation is not part of this API. Every operation is unauthenticated.","termsOfService":"https://www.cozyfables.com/terms","contact":{"name":"Cozy Fables support","email":"hello@cozyfables.com","url":"https://www.cozyfables.com/contact"},"license":{"name":"Cozy Fables Terms of Service","url":"https://www.cozyfables.com/terms"}},"servers":[{"url":"https://www.cozyfables.com","description":"Cozy Fables production"}],"tags":[{"name":"Catalog","description":"Public product facts agents can cite."},{"name":"Health","description":"Liveness of the website and its database."}],"paths":{"/api/v1/catalog":{"get":{"operationId":"getPublicCatalog","summary":"Get the Cozy Fables public catalog","description":"Returns when to use Cozy Fables, plus pricing, themes, FAQ, and official links. Use this when an agent needs official product facts. This is a single-resource GET with no request body, pagination, or write side effects.","tags":["Catalog"],"security":[],"responses":{"200":{"description":"Public catalog","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalog"}}}},"405":{"description":"Method not allowed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/health":{"get":{"operationId":"getHealth","summary":"Check Cozy Fables health","description":"Returns status=ok when Postgres is reachable. Used by operators and agents to confirm the site is live. No authentication.","tags":["Health"],"security":[],"responses":{"200":{"description":"Health snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"405":{"description":"Method not allowed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Get the OpenAPI description","description":"Returns this OpenAPI 3.1 document so agents can bind getPublicCatalog and getHealth as tools. No authentication.","tags":["Catalog"],"security":[],"responses":{"200":{"description":"OpenAPI 3.1 document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocument"}}}},"405":{"description":"Method not allowed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","additionalProperties":false,"required":["type","title","status","detail","instance","code","resolution"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"}}},"Health":{"type":"object","additionalProperties":false,"required":["status","timestamp"],"properties":{"status":{"type":"string","enum":["ok","degraded"]},"timestamp":{"type":"string","format":"date-time"}}},"PublicCatalog":{"type":"object","additionalProperties":false,"required":["name","tagline","description","whenToUse","whenNotToUse","authentication","onboarding","pricing","themes","faq","contact","links"],"properties":{"name":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"whenToUse":{"type":"array","items":{"type":"string"}},"whenNotToUse":{"type":"array","items":{"type":"string"}},"authentication":{"type":"string"},"onboarding":{"type":"object","additionalProperties":false,"required":["freeTier","salesFormRequired","apiKeyRequired","startUrl"],"properties":{"freeTier":{"type":"boolean"},"salesFormRequired":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"startUrl":{"type":"string","format":"uri"}}},"pricing":{"type":"object","additionalProperties":false,"required":["freeLifetimeStories","familyMonthlyUsd","familyAnnualUsd","familyMonthlyCredits","currency"],"properties":{"freeLifetimeStories":{"type":"integer"},"familyMonthlyUsd":{"type":"number"},"familyAnnualUsd":{"type":"number"},"familyMonthlyCredits":{"type":"integer"},"currency":{"type":"string"}}},"themes":{"type":"array","items":{"type":"string"}},"faq":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["question","answer"],"properties":{"question":{"type":"string"},"answer":{"type":"string"}}}},"contact":{"type":"object","additionalProperties":false,"required":["email","url"],"properties":{"email":{"type":"string","format":"email"},"url":{"type":"string","format":"uri"}}},"links":{"type":"object","additionalProperties":{"type":"string","format":"uri"}}}},"OpenApiDocument":{"type":"object","additionalProperties":true,"required":["openapi","info","paths"],"properties":{"openapi":{"type":"string"},"info":{"type":"object"},"paths":{"type":"object"}}}}}}