{"openapi":"3.1.0","info":{"title":"Zoning Firehose API","description":"Structured municipal rezoning data for commercial real estate developers.\n\nEvery case here was extracted from a real Planning & Zoning agenda packet and\nvalidated before storage — anything the extractor could not stand behind is held\nfor review rather than served.\n\n## Authentication\n\nSend your key in the `X-API-Key` header on every request:\n\n```\ncurl -H \"X-API-Key: zf_your_key_here\" \\\n  \"https://zoningfirehose.com/api/v1/cases?case_type=rezoning&limit=5\"\n```\n\nMint a key at `/profile` once you have a subscription. Keys are shown once.\n\n## Rate limits\n\nPer **account**, not per key, so minting more keys does not raise your ceiling.\nA corporate seat draws on the paying account's allowance. Exceeding it returns\n`429` with a `Retry-After` header.\n\n## Conventions\n\n- All dates are ISO-8601 (`YYYY-MM-DD`).\n- `limit` accepts 1-200 and is REJECTED with `422` above that, not silently\n  capped — a truncated page you did not ask for is worse than an error. Page\n  with `offset`.\n- Unknown query parameters are ignored; invalid enum values return `422`.\n- This is a stable, additive contract — fields get added, not removed or renamed.\n","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["Service"],"summary":"Liveness probe","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/api/v1/cases":{"get":{"tags":["Cases"],"summary":"Search cases","description":"List validated cases, newest first. Same archive the dashboard renders.","operationId":"api_v1_cases_api_v1_cases_get","parameters":[{"name":"municipality","in":"query","required":false,"schema":{"type":"string","default":"","title":"Municipality"}},{"name":"county","in":"query","required":false,"schema":{"type":"string","default":"","title":"County"}},{"name":"case_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Case Type"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"petitioner","in":"query","required":false,"schema":{"type":"string","default":"","title":"Petitioner"}},{"name":"hearing_after","in":"query","required":false,"schema":{"type":"string","default":"","title":"Hearing After"}},{"name":"hearing_before","in":"query","required":false,"schema":{"type":"string","default":"","title":"Hearing Before"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Matching cases, newest first, with a total for paging.","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid or revoked X-API-Key"},"429":{"description":"Account rate limit exceeded; see Retry-After"}},"security":[{"ApiKeyAuth":[]}]}},"/api/v1/cases/{municipality}/{case_number}":{"get":{"tags":["Cases"],"summary":"Fetch one case","description":"Single case by city + case number (case numbers may contain slashes).","operationId":"api_v1_case_detail_api_v1_cases__municipality___case_number__get","parameters":[{"name":"municipality","in":"path","required":true,"schema":{"type":"string","title":"Municipality"}},{"name":"case_number","in":"path","required":true,"schema":{"type":"string","title":"Case Number"}}],"responses":{"200":{"description":"The full validated case, including its source document URL.","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid or revoked X-API-Key"},"429":{"description":"Account rate limit exceeded; see Retry-After"}},"security":[{"ApiKeyAuth":[]}]}},"/api/v1/municipalities":{"get":{"tags":["Coverage"],"summary":"List monitored municipalities","description":"Coverage list: every municipality we track, with case counts.","operationId":"api_v1_municipalities_api_v1_municipalities_get","responses":{"200":{"description":"Every municipality being monitored, with metro and county.","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid or revoked X-API-Key"},"429":{"description":"Account rate limit exceeded; see Retry-After"}},"security":[{"ApiKeyAuth":[]}]}},"/data-centers/brief.json":{"get":{"tags":["Data Centers"],"summary":"Data Center records in a window, as JSON","description":"One JSON object: `period_start`, `period_end`, `coverage`, `source_health_notes`, `count`, `undated_count`, `metro` and `events` -- one object per record with the fields `project_id`, `event_id`, `evidence_hash`, `review_state`, `project_name`, `campus`, `phase`, `municipality`, `county`, `address_or_location`, `developer`, `applicant`, `owner`, `provenance`, `observation_context`, `source_url`, `source_page_or_section`, `sources`, `source_published_at`, `meeting_date`, `first_observed_at`, `stage`, `stage_actor`, `what_changed`, `megawatts`, `capacity_claims`, `equipment_notes`, `approvals_notes`, `supplier_selection_notes`, `inferred_buyer_relevance`, `customer_next_step`, `buyer_relevance`, `next_decision`, `action_record`, `factors`, `next_decisions`, `unknowns`, `record_class`. `review_state` is the store's decision, ids are stable across exports, and `unknowns` is a list. `start`/`end` (YYYY-MM-DD, inclusive; default: the trailing week) bound the window on the date each record was first observed. Scoped to the metro of the host you call and to the account's saved territory preferences (tracked projects always included). Every response carries `X-Coverage` (complete / impaired / unknown), `X-Coverage-Period`, `X-Coverage-Note-Count` and `X-Coverage-Notes`: the verdict on whether the collector read every watched city in the window, which is the difference between 'nothing was filed' and 'we could not look'. Only approved, current records are ever returned; a superseded version never is. `preferences_applied` (JSON) and the empty-file marker row (CSV) say whether a saved preference removed records from the window, as distinct from a period in which nothing was filed.","operationId":"datacenters_brief_json_data_centers_brief_json_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataCenterExportEnvelope"}}},"headers":{"X-Coverage":{"description":"Whether the collector read every watched city in the window","schema":{"type":"string","enum":["complete","impaired","unknown"]}},"X-Coverage-Period":{"description":"The window, inclusive: YYYY-MM-DD/YYYY-MM-DD","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}/\\d{4}-\\d{2}-\\d{2}$"}},"X-Coverage-Note-Count":{"description":"How many source-health notes explain a non-complete verdict","schema":{"type":"integer","minimum":0}},"X-Coverage-Notes":{"description":"The notes joined by ' | ', one line, latin-1 safe, bounded to 1000 characters; empty when there are none. The JSON body's source_health_notes carries the full list.","schema":{"type":"string","maxLength":1000}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"403":{"description":"The token's account has no Data Center access on this metro"},"404":{"description":"Unknown token"}},"security":[{"DataCenterLink":[]}]}},"/data-centers/brief.csv":{"get":{"tags":["Data Centers"],"summary":"Data Center records in a window, as CSV","description":"One CSV row per record with the columns `project_id`, `event_id`, `evidence_hash`, `review_state`, `project_name`, `campus`, `phase`, `municipality`, `county`, `address_or_location`, `developer`, `applicant`, `owner`, `provenance`, `observation_context`, `source_url`, `source_page_or_section`, `sources`, `source_published_at`, `meeting_date`, `first_observed_at`, `stage`, `stage_actor`, `what_changed`, `megawatts`, `capacity_claims`, `equipment_notes`, `approvals_notes`, `supplier_selection_notes`, `inferred_buyer_relevance`, `customer_next_step`, `buyer_relevance`, `next_decision`, `action_record`, `factors`, `next_decisions`, `unknowns`, `record_class`, then the coverage cells `export_metro`, `export_period_start`, `export_period_end`, `export_coverage`, `export_coverage_notes` on every row. Cells never blank: `N/A` means the field cannot apply to this record, `Unknown` means it could and was not found. Cells that would start with a formula trigger are prefixed with an apostrophe. The filename carries the metro, the period and the coverage verdict. `start`/`end` (YYYY-MM-DD, inclusive; default: the trailing week) bound the window on the date each record was first observed. Scoped to the metro of the host you call and to the account's saved territory preferences (tracked projects always included). Every response carries `X-Coverage` (complete / impaired / unknown), `X-Coverage-Period`, `X-Coverage-Note-Count` and `X-Coverage-Notes`: the verdict on whether the collector read every watched city in the window, which is the difference between 'nothing was filed' and 'we could not look'. Only approved, current records are ever returned; a superseded version never is. `preferences_applied` (JSON) and the empty-file marker row (CSV) say whether a saved preference removed records from the window, as distinct from a period in which nothing was filed.","operationId":"datacenters_brief_csv_data_centers_brief_csv_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}}],"responses":{"200":{"description":"One CSV row per record plus the coverage cells; served as an attachment","content":{"text/csv":{"schema":{"type":"string"}}},"headers":{"X-Coverage":{"description":"Whether the collector read every watched city in the window","schema":{"type":"string","enum":["complete","impaired","unknown"]}},"X-Coverage-Period":{"description":"The window, inclusive: YYYY-MM-DD/YYYY-MM-DD","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}/\\d{4}-\\d{2}-\\d{2}$"}},"X-Coverage-Note-Count":{"description":"How many source-health notes explain a non-complete verdict","schema":{"type":"integer","minimum":0}},"X-Coverage-Notes":{"description":"The notes joined by ' | ', one line, latin-1 safe, bounded to 1000 characters; empty when there are none. The JSON body's source_health_notes carries the full list.","schema":{"type":"string","maxLength":1000}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"403":{"description":"The token's account has no Data Center access on this metro"},"404":{"description":"Unknown token"}},"security":[{"DataCenterLink":[]}]}}},"components":{"schemas":{"ActionRecord":{"properties":{"instrument":{"type":"string","enum":["pre_application","comprehensive_plan_amendment","rezoning_pd","specific_use_permit","text_amendment","site_plan","plat","development_agreement","incentive_agreement","permit","other"],"title":"Instrument"},"action":{"type":"string","enum":["filed","scheduled","recommended_approval","recommended_denial","approved","denied","tabled","continued","withdrawn","appealed","enjoined","other"],"title":"Action"},"body_role":{"type":"string","enum":["advisory","decision","staff","court","unknown"],"title":"Body Role","default":"unknown"},"vote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vote"},"conditions":{"items":{"type":"string"},"type":"array","title":"Conditions"},"source_ref":{"type":"string","title":"Source Ref"},"source_page_or_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Page Or Section"},"source_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Label"}},"type":"object","required":["instrument","action","source_ref"],"title":"ActionRecord","description":"What the body did to which instrument, in the source's words. This is\nEVIDENCE: a set record changes the replay identity; an absent one is\nserialised away so every claim stored before the field existed keeps\nits hash (ruling 5)."},"Body_admin_datacenters_access_admin_data_centers_access_post":{"properties":{"email":{"type":"string","title":"Email"},"access":{"type":"integer","title":"Access"}},"type":"object","required":["email","access"],"title":"Body_admin_datacenters_access_admin_data_centers_access_post"},"Body_admin_datacenters_correct_admin_data_centers_correct__event_id__post":{"properties":{"field":{"type":"string","title":"Field"},"value":{"type":"string","title":"Value","default":""},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["field","reason"],"title":"Body_admin_datacenters_correct_admin_data_centers_correct__event_id__post"},"Body_admin_datacenters_merge_admin_data_centers_merge_post":{"properties":{"source_id":{"type":"integer","title":"Source Id"},"target_id":{"type":"integer","title":"Target Id"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["source_id","target_id","reason"],"title":"Body_admin_datacenters_merge_admin_data_centers_merge_post"},"Body_admin_datacenters_review_admin_data_centers_review__event_id__post":{"properties":{"state":{"type":"string","title":"State"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["state"],"title":"Body_admin_datacenters_review_admin_data_centers_review__event_id__post"},"Body_admin_datacenters_split_admin_data_centers_split_post":{"properties":{"project_id":{"type":"integer","title":"Project Id"},"event_ids":{"type":"string","title":"Event Ids"},"reason":{"type":"string","title":"Reason"},"address_or_location":{"type":"string","title":"Address Or Location","default":""},"phase":{"type":"string","title":"Phase","default":""},"project_name":{"type":"string","title":"Project Name","default":""}},"type":"object","required":["project_id","event_ids","reason"],"title":"Body_admin_datacenters_split_admin_data_centers_split_post"},"Body_admin_login_admin_login_post":{"properties":{"password":{"type":"string","title":"Password","default":""}},"type":"object","title":"Body_admin_login_admin_login_post"},"Body_contact_submit_contact_post":{"properties":{"name":{"type":"string","title":"Name","default":""},"email":{"type":"string","title":"Email","default":""},"message":{"type":"string","title":"Message","default":""},"website":{"type":"string","title":"Website","default":""}},"type":"object","title":"Body_contact_submit_contact_post"},"Body_datacenters_feedback_data_centers_feedback_post":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"verdict":{"type":"string","title":"Verdict"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["event_id","verdict"],"title":"Body_datacenters_feedback_data_centers_feedback_post"},"Body_datacenters_preferences_data_centers_preferences_post":{"properties":{"counties":{"type":"string","title":"Counties","default":""},"cities":{"type":"string","title":"Cities","default":""},"equipment":{"type":"string","title":"Equipment","default":""},"stages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stages"}},"type":"object","title":"Body_datacenters_preferences_data_centers_preferences_post"},"Body_datacenters_quiet_brief_data_centers_quiet_brief_post":{"properties":{"enabled":{"type":"integer","title":"Enabled"}},"type":"object","required":["enabled"],"title":"Body_datacenters_quiet_brief_data_centers_quiet_brief_post"},"Body_datacenters_try_submit_data_centers_try_post":{"properties":{"email":{"type":"string","title":"Email","default":""},"website":{"type":"string","title":"Website","default":""}},"type":"object","title":"Body_datacenters_try_submit_data_centers_try_post"},"Body_datacenters_unwatch_company_data_centers_unwatch_company_post":{"properties":{"name":{"type":"string","title":"Name","default":""},"key":{"type":"string","title":"Key","default":""}},"type":"object","title":"Body_datacenters_unwatch_company_data_centers_unwatch_company_post"},"Body_datacenters_unwatch_data_centers_unwatch_post":{"properties":{"project_id":{"type":"integer","title":"Project Id"}},"type":"object","required":["project_id"],"title":"Body_datacenters_unwatch_data_centers_unwatch_post"},"Body_datacenters_watch_company_data_centers_watch_company_post":{"properties":{"name":{"type":"string","title":"Name","default":""}},"type":"object","title":"Body_datacenters_watch_company_data_centers_watch_company_post"},"Body_datacenters_watch_data_centers_watch_post":{"properties":{"project_id":{"type":"integer","title":"Project Id"}},"type":"object","required":["project_id"],"title":"Body_datacenters_watch_data_centers_watch_post"},"Body_filters_save_filters_post":{"properties":{"keywords":{"type":"string","title":"Keywords","default":""},"metro":{"type":"string","title":"Metro","default":""},"city":{"type":"string","title":"City","default":""},"county":{"type":"string","title":"County","default":""},"delivery_mode":{"type":"string","title":"Delivery Mode","default":"instant"},"distress_only":{"type":"string","title":"Distress Only","default":""},"case_types":{"items":{"type":"string"},"type":"array","title":"Case Types","default":[]},"exclude_case_types":{"items":{"type":"string"},"type":"array","title":"Exclude Case Types","default":[]}},"type":"object","title":"Body_filters_save_filters_post"},"Body_login_submit_login_post":{"properties":{"email":{"type":"string","title":"Email","default":""},"website":{"type":"string","title":"Website","default":""},"next":{"type":"string","title":"Next","default":""}},"type":"object","title":"Body_login_submit_login_post"},"Body_optout_optout_post":{"properties":{"token":{"type":"string","title":"Token","default":""}},"type":"object","title":"Body_optout_optout_post"},"Body_profile_mint_api_key_profile_api_keys_post":{"properties":{"token":{"type":"string","title":"Token"},"label":{"type":"string","title":"Label","default":""}},"type":"object","required":["token"],"title":"Body_profile_mint_api_key_profile_api_keys_post"},"Body_profile_revoke_api_key_profile_api_keys_revoke_post":{"properties":{"token":{"type":"string","title":"Token"},"key_prefix":{"type":"string","title":"Key Prefix"}},"type":"object","required":["token","key_prefix"],"title":"Body_profile_revoke_api_key_profile_api_keys_revoke_post"},"Body_team_add_team_add_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_team_add_team_add_post"},"Body_team_remove_team_remove_post":{"properties":{"seat_id":{"type":"integer","title":"Seat Id"}},"type":"object","required":["seat_id"],"title":"Body_team_remove_team_remove_post"},"Body_try_submit_try_post":{"properties":{"email":{"type":"string","title":"Email","default":""},"city":{"type":"string","title":"City","default":""},"website":{"type":"string","title":"Website","default":""},"utm_source":{"type":"string","title":"Utm Source","default":""},"utm_campaign":{"type":"string","title":"Utm Campaign","default":""}},"type":"object","title":"Body_try_submit_try_post"},"Body_unsubscribe_unsubscribe_post":{"properties":{"token":{"type":"string","title":"Token","default":""}},"type":"object","title":"Body_unsubscribe_unsubscribe_post"},"Body_watchlist_add_watchlist_post":{"properties":{"label":{"type":"string","title":"Label"},"address":{"type":"string","title":"Address"},"radius_feet":{"type":"integer","title":"Radius Feet","default":1000}},"type":"object","required":["label","address"],"title":"Body_watchlist_add_watchlist_post"},"Body_watchlist_delete_watchlist_delete_post":{"properties":{"parcel_id":{"type":"integer","title":"Parcel Id"}},"type":"object","required":["parcel_id"],"title":"Body_watchlist_delete_watchlist_delete_post"},"BuyerRelevance":{"properties":{"audience":{"type":"string","enum":["developer_site_selector","utility_infrastructure","investor_lender_analyst","equipment_construction","public_affairs_community"],"title":"Audience"},"why":{"type":"string","minLength":1,"title":"Why"},"source_ref":{"type":"string","title":"Source Ref"}},"type":"object","required":["audience","why","source_ref"],"title":"BuyerRelevance","description":"Why this record matters to one audience -- written by the reviewer at\napproval, never derived from a city or company name, and pinned to a\nsource the record already carries (`source_ref` must be one of the\nrecord's source URLs, see the model validator)."},"CapacityClaim":{"properties":{"value_mw":{"type":"number","exclusiveMinimum":0.0,"title":"Value Mw"},"capacity_type":{"type":"string","enum":["it_load","campus_utility_capacity","substation","generator_backup","unspecified"],"title":"Capacity Type"},"quote":{"type":"string","minLength":1,"title":"Quote"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"source_document_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Document Id"},"source_page_or_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Page Or Section"},"scope":{"type":"string","enum":["campus","phase","building","unspecified"],"title":"Scope","default":"unspecified"}},"type":"object","required":["value_mw","capacity_type","quote"],"title":"CapacityClaim","description":"One capacity figure, typed, with its own citation. `quote` is the\nsentence or fragment it came from so a reviewer can see WHY it was typed\nthat way; `source_url` is the document the figure came from -- a\nproject's history can combine claims from several documents, so the\nrecord's single `source_url` cannot vouch for each number (R5-03c);\n`source_document_id` is the persisted evidence row when there is one;\n`source_page_or_section` is only ever a real page/section, never\ninvented."},"DataCenterExportEnvelope":{"properties":{"period_start":{"type":"string","title":"Period Start","description":"YYYY-MM-DD, inclusive"},"period_end":{"type":"string","title":"Period End","description":"YYYY-MM-DD, inclusive"},"coverage":{"type":"string","title":"Coverage","description":"complete | impaired | unknown"},"source_health_notes":{"items":{"type":"string"},"type":"array","title":"Source Health Notes","description":"why the window is not complete, if it is not"},"count":{"type":"integer","title":"Count"},"undated_count":{"type":"integer","title":"Undated Count","description":"approved records in this metro with no observation date, which no window can place"},"metro":{"type":"string","title":"Metro"},"preferences_applied":{"type":"boolean","title":"Preferences Applied","description":"true only when the account's saved territory/stage preferences removed at least one record from this window (tracked projects and watched companies are always kept); false for a window that is empty before any preference is applied"},"events":{"items":{"$ref":"#/components/schemas/DataCenterExportRecord"},"type":"array","title":"Events"}},"type":"object","required":["period_start","period_end","coverage","source_health_notes","count","undated_count","metro","preferences_applied","events"],"title":"DataCenterExportEnvelope"},"DataCenterExportRecord":{"properties":{"project_id":{"type":"integer","title":"Project Id"},"event_id":{"type":"integer","title":"Event Id"},"evidence_hash":{"type":"string","title":"Evidence Hash"},"review_state":{"type":"string","title":"Review State"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"campus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campus"},"phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phase"},"municipality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"address_or_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Or Location"},"developer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Developer"},"applicant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicant"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"provenance":{"anyOf":[{"type":"string","enum":["source_backed","synthetic"]},{"type":"null"}],"title":"Provenance"},"observation_context":{"anyOf":[{"type":"string","enum":["live_monitoring","historical_backfill","not_applicable"]},{"type":"null"}],"title":"Observation Context"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"source_page_or_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Page Or Section"},"sources":{"anyOf":[{"items":{"$ref":"#/components/schemas/SourceRef"},"type":"array"},{"type":"null"}],"title":"Sources"},"source_published_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Source Published At"},"meeting_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Meeting Date"},"first_observed_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"First Observed At"},"stage":{"anyOf":[{"type":"string","enum":["proposal","material_change","uncertain","rejected","approved"]},{"type":"null"}],"title":"Stage"},"stage_actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage Actor"},"what_changed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What Changed"},"megawatts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Megawatts"},"capacity_claims":{"anyOf":[{"items":{"$ref":"#/components/schemas/CapacityClaim"},"type":"array"},{"type":"null"}],"title":"Capacity Claims"},"equipment_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Equipment Notes"},"approvals_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approvals Notes"},"supplier_selection_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Selection Notes"},"inferred_buyer_relevance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inferred Buyer Relevance"},"customer_next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Next Step"},"buyer_relevance":{"anyOf":[{"items":{"$ref":"#/components/schemas/BuyerRelevance"},"type":"array"},{"type":"null"}],"title":"Buyer Relevance"},"next_decision":{"anyOf":[{"$ref":"#/components/schemas/NextDecision"},{"type":"null"}]},"action_record":{"anyOf":[{"$ref":"#/components/schemas/ActionRecord"},{"type":"null"}]},"factors":{"anyOf":[{"items":{"$ref":"#/components/schemas/Factor"},"type":"array"},{"type":"null"}],"title":"Factors"},"next_decisions":{"anyOf":[{"items":{"$ref":"#/components/schemas/NextDecision"},"type":"array"},{"type":"null"}],"title":"Next Decisions"},"unknowns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Unknowns"},"record_class":{"anyOf":[{"type":"string","enum":["project","policy","mention"]},{"type":"null"}],"title":"Record Class"}},"type":"object","required":["project_id","event_id","evidence_hash","review_state"],"title":"DataCenterExportRecord"},"Factor":{"properties":{"kind":{"type":"string","enum":["entitlement_step","capacity_power","water","land","tenant","conditions","incentive","opposition","litigation","moratorium_policy","schedule","other"],"title":"Kind"},"statement":{"type":"string","minLength":1,"title":"Statement"},"polarity":{"type":"string","enum":["advances","impedes","neutral"],"title":"Polarity"},"audiences":{"items":{"type":"string","enum":["developer_site_selector","utility_infrastructure","investor_lender_analyst","equipment_construction","public_affairs_community"]},"type":"array","title":"Audiences"},"confidence":{"type":"string","enum":["stated","implied","reviewer"],"title":"Confidence"},"source_ref":{"type":"string","title":"Source Ref"},"source_page_or_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Page Or Section"},"source_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Label"}},"type":"object","required":["kind","statement","polarity","confidence","source_ref"],"title":"Factor","description":"Why it matters -- one explicit, cited reason a buyer weighs. Reviewer-\nauthored, so it never enters the replay identity (`_NOT_EVIDENCE`)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"NextDecision":{"properties":{"what":{"type":"string","minLength":1,"title":"What"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"decision_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Decision Date"},"source_ref":{"type":"string","title":"Source Ref"},"status":{"type":"string","enum":["scheduled","expected","unknown"],"title":"Status","default":"unknown"},"track":{"anyOf":[{"type":"string","enum":["pre_application","comprehensive_plan_amendment","rezoning_pd","specific_use_permit","text_amendment","site_plan","plat","development_agreement","incentive_agreement","permit","other"]},{"type":"null"}],"title":"Track"}},"type":"object","required":["what","source_ref"],"title":"NextDecision","description":"The next dated decision the sources name: a hearing, a deadline, a\ncouncil reading. `decision_date` may be unknown when the source names the body\nand the item but not the day; `what` is the source's own words. `status`\nand `track` are additive: whether the date is on a calendar or merely\nexpected, and which instrument the decision is about (Westlake had two\ntracks open at once)."},"SourceRef":{"properties":{"role":{"type":"string","enum":["outcome","packet","corroboration"],"title":"Role"},"source_url":{"type":"string","title":"Source Url"},"source_page_or_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Page Or Section"},"published_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Published At"},"source_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Key"}},"type":"object","required":["role","source_url"],"title":"SourceRef","description":"One linked source with its role. A record's single `source_url` is\nits primary citation; `sources` carries every document behind it so a\nreader (and a test) can tell a recap that reports a decision from the\npacket that only proposed it."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Mint one at /profile. Rate limits apply per account, not per key."},"DataCenterLink":{"type":"apiKey","in":"query","name":"token","description":"The account's own Data Center link token (the `token` on every Data Center page and email link). Requires the Data Center plan or an active trial on this metro; a token without access gets 403, an unknown one 404. Keep it private: it is the account's sign-in."}}},"tags":[{"name":"Cases","description":"Validated rezoning, plat, SUP and variance cases."},{"name":"Coverage","description":"Which municipalities are being monitored, and in which metro."},{"name":"Service","description":"Liveness."}],"servers":[{"url":"https://atlanta.zoningfirehose.com","description":"Production"}]}