Government — entry 088 of 90
Represent by Open North
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.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required — a live GET this run against
/postcodes/M5V3A8/?format=jsonreturned HTTP 200 with a full representatives-and-boundaries object on the first anonymous try.
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
{
"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
https://represent.opennorth.ca60 requests/minute per client (86,400 requests/day cap) -- per represent.opennorth.ca/api/'s Rate limits section, beyond which HTTP 503s may occur.
- GET/postcodes/{postcode}/
- GET/boundaries/
- GET/representatives/
Gotchas & limits
?format=jsonis 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 callsres.json()on a Represent error response will throw.boundaries_centroidreturns 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 byboundary_set_name/external_id, not by any "is this current" flag.- List endpoints (
/boundaries/,/representatives/) default tolimit=20and silently cap any higher request rather than erroring — a live GET this run against/boundaries/?format=json&limit=10000returned"meta":{"limit":1000,...}and exactly 1,000 objects, not the 10,000 requested and not an error. representatives_centroidflattens 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 CouncillorAusma Malikand MayorOlivia Chow(bothrepresentative_set_name: "Toronto City Council"), Ontario MPPChris Glover("Legislative Assembly of Ontario"), and federal MPChi Nguyen("House of Commons").district_namewon'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 onrepresentative_set_nameitself.