BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://represent.opennorth.ca/representatives/?limit=1'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://represent.opennorth.ca/representatives/?limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "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

ParameterTypeRequiredDescription
limitqueryOptionalRecords per page. Defaults to 20, maximum 100. 1
offsetqueryOptionalPagination offset. 20
pointqueryOptional`latitude,longitude` to find representatives for a location. 45.5017,-73.5673
/postcodes/{postcode}/pathOptionalResolve a Canadian postcode to its representatives. Omit the space. /postcodes/V8W1P6/
representative_set_namequeryOptionalFilter to one governing body. House of Commons
districtsqueryOptionalFilter 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

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.