{"openapi":"3.1.1","info":{"title":"hasparus public content API","version":"1.0.0","description":"Public profile and article index for haspar.us. Read-only, without authentication.","contact":{"name":"hasparus","url":"https://haspar.us/contact/"}},"servers":[{"url":"https://haspar.us","description":"Canonical public website"}],"security":[],"externalDocs":{"description":"hasparus developer documentation and MCP access","url":"https://haspar.us/docs/"},"paths":{"/api/profile.json":{"get":{"operationId":"getHasparusProfile","summary":"Read the public author profile","description":"Read the author's public profile and links. You don't need authentication.","responses":{"200":{"description":"Public author profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"404":{"description":"Error details and a hint for the next request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error details and a hint for the next request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"description":"Supported HTTP methods.","schema":{"type":"string","const":"GET, HEAD"}}}}}}},"/api/posts.json":{"get":{"operationId":"listHasparusPosts","summary":"List visible public articles","description":"List public articles, newest first. Excludes hidden posts and drafts. Follow markdownUrl to read source text, which may contain MDX. You don't need authentication; the index fits in one response.","responses":{"200":{"description":"Article index with canonical and Markdown URLs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostIndex"}}}},"404":{"description":"Error details and a hint for the next request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error details and a hint for the next request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"description":"Supported HTTP methods.","schema":{"type":"string","const":"GET, HEAD"}}}}}}}},"components":{"schemas":{"Profile":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","description":"Published author name."},"handle":{"type":"string","description":"Public online handle."},"url":{"type":"string","format":"uri","description":"Canonical homepage."},"description":{"type":"string","description":"Author's software interests."},"sameAs":{"type":"array","items":{"type":"string","format":"uri"},"description":"Published profiles for identity resolution."},"contactUrl":{"type":"string","format":"uri","description":"Published contact channels."}},"required":["name","handle","url","description","sameAs","contactUrl"],"additionalProperties":false},"Post":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","description":"Exact identifier accepted by the MCP read_post tool and CLI read command."},"title":{"type":"string","description":"Article title."},"description":{"type":"string","description":"Article description, or an empty string if none is published."},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Publication date."},"url":{"type":"string","format":"uri","description":"Canonical HTML article URL to cite."},"markdownUrl":{"type":"string","format":"uri","description":"Markdown/MDX source export."}},"required":["slug","title","description","date","url","markdownUrl"],"additionalProperties":false},"PostIndex":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"posts":{"type":"array","items":{"$ref":"#/components/schemas/Post"},"description":"Visible articles, newest first."}},"required":["posts"],"additionalProperties":false},"Error":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Explanation of the failure."},"hint":{"type":"string","description":"How to resolve or investigate the failure."}},"required":["code","message","hint"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}