{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Melp Public Website API","version":"1.0.0","description":"Read-only public endpoints for Melp website content. These endpoints do not provide authenticated Melp workspace access."},"servers":[{"url":"https://www.melp.us"}],"externalDocs":{"description":"Melp product guide","url":"https://www.melp.us/guide"},"paths":{"/api/blogs":{"get":{"summary":"List Melp blog posts","description":"Returns a page of public Melp articles for research and citation.","operationId":"listBlogPosts","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"perPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":9}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated blog posts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPage"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[]}},"/api/blog/search":{"get":{"summary":"Search Melp blog titles","description":"Returns up to six public articles whose titles match the query.","operationId":"searchBlogTitles","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2}}],"responses":{"200":{"description":"Matching blog titles and links","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogSearchResult"}}}}},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[]}},"/api/pricing/packages":{"get":{"summary":"List public Melp pricing packages","description":"Returns current public plan names, billing options, constraints, and features.","operationId":"listPricingPackages","responses":{"200":{"description":"Current public pricing packages","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingResponse"}}}},"500":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[]}}},"components":{"responses":{"BadRequest":{"description":"The request parameters are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServiceUnavailable":{"description":"A required upstream service is temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"}}},"BlogPost":{"type":"object","required":["id","slug","date","title","excerpt","link"],"properties":{"id":{"type":"integer"},"slug":{"type":"string"},"date":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date-time"},"title":{"type":"string"},"excerpt":{"type":"string"},"link":{"type":"string","format":"uri"},"readingTimeMinutes":{"type":"integer","minimum":1}}},"BlogPage":{"type":"object","required":["posts","total","totalPages"],"properties":{"posts":{"type":"array","items":{"$ref":"#/components/schemas/BlogPost"}},"total":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}}},"BlogSearchResult":{"type":"object","required":["title","href"],"properties":{"title":{"type":"string"},"href":{"type":"string"}}},"PricingResponse":{"type":"object","required":["packages"],"properties":{"packages":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}