Build issued permits, contractor intelligence, and pre-permit signals directly into your product. Stable, versioned REST endpoints. Authenticate with a single API key.
Base URL · https://api.sitewire.ca/v1
Every request must include your secret key in the X-API-Key header. Keys are issued from your dashboard and start with sw_live_. Treat them like passwords, use them server-side only, never in browser code.
curl -H "X-API-Key: sw_live_YOUR_KEY" \ "https://api.sitewire.ca/v1/permits?city=calgary&min_value=1000000&limit=20"
/v1/permitsList permits with filters (city, value, type, date, status). Paginated.
/v1/permits/{permitnumber}Full lifecycle/timeline for a single permit.
/v1/contractors/{name}Every permit tied to a named contractor.
/v1/statsAggregate counts and values by neighbourhood and work type.
/v1/citiesAll covered cities with permit counts and latest dates.
/v1/usageYour plan, calls used this month, quota, and reset date.
/v1/healthUnauthenticated health probe for uptime monitoring.
Interactive OpenAPI reference available at /openapi.json.
Every list endpoint returns the same envelope: a data array, a pagination block, and a meta block with your live quota.
{
"data": [
{
"permitnumber": "BP-2026-04512",
"address": "4512 Dunbar St",
"city": "vancouver",
"typeofwork": "New Construction",
"projectvalue": 2400000,
"issuedate": "2026-05-15",
"buildingcontractor": "Acme Construction Ltd"
}
],
"pagination": { "limit": 20, "offset": 0, "total": 184, "next_offset": 20, "has_more": true },
"meta": { "plan": "api_growth", "calls_this_month": 312, "call_limit": 100000, "resets_on": "2026-07-01" }
}Plans are metered by monthly call volume. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Exceed your quota and you'll get a 429 until it resets on the 1st of the month.
| Plan | Monthly calls | Pipeline signals | Price |
|---|---|---|---|
| API Starter | 10,000 / mo | None | $49/mo |
| API Growth | 100,000 / mo | Included | $199/mo |
| API Scale | 1,000,000 / mo | Included | $699/mo |
JavaScript
const res = await fetch(
"https://api.sitewire.ca/v1/permits?city=toronto&status=pipeline",
{ headers: { "X-API-Key": process.env.SITEWIRE_API_KEY } }
);
const { data, pagination, meta } = await res.json();
console.log(data.length, "permits ·", meta.call_limit - meta.calls_this_month, "calls left");Python
import requests
r = requests.get(
"https://api.sitewire.ca/v1/permits",
headers={"X-API-Key": "sw_live_YOUR_KEY"},
params={"city": "vancouver", "days_back": 30, "limit": 50},
)
r.raise_for_status()
for permit in r.json()["data"]:
print(permit["address"], permit["projectvalue"])Generate a key, make your first call, and pull Canadian permit data straight into your stack.
Get your API key