Government — entry 088 of 90

Represent by Open North

Verified Aug 2026

Represent is a civic-data API run by the nonprofit Open North that maps Canadian addresses and postal codes to elected representatives and electoral boundaries. A live keyless GET against `/postcodes/{postcode}/` returned the matching federal, provincial, and municipal boundaries plus centroid coordinates as JSON, with a wildcard `Access-Control-Allow-Origin` header confirming direct browser use is supported. It's the API that powers Open North's own representative lookup tools and is reused by several civic-tech projects.

Represent, run by the nonprofit Open North, maps Canadian postal codes and addresses to elected representatives and electoral boundaries at every level of government. A live keyless GET this run against /postcodes/M5V3A8/?format=json returned a genuine 8,149 B object at HTTP 200 with a wildcard Access-Control-Allow-Origin header, no key or signup of any kind.

open-datagovernment-datacivic-techcanadaelections
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score88out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 88 on greatapis.com
<a href="https://greatapis.com/api/represent-by-open-north/"><img src="https://greatapis.com/badge/represent-by-open-north.svg" alt="Scored 88 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — a live GET this run against /postcodes/M5V3A8/?format=json returned HTTP 200 with a full representatives-and-boundaries object on the first anonymous try.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Look up representatives and boundaries by postal code

GEThttps://represent.opennorth.ca/postcodes/M5V3A8/?format=json

200 application/json; charset=utf-8

{
  "code": "M5V3A8",
  "city": "TORONTO",
  "province": "ON",
  "centroid": {"type": "Point", "coordinates": [-79.395496, 43.647791]},
  "boundaries_concordance": [],
  "boundaries_centroid": [
    {"url": "/boundaries/federal-electoral-districts/35101/", "name": "Spadina—Fort York", "boundary_set_name": "Federal electoral district", "external_id": "35101"},
    {"url": "/boundaries/toronto-wards-2018/spadina-fort-york/", "name": "Spadina-Fort York", "boundary_set_name": "Toronto ward", "external_id": "10"}
  ],
  "representatives_centroid": [
    {"name": "Ausma Malik", "elected_office": "Councillor", "district_name": "Spadina-Fort York", "representative_set_name": "Toronto City Council"},
    {"name": "Chris Glover", "elected_office": "MPP", "district_name": "Spadina—Fort York", "representative_set_name": "Legislative Assembly of Ontario"},
    {"name": "Chi Nguyen", "elected_office": "MP", "district_name": "Spadina—Harbourfront", "representative_set_name": "House of Commons"}
  ]
}

The full live response above is 8,149 B. boundaries_centroid carries 14 entries (2 shown, 12 more omitted here) spanning federal, provincial, and municipal ward layers, and representatives_centroid carries 4 (3 shown — one per level of government; the omitted fourth is Toronto Mayor Olivia Chow, the second of the two Toronto City Council entries). A live GET this run against /representatives/?limit=1 and /boundaries/?limit=1 both returned the same pagination envelope shape — {"objects":[...],"meta":{"offset":0,"limit":1,"total_count":N,"previous":null,"next":"..."}} — with real totals of 3,811 representatives and 11,976 boundaries across the whole dataset.

Try it

Developer reference

Base URLhttps://represent.opennorth.ca
Rate limit

60 requests/minute per client (86,400 requests/day cap) -- per represent.opennorth.ca/api/'s Rate limits section, beyond which HTTP 503s may occur.

Key endpoints
  • GET/postcodes/{postcode}/
  • GET/boundaries/
  • GET/representatives/

Gotchas & limits

  • ?format=json is silently ignored on a 404 — a live GET this run against /postcodes/00000000/?format=json (a well-formed but non-existent postal code) returned HTTP 404 with a 3,047 B HTML page (the full site chrome, content-type: text/html; charset=utf-8), not a JSON error object. Code that unconditionally calls res.json() on a Represent error response will throw.
  • boundaries_centroid returns multiple, sometimes-superseded redistricting versions of the same seat rather than just the current one — the live M5V3A8 lookup above returned both /boundaries/federal-electoral-districts/35101/ (the current federal riding) and /boundaries/federal-electoral-districts-2003-representation-order/35095/ (a 2003 riding covering the same area) side by side, distinguishable only by boundary_set_name/external_id, not by any "is this current" flag.
  • List endpoints (/boundaries/, /representatives/) default to limit=20 and silently cap any higher request rather than erroring — a live GET this run against /boundaries/?format=json&limit=10000 returned "meta":{"limit":1000,...} and exactly 1,000 objects, not the 10,000 requested and not an error.
  • representatives_centroid flattens municipal, provincial, and federal representatives into one array with no per-level grouping and no level field — the live M5V3A8 lookup returned all 4 side by side: Toronto Councillor Ausma Malik and Mayor Olivia Chow (both representative_set_name: "Toronto City Council"), Ontario MPP Chris Glover ("Legislative Assembly of Ontario"), and federal MP Chi Nguyen ("House of Commons"). district_name won't substitute for a level field either — those three levels named overlapping territory three different ways in the same response (Spadina-Fort York, Spadina—Fort York, Spadina—Harbourfront), so code must branch on representative_set_name itself.

Availability

Uptime100%
Median latency419 ms
Last checkUp · 200 · Sep 2026

3 checks since Aug 2026. A person runs this check by hand, not an automated monitor.