Skip to content
PG Pulse
PG Pulse

Try searching for

Local knowledge for your AI tools

Connect Cursor, VS Code, Codex or Claude Code. Free MCP access, no key needed.

Connect your AI assistant
View as MarkdownFree, no key needed

Weather: API reference

14 endpoints. Base URL https://princegeorgepulse.ca/api/v1. Conventions (envelope, paging, fields, formats, limits) are on the overview. All endpoints.

GET /api/v1/weather #

Full weather payload: now, official ECCC forecast, today, yesterday, model hourly and daily, normals, alerts, almanac.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather"

Example response (trimmed)

json
{
  "data": {
    "now": {
      "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,
      "…": "12 more keys"
    },
    "official": {
      "issued": "2026-10-16T01:04:00Z",
      "hourlyIssued": null,
      "periods": [
        {
          "name": "Tonight",
          "summary": "Mainly cloudy. Wind south 20 km/h. Low plus 5.",
          "short": "Mainly cloudy",
          "night": true,
          "icon": "CloudMoon",
          "high": null,
          "low": 5,
          "pop": null,
          "uv": null
        },
        {
          "name": "Friday",
          "summary": "A mix of sun and cloud. Becoming cloudy late in the afternoon with 40 percent chance of showers. Wind south 30 km/h gusting to 50. High 15. UV index 2 or low.",
          "short": "Chance of showers",
          "night": false,
          "icon": "CloudRain",
          "high": 15,
          "low": null,
          "pop": 40,
          "uv": 2
        },
        "… 10 more"
      ],
      "hourly": [
        {
          "t": "2026-10-16T11:00:00Z",
          "temp": 7,
          "condition": "Partly cloudy",
          "pop": 0,
          "windKmh": 20,
          "windDir": "S",
          "gustKmh": null,
          "uv": null,
          "isDay": false,
          "icon": "CloudMoon"
        },
        {
          "t": "2026-10-16T12:00:00Z",
          "temp": 8,
          "condition": "Partly cloudy",
          "pop": 0,
          "windKmh": 20,
          "windDir": "S",
          "gustKmh": null,
          "uv": null,
          "isDay": false,
          "icon": "CloudMoon"
        },
        "… 22 more"
      ]
    },
    "today": {
      "observedHigh": 12.9,
      "observedLow": 11.3,
      "observedPrecipMm": 0,
      "mode": "day",
      "forecastHigh": 15,
      "tonightLow": 6,
      "tomorrowHigh": 10,
      "tomorrowName": "Saturday",
      "high": 15,
      "low": 11.3
    },
    "yesterday": {
      "high": 14.2,
      "low": -3,
      "precipMm": 0,
      "precipTrace": false,
      "gustKmh": 32,
      "gustDir": "SSE"
    },
    "hourly": {
      "time": [
        "2026-10-16T03:00:00-07:00",
        "2026-10-16T04:00:00-07:00",
        "… 46 more"
      ],
      "temp": [
        7.9,
        7.8,
        "… 46 more"
      ],
      "feels": [
        4.4,
        4.5,
        "… 46 more"
      ],
      "pop": [
        0,
        0,
        "… 46 more"
      ],
      "precip": [
        0,
        0,
        "… 46 more"
      ],
      "code": [
        3,
        3,
        "… 46 more"
      ],
      "wind": [
        10.2,
        8.6,
        "… 46 more"
      ],
      "gust": [
        23,
        21.6,
        "… 46 more"
      ],
      "dir": [
        166,
        169,
        "… 46 more"
      ],
      "uv": [
        0,
        0,
        "… 46 more"
      ],
      "isDay": [
        0,
        0,
        "… 46 more"
      ]
    },
    "daily": [
      {
        "date": "2026-10-16",
        "code": 51,
        "max": 15,
        "min": 11.3,
        "precip": 0.3,
        "pop": 59,
        "snow": 0,
        "wind": 20.6,
        "gust": 43.9,
        "dir": 187,
        "uv": 2.55,
        "sunshineH": 7.2,
        "…": "3 more keys"
      },
      {
        "date": "2026-10-17",
        "code": 81,
        "max": 11.5,
        "min": 4.9,
        "precip": 9.2,
        "pop": 94,
        "snow": 0,
        "wind": 26.9,
        "gust": 56.9,
        "dir": 228,
        "uv": 2.15,
        "sunshineH": 8.6,
        "…": "3 more keys"
      },
      "… 14 more"
    ],
    "textForecast": [
      {
        "name": "Tonight",
        "summary": "Mainly cloudy. Wind south 20 km/h. Low plus 5."
      },
      {
        "name": "Friday",
        "summary": "A mix of sun and cloud. Becoming cloudy late in the afternoon with 40 percent chance of showers. Wind south 30 km/h gusting to 50. High 15. UV index 2 or low."
      },
      "… 10 more"
    ],
    "normals": {
      "high": 9,
      "low": 0
    },
    "alerts": [
      {
        "title": "Special weather",
        "type": "statement",
        "text": "Fall Storm Bringing Mixed Weather Conditions this Saturday.\n\nWhat:\n- Sudden gusty winds of 60 to 80 km/h.\n- Snow levels lowering to 1500 metres over southern B.C.\n- Snow levels lowering to 1200 metres over central B.C…",
        "issued": "2026-10-15T23:35:15.789Z",
        "expires": "2026-10-18T03:00:00.000Z"
      }
    ],
    "sun": {
      "sunrise": "2026-10-16T14:41:00Z",
      "sunset": "2026-10-17T01:12:00Z"
    },
    "almanac": {
      "date": "2026-10-16",
      "records": {
        "high": 23.9,
        "highYear": 1929,
        "low": -13.1,
        "lowYear": 1992,
        "coldestHigh": -3.9,
        "coldestHighYear": 1930,
        "warmestLow": 13.3,
        "warmestLowYear": 1929,
        "precipMm": 17.5,
        "precipYear": 2020,
        "snowCm": 6.8,
        "snowYear": 1991,
        "…": "3 more keys"
      },
      "month": {
        "index": 9,
        "period": "1991–2020",
        "station": "Prince George Airport",
        "source": "Environment and Climate Change Canada, Canadian Climate Normals 1991–2020, Prince George (climate ID 1096439)",
        "sourceUrl": "https://climate.weather.gc.ca/climate_normals/results_1991_2020_e.html?searchType=stnName&txtStationName=prince+george&searchMethod=contains&txtCentralLatMin=0&txtCentralLatSec=0&txtCentralLongMin=0&txtCentralLongSec=…",
        "values": {
          "meanMax": 9.2,
          "meanMin": -0.6,
          "meanTemp": 4.4,
          "precipMm": 66.4,
          "rainMm": 58.7,
          "snowCm": 9.8,
          "precipDays": 16.3,
          "daysPrecip1mm": 12.2,
          "rainDays": 15.1,
          "snowDays": 2.2,
          "snowDepthCm": 0,
          "rhMorning": 87.2,
          "…": "15 more keys"
        },
        "extremes": {
          "maxTemp": "{…}",
          "minTemp": "{…}",
          "humidex": "{…}",
          "windChill": "{…}",
          "gustKmh": "{…}",
          "snowDepthCm": "{…}",
          "precipMm": "{…}"
        }
      },
      "frost": {
        "lastSpringFrost": "May 22",
        "firstFallFrost": "Sep 7",
        "frostFreeDays": 107
      }
    }
  },
  "meta": {
    "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)",
    "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Open-Meteo.com and Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather"
  }
}

GET /api/v1/weather/now #

Current conditions (official observation), today so far and yesterday.

feelsLike is the wind chill (at or below 0 °C with wind of at least 5 km/h) or the humidex (20 °C or warmer, humidex 25 or more), named in feelsKind; otherwise it equals temp and feelsKind is null. gustKmh is an observed gust only (gustSource ECCC or METAR); modelGustKmh is the model forecast for the hour. visibilityKm, fog and presentWeather come from the city page and the airport METAR.

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

Example request

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

Example response (trimmed)

json
{
  "data": {
    "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,
    "…": "16 more keys"
  },
  "meta": {
    "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)",
    "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Open-Meteo.com and Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/now",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-now"
  }
}

GET /api/v1/weather/official #

Environment Canada forecast: text periods (today, tonight, ...) with high/low, POP and UV, and the official 24-hour hourly forecast.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/official"

Example response (trimmed)

json
{
  "data": {
    "issued": "2026-10-16T01:04:00Z",
    "hourlyIssued": null,
    "periods": [
      {
        "name": "Tonight",
        "summary": "Mainly cloudy. Wind south 20 km/h. Low plus 5.",
        "short": "Mainly cloudy",
        "night": true,
        "icon": "CloudMoon",
        "high": null,
        "low": 5,
        "pop": null,
        "uv": null
      },
      {
        "name": "Friday",
        "summary": "A mix of sun and cloud. Becoming cloudy late in the afternoon with 40 percent chance of showers. Wind south 30 km/h gusting to 50. High 15. UV index 2 or low.",
        "short": "Chance of showers",
        "night": false,
        "icon": "CloudRain",
        "high": 15,
        "low": null,
        "pop": 40,
        "uv": 2
      },
      "… 10 more"
    ],
    "hourly": [
      {
        "t": "2026-10-16T11:00:00Z",
        "temp": 7,
        "condition": "Partly cloudy",
        "pop": 0,
        "windKmh": 20,
        "windDir": "S",
        "gustKmh": null,
        "uv": null,
        "isDay": false,
        "icon": "CloudMoon"
      },
      {
        "t": "2026-10-16T12:00:00Z",
        "temp": 8,
        "condition": "Partly cloudy",
        "pop": 0,
        "windKmh": 20,
        "windDir": "S",
        "gustKmh": null,
        "uv": null,
        "isDay": false,
        "icon": "CloudMoon"
      },
      "… 22 more"
    ]
  },
  "meta": {
    "source": "Environment and Climate Change Canada, city page weather bc-79",
    "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/official",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-official"
  }
}

GET /api/v1/weather/observations #

Past 24 hours observed at the airport, hour by hour: temperature, dew point, humidity, wind, precipitation, snow depth, pressure, visibility, fog.

Hourly SWOB observations from the airport auto station, with the lowest METAR visibility, present weather and highest gust in each hour. today is the observed high, low and precipitation since local midnight.

ParameterInTypeDescription
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/observations"

Example response (trimmed)

json
{
  "data": [
    {
      "t": "2026-10-16T10:00:00.000Z",
      "temp": 12.1,
      "tempMax": 12.8,
      "tempMin": 12.1,
      "dewpoint": 0.6,
      "humidity": 45,
      "windKmh": 30.6,
      "windMaxKmh": 45,
      "windDir": 176,
      "precipMm": 0,
      "snowDepthCm": 0,
      "pressureKpa": 102,
      "…": "4 more keys"
    },
    {
      "t": "2026-10-16T09:00:00.000Z",
      "temp": 12.5,
      "tempMax": 12.9,
      "tempMin": 12.1,
      "dewpoint": 0.4,
      "humidity": 43,
      "windKmh": 27.4,
      "windMaxKmh": 41.8,
      "windDir": 175,
      "precipMm": 0,
      "snowDepthCm": 0,
      "pressureKpa": 102,
      "…": "4 more keys"
    },
    "… 23 more"
  ],
  "meta": {
    "source": "Environment and Climate Change Canada (SWOB realtime observations, stations 1096453 and 1096454); NOAA Aviation Weather Center (METAR CYXS)",
    "sourceUrl": "https://api.weather.gc.ca/collections/swob-realtime",
    "updatedAt": "2026-10-16T10:41:37.897Z",
    "ageSec": 403,
    "license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Public domain (US Government work, NOAA Aviation Weather Center)",
    "attribution": "Environment and Climate Change Canada and NOAA Aviation Weather Center, via PG Pulse (princegeorgepulse.ca)",
    "total": 25,
    "count": 25,
    "limit": 25,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/weather/observations",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-observations"
  }
}

GET /api/v1/weather/observations/summary #

Observed today so far, pressure trend, snow depth, latest METAR and hours of fog in the past 24 hours.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/observations/summary"

Example response (trimmed)

json
{
  "data": {
    "airport": {
      "name": "Prince George Airport (auto)",
      "id": "1096453",
      "elevationM": 680
    },
    "today": {
      "high": 12.9,
      "highAt": "2026-10-16T09:00:00.000Z",
      "low": 11.3,
      "lowAt": "2026-10-16T08:00:00.000Z",
      "precipMm": 0,
      "hours": 3
    },
    "pressureTrend": {
      "trend": "falling",
      "changeKpa": -0.2,
      "t": "2026-10-16T10:00:00.000Z"
    },
    "snowDepthCm": 0,
    "metar": null,
    "fogHours24": 0
  },
  "meta": {
    "source": "Environment and Climate Change Canada (SWOB realtime observations, stations 1096453 and 1096454); NOAA Aviation Weather Center (METAR CYXS)",
    "sourceUrl": "https://api.weather.gc.ca/collections/swob-realtime",
    "updatedAt": "2026-10-16T10:41:37.897Z",
    "ageSec": 403,
    "license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Public domain (US Government work, NOAA Aviation Weather Center)",
    "attribution": "Environment and Climate Change Canada and NOAA Aviation Weather Center, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/observations/summary",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-observations-summary"
  }
}

GET /api/v1/weather/inversion #

Inversion watch: the airport (plateau) vs a valley station, now and for the past 24 hours.

diff is valley minus airport in °C. In well-mixed air the lower valley station is slightly warmer; when it is colder, cold air is pooling in the valley (a temperature inversion), which traps smoke and pollution. state: strong (≤ −3), inversion (≤ −1), weak (below 0), mixed.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/inversion"

Example response (trimmed)

json
{
  "data": {
    "airport": {
      "name": "Prince George Airport (auto)",
      "id": "1096453",
      "elevationM": 680,
      "t": "2026-10-16T10:40:00.000Z",
      "temp": 11.8,
      "humidity": 47,
      "windKmh": 24.5,
      "snowDepthCm": 0
    },
    "valley": {
      "name": "Massey (downtown, in the Bowl)",
      "id": "1096454",
      "elevationM": 602,
      "t": "2026-10-16T10:40:00.000Z",
      "temp": 14.1,
      "humidity": 40,
      "windKmh": 11.6,
      "snowDepthCm": null
    },
    "diff": 2.3,
    "state": "mixed",
    "hours": [
      {
        "t": "2026-10-15T10:00:00.000Z",
        "airport": -1.2,
        "valley": 1.8,
        "diff": 3
      },
      {
        "t": "2026-10-15T11:00:00.000Z",
        "airport": -1.9,
        "valley": 1.8,
        "diff": 3.7
      },
      "… 23 more"
    ]
  },
  "meta": {
    "source": "Environment and Climate Change Canada (SWOB realtime observations, stations 1096453 and 1096454); NOAA Aviation Weather Center (METAR CYXS)",
    "sourceUrl": "https://api.weather.gc.ca/collections/swob-realtime",
    "updatedAt": "2026-10-16T10:41:37.897Z",
    "ageSec": 403,
    "license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/); Public domain (US Government work, NOAA Aviation Weather Center)",
    "attribution": "Environment and Climate Change Canada and NOAA Aviation Weather Center, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/inversion",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-inversion"
  }
}

GET /api/v1/weather/radar #

Radar and lightning frame times (last 3 hours) for the ECCC GeoMet WMS layers, with the map bounding box.

Request a frame with a WMS GetMap call to wms (version 1.3.0, CRS EPSG:4326, bbox lat/lng order) with layers set to a layer id and time to one of its times. Tiles are served by ECCC; this endpoint only lists what is available.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/radar"

Example response (trimmed)

json
{
  "data": {
    "wms": "https://geo.weather.gc.ca/geomet",
    "bbox": [
      51.7171,
      -126.3497,
      "… 2 more"
    ],
    "layers": [
      {
        "id": "RADAR_1KM_RRAI",
        "label": "Rain",
        "times": [
          "2026-10-16T07:42:00Z",
          "2026-10-16T07:48:00Z",
          "… 29 more"
        ]
      },
      {
        "id": "RADAR_1KM_RSNO",
        "label": "Snow",
        "times": [
          "2026-10-16T07:42:00Z",
          "2026-10-16T07:48:00Z",
          "… 29 more"
        ]
      }
    ],
    "lightning": {
      "id": "Lightning_2.5km_Density",
      "times": [
        "2026-10-16T07:30:00Z",
        "2026-10-16T07:40:00Z",
        "… 17 more"
      ]
    }
  },
  "meta": {
    "source": "Environment and Climate Change Canada, MSC GeoMet (1 km radar composite and lightning density)",
    "sourceUrl": "https://eccc-msc.github.io/open-data/msc-geomet/readme_en/",
    "updatedAt": "2026-10-16T10:46:25.985Z",
    "ageSec": 115,
    "license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Environment and Climate Change Canada (MSC GeoMet), via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/radar",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-radar"
  }
}

GET /api/v1/weather/almanac #

Today in Prince George weather history: records for the date and this month's 1991–2020 normals and extremes.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/almanac"

Example response (trimmed)

json
{
  "data": {
    "date": "2026-10-16",
    "records": {
      "high": 23.9,
      "highYear": 1929,
      "low": -13.1,
      "lowYear": 1992,
      "coldestHigh": -3.9,
      "coldestHighYear": 1930,
      "warmestLow": 13.3,
      "warmestLowYear": 1929,
      "precipMm": 17.5,
      "precipYear": 2020,
      "snowCm": 6.8,
      "snowYear": 1991,
      "…": "3 more keys"
    },
    "month": {
      "index": 9,
      "period": "1991–2020",
      "station": "Prince George Airport",
      "source": "Environment and Climate Change Canada, Canadian Climate Normals 1991–2020, Prince George (climate ID 1096439)",
      "sourceUrl": "https://climate.weather.gc.ca/climate_normals/results_1991_2020_e.html?searchType=stnName&txtStationName=prince+george&searchMethod=contains&txtCentralLatMin=0&txtCentralLatSec=0&txtCentralLongMin=0&txtCentralLongSec=…",
      "values": {
        "meanMax": 9.2,
        "meanMin": -0.6,
        "meanTemp": 4.4,
        "precipMm": 66.4,
        "rainMm": 58.7,
        "snowCm": 9.8,
        "precipDays": 16.3,
        "daysPrecip1mm": 12.2,
        "rainDays": 15.1,
        "snowDays": 2.2,
        "snowDepthCm": 0,
        "rhMorning": 87.2,
        "…": "15 more keys"
      },
      "extremes": {
        "maxTemp": {
          "value": 25.2,
          "date": "1987-10-01"
        },
        "minTemp": {
          "value": -26.5,
          "date": "1984-10-31"
        },
        "humidex": {
          "value": 25.1,
          "date": "1987-10-01"
        },
        "windChill": {
          "value": -31.8,
          "date": "1984-10-31"
        },
        "gustKmh": {
          "value": 129,
          "date": "1961-10-31",
          "dir": "W"
        },
        "snowDepthCm": {
          "value": 26,
          "date": "2012-10-30"
        },
        "precipMm": {
          "value": 38.9,
          "date": "1962-10-03"
        }
      }
    },
    "frost": {
      "lastSpringFrost": "May 22",
      "firstFallFrost": "Sep 7",
      "frostFreeDays": 107
    },
    "normalToday": {
      "high": 9,
      "low": 0
    },
    "sun": {
      "sunrise": "2026-10-16T14:41:00Z",
      "sunset": "2026-10-17T01:12:00Z"
    }
  },
  "meta": {
    "source": "Environment and Climate Change Canada, daily climate records (LTCE) and Canadian Climate Normals 1991–2020",
    "sourceUrl": "https://climate.weather.gc.ca/",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/almanac",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-almanac"
  }
}

GET /api/v1/weather/hourly #

Hourly forecast (one row per hour: temp, feels, pop, precip, code, wind, gust, dir, uv, isDay).

ParameterInTypeDescription
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/hourly?limit=3"

Example response (trimmed)

json
{
  "data": [
    {
      "time": "2026-10-16T03:00:00-07:00",
      "temp": 7.9,
      "feels": 4.4,
      "pop": 0,
      "precip": 0,
      "code": 3,
      "wind": 10.2,
      "gust": 23,
      "dir": 166,
      "uv": 0,
      "isDay": 0
    },
    {
      "time": "2026-10-16T04:00:00-07:00",
      "temp": 7.8,
      "feels": 4.5,
      "pop": 0,
      "precip": 0,
      "code": 3,
      "wind": 8.6,
      "gust": 21.6,
      "dir": 169,
      "uv": 0,
      "isDay": 0
    },
    "… 1 more"
  ],
  "meta": {
    "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)",
    "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Open-Meteo.com and Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)",
    "total": 48,
    "count": 3,
    "limit": 3,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/weather/hourly?limit=3",
    "next": "/api/v1/weather/hourly?limit=3&offset=3",
    "docs": "/developers/reference/weather/#get-weather-hourly"
  }
}

GET /api/v1/weather/daily #

Daily forecast (up to 14 days) plus the ECCC text forecast.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/daily"

Example response (trimmed)

json
{
  "data": {
    "days": [
      {
        "date": "2026-10-16",
        "code": 51,
        "max": 15,
        "min": 11.3,
        "precip": 0.3,
        "pop": 59,
        "snow": 0,
        "wind": 20.6,
        "gust": 43.9,
        "dir": 187,
        "uv": 2.55,
        "sunshineH": 7.2,
        "…": "3 more keys"
      },
      {
        "date": "2026-10-17",
        "code": 81,
        "max": 11.5,
        "min": 4.9,
        "precip": 9.2,
        "pop": 94,
        "snow": 0,
        "wind": 26.9,
        "gust": 56.9,
        "dir": 228,
        "uv": 2.15,
        "sunshineH": 8.6,
        "…": "3 more keys"
      },
      "… 14 more"
    ],
    "textForecast": [
      {
        "name": "Tonight",
        "summary": "Mainly cloudy. Wind south 20 km/h. Low plus 5."
      },
      {
        "name": "Friday",
        "summary": "A mix of sun and cloud. Becoming cloudy late in the afternoon with 40 percent chance of showers. Wind south 30 km/h gusting to 50. High 15. UV index 2 or low."
      },
      "… 10 more"
    ]
  },
  "meta": {
    "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)",
    "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Open-Meteo.com and Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/daily",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-daily"
  }
}

GET /api/v1/weather/alerts #

Active ECCC weather alerts for Prince George.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/weather/alerts"

Example response (trimmed)

json
{
  "data": [
    {
      "title": "Special weather",
      "type": "statement",
      "text": "Fall Storm Bringing Mixed Weather Conditions this Saturday.\n\nWhat:\n- Sudden gusty winds of 60 to 80 km/h.\n- Snow levels lowering to 1500 metres over southern B.C.\n- Snow levels lowering to 1200 metres over central B.C…",
      "issued": "2026-10-15T23:35:15.789Z",
      "expires": "2026-10-18T03:00:00.000Z"
    }
  ],
  "meta": {
    "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)",
    "sourceUrl": "https://weather.gc.ca/en/location/index.html?coords=53.917,-122.750",
    "updatedAt": "2026-10-16T10:43:26.141Z",
    "ageSec": 295,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence); Environment and Climate Change Canada Data Servers End-use Licence (https://eccc-msc.github.io/open-data/licence/readme_en/)",
    "attribution": "Open-Meteo.com and Environment and Climate Change Canada, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/weather/alerts",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-alerts"
  }
}

GET /api/v1/airport #

Prince George airport (CYXS) flying conditions: latest METAR, recent observations and the TAF.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/airport"

Example response (trimmed)

json
{
  "data": {
    "metar": {
      "time": "2026-10-16T10:00:00.000Z",
      "raw": "METAR CYXS 161000Z AUTO 19017G26KT 9SM SCT250 12/01 A3008 RMK SLP199",
      "category": "VFR",
      "tempC": 12,
      "windDir": 190,
      "windKt": 17,
      "gustKt": 26,
      "visSm": 9,
      "ceilingFt": null,
      "clouds": "scattered at 25,000 ft"
    },
    "history": [
      {
        "time": "2026-10-16T10:00:00.000Z",
        "category": "VFR",
        "raw": "METAR CYXS 161000Z AUTO 19017G26KT 9SM SCT250 12/01 A3008 RMK SLP199",
        "tempC": 12,
        "windKt": 17,
        "gustKt": 26,
        "visSm": 9,
        "ceilingFt": null
      },
      {
        "time": "2026-10-16T09:00:00.000Z",
        "category": "VFR",
        "raw": "METAR CYXS 160900Z AUTO 19017G27KT 9SM CLR 13/00 A3009 RMK SLP206",
        "tempC": 13,
        "windKt": 17,
        "gustKt": 27,
        "visSm": 9,
        "ceilingFt": null
      },
      "… 5 more"
    ],
    "taf": {
      "issued": "2026-10-16T08:35:00.000Z",
      "raw": "TAF AMD CYXS 160835Z 1608/1619 18012G22KT P6SM SCT220 RMK FCST BASED ON AUTO OBS. NXT FCST BY 161300Z"
    }
  },
  "meta": {
    "source": "NOAA Aviation Weather Center (METAR and TAF for CYXS)",
    "sourceUrl": "https://aviationweather.gov/data/metar/?ids=CYXS",
    "updatedAt": "2026-10-16T10:41:26.060Z",
    "ageSec": 415,
    "license": "Public domain (US Government work, NOAA Aviation Weather Center)",
    "attribution": "NOAA Aviation Weather Center, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/airport",
    "next": null,
    "docs": "/developers/reference/weather/#get-airport"
  }
}

GET /api/v1/weather/history #

Recorded weather observations: temperature, feels like, humidity, dew point, wind, gusts, pressure, precipitation, visibility, snow depth, valley temperature and the inversion.

ParameterInTypeDescription
seriesquerystringOnly some of: weather.temp, weather.feels_like, weather.humidity, weather.wind, weather.gust, weather.pressure, weather.precip, weather.dewpoint, weather.visibility, weather.snow_depth, weather.valley_temp, weather.inversion.
fromquerystringStart: ISO date/datetime, or a span back from to such as 48h, 7d or 30d (default 7d). Example: 7d.
toquerystringEnd: ISO date/datetime (default now).
intervalquerystringraw (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/weather/history?from=48h"

Example response (trimmed)

json
{
  "data": [
    {
      "series": "weather.temp",
      "label": "Temperature",
      "unit": "°C",
      "interval": "raw",
      "truncated": false,
      "points": [
        {
          "t": "2026-10-14T11:00:00.000Z",
          "value": 7.3
        },
        {
          "t": "2026-10-14T12:00:00.000Z",
          "value": 6.8
        },
        "… 69 more"
      ]
    },
    {
      "series": "weather.feels_like",
      "label": "Feels like",
      "unit": "°C",
      "interval": "raw",
      "truncated": false,
      "points": [
        {
          "t": "2026-10-14T11:00:00.000Z",
          "value": 7.3
        },
        {
          "t": "2026-10-14T12:00:00.000Z",
          "value": 6.8
        },
        "… 69 more"
      ]
    },
    "… 10 more"
  ],
  "meta": {
    "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",
    "sourceUrl": "https://princegeorgepulse.ca/dashboard/",
    "updatedAt": "2026-10-16T10:00:00.000Z",
    "ageSec": 2901,
    "license": "Mixed: see each item’s source",
    "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": "weather.temp",
        "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)"
      },
      {
        "id": "weather.feels_like",
        "source": "Environment and Climate Change Canada (city page weather bc-79, weather alerts, SWOB observations); NOAA Aviation Weather Center (METAR); Open-Meteo forecast API (model detail)"
      },
      "… 10 more"
    ]
  },
  "links": {
    "self": "/api/v1/weather/history?from=48h",
    "next": null,
    "docs": "/developers/reference/weather/#get-weather-history"
  }
}

GET /api/v1/airport/history #

Recorded CYXS METAR values: temperature, wind, gusts, visibility, ceiling, flight category.

ParameterInTypeDescription
seriesquerystringOnly some of: airport.temp, airport.wind, airport.gust, airport.visibility, airport.ceiling, airport.category.
fromquerystringStart: ISO date/datetime, or a span back from to such as 48h, 7d or 30d (default 7d). Example: 7d.
toquerystringEnd: ISO date/datetime (default now).
intervalquerystringraw (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/airport/history?from=48h"

Example response (trimmed)

json
{
  "data": [
    {
      "series": "airport.temp",
      "label": "Airport temperature (METAR)",
      "unit": "°C",
      "interval": "raw",
      "truncated": false,
      "points": [
        {
          "t": "2026-10-14T11:00:00.000Z",
          "value": 7
        },
        {
          "t": "2026-10-14T12:00:00.000Z",
          "value": 7
        },
        "… 87 more"
      ]
    },
    {
      "series": "airport.wind",
      "label": "Airport wind (METAR)",
      "unit": "kt",
      "interval": "raw",
      "truncated": false,
      "points": [
        {
          "t": "2026-10-14T11:00:00.000Z",
          "value": 10
        },
        {
          "t": "2026-10-14T12:00:00.000Z",
          "value": 7
        },
        "… 87 more"
      ]
    },
    "… 4 more"
  ],
  "meta": {
    "source": "NOAA Aviation Weather Center (METAR and TAF for CYXS)",
    "sourceUrl": "https://aviationweather.gov/data/metar/?ids=CYXS",
    "updatedAt": "2026-10-16T10:00:00.000Z",
    "ageSec": 2901,
    "license": "Public domain (US Government work, NOAA Aviation Weather Center)",
    "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": "airport.temp",
        "source": "NOAA Aviation Weather Center (METAR and TAF for CYXS)"
      },
      {
        "id": "airport.wind",
        "source": "NOAA Aviation Weather Center (METAR and TAF for CYXS)"
      },
      "… 4 more"
    ]
  },
  "links": {
    "self": "/api/v1/airport/history?from=48h",
    "next": null,
    "docs": "/developers/reference/weather/#get-airport-history"
  }
}

Add PG Pulse to your home screen

Your browser installs apps from its Share menu.

  1. Tap Share in the browser toolbar (at the bottom of the screen on iPhone, at the top on iPad).
  2. Scroll down and tap Add to Home Screen.
  3. Tap Add. PG Pulse opens from its icon like any other app.