curl "https://api.northaxiumdata.ca/api/v1/planning-applications?municipality=calgary&application_category=rezoning&applied_after=2025-01-01&limit=25" \
-H "X-API-Key: <your-api-key>"
import requests
response = requests.get(
"https://api.northaxiumdata.ca/api/v1/planning-applications",
headers={"X-API-Key": "<your-api-key>"},
params={
"municipality": "calgary",
"application_category": "rezoning",
"applied_after": "2025-01-01",
"limit": 25,
},
)
print(response.json())
{
"data": [
{
"record_id": "calgary:LOC2025-0012",
"municipality": "calgary",
"province": "AB",
"application_number": "LOC2025-0012",
"source_reference": "LOC2025-0012",
"application_type_raw": "Land Use Amendment",
"application_category": "rezoning",
"status_raw": "Application in Progress",
"status": "under_review",
"description": "Land use redesignation application",
"address": "500 4 Street SW, Calgary, AB",
"neighbourhood": "Downtown Commercial Core",
"ward": "7",
"from_zoning": "CC-X",
"proposed_zoning": "DC",
"applied_date": "2025-01-10",
"decision_date": null,
"status_date": "2025-01-10",
"lat": 51.0482,
"lng": -114.0703,
"source_updated_at": "2025-01-13T15:30:00",
"last_updated": "2026-07-13T06:20:00",
"distance_km": null
}
],
"meta": {
"total": 1,
"limit": 25,
"offset": 0,
"municipality": "calgary",
"sort_by": "applied_date",
"sort_order": "desc",
"proximity": null
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "application_category must be one of: development_permit, official_plan_amendment, other, outline_plan, rezoning, road_closure, site_plan, subdivision, variance."
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing API key. Pass your key in the X-API-Key header."
}
}
Planning Applications
Planning Applications
Rezonings, variances, and subdivisions across Canadian municipalities.
GET
/
api
/
v1
/
planning-applications
curl "https://api.northaxiumdata.ca/api/v1/planning-applications?municipality=calgary&application_category=rezoning&applied_after=2025-01-01&limit=25" \
-H "X-API-Key: <your-api-key>"
import requests
response = requests.get(
"https://api.northaxiumdata.ca/api/v1/planning-applications",
headers={"X-API-Key": "<your-api-key>"},
params={
"municipality": "calgary",
"application_category": "rezoning",
"applied_after": "2025-01-01",
"limit": 25,
},
)
print(response.json())
{
"data": [
{
"record_id": "calgary:LOC2025-0012",
"municipality": "calgary",
"province": "AB",
"application_number": "LOC2025-0012",
"source_reference": "LOC2025-0012",
"application_type_raw": "Land Use Amendment",
"application_category": "rezoning",
"status_raw": "Application in Progress",
"status": "under_review",
"description": "Land use redesignation application",
"address": "500 4 Street SW, Calgary, AB",
"neighbourhood": "Downtown Commercial Core",
"ward": "7",
"from_zoning": "CC-X",
"proposed_zoning": "DC",
"applied_date": "2025-01-10",
"decision_date": null,
"status_date": "2025-01-10",
"lat": 51.0482,
"lng": -114.0703,
"source_updated_at": "2025-01-13T15:30:00",
"last_updated": "2026-07-13T06:20:00",
"distance_km": null
}
],
"meta": {
"total": 1,
"limit": 25,
"offset": 0,
"municipality": "calgary",
"sort_by": "applied_date",
"sort_order": "desc",
"proximity": null
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "application_category must be one of: development_permit, official_plan_amendment, other, outline_plan, rezoning, road_closure, site_plan, subdivision, variance."
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing API key. Pass your key in the X-API-Key header."
}
}
Planning applications cover discretionary land-use decisions that require municipal review. They include rezonings, variances, subdivisions, and related applications. These records provide an early signal of major land-use change before building permits are issued.
The dataset contains more than 11,800 records from Calgary, Ottawa, and Victoria. It refreshes automatically from official municipal sources.
The detail endpoint adds
The
List planning applications
GET /api/v1/planning-applications
Query parameters
integer
default:"100"
Maximum records to return. The upper bound is
500.integer
default:"0"
Number of records to skip for pagination.
string
One or more comma-separated city slugs:
calgary, ottawa, or victoria.string
Partial match across application number, address, description, neighbourhood, ward, and zoning text.
string
Partial match on the municipality’s application number.
application is accepted as an alias.string
One of
rezoning, official_plan_amendment, variance, subdivision, site_plan, development_permit, outline_plan, road_closure, or other. category is accepted as an alias.string
One of
submitted, under_review, approved, refused, withdrawn, appealed, completed, or unknown.string
Inclusive ISO 8601 application-date start. Example:
2025-01-01.string
Inclusive ISO 8601 application-date end. Example:
2025-12-31.string
Inclusive ISO 8601 decision-date start.
string
Inclusive ISO 8601 decision-date end.
number
Latitude for proximity search. Provide with
lng and radius_km.number
Longitude for proximity search. Provide with
lat and radius_km.number
Search radius in kilometres, from
0.1 to 100.string
default:"applied_date"
One of
applied, applied_date, decision, decision_date, status_date, updated, last_updated, or distance. distance requires a complete proximity query.string
default:"desc"
Either
asc or desc.curl "https://api.northaxiumdata.ca/api/v1/planning-applications?municipality=calgary&application_category=rezoning&applied_after=2025-01-01&limit=25" \
-H "X-API-Key: <your-api-key>"
import requests
response = requests.get(
"https://api.northaxiumdata.ca/api/v1/planning-applications",
headers={"X-API-Key": "<your-api-key>"},
params={
"municipality": "calgary",
"application_category": "rezoning",
"applied_after": "2025-01-01",
"limit": 25,
},
)
print(response.json())
{
"data": [
{
"record_id": "calgary:LOC2025-0012",
"municipality": "calgary",
"province": "AB",
"application_number": "LOC2025-0012",
"source_reference": "LOC2025-0012",
"application_type_raw": "Land Use Amendment",
"application_category": "rezoning",
"status_raw": "Application in Progress",
"status": "under_review",
"description": "Land use redesignation application",
"address": "500 4 Street SW, Calgary, AB",
"neighbourhood": "Downtown Commercial Core",
"ward": "7",
"from_zoning": "CC-X",
"proposed_zoning": "DC",
"applied_date": "2025-01-10",
"decision_date": null,
"status_date": "2025-01-10",
"lat": 51.0482,
"lng": -114.0703,
"source_updated_at": "2025-01-13T15:30:00",
"last_updated": "2026-07-13T06:20:00",
"distance_km": null
}
],
"meta": {
"total": 1,
"limit": 25,
"offset": 0,
"municipality": "calgary",
"sort_by": "applied_date",
"sort_order": "desc",
"proximity": null
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "application_category must be one of: development_permit, official_plan_amendment, other, outline_plan, rezoning, road_closure, site_plan, subdivision, variance."
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing API key. Pass your key in the X-API-Key header."
}
}
Response fields
| Field | Type | Description |
|---|---|---|
record_id | string | Stable NorthAxium record identifier |
municipality | string | City slug |
province | string | Province abbreviation |
application_number | string | Municipality application number where published |
application_type_raw | string | Source application type text |
application_category | string | Normalized land-use category |
status_raw | string | Source status text |
status | string | Normalized application status |
address | string | Site address where published |
description | string | Application description where published |
neighbourhood / ward | string | Location context where published |
from_zoning / proposed_zoning | string | Existing and proposed zoning where published |
applied_date | date | Date the application was filed |
decision_date | date | Decision date where published |
status_date | date | Status effective date where published |
lat / lng | number | Application location coordinates where published |
source_updated_at | timestamp | Publisher update timestamp where available |
last_updated | timestamp | NorthAxium record update timestamp |
Detail and statistics
Retrieve one record byrecord_id:
GET /api/v1/planning-applications/{record_id}
property_identifier and source_url when the municipality publishes them.
Get grouped record counts:
GET /api/v1/planning-applications/stats?group_by=municipality
group_by parameter accepts municipality, province, application_category, status, applied_year, or decision_year. List filters such as municipality, application_category, and date ranges also apply to statistics.
For a city-by-city availability table, see Municipal Intelligence Coverage.