Find an API

Search public APIs with auth details & Postman guides

← All APIs

Environment and Climate Change Canada MSC GeoMet API

weather.gc.ca · Government

Government No Auth Free & Open Government Insurance Agriculture Weather Climate Geospatial

Free, open API from Environment and Climate Change Canada (ECCC) providing weather forecasts, historical climate data, alerts, radar, and geospatial datasets via the Meteorological Service of Canada (MSC) GeoMet platform. Supports OGC-compliant WMS, WFS, OGC API Features, and SensorThings API standards. Essential for insurance catastrophe modeling, agricultural risk, and climate risk analytics in Canada.

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Get weather station data (OGC SensorThings)

Returns Canadian climate monitoring stations with location, elevation, and data availability. Filter by province or proximity.

https://api.weather.gc.ca/collections/climate-stations/items?f=json&limit=10&province=ON

Hover any highlighted part to learn what it does

curl -X GET "https://api.weather.gc.ca/collections/climate-stations/items?f=json&limit=10&province=ON"
import requests
params = {
    "f": "json",
    "limit": "10",
    "province": "ON"
}
response = requests.get(
    "https://api.weather.gc.ca/collections/climate-stations/items",
    params=params,
)
print(response.json())
const url = new URL('https://api.weather.gc.ca/collections/climate-stations/items');
url.searchParams.set('f', 'json');
url.searchParams.set('limit', '10');
url.searchParams.set('province', 'ON');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.weather.gc.ca/collections/climate-stations/items")
	q := baseURL.Query()
	q.Set("f", "json")
	q.Set("limit", "10")
	q.Set("province", "ON")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.weather.gc.ca/collections/climate-stations/items")
uri.query = URI.encode_www_form({
  "f" => "json",
  "limit" => "10",
  "province" => "ON"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.weather.gc.ca/collections/climate-stations/items?" . http_build_query([
    "f" => "json",
    "limit" => "10",
    "province" => "ON"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Get weather alerts

Returns active weather alerts and warnings across Canada. Includes alert type, area, severity, and alert text.

https://api.weather.gc.ca/collections/alerts/items?f=json&limit=25&status=active

Hover any highlighted part to learn what it does

curl -X GET "https://api.weather.gc.ca/collections/alerts/items?f=json&limit=25&status=active"
import requests
params = {
    "f": "json",
    "limit": "25",
    "status": "active"
}
response = requests.get(
    "https://api.weather.gc.ca/collections/alerts/items",
    params=params,
)
print(response.json())
const url = new URL('https://api.weather.gc.ca/collections/alerts/items');
url.searchParams.set('f', 'json');
url.searchParams.set('limit', '25');
url.searchParams.set('status', 'active');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.weather.gc.ca/collections/alerts/items")
	q := baseURL.Query()
	q.Set("f", "json")
	q.Set("limit", "25")
	q.Set("status", "active")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.weather.gc.ca/collections/alerts/items")
uri.query = URI.encode_www_form({
  "f" => "json",
  "limit" => "25",
  "status" => "active"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.weather.gc.ca/collections/alerts/items?" . http_build_query([
    "f" => "json",
    "limit" => "25",
    "status" => "active"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. No API key needed — all ECCC MSC GeoMet data is open and free
  2. API follows OGC API — Features standard: /collections, /collections/{id}/items
  3. Key collections: climate-stations, alerts, hydrometric-stations, climate-normals
  4. GeoJSON responses by default — supports JSON, CSV, and GML formats
  5. For historical climate data: https://climate.weather.gc.ca/climate_data/bulk_data_e.html
  6. For GOES satellite imagery and radar: use WMS endpoint at geo.weather.gc.ca/geomet
  7. MSC open data documentation: eccc-msc.github.io/open-data/msc-data/readme_en/

What can you build with Environment and Climate Change Canada MSC GeoMet API?

Environment and Climate Change Canada MSC GeoMet API is a Government API. Developers commonly use government APIs for:

  • surfacing public datasets in citizen-facing apps
  • building transparency and civic engagement tools
  • accessing legislation, court records, and official data
  • powering research and journalism tools
  • creating compliance and regulatory monitoring dashboards

No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Environment and Climate Change Canada MSC GeoMet API is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗