curl "https://api.northaxiumdata.ca/api/v1/permits?municipality=toronto&permit_type_raw=demolition&sort_by=updated&limit=10" \
-H "X-API-Key: <your-api-key>"
import requests
url = "https://api.northaxiumdata.ca/api/v1/permits"
headers = {"X-API-Key": "<your-api-key>"}
params = {
"limit": 10,
"municipality": "toronto",
"permit_type_raw": "demolition",
"sort_by": "updated"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const fetch = require('node-fetch');
const url = new URL('https://api.northaxiumdata.ca/api/v1/permits');
url.search = new URLSearchParams({
limit: '10',
municipality: 'toronto',
permit_type_raw: 'demolition',
sort_by: 'updated'
});
fetch(url, {
headers: {
'X-API-Key': '<your-api-key>'
}
})
.then(res => res.json())
.then(json => console.log(json));
{
"data": [
{
"record_id": "BP-2023-88123",
"municipality": "toronto",
"province": "ON",
"permit_number_raw": "23 123456 BLD 00",
"source_reference": "23 123456 BLD 00",
"issued_date": "2023-05-15",
"permit_type": "new_construction",
"permit_type_raw": "New Building",
"estimated_cost": 4500000.00,
"work_description": "New construction of office building",
"applicant_name": null,
"contractor_name": "Example Construction Ltd.",
"zoning_raw": null,
"last_updated": "2026-04-16T12:34:56"
}
],
"meta": {
"total": 1,
"limit": 10,
"offset": 0,
"municipality": "toronto",
"sort_by": "last_updated",
"sort_order": "desc",
"proximity": null
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid parameter value."
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing API key. Pass your key in the X-API-Key header."
}
}
{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}
{
"error": {
"code": "RATE_LIMITED",
"message": "Monthly request limit exceeded."
}
}
Building Permits
Building Permits
Retrieve a list of commercial, residential, and industrial building permits issued across Canada.
GET
/
api
/
v1
/
permits
curl "https://api.northaxiumdata.ca/api/v1/permits?municipality=toronto&permit_type_raw=demolition&sort_by=updated&limit=10" \
-H "X-API-Key: <your-api-key>"
import requests
url = "https://api.northaxiumdata.ca/api/v1/permits"
headers = {"X-API-Key": "<your-api-key>"}
params = {
"limit": 10,
"municipality": "toronto",
"permit_type_raw": "demolition",
"sort_by": "updated"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const fetch = require('node-fetch');
const url = new URL('https://api.northaxiumdata.ca/api/v1/permits');
url.search = new URLSearchParams({
limit: '10',
municipality: 'toronto',
permit_type_raw: 'demolition',
sort_by: 'updated'
});
fetch(url, {
headers: {
'X-API-Key': '<your-api-key>'
}
})
.then(res => res.json())
.then(json => console.log(json));
{
"data": [
{
"record_id": "BP-2023-88123",
"municipality": "toronto",
"province": "ON",
"permit_number_raw": "23 123456 BLD 00",
"source_reference": "23 123456 BLD 00",
"issued_date": "2023-05-15",
"permit_type": "new_construction",
"permit_type_raw": "New Building",
"estimated_cost": 4500000.00,
"work_description": "New construction of office building",
"applicant_name": null,
"contractor_name": "Example Construction Ltd.",
"zoning_raw": null,
"last_updated": "2026-04-16T12:34:56"
}
],
"meta": {
"total": 1,
"limit": 10,
"offset": 0,
"municipality": "toronto",
"sort_by": "last_updated",
"sort_order": "desc",
"proximity": null
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid parameter value."
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing API key. Pass your key in the X-API-Key header."
}
}
{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}
{
"error": {
"code": "RATE_LIMITED",
"message": "Monthly request limit exceeded."
}
}
Get a standardized list of building permits aggregated from municipalities, filterable by municipality, text search, permit metadata, and update window.
Query Parameters
integer
default:"100"
Maximum number of permits to return per request. Default:
100. Upper bound depends on your plan tier. Example: 25.integer
default:"0"
Number of records to skip for pagination. Example:
50.string
Filter permits by issuing municipality slug. Comma-separated values are accepted. Example:
toronto, calgary.string
Partial match across the permit search surface, including address, neighbourhood, work description, raw and canonical permit type, building type, and applicant or contractor names where available. Example:
123 King St.string
One of
new_construction, renovation, addition, demolition, change_of_use, or other. Example: new_construction.string
Partial match on the municipality’s raw permit type or class text. Example:
New Building.string
One of
issued, in_review, completed, cancelled, or expired. Example: issued.string
Partial match on the normalized building or property type text. Example:
residential.string
Partial match on neighbourhood, ward, or district text where available. Example:
Annex.string
Partial match on
applicant_name. Example: Smith Construction.string
Partial match on
contractor_name. Example: Smith Construction.string
ISO 8601 start date. Example:
2023-01-01.string
ISO 8601 end date. Example:
2023-12-31.string
ISO 8601 start date for the record’s
last_updated timestamp. Example: 2024-01-01.string
ISO 8601 end date for the record’s
last_updated timestamp. Example: 2024-12-31.string
default:"date"
One of
date, issued_date, application_date, updated, last_updated, published, value, or distance. distance requires lat, lng, and radius_km. Example: date.For polling or incremental syncs, use
sort_by=last_updated&sort_order=desc with updated_after set to your last successful sync timestamp.string
default:"desc"
Either
asc or desc. Example: desc.number
Latitude for proximity search. Must be provided with
lng and radius_km. Example: 43.6532.number
Longitude for proximity search. Must be provided with
lat and radius_km. Example: -79.3832.number
Radius in kilometres for proximity search. Must be between
0.1 and 100. Example: 5.curl "https://api.northaxiumdata.ca/api/v1/permits?municipality=toronto&permit_type_raw=demolition&sort_by=updated&limit=10" \
-H "X-API-Key: <your-api-key>"
import requests
url = "https://api.northaxiumdata.ca/api/v1/permits"
headers = {"X-API-Key": "<your-api-key>"}
params = {
"limit": 10,
"municipality": "toronto",
"permit_type_raw": "demolition",
"sort_by": "updated"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const fetch = require('node-fetch');
const url = new URL('https://api.northaxiumdata.ca/api/v1/permits');
url.search = new URLSearchParams({
limit: '10',
municipality: 'toronto',
permit_type_raw: 'demolition',
sort_by: 'updated'
});
fetch(url, {
headers: {
'X-API-Key': '<your-api-key>'
}
})
.then(res => res.json())
.then(json => console.log(json));
Proximity search example
Find all permits within 2km of a coordinate:curl "https://api.northaxiumdata.ca/api/v1/permits?lat=43.6532&lng=-79.3832&radius_km=2&permit_type=new_construction&sort_by=distance" \
-H "X-API-Key: <your-api-key>"
import requests
url = "https://api.northaxiumdata.ca/api/v1/permits"
headers = {"X-API-Key": "<your-api-key>"}
params = {
"lat": 43.6532,
"lng": -79.3832,
"radius_km": 2,
"permit_type": "new_construction",
"sort_by": "distance"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const fetch = require('node-fetch');
const url = new URL('https://api.northaxiumdata.ca/api/v1/permits');
url.search = new URLSearchParams({
lat: '43.6532',
lng: '-79.3832',
radius_km: '2',
permit_type: 'new_construction',
sort_by: 'distance'
});
fetch(url, { headers: { 'X-API-Key': '<your-api-key>' } })
.then(res => res.json())
.then(json => console.log(json));
Proximity search example
Find all permits within 2km of a coordinate:curl "https://api.northaxiumdata.ca/api/v1/permits?lat=43.6532&lng=-79.3832&radius_km=2&permit_type=new_construction&sort_by=distance" \
-H "X-API-Key: <your-api-key>"
import requests
url = "https://api.northaxiumdata.ca/api/v1/permits"
headers = {"X-API-Key": "<your-api-key>"}
params = {
"lat": 43.6532,
"lng": -79.3832,
"radius_km": 2,
"permit_type": "new_construction",
"sort_by": "distance"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const fetch = require('node-fetch');
const url = new URL('https://api.northaxiumdata.ca/api/v1/permits');
url.search = new URLSearchParams({
lat: '43.6532',
lng: '-79.3832',
radius_km: '2',
permit_type: 'new_construction',
sort_by: 'distance'
});
fetch(url, { headers: { 'X-API-Key': '<your-api-key>' } })
.then(res => res.json())
.then(json => console.log(json));
Proximity search example
Find all permits within 2km of a coordinate:curl "https://api.northaxiumdata.ca/api/v1/permits?lat=43.6532&lng=-79.3832&radius_km=2&permit_type=new_construction&sort_by=distance" \
-H "X-API-Key: <your-api-key>"
import requests
url = "https://api.northaxiumdata.ca/api/v1/permits"
headers = {"X-API-Key": "<your-api-key>"}
params = {
"lat": 43.6532,
"lng": -79.3832,
"radius_km": 2,
"permit_type": "new_construction",
"sort_by": "distance"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const fetch = require('node-fetch');
const url = new URL('https://api.northaxiumdata.ca/api/v1/permits');
url.search = new URLSearchParams({
lat: '43.6532',
lng: '-79.3832',
radius_km: '2',
permit_type: 'new_construction',
sort_by: 'distance'
});
fetch(url, { headers: { 'X-API-Key': '<your-api-key>' } })
.then(res => res.json())
.then(json => console.log(json));
{
"data": [
{
"record_id": "BP-2023-88123",
"municipality": "toronto",
"province": "ON",
"permit_number_raw": "23 123456 BLD 00",
"source_reference": "23 123456 BLD 00",
"issued_date": "2023-05-15",
"permit_type": "new_construction",
"permit_type_raw": "New Building",
"estimated_cost": 4500000.00,
"work_description": "New construction of office building",
"applicant_name": null,
"contractor_name": "Example Construction Ltd.",
"zoning_raw": null,
"last_updated": "2026-04-16T12:34:56"
}
],
"meta": {
"total": 1,
"limit": 10,
"offset": 0,
"municipality": "toronto",
"sort_by": "last_updated",
"sort_order": "desc",
"proximity": null
}
}
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid parameter value."
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing API key. Pass your key in the X-API-Key header."
}
}
{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}
{
"error": {
"code": "RATE_LIMITED",
"message": "Monthly request limit exceeded."
}
}