Represent (Open North) API
Free Canadian representative lookup with no key: find federal, provincial and municipal elected officials by postcode or point, with contact details and photos. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Represent (Open North) API?
Represent, run by the non-profit Open North, is a free key-free API that resolves any Canadian postcode or coordinate to the people who represent it — Members of Parliament, provincial legislators, mayors and city councillors — with email addresses, phone numbers, photos and office details.
Canada has no single register of elected officials across its three tiers of government, so Open North built one by scraping hundreds of municipal, provincial and federal sources into a common schema. The result is the only place you can hand over a postcode and get back every person who represents that address, from the local councillor to the federal MP. Each record names the `source_url` it was scraped from, which is unusually honest about provenance and lets you verify anything that looks stale.
Records are grouped by `representative_set_name` — "Victoria City Council", "House of Commons" — because a person only means something in the context of the body they sit in. Coverage is genuinely uneven and the API does not hide it: municipal `party_name` is usually an empty string because most Canadian local elections are non-partisan, and `gender` is frequently blank too. The `offices` array separates constituency and legislature phone numbers, which matters if you are building anything that tells a user how to actually make contact rather than just naming their representative.
Quick facts
- Base URL
https://represent.opennorth.ca- Authentication
- No API key or registration. Open North asks for attribution and reasonable use; a self-hosted copy is possible since the codebase is open source.
- Rate limit
- Not formally published. It is a small non-profit service — cache lookups by postcode rather than querying per page view.
- Pricing
- Free. Represent is operated by Open North, a Canadian non-profit.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Represent (Open North) API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List Canadian elected representatives
GET https://represent.opennorth.ca/representatives/?limit=1
curl 'https://represent.opennorth.ca/representatives/?limit=1'const res = await fetch("https://represent.opennorth.ca/representatives/?limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://represent.opennorth.ca/representatives/?limit=1", timeout=20)
res.raise_for_status()
print(res.json()){
"objects": [
{
"name": "Marg Gardiner",
"district_name": "Victoria",
"elected_office": "Councillor",
"source_url": "https://www.victoria.ca/city-government/mayor-council/members-council",
"first_name": "Marg",
"last_name": "Gardiner",
"party_name": "",
"email": "mgardiner@victoria.ca",
"url": "https://www.victoria.ca/city-government/mayor-and-council/councillor-marg-gardiner",
"personal_url": "",
"photo_url": "https://www.victoria.ca/sites/default/files/styles/medium/public/2023-08/_DSC4435%2520Marg%2520Gardiner%2520High%2520Res%2520Colour.jpg?itok=S58autUA",
"gender": "",
"offices": [
{
"tel": "1 250 532-1610",
"type": "legislature"
}
],
"extra": {},
"representative_set_name": "Victoria City Council",
"related": {
"representative_set_url": "/representative-sets/victoria-city-council/",
"boundary_url": "/boundaries/census-subdivisions/5917034/"
}
}
],
"meta": {
"offset": 0,
"limit": 1,
"total_count": 3812,
"previous": null,
"next": "/representatives/?limit=1&offset=1"
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | query | Optional | Records per page. Defaults to 20, maximum 100. 1 |
offset | query | Optional | Pagination offset. 20 |
point | query | Optional | `latitude,longitude` to find representatives for a location. 45.5017,-73.5673 |
/postcodes/{postcode}/ | path | Optional | Resolve a Canadian postcode to its representatives. Omit the space. /postcodes/V8W1P6/ |
representative_set_name | query | Optional | Filter to one governing body. House of Commons |
districts | query | Optional | Filter by electoral district name. Victoria |
Response fields
objectsarray- The representatives. Note the key is `objects`, not `results` or `data`.
objects[].name / first_name / last_namestring- Full name plus split components.
objects[].elected_officestring- Role held — `Councillor`, `MP`, `Mayor`, `MLA` and similar.
objects[].district_namestring- The ward, riding or district represented.
objects[].representative_set_namestring- The governing body, such as `Victoria City Council`. This is what gives the role meaning.
objects[].party_namestring- Party, but usually an empty string at municipal level since most Canadian local elections are non-partisan.
objects[].email / url / personal_urlstring- Official contact address and web pages. Frequently populated, unlike most representative datasets.
objects[].officesarray- Contact points with `tel` and a `type` distinguishing constituency from legislature offices.
objects[].source_urlstring- The page the record was scraped from — use it to verify anything that looks out of date.
objects[].related.representative_set_urlstring- Relative link to the governing body's own resource.
What you can build with the Represent (Open North) API
- Show a Canadian user who represents them from their postcode
- Build a civic contact tool that emails the right councillor
- Aggregate contact details for a municipal advocacy campaign
- Compare representative coverage across Canadian cities
- Resolve coordinates to electoral districts at all three tiers
Common errors and how to fix them
Reading `results` gives undefined
The payload key is `objects`.
Fix: Read `objects`; Represent predates the conventions most Django REST APIs settled on.
404 on a postcode
The postcode had a space, or is not in the dataset.
Fix: Strip spaces and uppercase it — `V8W 1P6` becomes `V8W1P6`.
Municipal party is empty
Most Canadian local elections are non-partisan.
Fix: Treat an empty `party_name` as "not applicable" rather than missing data, and hide the field for municipal records.
A representative has left office
Records come from scrapers that run on a schedule.
Fix: Check `source_url` to confirm against the official page before publishing contact details.
Represent (Open North) API — frequently asked questions
Is the Represent API free?
Yes, no key and no registration. It is run by Open North, a Canadian non-profit, which asks for attribution and reasonable use rather than payment.
Which levels of government does it cover?
All three — federal MPs, provincial and territorial legislators, and municipal mayors and councillors — which is what makes it unique, since Canada publishes no single combined register.
How do I look up by postcode?
Use the `/postcodes/{postcode}/` path with the space removed, for example `/postcodes/V8W1P6/`. You can also pass `point=lat,lon` to resolve coordinates instead.
How current is the data?
It depends on the source, since records are scraped from hundreds of separate government sites on differing schedules. Every record carries a `source_url` so you can verify against the official page before acting on it.
Tools that pair with this API
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
Represent (Open North) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.