Local knowledge for your AI tools
Connect Cursor, VS Code, Codex or Claude Code. Free MCP access, no key needed.
Air & water: API reference
8 endpoints. Base URL https://princegeorgepulse.ca/api/v1. Conventions (envelope, paging, fields, formats, limits) are on the overview. All endpoints.
GET /api/v1/air #
Air quality: AQHI now/history/forecast, PM2.5 model, monitoring stations.
Station readings in µg/m³ (ppb for gases). stations[].pm25Avg24h is the 24-hour PM2.5 average; pm25_24 is the same value under its original name, kept for existing clients.
- Cache: 30 min (live source, cached on our server)
- Source: Environment and Climate Change Canada AQHI (Prince George); Open-Meteo air quality model; BC Ministry of Environment air monitoring stations
- Licence: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc)
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/air"Example response (trimmed)
{
"data": {
"aqhi": {
"value": 1.3,
"observedAt": "2026-10-16T10:00:00Z",
"history": [
{
"t": "2026-10-14T11:00:00Z",
"v": 1
},
{
"t": "2026-10-14T12:00:00Z",
"v": 1.03
},
"… 46 more"
],
"forecast": [
{
"t": "2026-10-16T10:00:00Z",
"v": 2
},
{
"t": "2026-10-16T11:00:00Z",
"v": 2
},
"… 25 more"
]
},
"model": {
"usAqi": 30,
"pm25": 6.4,
"pm10": 6.7,
"o3": 69,
"no2": 2.1,
"time": "2026-10-16T03:00:00-07:00"
},
"pm25": {
"time": [
"2026-09-15T00:00:00-07:00",
"2026-09-15T01:00:00-07:00",
"… 838 more"
],
"value": [
12.2,
11.2,
"… 838 more"
],
"forecastFrom": "2026-10-16T03:00:00-07:00"
},
"daily": [
{
"date": "2026-09-15",
"pm25": 6.3,
"maxAqi": 51
},
{
"date": "2026-09-16",
"pm25": 1.8,
"maxAqi": 38
},
"… 33 more"
],
"stations": [
{
"name": "Exploration Place",
"lat": 53.905139,
"lng": -122.734049,
"pm25": null,
"pm25_24": null,
"pm10": null,
"o3": null,
"no2": null,
"so2": null,
"trs": 0.2,
"windKmh": 26.3,
"updated": "2026-10-16T10:00:00.000Z",
"…": "2 more keys"
},
{
"name": "Glenview School",
"lat": 53.996,
"lng": -122.776,
"pm25": null,
"pm25_24": null,
"pm10": null,
"o3": null,
"no2": null,
"so2": null,
"trs": null,
"windKmh": 22.8,
"updated": "2026-10-16T10:00:00.000Z",
"…": "2 more keys"
},
"… 4 more"
]
},
"meta": {
"source": "Environment and Climate Change Canada AQHI (Prince George); Open-Meteo air quality model; BC Ministry of Environment air monitoring stations",
"sourceUrl": "https://weather.gc.ca/airquality/pages/bcaq-009_e.html",
"updatedAt": "2026-10-16T10:37:26.347Z",
"ageSec": 655,
"license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Open Government Licence – Br…",
"attribution": "Environment and Climate Change Canada, Open-Meteo.com and BC Ministry of Environment, via PG Pulse (princegeorgepulse.ca)"
},
"links": {
"self": "/api/v1/air",
"next": null,
"docs": "/developers/reference/air-and-water/#get-air"
}
}GET /api/v1/rivers #
Fraser and Nechako river gauges: latest level/flow, 24h change, hourly series.
- Cache: 30 min (live source, cached on our server)
- Source: Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)
- Licence: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)
| Parameter | In | Type | Description |
|---|---|---|---|
hourly | query | boolean | Include the hourly series (default true). |
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/rivers"Example response (trimmed)
{
"data": [
{
"id": "08KE018",
"name": "Fraser River at South Fort George",
"short": "Fraser (in town)",
"river": "Fraser",
"lat": 53.90078,
"lng": -122.73494,
"primary": "level",
"latest": {
"t": "2026-10-07T21:30:00Z",
"level": 4.297,
"discharge": null
},
"change24h": {
"level": 0.169,
"discharge": null
},
"direction": {
"level": "rising",
"discharge": null
},
"hourly": [
{
"t": "2026-09-17T00:00:00Z",
"level": 4.275,
"discharge": null
},
{
"t": "2026-09-17T01:00:00Z",
"level": 4.271,
"discharge": null
},
"… 500 more"
]
},
{
"id": "08KB001",
"name": "Fraser River at Shelley",
"short": "Fraser at Shelley",
"river": "Fraser",
"lat": 54.00367,
"lng": -122.62475,
"primary": "discharge",
"latest": {
"t": "2026-10-16T10:05:00Z",
"level": 3.289,
"discharge": 954
},
"change24h": {
"level": 0.172,
"discharge": 82
},
"direction": {
"level": "falling",
"discharge": "falling"
},
"hourly": [
{
"t": "2026-09-16T08:00:00Z",
"level": 2.005,
"discharge": 429.3
},
{
"t": "2026-09-16T09:00:00Z",
"level": 1.999,
"discharge": 427.3
},
"… 721 more"
]
},
"… 2 more"
],
"meta": {
"source": "Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)",
"sourceUrl": "https://wateroffice.ec.gc.ca/search/real_time_e.html",
"updatedAt": "2026-10-16T10:37:26.486Z",
"ageSec": 655,
"license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
"attribution": "Water Survey of Canada (provisional data), via PG Pulse (princegeorgepulse.ca)"
},
"links": {
"self": "/api/v1/rivers",
"next": null,
"docs": "/developers/reference/air-and-water/#get-rivers"
}
}GET /api/v1/rivers/stations #
Gauge stations used by PG Pulse.
- Cache: 24 h
- Source: Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)
- Licence: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/rivers/stations"Example response (trimmed)
{
"data": [
{
"id": "08KE018",
"name": "Fraser River at South Fort George",
"short": "Fraser (in town)",
"river": "Fraser",
"lat": 53.90078,
"lng": -122.73494,
"primary": "level"
},
{
"id": "08KB001",
"name": "Fraser River at Shelley",
"short": "Fraser at Shelley",
"river": "Fraser",
"lat": 54.00367,
"lng": -122.62475,
"primary": "discharge"
},
"… 2 more"
],
"meta": {
"source": "Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)",
"sourceUrl": "https://wateroffice.ec.gc.ca/search/real_time_e.html",
"updatedAt": null,
"license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
"attribution": "Water Survey of Canada (provisional data), via PG Pulse (princegeorgepulse.ca)"
},
"links": {
"self": "/api/v1/rivers/stations",
"next": null,
"docs": "/developers/reference/air-and-water/#get-rivers-stations"
}
}GET /api/v1/rivers/history #
Historical daily statistics and records for each gauge.
- Cache: 24 h
- Source: Environment and Climate Change Canada, Water Survey of Canada, HYDAT daily means
- Licence: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/rivers/history"Example response (trimmed)
{
"data": {
"source": "Environment and Climate Change Canada, Water Survey of Canada, HYDAT daily means (hydrometric-daily-mean)",
"sourceUrl": "https://api.weather.gc.ca/collections/hydrometric-daily-mean",
"pageUrl": "https://wateroffice.ec.gc.ca/",
"asOf": "2025-11-06",
"notes": "dailyStats has 366 entries (day of year, leap-year indexed) of [min, 25th percentile, median, 75th percentile, max] of approved daily means across all years of record. Approved data lag real-time by up to a year.",
"stations": {
"08KB001": {
"name": "Fraser River at Shelley",
"measure": "discharge",
"unit": "m³/s",
"description": "Fraser upstream of the Nechako confluence, about 12 km northeast of downtown",
"firstYear": 1950,
"lastDate": "2025-10-01",
"yearsOfRecord": 76,
"recordHigh": {
"date": "1972-06-14",
"value": 4980
},
"recordLow": {
"date": "2024-01-13",
"value": 59.6
},
"dailyStats": [
[
114,
168.5,
"… 3 more"
],
[
113,
165.5,
"… 3 more"
],
"… 364 more"
],
"latestYear": {
"year": 2025,
"series": [
"{…}",
"{…}",
"… 266 more"
]
},
"annualPeaks": [
"{…}",
"{…}",
"… 72 more"
]
},
"08JC002": {
"name": "Nechako River at Isle Pierre",
"measure": "discharge",
"unit": "m³/s",
"description": "Nechako about 40 km west of the city, above the confluence",
"firstYear": 1950,
"lastDate": "2024-12-31",
"yearsOfRecord": 75,
"recordHigh": {
"date": "2007-06-30",
"value": 1170
},
"recordLow": {
"date": "1953-04-15",
"value": 40.8
},
"dailyStats": [
[
50.4,
97.6,
"… 3 more"
],
[
51.5,
98.125,
"… 3 more"
],
"… 364 more"
],
"latestYear": {
"year": 2024,
"series": [
"{…}",
"{…}",
"… 364 more"
]
},
"annualPeaks": [
"{…}",
"{…}",
"… 72 more"
]
},
"08KE018": {
"name": "Fraser River at South Fort George",
"measure": "level",
"unit": "m",
"description": "Fraser in the city, just below the Nechako confluence (water level only)",
"firstYear": 1968,
"lastDate": "2025-11-06",
"yearsOfRecord": 58,
"recordHigh": {
"date": "1972-06-15",
"value": 10.354
},
"recordLow": {
"date": "1980-12-03",
"value": 2.769
},
"dailyStats": [
[
3.241,
3.483,
"… 3 more"
],
[
3.217,
3.536,
"… 3 more"
],
"… 364 more"
],
"latestYear": {
"year": 2025,
"series": [
"{…}",
"{…}",
"… 308 more"
]
},
"annualPeaks": [
"{…}",
"{…}",
"… 55 more"
]
}
}
},
"meta": {
"source": "Environment and Climate Change Canada, Water Survey of Canada, HYDAT daily means (hydrometric-daily-mean)",
"sourceUrl": "https://api.weather.gc.ca/collections/hydrometric-daily-mean",
"updatedAt": "2026-10-01T04:27:44.873Z",
"ageSec": 1318837,
"license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
"attribution": "Water Survey of Canada (HYDAT), via PG Pulse (princegeorgepulse.ca)",
"dataset": "river-history",
"asOf": "2025-11-06"
},
"links": {
"self": "/api/v1/rivers/history",
"next": null,
"docs": "/developers/reference/air-and-water/#get-rivers-history"
}
}GET /api/v1/water-quality #
City drinking water: wells, quality summary and monthly production.
- Cache: 24 h
- Source: City of Prince George, Annual Water System Report
- Licence: Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/water-quality"Example response (trimmed)
{
"data": {
"source": "City of Prince George, 2024 Annual Water System Report (released July 15, 2025)",
"sourceUrl": "https://www.princegeorge.ca/city-hall/reports-publications/2024-city-prince-george-annual-water-system-report",
"pageUrl": "https://www.princegeorge.ca/water",
"rawWaterReportsUrl": "https://www.princegeorge.ca/water",
"asOf": "2024",
"summary": [
"Prince George's drinking water is groundwater drawn from wells along the Nechako and Fraser rivers. The gravel layer between the rivers and the well intakes acts as natural filtration; the City has no additional filtr…",
"Water is chlorinated to Northern Health guidelines, with a minimum free chlorine residual of 0.2 ppm maintained throughout the distribution system.",
"… 2 more"
],
"facts": {
"annualProductionM3": 10734683,
"samplesPerMonthRequired": 74,
"samplesPerMonthAverage": 120,
"boilWaterAdvisories": 0,
"waterMainBreaks": 5,
"serviceConnectionsRepaired": 143,
"hydrantInspections": 620,
"consumerWaterMeters": 4796,
"minimumFreeChlorinePpm": 0.2
},
"wells": [
{
"name": "PW605",
"source": "Groundwater (Nechako River)",
"type": "Radial collector",
"sharePct": 49
},
{
"name": "PW601",
"source": "Groundwater (Nechako River)",
"type": "Radial collector",
"sharePct": 26.4
},
"… 4 more"
],
"monthlyProductionM3": [
817951,
751040,
"… 10 more"
]
},
"meta": {
"source": "City of Prince George, 2024 Annual Water System Report (released July 15, 2025)",
"sourceUrl": "https://www.princegeorge.ca/city-hall/reports-publications/2024-city-prince-george-annual-water-system-report",
"updatedAt": "2026-10-01T04:26:58.363Z",
"ageSec": 1318883,
"license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
"attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
"dataset": "water-quality",
"asOf": "2024"
},
"links": {
"self": "/api/v1/water-quality",
"next": null,
"docs": "/developers/reference/air-and-water/#get-water-quality"
}
}GET /api/v1/wildlife #
Recent research-grade iNaturalist sightings within 25 km, with photo credits.
- Cache: 1 h (live source, cached on our server)
- Source: iNaturalist research-grade observations within 25 km of Prince George
- Licence: Each photo under the Creative Commons licence named in
license, credited inattribution; observation data CC BY-NC (iNaturalist)
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/wildlife"Example response (trimmed)
{
"data": {
"recent": [
{
"id": 408563646,
"observedOn": "2026-10-14",
"common": "Bufflehead",
"scientific": "Bucephala albeola",
"group": "Aves",
"photo": "https://inaturalist-open-data.s3.amazonaws.com/photos/751044955/small.jpg",
"attribution": "(c) peterbug, some rights reserved (CC BY-NC)",
"license": "CC-BY-NC",
"url": "https://www.inaturalist.org/observations/408563646"
},
{
"id": 408561922,
"observedOn": "2026-10-14",
"common": "Mallard",
"scientific": "Anas platyrhynchos",
"group": "Aves",
"photo": "https://inaturalist-open-data.s3.amazonaws.com/photos/751041264/small.jpg",
"attribution": "(c) peterbug, some rights reserved (CC BY-NC)",
"license": "CC-BY-NC",
"url": "https://www.inaturalist.org/observations/408561922"
},
"… 10 more"
],
"speciesLast30": 157,
"observationsLast30": 49,
"top": [
{
"common": "thimbleberry",
"scientific": "Rubus parviflorus",
"count": 9,
"url": "https://www.inaturalist.org/taxa/51646"
},
{
"common": "common yarrow",
"scientific": "Achillea millefolium",
"count": 7,
"url": "https://www.inaturalist.org/taxa/52821"
},
"… 6 more"
]
},
"meta": {
"source": "iNaturalist research-grade observations within 25 km of Prince George",
"sourceUrl": "https://www.inaturalist.org/observations?lat=53.9171&lng=-122.7497&radius=25&quality_grade=research",
"updatedAt": "2026-10-16T10:02:26.698Z",
"ageSec": 2755,
"license": "Each photo under the Creative Commons licence named in `license`, credited in `attribution`; observation data CC BY-NC (iNaturalist)",
"attribution": "iNaturalist observers, via PG Pulse (princegeorgepulse.ca)"
},
"links": {
"self": "/api/v1/wildlife",
"next": null,
"docs": "/developers/reference/air-and-water/#get-wildlife"
}
}GET /api/v1/air/history #
Recorded air quality: AQHI and PM2.5 (model and monitoring stations).
- Cache: 5 min
- Source: PG Pulse live history: readings recorded from Open-Meteo, ECCC, Water Survey of Canada, BC Hydro, BC Wildfire Service, DriveBC, NOAA SWPC and NOAA AWC on every refresh
- Licence: Mixed: see each item’s source
| Parameter | In | Type | Description |
|---|---|---|---|
series | query | string | Only some of: air.aqhi, air.pm25, air.pm25_stations. |
from | query | string | Start: ISO date/datetime, or a span back from to such as 48h, 7d or 30d (default 7d). Example: 7d. |
to | query | string | End: ISO date/datetime (default now). |
interval | query | string | raw (every recorded reading; kept 90 days), hour or day (hourly rollups, kept indefinitely), or auto (raw up to 3 days, hourly up to 120 days, then daily). One of: auto, raw, hour, day. |
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/air/history?from=48h"Example response (trimmed)
{
"data": [
{
"series": "air.aqhi",
"label": "Air Quality Health Index",
"unit": "AQHI",
"interval": "raw",
"truncated": false,
"points": [
{
"t": "2026-10-14T11:00:00.000Z",
"value": 1
},
{
"t": "2026-10-14T12:00:00.000Z",
"value": 1.03
},
"… 46 more"
]
},
{
"series": "air.pm25",
"label": "Fine particulate (PM2.5), model",
"unit": "µg/m³",
"interval": "raw",
"truncated": false,
"points": [
{
"t": "2026-10-14T11:00:00.000Z",
"value": 0.7
},
{
"t": "2026-10-14T12:00:00.000Z",
"value": 0.4
},
"… 46 more"
]
},
"… 1 more"
],
"meta": {
"source": "Environment and Climate Change Canada AQHI (Prince George); Open-Meteo air quality model; BC Ministry of Environment air monitoring stations",
"sourceUrl": "https://weather.gc.ca/airquality/pages/bcaq-009_e.html",
"updatedAt": "2026-10-16T10:00:00.000Z",
"ageSec": 2901,
"license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Open Government Licence – Br…",
"attribution": "The upstream named in each series (`meta.series.source`), via PG Pulse (princegeorgepulse.ca)",
"from": "2026-10-14T10:48:21.000Z",
"to": "2026-10-16T10:48:21.000Z",
"interval": "raw",
"series": [
{
"id": "air.aqhi",
"source": "Environment and Climate Change Canada AQHI (Prince George); Open-Meteo air quality model; BC Ministry of Environment air monitoring stations"
},
{
"id": "air.pm25",
"source": "Environment and Climate Change Canada AQHI (Prince George); Open-Meteo air quality model; BC Ministry of Environment air monitoring stations"
},
"… 1 more"
]
},
"links": {
"self": "/api/v1/air/history?from=48h",
"next": null,
"docs": "/developers/reference/air-and-water/#get-air-history"
}
}GET /api/v1/rivers/{id}/history #
Recorded water level and flow for one gauge (hourly from the real-time feed).
- Cache: 5 min
- Source: Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)
- Licence: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)
| Parameter | In | Type | Description |
|---|---|---|---|
id | path | string | Station id from /rivers/stations. Required. One of: 08KE018, 08KB001, 08JC002, 08KC001. Example: 08KE018. |
from | query | string | Start: ISO date/datetime, or a span back from to such as 48h, 7d or 30d (default 7d). Example: 7d. |
to | query | string | End: ISO date/datetime (default now). |
interval | query | string | raw (every recorded reading; kept 90 days), hour or day (hourly rollups, kept indefinitely), or auto (raw up to 3 days, hourly up to 120 days, then daily). One of: auto, raw, hour, day. |
Also accepts fields (sparse fieldset) and format (json, md).
Example request
curl "https://princegeorgepulse.ca/api/v1/rivers/08KE018/history?from=30d"Example response (trimmed)
{
"data": [
{
"series": "river.08KE018.level",
"label": "Fraser River at South Fort George: water level",
"unit": "m",
"interval": "hour",
"truncated": false,
"points": [
{
"t": "2026-09-16T10:00:00.000Z",
"value": 4.337,
"min": 4.337,
"max": 4.337,
"n": 1
},
{
"t": "2026-09-16T11:00:00.000Z",
"value": 4.332,
"min": 4.332,
"max": 4.332,
"n": 1
},
"… 514 more"
]
},
{
"series": "river.08KE018.discharge",
"label": "Fraser River at South Fort George: flow",
"unit": "m³/s",
"interval": "hour",
"truncated": false,
"points": []
}
],
"meta": {
"source": "Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)",
"sourceUrl": "https://wateroffice.ec.gc.ca/search/real_time_e.html",
"updatedAt": "2026-10-07T21:00:00.000Z",
"ageSec": 740901,
"license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
"attribution": "Water Survey of Canada (provisional data), via PG Pulse (princegeorgepulse.ca)",
"from": "2026-09-16T10:48:21.000Z",
"to": "2026-10-16T10:48:21.000Z",
"interval": "hour",
"series": [
{
"id": "river.08KE018.level",
"source": "Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)"
},
{
"id": "river.08KE018.discharge",
"source": "Environment and Climate Change Canada, Water Survey of Canada real-time hydrometric data (provisional)"
}
]
},
"links": {
"self": "/api/v1/rivers/08KE018/history?from=30d",
"next": null,
"docs": "/developers/reference/air-and-water/#get-rivers-id-history"
}
}