{"openapi":"3.1.0","info":{"title":"Savage Lex Agents Blog API","version":"1.0.0","description":"Read and write Savage Lex blog posts. No other Savage Lex resources are exposed."},"servers":[{"url":"https://agents.savagelex.com"}],"security":[{"bearerAuth":[]}],"paths":{"/v1/blog/posts":{"parameters":[{"name":"X-Agent-Id","in":"header","required":false,"schema":{"type":"string","maxLength":64},"description":"Stable, non-secret identifier used for connection monitoring."}],"get":{"operationId":"listBlogPosts","summary":"List all blog posts, including drafts","responses":{"200":{"description":"Blog post metadata"}}},"post":{"operationId":"createBlogPost","summary":"Create a blog post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":80},"title":{"type":"string","maxLength":200},"excerpt":{"type":"string","maxLength":1000},"content":{"type":"string","description":"Markdown","maxLength":200000},"author":{"type":"string","maxLength":120},"published_at":{"type":"string","format":"date-time"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":40}},"status":{"type":"string","enum":["draft","published"]},"seo_title":{"type":"string","maxLength":200},"seo_description":{"type":"string","maxLength":500}},"required":["title"]}}}},"responses":{"201":{"description":"Created"}}}},"/v1/blog/posts/{slug}":{"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Agent-Id","in":"header","required":false,"schema":{"type":"string","maxLength":64},"description":"Stable, non-secret identifier used for connection monitoring."}],"get":{"operationId":"getBlogPost","summary":"Read a blog post","responses":{"200":{"description":"Blog post"},"404":{"description":"Not found"}}},"put":{"operationId":"updateBlogPost","summary":"Update fields on a blog post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":80},"title":{"type":"string","maxLength":200},"excerpt":{"type":"string","maxLength":1000},"content":{"type":"string","description":"Markdown","maxLength":200000},"author":{"type":"string","maxLength":120},"published_at":{"type":"string","format":"date-time"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":40}},"status":{"type":"string","enum":["draft","published"]},"seo_title":{"type":"string","maxLength":200},"seo_description":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"Updated"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}