{"openapi":"3.1.0","info":{"title":"Redding Council Votes API","version":"1.0.0","description":"Read-only public API over every recorded City Council vote in Redding, California, parsed from the City Clerk's approved minutes on the IQM2 portal. Every record links back to its source document. Topics and summaries are machine-generated (LLM) and may be wrong; votes are parsed deterministically.","license":{"name":"Public domain data; API code MIT"}},"servers":[{"url":"https://council-votes.redding.works/v1"}],"tags":[{"name":"meetings"},{"name":"items"},{"name":"votes"},{"name":"members"},{"name":"topics"},{"name":"anomalies"},{"name":"stats"},{"name":"export"}],"components":{"schemas":{"Meeting":{"type":"object","properties":{"iqm2_id":{"type":"integer"},"body":{"type":"string"},"meeting_type":{"type":"string","enum":["regular","special","closed","other"]},"meeting_type_raw":{"type":"string"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"starts_at":{"type":"string","description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"title":{"type":"string"},"location":{"type":["string","null"]},"status":{"type":"string","enum":["discovered","agenda_only","minutes_pending","complete","cancelled","parse_error"]},"source_url":{"type":"string","format":"uri"},"agenda_url":{"type":["string","null"],"format":"uri"},"minutes_url":{"type":["string","null"],"format":"uri"},"archived_minutes_url":{"type":["string","null"],"format":"uri","description":"This API's archived copy of the minutes PDF exactly as fetched from IQM2 (null until parsed)."},"archived_text_url":{"type":["string","null"],"format":"uri","description":"Plain text extracted from the archived PDF — the exact input the vote parser saw."},"video_url":{"type":["string","null"],"format":"uri"},"last_fetched":{"type":["string","null"],"description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"item_count":{"type":"integer"},"vote_count":{"type":"integer"}},"required":["iqm2_id","body","meeting_type","meeting_type_raw","meeting_date","starts_at","title","location","status","source_url","agenda_url","minutes_url","archived_minutes_url","archived_text_url","video_url","last_fetched"]},"Problem":{"type":"object","properties":{"type":{"type":"string","default":"about:blank"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["title","status"],"description":"RFC 9457 problem details"},"Vote":{"type":"object","properties":{"id":{"type":"integer"},"item_id":{"type":"integer"},"meeting_id":{"type":"integer"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"motion_seq":{"type":"integer"},"motion_text":{"type":"string"},"result":{"type":"string","enum":["adopted","failed","tabled","continued","no_action","other"]},"result_raw":{"type":"string"},"ayes_count":{"type":"integer"},"nays_count":{"type":"integer"},"unanimous":{"type":"boolean"},"mover_id":{"type":["integer","null"]},"mover_name":{"type":["string","null"]},"seconder_id":{"type":["integer","null"]},"seconder_name":{"type":["string","null"]},"via_consent":{"type":"boolean"},"parse_source":{"type":"string","enum":["html","pdf"]},"parsed_at":{"type":"string","description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"source_url":{"type":"string","format":"uri","description":"The approved-minutes PDF this vote was parsed from, with #page=N pointing at the roll call."},"positions":{"type":"array","items":{"$ref":"#/components/schemas/VotePosition"}}},"required":["id","item_id","meeting_id","motion_seq","motion_text","result","result_raw","ayes_count","nays_count","unanimous","mover_id","mover_name","seconder_id","seconder_name","via_consent","parse_source","parsed_at","source_url"]},"VotePosition":{"type":"object","properties":{"member_id":{"type":"integer"},"member_name":{"type":"string"},"position":{"type":"string","enum":["aye","nay","abstain","absent","recused"]}},"required":["member_id","member_name","position"]},"AgendaItem":{"type":"object","properties":{"id":{"type":"integer"},"meeting_id":{"type":"integer"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"legifile_id":{"type":["integer","null"]},"item_number":{"type":["string","null"]},"section":{"type":["string","null"]},"title":{"type":"string"},"is_consent":{"type":"boolean"},"source_url":{"type":"string","format":"uri","description":"IQM2 agenda-item page when one exists, otherwise the approved-minutes PDF."},"source_page":{"type":["integer","null"],"description":"1-based page of the minutes PDF where the item appears."},"topic":{"type":["string","null"],"enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other",null],"description":"Fixed topic vocabulary (LLM-assigned)."},"topic_confidence":{"type":["number","null"]},"summary":{"type":["string","null"]},"classified_at":{"type":["string","null"],"description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"classifier_model":{"type":["string","null"]},"votes":{"type":"array","items":{"$ref":"#/components/schemas/Vote"}},"member_position":{"type":["string","null"],"enum":["aye","nay","abstain","absent","recused",null],"description":"Present when the list was filtered by `member`: that member's position on the item's last motion."}},"required":["id","meeting_id","legifile_id","item_number","section","title","is_consent","source_url","source_page","topic","topic_confidence","summary","classified_at","classifier_model"]},"Member":{"type":"object","properties":{"id":{"type":"integer"},"full_name":{"type":"string"},"last_name":{"type":"string"},"first_seen":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"last_seen":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"vote_count":{"type":"integer"}},"required":["id","full_name","last_name","first_seen","last_seen"]},"Agreement":{"type":"object","properties":{"member_id":{"type":"integer"},"member_name":{"type":"string"},"shared_votes":{"type":"integer"},"agreements":{"type":"integer"},"agreement_rate":{"type":["number","null"]}},"required":["member_id","member_name","shared_votes","agreements","agreement_rate"]},"Anomaly":{"type":"object","properties":{"id":{"type":"integer"},"meeting_id":{"type":"integer"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"meeting_type_raw":{"type":"string"},"item_id":{"type":["integer","null"]},"item_number":{"type":["string","null"]},"item_title":{"type":["string","null"]},"kind":{"type":"string","enum":["typo","missing","inconsistency","error"]},"code":{"type":"string"},"message":{"type":"string"},"source_page":{"type":["integer","null"]},"minutes_url":{"type":["string","null"],"format":"uri","description":"Approved-minutes PDF, with #page=N when the page is known."}},"required":["id","meeting_id","meeting_date","meeting_type_raw","item_id","item_number","item_title","kind","code","message","source_page","minutes_url"]},"TopicCount":{"type":"object","properties":{"topic":{"type":"string","enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other"],"description":"Fixed topic vocabulary (LLM-assigned)."},"count":{"type":"integer"},"split_votes":{"type":"integer"}},"required":["topic","count","split_votes"]},"Stats":{"type":"object","properties":{"meetings":{"type":"integer"},"meetings_complete":{"type":"integer"},"items":{"type":"integer"},"votes":{"type":"integer"},"members":{"type":"integer"},"earliest_meeting":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"latest_meeting":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"last_ingest_at":{"type":["string","null"],"description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"classified_items":{"type":"integer"},"anomalies":{"type":"integer"}},"required":["meetings","meetings_complete","items","votes","members","earliest_meeting","latest_meeting","last_ingest_at","classified_items"]}},"parameters":{}},"paths":{"/meetings":{"get":{"tags":["meetings"],"summary":"List meetings","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from a previous page."},"required":false,"description":"Opaque cursor from a previous page.","name":"cursor","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"from","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"to","in":"query"},{"schema":{"type":"string","enum":["discovered","agenda_only","minutes_pending","complete","cancelled","parse_error"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["regular","special","closed","other"]},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":"Meetings, newest first","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Meeting"}},"next_cursor":{"type":["string","null"]},"count":{"type":"integer","description":"Number of items in this page"}},"required":["data","next_cursor","count"]}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/meetings/{id}":{"get":{"tags":["meetings"],"summary":"One meeting with its items and votes","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Meeting","content":{"application/json":{"schema":{"type":"object","properties":{"iqm2_id":{"type":"integer"},"body":{"type":"string"},"meeting_type":{"type":"string","enum":["regular","special","closed","other"]},"meeting_type_raw":{"type":"string"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"starts_at":{"type":"string","description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"title":{"type":"string"},"location":{"type":["string","null"]},"status":{"type":"string","enum":["discovered","agenda_only","minutes_pending","complete","cancelled","parse_error"]},"source_url":{"type":"string","format":"uri"},"agenda_url":{"type":["string","null"],"format":"uri"},"minutes_url":{"type":["string","null"],"format":"uri"},"archived_minutes_url":{"type":["string","null"],"format":"uri","description":"This API's archived copy of the minutes PDF exactly as fetched from IQM2 (null until parsed)."},"archived_text_url":{"type":["string","null"],"format":"uri","description":"Plain text extracted from the archived PDF — the exact input the vote parser saw."},"video_url":{"type":["string","null"],"format":"uri"},"last_fetched":{"type":["string","null"],"description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"item_count":{"type":"integer"},"vote_count":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"meeting_id":{"type":"integer"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"legifile_id":{"type":["integer","null"]},"item_number":{"type":["string","null"]},"section":{"type":["string","null"]},"title":{"type":"string"},"is_consent":{"type":"boolean"},"source_url":{"type":"string","format":"uri","description":"IQM2 agenda-item page when one exists, otherwise the approved-minutes PDF."},"source_page":{"type":["integer","null"],"description":"1-based page of the minutes PDF where the item appears."},"topic":{"type":["string","null"],"enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other",null],"description":"Fixed topic vocabulary (LLM-assigned)."},"topic_confidence":{"type":["number","null"]},"summary":{"type":["string","null"]},"classified_at":{"type":["string","null"],"description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"classifier_model":{"type":["string","null"]},"votes":{"type":"array","items":{"$ref":"#/components/schemas/Vote"}},"member_position":{"type":["string","null"],"enum":["aye","nay","abstain","absent","recused",null],"description":"Present when the list was filtered by `member`: that member's position on the item's last motion."}},"required":["id","meeting_id","legifile_id","item_number","section","title","is_consent","source_url","source_page","topic","topic_confidence","summary","classified_at","classifier_model","votes"]}}},"required":["iqm2_id","body","meeting_type","meeting_type_raw","meeting_date","starts_at","title","location","status","source_url","agenda_url","minutes_url","archived_minutes_url","archived_text_url","video_url","last_fetched","items"]}}}},"404":{"description":"Unknown meeting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/meetings/{id}/minutes.pdf":{"get":{"tags":["meetings"],"summary":"Archived copy of the approved-minutes PDF exactly as fetched from IQM2","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Archived copy of the approved-minutes PDF exactly as fetched from IQM2","content":{"application/pdf":{"schema":{"type":"string"}}}},"404":{"description":"No archived minutes for this meeting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/meetings/{id}/minutes.txt":{"get":{"tags":["meetings"],"summary":"Text extracted from the archived PDF — the exact input the vote parser saw","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Text extracted from the archived PDF — the exact input the vote parser saw","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"No archived minutes for this meeting","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/items":{"get":{"tags":["items"],"summary":"Search agenda items","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from a previous page."},"required":false,"description":"Opaque cursor from a previous page.","name":"cursor","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"from","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"to","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Full-text search over title and summary."},"required":false,"description":"Full-text search over title and summary.","name":"q","in":"query"},{"schema":{"type":"string","enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other"],"description":"Fixed topic vocabulary (LLM-assigned)."},"required":false,"description":"Fixed topic vocabulary (LLM-assigned).","name":"topic","in":"query"},{"schema":{"type":"string","enum":["adopted","failed","tabled","continued","no_action","other"]},"required":false,"name":"result","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"]},"required":false,"name":"via_consent","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"]},"required":false,"name":"unanimous","in":"query"},{"schema":{"type":["integer","null"]},"required":false,"name":"meeting_id","in":"query"},{"schema":{"type":["integer","null"],"description":"Only items on which this member (id) has a recorded position; adds `member_position` to each item."},"required":false,"description":"Only items on which this member (id) has a recorded position; adds `member_position` to each item.","name":"member","in":"query"},{"schema":{"type":"string","enum":["aye","nay","abstain","absent","recused"],"description":"With `member`: only items where that member took this position."},"required":false,"description":"With `member`: only items where that member took this position.","name":"position","in":"query"}],"responses":{"200":{"description":"Items, newest meeting first","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AgendaItem"}},"next_cursor":{"type":["string","null"]},"count":{"type":"integer","description":"Number of items in this page"}},"required":["data","next_cursor","count"]}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/items/{id}":{"get":{"tags":["items"],"summary":"One agenda item with its votes and positions","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgendaItem"}}}},"404":{"description":"Unknown item","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/votes":{"get":{"tags":["votes"],"summary":"List vote records","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from a previous page."},"required":false,"description":"Opaque cursor from a previous page.","name":"cursor","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"from","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"to","in":"query"},{"schema":{"type":"string","enum":["adopted","failed","tabled","continued","no_action","other"]},"required":false,"name":"result","in":"query"},{"schema":{"type":["integer","null"],"description":"Member id"},"required":false,"description":"Member id","name":"mover","in":"query"},{"schema":{"type":["integer","null"],"description":"Member id"},"required":false,"description":"Member id","name":"seconder","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"],"description":"true = non-unanimous only"},"required":false,"description":"true = non-unanimous only","name":"split","in":"query"},{"schema":{"type":"string","pattern":"^\\d-\\d$","description":"e.g. 3-2","example":"3-2"},"required":false,"description":"e.g. 3-2","name":"margin","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"]},"required":false,"name":"via_consent","in":"query"},{"schema":{"type":"string","enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other"],"description":"Fixed topic vocabulary (LLM-assigned)."},"required":false,"description":"Fixed topic vocabulary (LLM-assigned).","name":"topic","in":"query"}],"responses":{"200":{"description":"Votes, newest meeting first","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vote"}},"next_cursor":{"type":["string","null"]},"count":{"type":"integer","description":"Number of items in this page"}},"required":["data","next_cursor","count"]}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/members":{"get":{"tags":["members"],"summary":"List council members with tenure","responses":{"200":{"description":"Members","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Member"}}},"required":["data"]}}}}}}},"/members/{id}":{"get":{"tags":["members"],"summary":"Member profile with counts by position and topic","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Member","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"full_name":{"type":"string"},"last_name":{"type":"string"},"first_seen":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"last_seen":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"vote_count":{"type":"integer"},"positions":{"type":"object","properties":{"aye":{"type":"integer"},"nay":{"type":"integer"},"abstain":{"type":"integer"},"absent":{"type":"integer"},"recused":{"type":"integer"}},"required":["aye","nay","abstain","absent","recused"]},"moved":{"type":"integer"},"seconded":{"type":"integer"},"topics":{"type":"array","items":{"type":"object","properties":{"topic":{"type":["string","null"]},"count":{"type":"integer"},"nays":{"type":"integer"}},"required":["topic","count","nays"]}},"dissents":{"type":"integer","description":"Votes where this member was in the minority (nay on an adopted motion, or aye on a failed one)."}},"required":["id","full_name","last_name","first_seen","last_seen","positions","moved","seconded","topics","dissents"]}}}},"404":{"description":"Unknown member","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/members/{id}/votes":{"get":{"tags":["members"],"summary":"Every recorded position by one member","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from a previous page."},"required":false,"description":"Opaque cursor from a previous page.","name":"cursor","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"from","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"to","in":"query"},{"schema":{"type":"string","enum":["aye","nay","abstain","absent","recused"]},"required":false,"name":"position","in":"query"},{"schema":{"type":"string","enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other"],"description":"Fixed topic vocabulary (LLM-assigned)."},"required":false,"description":"Fixed topic vocabulary (LLM-assigned).","name":"topic","in":"query"},{"schema":{"type":"string","enum":["adopted","failed","tabled","continued","no_action","other"]},"required":false,"name":"result","in":"query"}],"responses":{"200":{"description":"Positions, newest first","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"item_id":{"type":"integer"},"meeting_id":{"type":"integer"},"meeting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"motion_seq":{"type":"integer"},"motion_text":{"type":"string"},"result":{"type":"string","enum":["adopted","failed","tabled","continued","no_action","other"]},"result_raw":{"type":"string"},"ayes_count":{"type":"integer"},"nays_count":{"type":"integer"},"unanimous":{"type":"boolean"},"mover_id":{"type":["integer","null"]},"mover_name":{"type":["string","null"]},"seconder_id":{"type":["integer","null"]},"seconder_name":{"type":["string","null"]},"via_consent":{"type":"boolean"},"parse_source":{"type":"string","enum":["html","pdf"]},"parsed_at":{"type":"string","description":"ISO-8601 UTC timestamp","example":"2026-06-03T01:00:00.000Z"},"source_url":{"type":"string","format":"uri","description":"The approved-minutes PDF this vote was parsed from, with #page=N pointing at the roll call."},"positions":{"type":"array","items":{"$ref":"#/components/schemas/VotePosition"}},"position":{"type":"string","enum":["aye","nay","abstain","absent","recused"]},"item_title":{"type":"string"},"item_number":{"type":["string","null"]},"topic":{"type":["string","null"],"enum":["housing","land-use-zoning","public-safety","budget-finance","utilities","transportation","parks-recreation","economic-development","homelessness","personnel-labor","contracts-procurement","governance-procedural","other",null],"description":"Fixed topic vocabulary (LLM-assigned)."}},"required":["id","item_id","meeting_id","motion_seq","motion_text","result","result_raw","ayes_count","nays_count","unanimous","mover_id","mover_name","seconder_id","seconder_name","via_consent","parse_source","parsed_at","source_url","position","item_title","item_number","topic"]}},"next_cursor":{"type":["string","null"]},"count":{"type":"integer","description":"Number of items in this page"}},"required":["data","next_cursor","count"]}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Unknown member","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/members/{id}/agreement":{"get":{"tags":["members"],"summary":"Pairwise agreement rate with every other member","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Consent-calendar votes are unanimous formalities; excluded by default."},"required":false,"description":"Consent-calendar votes are unanimous formalities; excluded by default.","name":"include_consent","in":"query"}],"responses":{"200":{"description":"Agreement","content":{"application/json":{"schema":{"type":"object","properties":{"member_id":{"type":"integer"},"include_consent":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Agreement"}}},"required":["member_id","include_consent","data"]}}}},"404":{"description":"Unknown member","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/anomalies":{"get":{"tags":["anomalies"],"summary":"Clerk typos, gaps and inconsistencies the parser found, with references","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from a previous page."},"required":false,"description":"Opaque cursor from a previous page.","name":"cursor","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"from","in":"query"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Local (America/Los_Angeles) calendar date","example":"2026-06-02"},"required":false,"description":"Local (America/Los_Angeles) calendar date","name":"to","in":"query"},{"schema":{"type":"string","enum":["typo","missing","inconsistency","error"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","maxLength":60},"required":false,"name":"code","in":"query"},{"schema":{"type":["integer","null"]},"required":false,"name":"meeting_id","in":"query"}],"responses":{"200":{"description":"Anomalies, newest meeting first","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Anomaly"}},"next_cursor":{"type":["string","null"]},"count":{"type":"integer","description":"Number of items in this page"},"counts":{"type":"object","additionalProperties":{"type":"integer"}}},"required":["data","next_cursor","count","counts"]}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/topics":{"get":{"tags":["topics"],"summary":"Topic vocabulary with item counts","responses":{"200":{"description":"Topics","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TopicCount"}},"unclassified":{"type":"integer"}},"required":["data","unclassified"]}}}}}}},"/topics/timeline":{"get":{"tags":["topics"],"summary":"Item counts per topic per quarter (topic \"unclassified\" = not yet classified)","responses":{"200":{"description":"Timeline","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"quarter":{"type":"string"},"topic":{"type":"string"},"count":{"type":"integer"}},"required":["quarter","topic","count"]}}},"required":["data"]}}}}}}},"/stats":{"get":{"tags":["stats"],"summary":"Totals, coverage and last ingest time","responses":{"200":{"description":"Stats","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}}}}}}},"/export/votes.csv":{"get":{"tags":["export"],"summary":"Full flat CSV export of every vote","responses":{"200":{"description":"CSV","content":{"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Export not generated yet","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"webhooks":{}}