Toronto open data, normalized

Every building permit, one clean API.

Toronto publishes 202,779 active building permits with 31 inconsistent fields. citysignal normalizes them into 8 documented fields and serves them live, with the provenance of every record stated up front.

Live query against Toronto Open Data202,779 records in source datasetServer cache: 10 minutes
GET /api/v1/permits?postal_code=M5VLive response

Search above to query the live API.

Every result below comes from Toronto Open Data at request time, not from fixtures.

How it works

The normalization is the product.

01

Fetch

The API queries the city's CKAN datastore live: 202,779 active permits, 31 raw fields, inconsistent naming and casing throughout.

02

Normalize

Street number, name, type and direction become one address. Statuses collapse into a documented filter. 31 fields become 8, with values verbatim from the source.

03

Serve

A documented REST API with OpenAPI 3.1, a 10-minute server cache, and provenance metadata on every response so agents can cite the source.

API

Two endpoints. Full provenance.

GET /api/v1/permits

Search normalized permits by postal code prefix, status, or full-text query.

curl "https://city.nshipyard.com/api/v1/permits?postal_code=M5V&status=active&limit=5"
Try it live →

GET /api/v1/permits/{id}

One normalized permit by city permit number.

curl "https://city.nshipyard.com/api/v1/permits/11%20249370%20BLD"
Try it live →
OpenAPI 3.1 document