Canadian Provinces
Canada's 13 subdivisions — 10 provinces and 3 territories — each identified by its ISO 3166-2 two-letter postal code, full English name, capital city, and administrative type. Use this dataset for address forms, shipping calculators, tax-rate lookups, and any application that needs a reliable, coded list of Canadian jurisdictions.
Quick fetch
Stable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/canadian-provinces.json
Or use as a typed import:
import { canadianProvinces } from "https://staticdata.dev/v1/canadian-provinces.ts"
Formats
- JSON 1.4 KB
/v1/canadian-provinces.json
min: 994 B · /v1/canadian-provinces.min.json
- CSV 497 B
/v1/canadian-provinces.csv
- TypeScript 1.6 KB
/v1/canadian-provinces.ts
export const canadianProvinces
type Province = (typeof canadianProvinces)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| code | string | ISO 3166-2 two-letter postal abbreviation | ON |
| name | string | Full English name of the province or territory | Ontario |
| capital | string | Name of the capital city | Toronto |
| type | string | Administrative type: province or territory | province |
Preview
First 10 records.
| code | name | capital | type |
|---|---|---|---|
| AB | Alberta | Edmonton | province |
| BC | British Columbia | Victoria | province |
| MB | Manitoba | Winnipeg | province |
| NB | New Brunswick | Fredericton | province |
| NL | Newfoundland and Labrador | St. John's | province |
| NS | Nova Scotia | Halifax | province |
| NT | Northwest Territories | Yellowknife | territory |
| NU | Nunavut | Iqaluit | territory |
| ON | Ontario | Toronto | province |
| PE | Prince Edward Island | Charlottetown | province |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/canadian-provinces.json | jq '.[0]' import type { Province } from "https://staticdata.dev/v1/canadian-provinces.ts";
const res = await fetch("https://staticdata.dev/v1/canadian-provinces.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const canadianProvinces: Province[] = await res.json();
console.log(canadianProvinces[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/canadian-provinces.min.json") as r:
canadianProvinces = json.load(r)
print(canadianProvinces[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/canadian-provinces.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/canadian-provinces.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
This dataset covers all 13 Canadian subdivisions as defined under the Constitution Act and subsequent legislation: the 10 provinces (Alberta, British Columbia, Manitoba, New Brunswick, Newfoundland and Labrador, Nova Scotia, Ontario, Prince Edward Island, Quebec, and Saskatchewan) and the 3 territories (Northwest Territories, Nunavut, and Yukon). The two-letter codes follow the Canada Post and ISO 3166-2:CA standard, which is the same abbreviation system used on Canadian addresses and accepted by most postal APIs.
Each record includes the capital city as recognised by the respective provincial or territorial government. Records are sorted alphabetically by the two-letter code for deterministic diffs. The type field distinguishes provinces (which hold constitutional powers under section 92 of the Constitution Act, 1867) from territories (which are federally administered under the Northwest Territories Act, Yukon Act, and Nunavut Act).
Nunavut is the newest subdivision, having been carved out of the Northwest Territories and established on 1 April 1999. All other boundaries and capitals reflect the current official configuration as of the dataset version date.
Versioning
URLs under /v1/ are stable: field names and types will not change in a way
that breaks consumers. Values can be corrected or records added when the upstream source
changes; schema-incompatible updates ship under a new version path. See the
canadian-provinces changelog for this dataset's history.