Zoning Firehose API
Build on the same data your alerts run on: every validated rezoning, specific use permit, plat, and PD amendment we track across DFW P&Z agendas, as clean JSON. Same pipeline, same freshness — hours after the packet drops.
API access is included with any subscription. Email us for a key, or find your key prefix on your account page.
Authentication
Send your key in the X-API-Key header on every request. Requests without a valid key get 401. Keys are rate-limited to 60 requests/minute (429 over the limit; retry after the Retry-After seconds).
curl -H "X-API-Key: zf_your_key_here" \
"https://zoningfirehose.com/api/v1/cases?county=Collin&case_type=rezoning&limit=5"Endpoints
GET /api/v1/cases
List validated cases, newest first. Returns total (matches across all pages), count, and cases.
Query parameters (all optional):
| Param | Meaning |
|---|---|
municipality | City name, e.g. McKinney |
county | Collin, Denton, Dallas, or Tarrant |
case_type | One of: rezoning, specific_use_permit, plat, pd_amendment, comprehensive_plan_amendment, variance, other |
status | One of: new, updated, continued, approved, denied, withdrawn |
hearing_after / hearing_before | ISO dates (YYYY-MM-DD) bounding the hearing date |
q | Keyword search across case number, structured fields, and full agenda text |
limit / offset | Paging — limit defaults to 50, max 200 |
Each case object carries the full extracted record:
{
"case_number": "Z-2026-014",
"case_type": "rezoning",
"address_or_location": "NE corner of Custer Rd & Stacy Rd",
"acreage": 12.4,
"current_zoning": "AG",
"requested_zoning": "PD-MF",
"proposed_use": "Multi-family residential",
"petitioner": "Example Development LLC",
"staff_recommendation": "approval",
"confidence": "high",
"impact_summary": "Rezoning 12.4 acres from agricultural to a planned development for multi-family.",
"municipality": "McKinney",
"county": "Collin",
"hearing_date": "2026-08-11",
"status": "new",
"processed_at": "2026-07-28T14:02:11Z",
"detail_url": "https://zoningfirehose.com/cases/mckinney/Z-2026-014",
"source_url": "https://mckinney.legistar.com/..."
}GET /api/v1/cases/{municipality}/{case_number}
One case by city and case number. 404 if we don't track it.
curl -H "X-API-Key: zf_your_key_here" \
"https://zoningfirehose.com/api/v1/cases/mckinney/Z-2026-014"GET /api/v1/municipalities
Coverage list: every municipality, its county, agenda platform, P&Z meeting cadence, live status, and tracked case count.
curl -H "X-API-Key: zf_your_key_here" "https://zoningfirehose.com/api/v1/municipalities"MCP server — use the data from Claude
Ship your key to Claude Desktop, Claude Code, or any MCP client with our single-file server — no extra packages beyond Python 3.11+ and httpx. Download mcp_server.py from your welcome email (or ask us for it), then add this to your MCP config:
{
"mcpServers": {
"zoning-firehose": {
"command": "python",
"args": [
"/path/to/mcp_server.py"
],
"env": {
"ZONING_API_KEY": "zf_your_key_here"
}
}
}
}That gives Claude three tools — search_cases, get_case, and list_municipalities — so you can ask things like “any multi-family rezonings in Collin County with hearings next month?” and get grounded answers from live data.
Fair use
Data is licensed for your internal tools and analysis under your subscription. No resale or public rehosting of the feed. Questions, higher limits, webhooks? [email protected].