API reference · Coverage
Coverage by jurisdiction
Each jurisdiction with how much of it is read (ingest_profile), its meetings and their span, its meeting vendors, and what is held now in each family (held): what is held, never what a body is expected to have. Every family is offered for every country. No key needed; not billed.
region?stringA two-letter province or state code.
country?stringCA or US.
kind?stringThe record kind; each endpoint says which kinds it holds.
^[a-z][a-z0-9_]{0,60}$limit?integerResults a page, 1 to 100. Default 25.
cursor?stringnext_cursor from the previous page.
A page.
application/json- response
query*The filters as the API read them, defaults included.
as_of*stringISO 8601 instant, UTC.
results*array<>next_cursor*|Pass as cursor for the next page; null on the last.
environment*stringsandbox answers carry fictional towns.
"sandbox""live"curl -X GET 'https://data.heytownhall.com/v1/coverage'{ "query": { "property1": null, "property2": null }, "as_of": "string", "results": [ { "id": "string", "kind": "string", "name": "string", "country": "string", "region": "string", "meetings": 0, "first_meeting_on": "string", "last_meeting_on": "string", "read_at": "string", "meeting_vendors": [ "string" ], "ingest_profile": "string", "held": { "property1": 0, "property2": 0 } } ], "next_cursor": "string", "environment": "sandbox"}Read the change feed GET
Every change written to the data, oldest first, by an ever-growing id. Keep the last id you read and pass it as `after` (or follow `next_cursor`) to read what changed since. Billed as one records request a page. Filters: jurisdiction, kind, since, after.
What the data holds GET
Counts and the span of the live data. No key needed; not billed.