{"openapi":"3.1.0","info":{"title":"Anuj Mulik content API","version":"1.0.0","description":"Read-only access to the posts on https://anujmulik.com. Every HTML page is also available as Markdown by sending Accept: text/markdown or appending .md. No authentication. The path prefix /api/v1/ is stable; a breaking change would ship as /api/v2/ with v1 kept for at least 90 days. See https://anujmulik.com/llms.txt for when to use this site.","contact":{"name":"Anuj Mulik","url":"https://anujmulik.com/contact"}},"servers":[{"url":"https://anujmulik.com"}],"paths":{"/api/v1/posts":{"get":{"operationId":"listPosts","summary":"List posts, newest first","parameters":[{"name":"series","in":"query","required":false,"schema":{"type":"string"},"description":"Only posts in this series."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"A page of posts","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"pages":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/PostSummary"}}},"required":["site","page","limit","total","pages","items"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts/{slug}":{"get":{"operationId":"getPost","summary":"Get one post with its full body as Markdown","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"The slug from the post URL."}],"responses":{"200":{"description":"The post","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PostSummary"},{"type":"object","properties":{"body_markdown":{"type":"string"},"author":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}},"seriesParts":{"type":"array","items":{"type":"object","properties":{"part":{"type":"integer"},"title":{"type":"string"},"url":{"type":"string"}}}}}}]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/search":{"get":{"operationId":"searchPosts","summary":"Full-text search over posts","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Matches, best first","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"string"},"query":{"type":"string"},"total":{"type":"integer"},"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/PostSummary"},{"type":"object","properties":{"score":{"type":"number"}}}]}}},"required":["site","query","total","items"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"PostSummary":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"date":{"type":"string","format":"date"},"dateFormatted":{"type":"string"},"readingMinutes":{"type":"integer"},"series":{"type":["string","null"]},"part":{"type":["integer","null"]},"url":{"type":"string","format":"uri"},"markdown":{"type":"string","format":"uri","description":"The same post as text/markdown"}},"required":["slug","title","description","date","url","markdown"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}