{"openapi":"3.1.0","info":{"title":"Formative Spaces public distribution API","version":"1.0.0","description":"Committed editorial Newsroom journalism; Topic summaries. Research reports and notices are outside this release. Currently public articles by publication time; no correction/deletion replay or exactly-once stream. Overlap windows, deduplicate IDs/versions, and periodically reconcile current state. Backdated publications may be missed."},"servers":[{"url":"https://www.formativespaces.com/"}],"paths":{"/api/public/v1/capabilities":{"get":{"summary":"Capabilities and actual limits","parameters":[],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object"}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/openapi.json":{"get":{"summary":"This contract","parameters":[],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object"}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/articles":{"get":{"summary":"Current public article metadata","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","dataAsOf","sourceSnapshotVersion","items","nextCursor"],"properties":{"schemaVersion":{"const":1},"dataAsOf":{"type":"string","format":"date-time"},"sourceSnapshotVersion":{"type":"string"},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Article"}},"nextCursor":{"type":["string","null"]}}}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/articles/{idOrSlug}":{"get":{"summary":"Complete represented public article","parameters":[{"name":"idOrSlug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","dataAsOf","sourceSnapshotVersion","item"],"properties":{"schemaVersion":{"const":1},"dataAsOf":{"type":"string"},"sourceSnapshotVersion":{"type":"string"},"item":{"$ref":"#/components/schemas/Article"}}}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[{"name":"idOrSlug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/search":{"get":{"summary":"Literal headline/dek search; limit max 20","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","dataAsOf","sourceSnapshotVersion","items","nextCursor"],"properties":{"schemaVersion":{"const":1},"dataAsOf":{"type":"string","format":"date-time"},"sourceSnapshotVersion":{"type":"string"},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Article"}},"nextCursor":{"type":["string","null"]}}}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/updates":{"get":{"summary":"PUBLICATION_WINDOW; inclusive 31-day maximum","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"since","in":"query","required":true,"schema":{"type":"string"}},{"name":"until","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","dataAsOf","sourceSnapshotVersion","items","nextCursor"],"properties":{"schemaVersion":{"const":1},"dataAsOf":{"type":"string","format":"date-time"},"sourceSnapshotVersion":{"type":"string"},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Article"}},"nextCursor":{"type":["string","null"]}}}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"since","in":"query","required":true,"schema":{"type":"string"}},{"name":"until","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/topics/{slug}":{"get":{"summary":"Existing Topic summary only","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","item"]}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/api/public/v1/daily-brief":{"get":{"summary":"Current local-day deterministic brief","parameters":[],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","editionDate","timezone","windowStart","windowEnd","dataAsOf","sourceSnapshotVersion","algorithmVersion","revision","itemCount","items"],"properties":{"schemaVersion":{"const":1},"editionDate":{"type":"string"},"timezone":{"const":"America/New_York"},"windowStart":{"type":"string","format":"date-time"},"windowEnd":{"type":"string","format":"date-time"},"dataAsOf":{"type":"string","format":"date-time"},"sourceSnapshotVersion":{"type":"string"},"algorithmVersion":{"type":"string"},"revision":{"type":"string"},"itemCount":{"type":"integer","minimum":0,"maximum":6},"items":{"type":"array","maxItems":6,"items":{"$ref":"#/components/schemas/Article"}}}}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}},"/feed.json":{"get":{"summary":"JSON Feed 1.1 editorial excerpts","parameters":[],"responses":{"200":{"description":"Public response; ETag and no shared CDN cache","content":{"application/feed+json":{"schema":{"type":"object","required":["version","title","items"],"properties":{"version":{"const":"https://jsonfeed.org/version/1.1"},"title":{"type":"string"},"items":{"type":"array","maxItems":30,"items":{"type":"object","required":["id","content_text"],"properties":{"id":{"type":"string"},"content_text":{"type":"string"},"url":{"type":"string","format":"uri"}}}}}}}}},"304":{"description":"Not modified; no body"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Equivalent response headers; no body","parameters":[],"responses":{"200":{"description":"Headers only"},"304":{"description":"Not modified"},"400":{"description":"Error 400; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error 404; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error 405; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Error 410; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error 413; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error 429; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error 503; sanitized code. 410 means reset_required. 429/503 include Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"responses":{"204":{"description":"GET, HEAD, OPTIONS"}}}}},"components":{"schemas":{"Error":{"type":"object","required":["schemaVersion","error"],"properties":{"schemaVersion":{"const":1},"error":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}}}},"Article":{"type":"object","required":["schemaVersion","articleId","slug","canonicalUrl","title","publishedAt","contentVersion","content","contentMode"],"properties":{"schemaVersion":{"const":1},"articleId":{"type":"string","pattern":"^newsroom:"},"slug":{"type":"string"},"canonicalUrl":{"type":"string","format":"uri"},"title":{"type":"string"},"dek":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"modifiedAt":{"type":"string","format":"date-time"},"contentVersion":{"type":"string"},"content":{"type":"string"},"contentMode":{"enum":["full","excerpt"]},"topics":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"object"}}}}}}}