Environment Canada GeoMet API
Free Canadian weather API with no key: OGC API - Features access to climate stations, daily and hourly records, and forecasts, as standards-compliant GeoJSON. Tested example included.
Endpoint tested and returned HTTP 200 on 21 Aug 2026
What is the Environment Canada GeoMet API?
Environment and Climate Change Canada's GeoMet platform serves climate and weather data through a standards-compliant OGC API - Features interface with no key. Collections are queried as GeoJSON FeatureCollections, with climate stations returning full metadata and identifiers.
Rather than inventing a bespoke interface, ECCC implemented OGC API - Features, the modern OGC standard. That means the same request grammar — `/collections`, `/collections/{id}/items`, `bbox`, `datetime`, `limit` — works here and against any other conformant server, and existing GIS clients can consume it without a custom driver. It is a more disciplined design than most national weather APIs manage.
One quirk will catch you immediately: latitude and longitude in the station properties are integers scaled by 10⁷. `485500000` is 48.55 degrees, and `-1234200000` is -123.42. The GeoJSON `geometry` on each feature carries the properly formatted decimal coordinates, so use that for mapping and treat the properties versions as an internal encoding. Every field is also duplicated in English and French, following federal bilingualism requirements, which roughly doubles the payload but means you get both languages for free. `CLIMATE_IDENTIFIER` is the key that links a station into the daily and hourly observation collections.
Quick facts
- Base URL
https://api.weather.gc.ca- Authentication
- No API key and no registration. Canadian federal government open data.
- Rate limit
- No published limit. Use `limit` and paging rather than requesting whole collections.
- Pricing
- Free under the Open Government Licence - Canada.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Environment Canada GeoMet API
Every request below was executed against the live API on 21 Aug 2026, and the response shown is the real body it returned — not an illustration.
1. Fetch a climate station record
GET https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json
curl 'https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json'const res = await fetch("https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json", timeout=20)
res.raise_for_status()
print(res.json()){
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"STN_ID": 2,
"STATION_NAME": "CHEMAINUS BARE POINT",
"PROV_STATE_TERR_CODE": "BC",
"ENG_PROV_NAME": "BRITISH COLUMBIA",
"FRE_PROV_NAME": "COLOMBIE-BRITANNIQUE",
"COUNTRY": "CAN",
"LATITUDE": 485500000,
"LONGITUDE": -1234200000,
"TIMEZONE": "PST",
"ELEVATION": "3.00",
"CLIMATE_IDENTIFIER": "101AE00",
"TC_IDENTIFIER": null,
"WMO_IDENTIFIER": null,
"STATION_TYPE": "N/A",
"NORMAL_CODE": "G",
"PUBLICATION_CODE": 1,
"DISPLAY_CODE": 9,
"ENG_STN_OPERATOR_ACRONYM": null,
"FRE_STN_OPERATOR_ACRONYM": null,
"ENG_STN_OPERATOR_NAME": null,
"FRE_STN_OPERATOR_NAME": null,
"FIRST_DATE": "1979-01-01 00:00:00",
"LAST_DATE": "1979-12-31 00:00:00",
"HLY_FIRST_DATE": null,
"HLY_LAST_DATE": null,
"DLY_FIRST_DATE": "1979-11-01 00:00:00",
"DLY_LAST_DATE": "1979-12-31 00:00:00",
"MLY_FIRST_DATE": "1979-01-01 00:00:00",
"MLY_LAST_DATE": "1979-12-01 00:00:00",
"HAS_MONTHLY_SUMMARY": "Y",
"HAS_NORMALS_DATA": "N",
"HAS_HOURLY_DATA": "N"
},
"geometry": {
"type": "Point",
"coordinates": [
-123.7,
48.916666666666664
]
},
"id": "101AE00"
}
],
"numberMatched": 8615,
"numberReturned": 1,
"links": [
{
"type": "application/geo+json",
"rel": "self",
"title": "TParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(collection) | path | Required | Collection id, such as `climate-stations`, `climate-daily` or `climate-hourly`. List them at `/collections`. climate-stations |
limit | query | Optional | Maximum features to return. Always set it — collections are large. 1 |
f | query | Optional | Output format, `json` for GeoJSON or `html` for a browsable page. json |
bbox | query | Optional | Spatial filter as `minLon,minLat,maxLon,maxLat` in decimal degrees. -125,48,-122,50 |
datetime | query | Optional | Temporal filter, a single instant or an interval, in RFC 3339. 2026-01-01/2026-01-31 |
CLIMATE_IDENTIFIER | query | Optional | Filter observation collections to one station. 101AE00 |
Response fields
typestring- Always `FeatureCollection` — this is standard GeoJSON.
features[].geometryobject- Point geometry with properly formatted decimal coordinates. Use this for mapping, not the scaled properties.
features[].properties.STN_IDinteger- Internal station identifier.
features[].properties.STATION_NAMEstring- Station name, in uppercase.
features[].properties.LATITUDE / LONGITUDEinteger- Coordinates scaled by 10⁷ — `485500000` means 48.55 degrees. Divide, or use the geometry instead.
features[].properties.CLIMATE_IDENTIFIERstring- The key that links this station to the daily and hourly observation collections.
features[].properties.PROV_STATE_TERR_CODE / ENG_PROV_NAME / FRE_PROV_NAMEstring- Province code plus its English and French names.
features[].properties.ELEVATIONstring- Elevation in metres, serialised as a string.
features[].properties.TIMEZONEstring- Station timezone abbreviation such as `PST`.
features[].properties.TC_IDENTIFIER / WMO_IDENTIFIERstring- Transport Canada and World Meteorological Organization identifiers, often null.
features[].properties.NORMAL_CODE / STATION_TYPEstring- Whether climate normals are computed for the station, and its operational classification.
What you can build with the Environment Canada GeoMet API
- Find Canadian climate stations within a bounding box
- Pull historical daily or hourly observations for a station
- Feed a GIS client that already speaks OGC API - Features
- Build a bilingual weather product using the paired English and French fields
Common errors and how to fix them
Stations plot in the wrong hemisphere
`LATITUDE` and `LONGITUDE` in properties are scaled by 10⁷.
Fix: Divide by ten million, or simply use the GeoJSON `geometry`, which is already correct.
Enormous response
Collections contain thousands of features.
Fix: Always send `limit`, and filter with `bbox` or `datetime`. Requesting a whole collection is never the right move.
Unknown collection id
Collection names differ from what you might guess.
Fix: Fetch `/collections` first and use the ids it lists.
Null identifiers
Not every station has a Transport Canada or WMO identifier.
Fix: Use `CLIMATE_IDENTIFIER` as the join key — that one is always present.
Environment Canada GeoMet API — frequently asked questions
Is the Environment Canada API free?
Yes, free with no key, published under the Open Government Licence - Canada.
Why are the coordinates such large numbers?
The properties store latitude and longitude as integers scaled by ten million, an internal encoding. The GeoJSON geometry on each feature carries the ordinary decimal coordinates, so use that.
What is OGC API - Features?
An open standard for serving geospatial features over HTTP. Because ECCC implemented it, the same query grammar and existing GIS clients work here without any custom integration.
How do I get actual observations rather than station metadata?
Query the `climate-daily` or `climate-hourly` collections, filtering by the `CLIMATE_IDENTIFIER` you got from the stations collection.
Tools that pair with this API
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.
GeoJSON Validator
Validate GeoJSON against RFC 7946 and get the exact JSON path of every problem: unclosed rings, swapped coordinates, missing properties and more.
CSV Column Statistics Calculator
Profile a CSV column by column: type, blanks, distinct values, min, max, mean, median, standard deviation and percentiles, plus top values — all in-browser.
Alternatives to Environment Canada GeoMet API
If Environment Canada GeoMet does not fit, these weather apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| Open-Meteo | Free weather forecast API with no API key and no signup. Hourly and daily forecasts worldwide, free for commercial use. Working curl example and live response. | No key | Yes | 19 Aug 2026 |
| Open-Meteo Air Quality | Free air quality API with no key: PM2.5, PM10, ozone, nitrogen dioxide, European and US AQI plus pollen forecasts worldwide. Tested curl example included. | No key | Yes | 19 Aug 2026 |
| wttr.in | wttr.in is a free console-oriented weather API with no key. Get weather as plain text, ASCII art, PNG or full JSON with one curl command. Live example included. | No key | Yes | 19 Aug 2026 |
| Open-Meteo Geocoding | Free geocoding API with no key: convert a city or place name into latitude and longitude, with population, country and timezone. Tested curl example and live JSON. | No key | Yes | 19 Aug 2026 |
| World Time & Weather | Free city data API with no key: local time, UTC offset, explicit DST rules and monthly climate normals for hundreds of cities, as static JSON. Tested example included. | No key | Yes | 21 Aug 2026 |
| 7Timer! | Free 7Timer! API with no key: astronomical seeing, transparency and cloud cover forecasts for stargazing, plus general weather. No signup. Tested example. | No key | No | 20 Aug 2026 |
Environment Canada GeoMet is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.