# Air & water: API reference

8 endpoints. Base URL `https://princegeorgepulse.ca/api/v1`. Conventions (envelope, paging, fields, formats, limits) are on the [overview](https://princegeorgepulse.ca/developers/). [All endpoints](https://princegeorgepulse.ca/developers/reference/).

## GET /api/v1/air {#get-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](https://weather.gc.ca/airquality/pages/bcaq-009_e.html)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/air"
```

**Example response** (trimmed)

```json
{
  "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 {#get-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)](https://wateroffice.ec.gc.ca/search/real_time_e.html)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/rivers"
```

**Example response** (trimmed)

```json
{
  "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 {#get-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)](https://wateroffice.ec.gc.ca/search/real_time_e.html)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/rivers/stations"
```

**Example response** (trimmed)

```json
{
  "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 {#get-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](https://api.weather.gc.ca/collections/hydrometric-daily-mean)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/rivers/history"
```

**Example response** (trimmed)

```json
{
  "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 {#get-water-quality}

City drinking water: wells, quality summary and monthly production.

- Cache: 24 h
- Source: [City of Prince George, Annual Water System Report](https://data-cityofpg.opendata.arcgis.com/)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/water-quality"
```

**Example response** (trimmed)

```json
{
  "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 {#get-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](https://www.inaturalist.org/observations?lat=53.9171&lng=-122.7497&radius=25&quality_grade=research)
- Licence: Each photo under the Creative Commons licence named in `license`, credited in `attribution`; observation data CC BY-NC (iNaturalist)

Also accepts `fields` (sparse fieldset) and `format` (`json`, `md`).

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/wildlife"
```

**Example response** (trimmed)

```json
{
  "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 {#get-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](https://princegeorgepulse.ca/dashboard/)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/air/history?from=48h"
```

**Example response** (trimmed)

```json
{
  "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 {#get-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)](https://wateroffice.ec.gc.ca/search/real_time_e.html)
- 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**

```bash
curl "https://princegeorgepulse.ca/api/v1/rivers/08KE018/history?from=30d"
```

**Example response** (trimmed)

```json
{
  "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"
  }
}
```
