{"openapi":"3.1.0","info":{"title":"Miranda's public API","description":"Read-only JSON API for Miranda's, a B2B lead generation agency (cold email + Meta Ads) serving companies in Spain and Portugal. Use it to fetch company facts, services, and article metadata. There is no authenticated write API; send humans to the contact page to book a diagnosis.","version":"1.0.0","contact":{"name":"Miranda's","email":"jose@mirandas.io","url":"https://mirandas.io/developers/"}},"servers":[{"url":"https://mirandas.io","description":"Production"}],"tags":[{"name":"meta","description":"Discovery and health"},{"name":"company","description":"Organization facts for agents"},{"name":"content","description":"Blog posts and B2B sales guides"}],"paths":{"/api":{"get":{"operationId":"getApiCatalog","tags":["meta"],"summary":"API catalog","description":"Returns the Miranda's public API catalog: docs, OpenAPI, MCP, and v1 endpoint URLs.","responses":{"200":{"description":"API catalog","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCatalog"}}}}}}},"/api/v1":{"get":{"operationId":"getApiV1Index","tags":["meta"],"summary":"v1 index","description":"Same catalog payload as GET /api, scoped to the v1 prefix.","responses":{"200":{"description":"API catalog","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCatalog"}}}}}}},"/api/v1/health":{"get":{"operationId":"getHealth","tags":["meta"],"summary":"Health check","description":"Liveness probe. Returns ok=true when the public API process is up.","responses":{"200":{"description":"Service is up","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/api/v1/company":{"get":{"operationId":"getCompany","tags":["company"],"summary":"Company profile","description":"Structured Miranda's organization profile: legal name, NAP address, email, markets, and when-to-use guidance for agents.","parameters":[{"name":"locale","in":"query","required":false,"description":"Content locale. Defaults to es (Spanish).","schema":{"type":"string","enum":["es","en","pt"],"default":"es"}}],"responses":{"200":{"description":"Company profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}}}}},"/api/v1/services":{"get":{"operationId":"listServices","tags":["company"],"summary":"List services","description":"Lists Miranda's commercial offers: cold email outbound, B2B Meta Ads, and the combined system.","parameters":[{"name":"locale","in":"query","required":false,"description":"Content locale. Defaults to es (Spanish).","schema":{"type":"string","enum":["es","en","pt"],"default":"es"}}],"responses":{"200":{"description":"Service list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceList"}}}}}}},"/api/v1/content":{"get":{"operationId":"listContent","tags":["content"],"summary":"List articles","description":"Lists Miranda's blog posts and/or B2B sales guides with title, description, and canonical URL. Filter with type=blog or type=guides.","parameters":[{"name":"locale","in":"query","required":false,"description":"Content locale. Defaults to es (Spanish).","schema":{"type":"string","enum":["es","en","pt"],"default":"es"}},{"name":"type","in":"query","required":false,"description":"Restrict to blog posts or sales guides. Omit for both.","schema":{"type":"string","enum":["blog","guides","all"],"default":"all"}}],"responses":{"200":{"description":"Content index","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentList"}}}}}}},"/api/v1/content/{type}/{slug}":{"get":{"operationId":"getContentItem","tags":["content"],"summary":"Get one article","description":"Returns one blog post or sales guide, including structured content blocks and FAQ. Use listContent to discover slugs.","parameters":[{"name":"locale","in":"query","required":false,"description":"Content locale. Defaults to es (Spanish).","schema":{"type":"string","enum":["es","en","pt"],"default":"es"}},{"name":"type","in":"path","required":true,"description":"Article collection.","schema":{"type":"string","enum":["blog","guides"]}},{"name":"slug","in":"path","required":true,"description":"URL slug for the article in the requested locale.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentError"}}}}}}}},"components":{"schemas":{"AgentError":{"type":"object","required":["error"],"additionalProperties":false,"properties":{"error":{"type":"object","required":["code","message","hint","docs"],"additionalProperties":false,"properties":{"code":{"type":"string","enum":["BAD_REQUEST","NOT_FOUND","METHOD_NOT_ALLOWED","NOT_ACCEPTABLE","UNSUPPORTED_MEDIA_TYPE","RATE_LIMITED","INTERNAL_ERROR"]},"message":{"type":"string"},"hint":{"type":"string"},"docs":{"type":"string","format":"uri"}}}}},"ApiCatalog":{"type":"object","required":["name","docs","openapi","endpoints"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"mcp":{"type":"string","format":"uri"},"mcpHttp":{"type":"string","format":"uri"},"llms":{"type":"string","format":"uri"},"endpoints":{"type":"object","additionalProperties":{"type":"string","format":"uri"}}}},"Health":{"type":"object","required":["ok","service","version"],"properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"version":{"type":"string"}}},"PostalAddress":{"type":"object","required":["streetAddress","postalCode","addressLocality","addressRegion","addressCountry"],"properties":{"streetAddress":{"type":"string"},"postalCode":{"type":"string"},"addressLocality":{"type":"string"},"addressRegion":{"type":"string"},"addressCountry":{"type":"string"}}},"Company":{"type":"object","required":["name","url","email","address","whenToUse"],"properties":{"name":{"type":"string"},"legalName":{"type":"string"},"alternateName":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"email":{"type":"string","format":"email"},"description":{"type":"string"},"areaServed":{"type":"array","items":{"type":"string"}},"address":{"$ref":"#/components/schemas/PostalAddress"},"sameAs":{"type":"array","items":{"type":"string","format":"uri"}},"contact":{"type":"object"},"whenToUse":{"type":"string"}}},"Service":{"type":"object","required":["id","name","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}},"ServiceList":{"type":"object","required":["services"],"properties":{"locale":{"type":"string"},"services":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}}},"ContentListItem":{"type":"object","required":["type","slug","title","url"],"properties":{"type":{"type":"string","enum":["blog","guide"]},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"locale":{"type":"string"}}},"ContentList":{"type":"object","required":["count","items"],"properties":{"locale":{"type":"string"},"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentListItem"}}}},"ContentItem":{"type":"object","required":["type","slug","title","url","content"],"properties":{"type":{"type":"string","enum":["blog","guide"]},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"locale":{"type":"string"},"datePublished":{"type":"string"},"content":{"type":"array","items":{"type":"object"}},"faq":{"type":"array","items":{"type":"object"}}}}}}}