# Live conditions: API reference

6 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/now {#get-now}

Prince George right now: one call for weather, air, river, fire, power, roads, aurora and sun.

Each part fails independently; a missing part is null and named in `meta.unavailable`.

- Cache: 5 min (live source, cached on our server)
- Source: [PG Pulse live board (Open-Meteo, ECCC, Water Survey of Canada, BC Wildfire Service, BC Hydro, DriveBC, NOAA SWPC)](https://princegeorgepulse.ca/dashboard/)
- Licence: Mixed: see each item’s source

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "weather": {
      "temp": 12.2,
      "feelsLike": 12.2,
      "feelsKind": null,
      "condition": "Partly cloudy",
      "windKmh": 32,
      "high": 15,
      "low": 11.3,
      "alerts": [
        "Special weather"
      ],
      "observedAt": "2026-10-16T10:00:00Z"
    },
    "air": {
      "aqhi": 1.3,
      "observedAt": "2026-10-16T10:00:00Z",
      "usAqi": 30,
      "pm25": 6.4
    },
    "rivers": [
      {
        "id": "08KE018",
        "name": "Fraser River at South Fort George",
        "level": 4.297,
        "discharge": null,
        "change24h": {
          "level": 0.169,
          "discharge": null
        },
        "t": "2026-10-07T21:30:00Z"
      },
      {
        "id": "08KB001",
        "name": "Fraser River at Shelley",
        "level": 3.289,
        "discharge": 954,
        "change24h": {
          "level": 0.172,
          "discharge": 82
        },
        "t": "2026-10-16T10:05:00Z"
      },
      "… 1 more"
    ],
    "wildfire": {
      "active": 3,
      "danger": "Very Low",
      "evacuations": 0,
      "nearest": {
        "name": "Miledge Creek",
        "distanceKm": 298,
        "sizeHa": 14.4
      }
    },
    "outages": {
      "count": 0,
      "customers": 0,
      "radiusKm": 150
    },
    "roads": {
      "count": 22,
      "major": 2,
      "radiusKm": 150
    },
    "aurora": {
      "kp": 1,
      "maxNext24": 2.67
    },
    "sun": {
      "sunrise": "2026-10-16T07:41:00-07:00",
      "sunset": "2026-10-16T18:10:00-07:00",
      "daylightH": 10.5
    }
  },
  "meta": {
    "source": "PG Pulse live board (Open-Meteo, ECCC, Water Survey of Canada, BC Wildfire Service, BC Hydro, DriveBC, NOAA SWPC)",
    "sourceUrl": "https://princegeorgepulse.ca/dashboard/",
    "updatedAt": "2026-10-16T10:48:20.924Z",
    "ageSec": 0,
    "license": "Mixed: see each item’s source",
    "attribution": "Sources as listed on princegeorgepulse.ca/dashboard, via PG Pulse (princegeorgepulse.ca)",
    "unavailable": [],
    "staleParts": []
  },
  "links": {
    "self": "/api/v1/now",
    "next": null,
    "docs": "/developers/reference/live-conditions/#get-now"
  }
}
```

## GET /api/v1/home {#get-home}

The home page board: Prince George right now in one plain-language sentence, with the figures behind it.

Weather (now, next 24 hours, 7 days), air, river gauges, wildfire, power outages, nearby road events, aurora, sun and today’s climate records, as the home page shows them. Each part is null when its module is off or its source is unavailable. `sentence` is the same summary the home page prints. Raw sources: `/now` and the individual live endpoints.

- Cache: 5 min (live source, cached on our server)
- Source: [PG Pulse home board (Open-Meteo, ECCC, Water Survey of Canada, wildfire service, utility, roads, NOAA SWPC)](https://princegeorgepulse.ca/)
- Licence: Mixed: see each item’s source

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "at": "2026-10-16T10:48:20.935Z",
    "localDate": "2026-10-16",
    "localTime": "03:48",
    "weekday": "Friday",
    "sentence": "A partly cloudy night at 12°, heading for 15°. Environment Canada has a special weather in effect and the Fraser above the Nechako is flowing at 954 m³/s and falling (above normal for the date).",
    "sentenceParts": [
      {
        "text": "A partly cloudy night at "
      },
      {
        "text": "12°",
        "href": "/dashboard/weather/"
      },
      "… 10 more"
    ],
    "weather": {
      "temp": 12.2,
      "feelsLike": 12.2,
      "feelsKind": null,
      "humidity": 45,
      "dewpoint": 0.7,
      "code": 3,
      "isDay": false,
      "condition": "Partly cloudy",
      "icon": "CloudMoon",
      "windKmh": 32,
      "windDir": 190,
      "gustKmh": 48,
      "…": "22 more keys"
    },
    "air": {
      "now": {
        "value": 1.3,
        "kind": "observed",
        "observedAt": "2026-10-16T10:00:00Z",
        "ageH": 0.8058152777777777
      },
      "aqhi": 1.3,
      "risk": {
        "label": "Low risk",
        "level": 1
      },
      "history": [
        1,
        1.03,
        "… 46 more"
      ],
      "forecast": [
        2,
        2,
        "… 22 more"
      ],
      "observedAt": "2026-10-16T10:00:00Z",
      "forecastMax": 2
    },
    "river": {
      "name": "Fraser",
      "label": "Fraser (in town)",
      "level": {
        "id": "08KE018",
        "name": "Fraser (in town)",
        "value": 4.297,
        "change24h": 0.169,
        "direction": "rising",
        "t": "2026-10-07T21:30:00Z",
        "stats": [
          3.367,
          4.179,
          "… 3 more"
        ],
        "record": {
          "date": "1972-06-15",
          "value": 10.354
        },
        "spark": [
          4.275,
          4.193,
          "… 19 more"
        ],
        "pct": "normal"
      },
      "flows": [
        {
          "id": "08KB001",
          "name": "Fraser at Shelley",
          "value": 954,
          "change24h": 82,
          "direction": "falling",
          "t": "2026-10-16T10:05:00Z",
          "stats": [
            208,
            453.5,
            "… 3 more"
          ],
          "record": "{…}",
          "spark": [
            429.3,
            394,
            "… 29 more"
          ],
          "pct": "above normal",
          "label": "Fraser above the Nechako"
        },
        {
          "id": "08JC002",
          "name": "Nechako",
          "value": 130,
          "change24h": 0,
          "direction": "steady",
          "t": "2026-10-16T09:40:00Z",
          "stats": [
            85.6,
            127,
            "… 3 more"
          ],
          "record": "{…}",
          "spark": [
            165,
            163,
            "… 29 more"
          ],
          "pct": "normal",
          "label": "Nechako"
        }
      ],
      "fraserLevel": {
        "id": "08KE018",
        "name": "Fraser (in town)",
        "value": 4.297,
        "change24h": 0.169,
        "direction": "rising",
        "t": "2026-10-07T21:30:00Z",
        "stats": [
          3.367,
          4.179,
          "… 3 more"
        ],
        "record": {
          "date": "1972-06-15",
          "value": 10.354
        },
        "spark": [
          4.275,
          4.193,
          "… 19 more"
        ],
        "pct": "normal"
      }
    },
    "fire": {
      "active": [
        {
          "id": "G31209",
          "name": "Miledge Creek",
          "status": "Under Control",
          "cause": "Lightning",
          "sizeHa": 14.4,
          "discovered": "2026-07-25T22:13:56.000Z",
          "out": null,
          "lat": 52.2871,
          "lng": -119.2007,
          "location": "Miledge Creek",
          "url": "https://wildfiresituation.nrs.gov.bc.ca/incidents?fireYear=2026&incidentNumber=G31209",
          "ofNote": false,
          "…": "1 more keys"
        },
        {
          "id": "G92299",
          "name": "Creham Creek Muskwa Junction",
          "status": "Being Held",
          "cause": "Person",
          "sizeHa": 42,
          "discovered": "2026-09-29T23:27:23.000Z",
          "out": null,
          "lat": 57.8834,
          "lng": -123.6461,
          "location": "Creham Creek Muskwa Junction",
          "url": "https://wildfiresituation.nrs.gov.bc.ca/incidents?fireYear=2026&incidentNumber=G92299",
          "ofNote": false,
          "…": "1 more keys"
        },
        "… 1 more"
      ],
      "season": {
        "year": 2026,
        "total": 163,
        "out": 160,
        "active": 3,
        "totalHa": 931,
        "byCause": {
          "Person": 72,
          "Lightning": 91
        },
        "byStatus": {
          "Out": 160,
          "Being Held": 2,
          "Under Control": 1
        },
        "byMonth": {
          "2026-05": 23,
          "2026-04": 18,
          "2026-07": 59,
          "2026-06": 25,
          "2026-03": 2,
          "2025-10": 1,
          "2026-09": 13,
          "2026-08": 20,
          "2025-05": 1,
          "2026-10": 1
        },
        "largest": {
          "id": "G70322",
          "name": "Windy Creek",
          "status": "Out",
          "cause": "Person",
          "sizeHa": 206,
          "discovered": "2026-04-26T15:00:14.000Z",
          "out": "2026-06-03T21:10:07.000Z",
          "lat": 55.9698,
          "lng": -121.4783,
          "location": "Windy Creek",
          "url": "https://wildfiresituation.nrs.gov.bc.ca/incidents?fireYear=2026&incidentNumber=G70322",
          "ofNote": false,
          "…": "1 more keys"
        }
      },
      "danger": "Very Low",
      "evacuations": [],
      "bans": []
    },
    "outages": {
      "nearby": [],
      "customers": 0,
      "radiusKm": 150
    },
    "roads": {
      "total": 22,
      "near": [
        {
          "id": "drivebc.ca/RIDE-103423",
          "headline": "CONSTRUCTION",
          "type": "CONSTRUCTION",
          "subtypes": [
            "PLANNED_EVENT"
          ],
          "severity": "MINOR",
          "description": "Road maintenance from 5th Avenue, In Prince George and At 5th Avenue and Victoria Street to 3rd Avenue, At 3rd Avenue and Victoria Street. Starting Sat Oct 24 until Sat Oct 24. From 7:00 AM to 5:00 PM PDT, Saturday. R…",
          "summary": "Road maintenance from 5th Avenue, In Prince George and At 5th Avenue and Victoria Street to 3rd Avenue, At 3rd Avenue and Victoria Street",
          "roads": [],
          "updated": "2026-10-13T07:46:05-07:00",
          "lat": 53.91711,
          "lng": -122.74972,
          "distanceKm": 0,
          "…": "1 more keys"
        },
        {
          "id": "drivebc.ca/RIDE-103424",
          "headline": "CONSTRUCTION",
          "type": "CONSTRUCTION",
          "subtypes": [
            "PLANNED_EVENT"
          ],
          "severity": "MINOR",
          "description": "Geotechnical investigation from Highway 16, In Prince George and At 2nd Avenue to At Brunswick Street. Starting Tue Oct 13 until Fri Oct 16. From 9:00 AM to 5:00 PM PDT, Tuesday to Friday. Centre lane closed.",
          "summary": "Geotechnical investigation from Highway 16, In Prince George and At 2nd Avenue to At Brunswick Street",
          "roads": [
            "Highway 16"
          ],
          "updated": "2026-10-13T07:01:07-07:00",
          "lat": 53.91977,
          "lng": -122.74718,
          "distanceKm": 0,
          "…": "1 more keys"
        },
        "… 1 more"
      ],
      "nearCount": 3
    },
    "…": "4 more keys"
  },
  "meta": {
    "source": "PG Pulse home board (Open-Meteo, ECCC, Water Survey of Canada, wildfire service, utility, roads, NOAA SWPC)",
    "sourceUrl": "https://princegeorgepulse.ca/",
    "updatedAt": "2026-10-16T10:48:20.959Z",
    "ageSec": 0,
    "license": "Mixed: see each item’s source",
    "attribution": "Sources as listed on the live dashboard, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/home",
    "next": null,
    "docs": "/developers/reference/live-conditions/#get-home"
  }
}
```

## GET /api/v1/happening {#get-happening}

Everything happening in Prince George right now, in one list.

Weather and air quality alerts, evacuation orders and alerts, nearby wildfires and fire bans, highway events (DriveBC), City street closures, power outages (BC Hydro), transit alerts, police news releases and emergency department interruptions, merged and refreshed every 5 minutes. Sorted warnings first, then advisories, then notices, newest first. `at` is the time the item is listed under (issued by the source, else first seen); `firstSeen` is when this site first saw it. `meta.sources` gives each source’s freshness: a source that is unavailable is not the same as nothing happening.

- Cache: 2 min (live source, cached on our server)
- Source: [PG Pulse, compiled from Environment and Climate Change Canada, BC Wildfire Service, Emergency Management and Climate Readiness, DriveBC, BC Hydro, BC Transit, the City and police news releases](https://princegeorgepulse.ca/now/)
- Licence: Mixed: see each item’s source: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc); © BC Hydro. Public outage information, not openly licensed: shown with credit and a link to BC Hydro; check BC Hydro for current status; BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/); Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf); police releases as headline, short summary and link
- Paginated: `limit` (default 100, max 300) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `kind` | query | string | One or more of evacuation, weather, air, wildfire, fire-ban, health, police, road, closure, power, transit (comma-separated). Example: `closure,power`. |
| `level` | query | string | `warning`, `advisory` or `info`. One of: `warning`, `advisory`, `info`. |

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "eccc-statement-2026-10-15t23-35-15-789z-special-weather",
      "kind": "weather",
      "level": "advisory",
      "title": "Special weather: Prince George",
      "detail": "Fall Storm Bringing Mixed Weather Conditions this Saturday.",
      "area": "Prince George",
      "distanceKm": 0,
      "url": "https://weather.gc.ca/warnings/report_e.html?bc14",
      "source": "Environment and Climate Change Canada",
      "issued": "2026-10-15T23:35:15.789Z",
      "firstSeen": "2026-10-15T23:40:08.715Z",
      "lastSeen": "2026-10-16T10:45:15.367Z",
      "…": "3 more keys"
    },
    {
      "id": "closure-0ccb68c0-a97f-428d-99ee-d636f8605d65",
      "kind": "closure",
      "level": "advisory",
      "title": "Quebec St., between 5th Ave. and 7th Ave.: road closed, emergency and critical services only",
      "detail": "Construction. Road closed. Until Oct 16, 5 p.m.",
      "area": "Prince George",
      "distanceKm": null,
      "url": "/road-closures/",
      "source": "City of Prince George, traffic disruptions map",
      "issued": "2026-10-13T16:00:00.000Z",
      "firstSeen": "2026-10-13T16:00:03.095Z",
      "lastSeen": "2026-10-16T10:45:15.367Z",
      "…": "3 more keys"
    },
    "… 19 more"
  ],
  "meta": {
    "source": "PG Pulse, compiled from Environment and Climate Change Canada, BC Wildfire Service, Emergency Management and Climate Readiness, DriveBC, BC Hydro, BC Transit, the City and police news releases",
    "sourceUrl": "https://princegeorgepulse.ca/now/",
    "updatedAt": "2026-10-16T10:45:15.368Z",
    "ageSec": 186,
    "license": "Mixed: see each item’s source: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Open Government Licence – British Columbia (https://www2.gov…",
    "attribution": "PG Pulse, compiled from Environment and Climate Change Canada, BC Wildfire Service, Emergency Management and Climate Readiness, DriveBC, BC Hydro, BC Transit, the City and police news releases, via PG Pulse (princegeo…",
    "counts": [
      {
        "kind": "weather",
        "n": 1
      },
      {
        "kind": "police",
        "n": 2
      },
      "… 2 more"
    ],
    "sources": [
      {
        "id": "weather",
        "label": "Weather and air quality alerts (ECCC)",
        "ok": true,
        "stale": false,
        "fetchedAt": "2026-10-16T10:43:26.141Z",
        "count": 1,
        "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750"
      },
      {
        "id": "air",
        "label": "Air quality health index (ECCC)",
        "ok": true,
        "stale": false,
        "fetchedAt": "2026-10-16T10:37:26.347Z",
        "count": 0,
        "sourceUrl": "https://weather.gc.ca/airquality/pages/bcaq-009_e.html"
      },
      "… 7 more"
    ],
    "total": 21,
    "count": 21,
    "limit": 100,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/happening",
    "next": null,
    "docs": "/developers/reference/live-conditions/#get-happening"
  }
}
```

## GET /api/v1/happening/ended {#get-happening-ended}

Alerts, closures and outages that ended recently.

Items the sources stopped listing within the last `hours` (default 24, up to 720), newest first, with `firstSeen` and `endedAt`. Police releases are not included (they do not end).

- Cache: 5 min
- Source: [PG Pulse, compiled from Environment and Climate Change Canada, BC Wildfire Service, Emergency Management and Climate Readiness, DriveBC, BC Hydro, BC Transit, the City and police news releases](https://princegeorgepulse.ca/now/)
- Licence: Mixed: see each item’s source: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc); © BC Hydro. Public outage information, not openly licensed: shown with credit and a link to BC Hydro; check BC Hydro for current status; BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/); Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf); police releases as headline, short summary and link
- Paginated: `limit` (default 100, max 300) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `kind` | query | string | One or more of evacuation, weather, air, wildfire, fire-ban, health, police, road, closure, power, transit (comma-separated). Example: `closure,power`. |
| `level` | query | string | `warning`, `advisory` or `info`. One of: `warning`, `advisory`, `info`. |
| `hours` | query | integer | Look-back window, 1 to 720 hours. |

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "closure-7de4bee0-1fd2-4f28-8ec5-5f2c4b48c895",
      "kind": "closure",
      "level": "info",
      "title": "Grant Rd intersection to trailer 146: single-lane alternating traffic",
      "detail": "Construction. Water service repair. Alternating one way traffic. Full Access. Until Oct 15, 6 p.m.",
      "area": "Prince George",
      "distanceKm": null,
      "url": "/road-closures/",
      "source": "City of Prince George, traffic disruptions map",
      "issued": "2026-10-14T14:00:00.000Z",
      "firstSeen": "2026-10-15T14:10:05.132Z",
      "lastSeen": "2026-10-16T00:55:11.075Z",
      "…": "3 more keys"
    },
    {
      "id": "closure-40e654bd-f11d-4aa0-b423-cfc2ed46e714",
      "kind": "closure",
      "level": "info",
      "title": "Jensen Rd., between Jutland Rd. and HWY 16 W: single-lane alternating traffic, emergency and critical services only",
      "detail": "Construction. Traffic disruptions. Until Oct 15, 6 p.m.",
      "area": "Prince George",
      "distanceKm": null,
      "url": "/road-closures/",
      "source": "City of Prince George, traffic disruptions map",
      "issued": "2026-10-15T14:00:00.000Z",
      "firstSeen": "2026-10-15T14:00:05.092Z",
      "lastSeen": "2026-10-16T00:55:11.075Z",
      "…": "3 more keys"
    },
    "… 10 more"
  ],
  "meta": {
    "source": "PG Pulse, compiled from Environment and Climate Change Canada, BC Wildfire Service, Emergency Management and Climate Readiness, DriveBC, BC Hydro, BC Transit, the City and police news releases",
    "sourceUrl": "https://princegeorgepulse.ca/now/",
    "updatedAt": "2026-10-16T10:45:15.368Z",
    "ageSec": 186,
    "license": "Mixed: see each item’s source: Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Open Government Licence – British Columbia (https://www2.gov…",
    "attribution": "PG Pulse, compiled from Environment and Climate Change Canada, BC Wildfire Service, Emergency Management and Climate Readiness, DriveBC, BC Hydro, BC Transit, the City and police news releases, via PG Pulse (princegeo…",
    "hours": 24,
    "total": 12,
    "count": 12,
    "limit": 100,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/happening/ended",
    "next": null,
    "docs": "/developers/reference/live-conditions/#get-happening-ended"
  }
}
```

## GET /api/v1/smell {#get-smell}

Pulp mill smell forecast for Prince George: downwind neighbourhoods and reduced-sulphur readings.

The current hour and the next 24 hours of forecast wind with the neighbourhoods downwind of the odour sources, the neighbourhoods affected at some point in the next day, and the latest total reduced sulphur (TRS) and hydrogen sulphide (H2S) readings (ppb) at the provincial air stations, with each reading’s percentile among the station’s last 30 days (null until enough history). An estimate: odour is assumed to travel with the wind from each source; a neighbourhood is downwind when the bearing from a source to its centre is within 30° of the wind’s path and it is within 12 km (likely in the nearer half, possible beyond). Below 5 km/h odour is treated as lingering within 3 km of the sources. Terrain, inversions and how much each mill emits are not modelled.

- Cache: 10 min
- Source: [BC Ministry of Environment and Parks air monitoring stations (Prince George); Open-Meteo wind forecast; source locations from OpenStreetMap; estimate by PG Pulse](https://www2.gov.bc.ca/gov/content/environment/air-land-water/air/air-quality/current-air-quality-data)
- Licence: Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); ODbL 1.0, © OpenStreetMap contributors (https://www.openstreetmap.org/copyright)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "now": {
      "line": "Wind from the south at 10 km/h carries odour to the north: most likely in Central Hart",
      "hour": {
        "t": "2026-10-16T10:00:00.000Z",
        "wdir": 166,
        "wspdKmh": 10.2,
        "calm": false,
        "from": "south",
        "toward": "north",
        "affected": [
          "{…}",
          "{…}",
          "… 1 more"
        ]
      }
    },
    "next24": [
      {
        "t": "2026-10-16T10:00:00.000Z",
        "wdir": 166,
        "wspdKmh": 10.2,
        "calm": false,
        "from": "south",
        "toward": "north",
        "affected": [
          "{…}",
          "{…}",
          "… 1 more"
        ]
      },
      {
        "t": "2026-10-16T11:00:00.000Z",
        "wdir": 169,
        "wspdKmh": 8.6,
        "calm": false,
        "from": "south",
        "toward": "north",
        "affected": [
          "{…}",
          "{…}",
          "… 1 more"
        ]
      },
      "… 22 more"
    ],
    "areas": [
      {
        "slug": "old-summit-lake",
        "name": "Old Summit Lake",
        "first": "2026-10-16T10:00:00.000Z",
        "last": "2026-10-17T05:00:00.000Z",
        "hours": 18,
        "likely": 13
      },
      {
        "slug": "central-hart",
        "name": "Central Hart",
        "first": "2026-10-16T10:00:00.000Z",
        "last": "2026-10-17T07:00:00.000Z",
        "hours": 8,
        "likely": 8
      },
      "… 26 more"
    ],
    "readings": [
      {
        "station": "E293670",
        "name": "Exploration Place",
        "t": "2026-10-16T10:00:00.000Z",
        "trs": 0.2,
        "h2s": null,
        "wdir": 181.2,
        "wspdKmh": 26.3,
        "url": "https://envistaweb.env.gov.bc.ca/StationDetails.aspx?ST_ID=528",
        "lat": 53.905139,
        "lng": -122.734049,
        "trsPct": 0.49226006191950467,
        "h2sPct": null
      },
      {
        "station": "E224014",
        "name": "Glenview School",
        "t": "2026-10-16T09:00:00.000Z",
        "trs": null,
        "h2s": null,
        "wdir": 174,
        "wspdKmh": 21.2,
        "url": "https://envistaweb.env.gov.bc.ca/StationDetails.aspx?ST_ID=138",
        "lat": 53.996,
        "lng": -122.776,
        "trsPct": null,
        "h2sPct": null
      },
      "… 4 more"
    ],
    "sources": [
      {
        "id": "northwood",
        "name": "Northwood pulp mill",
        "lat": 53.979,
        "lng": -122.69427
      },
      {
        "id": "pg-pulp",
        "name": "Prince George Pulp and Paper mill",
        "lat": 53.9219,
        "lng": -122.68443
      },
      "… 1 more"
    ],
    "method": "An estimate: odour is assumed to travel with the wind from each source; a neighbourhood is downwind when the bearing from a source to its centre is within 30° of the wind’s path and it is within 12 km (likely in the n…"
  },
  "meta": {
    "source": "BC Ministry of Environment and Parks air monitoring stations (Prince George); Open-Meteo wind forecast; source locations from OpenStreetMap; estimate by PG Pulse",
    "sourceUrl": "https://www2.gov.bc.ca/gov/content/environment/air-land-water/air/air-quality/current-air-quality-data",
    "updatedAt": "2026-10-16T10:12:13.672Z",
    "ageSec": 2167,
    "license": "Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); …",
    "attribution": "BC Ministry of Environment and Parks air monitoring stations (Prince George); Open-Meteo wind forecast; source locations from OpenStreetMap; estimate by PG Pulse, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/smell",
    "next": null,
    "docs": "/developers/reference/live-conditions/#get-smell"
  }
}
```

## GET /api/v1/smell/readings {#get-smell-readings}

Hourly reduced-sulphur (TRS, H2S) and wind readings at the air stations.

- Cache: 10 min
- Source: [BC Ministry of Environment and Parks air monitoring stations (Prince George); Open-Meteo wind forecast; source locations from OpenStreetMap; estimate by PG Pulse](https://www2.gov.bc.ca/gov/content/environment/air-land-water/air/air-quality/current-air-quality-data)
- Licence: Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); ODbL 1.0, © OpenStreetMap contributors (https://www.openstreetmap.org/copyright)
- Paginated: `limit` (default 200, max 2000) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `station` | query | string | Station id (EMS id) from /smell. |
| `hours` | query | integer | Look-back window, 1 to 2160 hours. |

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "station": "E293670",
      "name": "Exploration Place",
      "t": "2026-10-13T11:00:00.000Z",
      "trs": 0.6,
      "h2s": null,
      "wdir": 184.2,
      "wspdKmh": 1.8
    },
    {
      "station": "E224014",
      "name": "Glenview School",
      "t": "2026-10-13T11:00:00.000Z",
      "trs": null,
      "h2s": null,
      "wdir": 305.5,
      "wspdKmh": 0.9
    },
    "… 198 more"
  ],
  "meta": {
    "source": "BC Ministry of Environment and Parks air monitoring stations (Prince George); Open-Meteo wind forecast; source locations from OpenStreetMap; estimate by PG Pulse",
    "sourceUrl": "https://www2.gov.bc.ca/gov/content/environment/air-land-water/air/air-quality/current-air-quality-data",
    "updatedAt": "2026-10-16T10:12:13.672Z",
    "ageSec": 2167,
    "license": "Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc); CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); …",
    "attribution": "BC Ministry of Environment and Parks air monitoring stations (Prince George); Open-Meteo wind forecast; source locations from OpenStreetMap; estimate by PG Pulse, via PG Pulse (princegeorgepulse.ca)",
    "hours": 72,
    "total": 414,
    "count": 200,
    "limit": 200,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/smell/readings",
    "next": "/api/v1/smell/readings?offset=200",
    "docs": "/developers/reference/live-conditions/#get-smell-readings"
  }
}
```
