{"openapi":"3.1.1","info":{"title":"YIMBY Action Public API","version":"1.0.0","description":"Free, anonymous, read-only access to YIMBY Action's reviewed public titles and summaries and active chapter directory. No account, API key or OAuth grant is required. This API cannot read private CMS records, submit forms or change content. Cite returned source URLs; search results are excerpts, not a complete voter guide. Follow each guide for its election date and endorsement details.","contact":{"name":"YIMBY Action","url":"https://yimbyaction.org/contact"}},"servers":[{"url":"/","description":"This deployment; production is https://yimbyaction.org"}],"externalDocs":{"description":"YIMBY Action developer and agent guide","url":"https://yimbyaction.org/developers"},"security":[],"paths":{"/api/public/search":{"get":{"operationId":"searchYimbyAction","summary":"Search YIMBY Action","description":"Find published housing policy, election guides, endorsed candidates, news, resources and chapter pages. Filter by type, state or year. Searches only reviewed public titles and summaries, with source URLs and at most 50 results. Raw CMS bodies, internal fields and the website's broad full-text index are excluded. Follow source pages before making election-specific claims.","tags":["Public content"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search words, such as parking reform or San Francisco endorsements.","schema":{"type":"string","minLength":2,"maxLength":200,"description":"Search words, such as parking reform or San Francisco endorsements."}},{"name":"type","in":"query","required":false,"description":"Limit results to a reviewed public content category.","schema":{"description":"Limit results to a reviewed public content category.","type":"string","enum":["pages","news","podcast","policies","chapters","elections","candidates","careers"]}},{"name":"state","in":"query","required":false,"description":"Two-letter US state abbreviation, for example CA.","schema":{"description":"Two-letter US state abbreviation, for example CA.","type":"string","pattern":"^[A-Z]{2}$"}},{"name":"year","in":"query","required":false,"description":"Four-digit election or publication year.","schema":{"description":"Four-digit election or publication year.","type":"string","pattern":"^\\d{4}$"}}],"responses":{"200":{"description":"Published public content only.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string"},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching public titles and summaries before the 50-result limit."},"results":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"},"excerpt":{"type":"string"},"type":{"type":"string"}},"required":["title","url","description","excerpt","type"],"additionalProperties":false}}},"required":["query","total","results"],"additionalProperties":false}}}},"400":{"description":"Invalid or unknown query parameters.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"}},"required":["type","title","status","detail"],"additionalProperties":false}}}},"429":{"description":"Burst budget exhausted; honor Retry-After.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"}},"required":["type","title","status","detail"],"additionalProperties":false}}}},"503":{"description":"Content temporarily unavailable.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"}},"required":["type","title","status","detail"],"additionalProperties":false}}}}}}},"/api/public/chapters":{"get":{"operationId":"listYimbyChapters","summary":"List active YIMBY Action chapters","description":"Find active local YIMBY Action chapters, optionally by US state. Returns only public names, locations, descriptions and chapter page URLs. An empty list means no active chapter matches; use /start-a-chapter for next steps.","tags":["Public content"],"parameters":[{"name":"state","in":"query","required":false,"description":"Two-letter US state abbreviation, for example CA.","schema":{"description":"Two-letter US state abbreviation, for example CA.","type":"string","pattern":"^[A-Z]{2}$"}}],"responses":{"200":{"description":"Published public content only.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chapters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"state":{"type":"string"},"region":{"type":"string"},"description":{"type":"string"}},"required":["name","slug","url","state","region","description"],"additionalProperties":false}}},"required":["chapters"],"additionalProperties":false}}}},"400":{"description":"Invalid or unknown query parameters.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"}},"required":["type","title","status","detail"],"additionalProperties":false}}}},"429":{"description":"Burst budget exhausted; honor Retry-After.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"}},"required":["type","title","status","detail"],"additionalProperties":false}}}},"503":{"description":"Content temporarily unavailable.","headers":{"RateLimit":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Per-instance burst budget; see /developers for semantics.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429 or 503).","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"}},"required":["type","title","status","detail"],"additionalProperties":false}}}}}}}}}