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

Climate: API reference

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

GET /api/v1/climate #

Climate history since 1940: annual series, monthly by year, 1991–2020 baseline.

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

Example request

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

Example response (trimmed)

json
{
  "data": {
    "firstYear": 1940,
    "lastDate": "2026-10-15",
    "annual": [
      {
        "year": 1940,
        "meanTemp": 4.7,
        "precip": 548,
        "snowCm": 103,
        "sunshineH": 3306,
        "maxTemp": 31.5,
        "minTemp": -30.3,
        "daysAbove30": 1,
        "daysBelowMinus30": 2,
        "complete": true
      },
      {
        "year": 1941,
        "meanTemp": 5.7,
        "precip": 505,
        "snowCm": 38,
        "sunshineH": 3387,
        "maxTemp": 38.4,
        "minTemp": -35.7,
        "daysAbove30": 8,
        "daysBelowMinus30": 2,
        "complete": true
      },
      "… 85 more"
    ],
    "monthly": {
      "1940": {
        "t": [
          -11.3,
          -9.5,
          "… 10 more"
        ],
        "p": [
          44,
          27,
          "… 10 more"
        ],
        "s": [
          29,
          17,
          "… 10 more"
        ]
      },
      "1941": {
        "t": [
          -7,
          -6.2,
          "… 10 more"
        ],
        "p": [
          38,
          23,
          "… 10 more"
        ],
        "s": [
          9,
          12,
          "… 10 more"
        ]
      },
      "1942": {
        "t": [
          -9.1,
          -7.7,
          "… 10 more"
        ],
        "p": [
          19,
          7,
          "… 10 more"
        ],
        "s": [
          10,
          5,
          "… 10 more"
        ]
      },
      "1943": {
        "t": [
          -14.2,
          -3.8,
          "… 10 more"
        ],
        "p": [
          32,
          30,
          "… 10 more"
        ],
        "s": [
          15,
          13,
          "… 10 more"
        ]
      },
      "1944": {
        "t": [
          -4.7,
          -5.7,
          "… 10 more"
        ],
        "p": [
          53,
          25,
          "… 10 more"
        ],
        "s": [
          15,
          18,
          "… 10 more"
        ]
      },
      "1945": {
        "t": [
          -7.7,
          -6.5,
          "… 10 more"
        ],
        "p": [
          55,
          19,
          "… 10 more"
        ],
        "s": [
          32,
          12,
          "… 10 more"
        ]
      },
      "1946": {
        "t": [
          -5.6,
          -4.9,
          "… 10 more"
        ],
        "p": [
          55,
          39,
          "… 10 more"
        ],
        "s": [
          35,
          20,
          "… 10 more"
        ]
      },
      "1947": {
        "t": [
          -10.7,
          -6.9,
          "… 10 more"
        ],
        "p": [
          53,
          40,
          "… 10 more"
        ],
        "s": [
          33,
          17,
          "… 10 more"
        ]
      },
      "1948": {
        "t": [
          -4.6,
          -11.6,
          "… 10 more"
        ],
        "p": [
          50,
          52,
          "… 10 more"
        ],
        "s": [
          23,
          36,
          "… 10 more"
        ]
      },
      "1949": {
        "t": [
          -13.7,
          -13.7,
          "… 10 more"
        ],
        "p": [
          49,
          45,
          "… 10 more"
        ],
        "s": [
          31,
          32,
          "… 10 more"
        ]
      },
      "1950": {
        "t": [
          -26.7,
          -3.3,
          "… 10 more"
        ],
        "p": [
          25,
          50,
          "… 10 more"
        ],
        "s": [
          18,
          18,
          "… 10 more"
        ]
      },
      "1951": {
        "t": [
          -13.4,
          -8.6,
          "… 10 more"
        ],
        "p": [
          23,
          42,
          "… 10 more"
        ],
        "s": [
          16,
          28,
          "… 10 more"
        ]
      },
      "…": "75 more keys"
    },
    "baseline": {
      "period": "1991–2020",
      "t": [
        -7.4,
        -4.9,
        "… 10 more"
      ],
      "p": [
        54,
        30,
        "… 10 more"
      ],
      "s": [
        25,
        14,
        "… 10 more"
      ]
    }
  },
  "meta": {
    "source": "Open-Meteo historical weather API (ERA5 and ERA5-Land reanalysis, ECMWF / Copernicus)",
    "sourceUrl": "https://open-meteo.com/en/docs/historical-weather-api",
    "updatedAt": "2026-10-16T07:31:29.793Z",
    "ageSec": 11811,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence)",
    "attribution": "Open-Meteo.com (ERA5, Copernicus Climate Change Service), via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/climate",
    "next": null,
    "docs": "/developers/reference/climate/#get-climate"
  }
}

GET /api/v1/climate/this-day #

One calendar day in every year since 1940.

ParameterInTypeDescription
dayquerystringMM-DD (default: today in Prince George). Example: 12-25.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/climate/this-day?day=12-25"

Example response (trimmed)

json
{
  "data": {
    "md": "12-25",
    "rows": [
      {
        "year": 1940,
        "max": 1,
        "min": -5,
        "precip": 0,
        "snow": 0
      },
      {
        "year": 1941,
        "max": -14.3,
        "min": -18.5,
        "precip": 0,
        "snow": 0
      },
      "… 84 more"
    ]
  },
  "meta": {
    "source": "Open-Meteo historical weather API (ERA5 and ERA5-Land reanalysis, ECMWF / Copernicus)",
    "sourceUrl": "https://open-meteo.com/en/docs/historical-weather-api",
    "updatedAt": "2026-10-16T07:31:29.793Z",
    "ageSec": 11811,
    "license": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence)",
    "attribution": "Open-Meteo.com (ERA5, Copernicus Climate Change Service), via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/climate/this-day?day=12-25",
    "next": null,
    "docs": "/developers/reference/climate/#get-climate-this-day"
  }
}

GET /api/v1/climate/normals #

Climate normals (1991–2020, with the 1981–2010 set) for Prince George Airport.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/climate/normals"

Example response (trimmed)

json
{
  "data": {
    "1991-2020": {
      "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=…",
      "asOf": "2026-10-01",
      "period": "1991–2020",
      "station": {
        "name": "Prince George Airport",
        "climateId": "1096439",
        "note": "ECCC composite normals station joining Prince George A (1096450) and Prince George Airport Auto (1096453) at the airport",
        "elevationM": 691,
        "lat": 53.8842,
        "lng": -122.6775
      },
      "notes": "Normals are 30-year averages (1991–2020) at Prince George Airport, about 110 m above downtown. \"Mean\" is the average of the daily high and low, so the warmest month, July, averages 15.9°C over the whole day while its …",
      "monthly": {
        "meanTemp": [
          -7.8,
          -5.4,
          "… 10 more"
        ],
        "meanMax": [
          -3.9,
          -0.7,
          "… 10 more"
        ],
        "meanMin": [
          -11.7,
          -10,
          "… 10 more"
        ],
        "rainMm": [
          9.2,
          5.4,
          "… 10 more"
        ],
        "snowCm": [
          52.7,
          26.3,
          "… 10 more"
        ],
        "precipMm": [
          49.5,
          30.5,
          "… 10 more"
        ],
        "snowDepthCm": [
          24,
          24,
          "… 10 more"
        ],
        "thunderDays": [
          0.03,
          0.03,
          "… 10 more"
        ],
        "fogDays": [
          6,
          4.4,
          "… 10 more"
        ],
        "smokeDays": [
          1,
          1,
          "… 10 more"
        ],
        "windKmh": [
          10.7,
          10.2,
          "… 10 more"
        ],
        "rhMorning": [
          83.7,
          82.7,
          "… 10 more"
        ],
        "…": "25 more keys"
      },
      "annual": {
        "meanTemp": 4.3,
        "meanMax": 9.8,
        "meanMin": -1.2,
        "rainMm": 432,
        "snowCm": 203.9,
        "precipMm": 590.2,
        "snowDepthCm": 7,
        "thunderDays": 14.3,
        "fogDays": 47.2,
        "smokeDays": 5.2,
        "windKmh": 10,
        "rhMorning": 83.2,
        "…": "25 more keys"
      },
      "extremesLongTerm": {
        "note": "ECCC long-term extremes for the airport composite record, 1942–2020. These do not include the older town station (1912–1942) or anything after 2020, so the heat dome of June 2021 is not in this table. Humidex, wind ch…",
        "maxTemp": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "minTemp": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "rainMm": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "snowCm": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "precipMm": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "humidex": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "windChill": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "gustKmh": [
          "{…}",
          "{…}",
          "… 10 more"
        ],
        "snowDepthCm": [
          "{…}",
          "{…}",
          "… 10 more"
        ]
      },
      "frost": {
        "lastSpringFrost": "May 22",
        "firstFallFrost": "Sep 7",
        "frostFreeDays": 107
      },
      "sunshine": {
        "period": "1981–2010",
        "station": "Prince George A (1096450)",
        "source": "Environment and Climate Change Canada, Canadian Climate Normals 1981–2010, Prince George A (climate ID 1096450)",
        "sourceUrl": "https://climate.weather.gc.ca/climate_normals/results_1981_2010_e.html?stnID=631",
        "monthlyHours": [
          48.99,
          84.01,
          "… 10 more"
        ],
        "annualHours": 1918.07,
        "monthlyPct": [
          19.67,
          30.53,
          "… 10 more"
        ],
        "annualPct": 39.22
      }
    },
    "1981-2010": {
      "source": "Environment and Climate Change Canada, Canadian Climate Normals 1981–2010, Prince George A (climate ID 1096450)",
      "sourceUrl": "https://climate.weather.gc.ca/climate_normals/results_1981_2010_e.html?stnID=631",
      "apiUrl": "https://api.weather.gc.ca/collections/climate-normals/items?CLIMATE_IDENTIFIER=1096450",
      "asOf": "2012-10-05",
      "period": "1981–2010",
      "station": {
        "name": "Prince George A",
        "climateId": "1096450",
        "elevationM": 691.3,
        "lat": 53.8908,
        "lng": -122.6789
      },
      "notes": "1981–2010 is the most recent normals period ECCC has published for this station. The airport station closed in 2009 and was replaced by Prince George Airport Auto.",
      "monthly": {
        "meanTemp": [
          -7.9,
          -5.02,
          "… 10 more"
        ],
        "meanMax": [
          -4.02,
          -0.43,
          "… 10 more"
        ],
        "meanMin": [
          -11.74,
          -9.59,
          "… 10 more"
        ],
        "rainMm": [
          8.06,
          6.7,
          "… 10 more"
        ],
        "snowCm": [
          54.64,
          28.14,
          "… 10 more"
        ],
        "precipMm": [
          52.93,
          29.49,
          "… 10 more"
        ],
        "sunshineHours": [
          48.99,
          84.01,
          "… 10 more"
        ],
        "sunnyDays": [
          16.76,
          21.05,
          "… 10 more"
        ],
        "sunshinePct": [
          19.67,
          30.53,
          "… 10 more"
        ],
        "snowDepthCm": [
          20.9,
          19.95,
          "… 10 more"
        ],
        "windKmh": [
          10.2,
          10.14,
          "… 10 more"
        ],
        "windDirDeg": [
          180,
          180,
          "… 10 more"
        ],
        "…": "14 more keys"
      },
      "annual": {
        "meanTemp": 4.31,
        "meanMax": 9.73,
        "meanMin": -1.13,
        "daysAbove20": 71.4,
        "daysAbove30": 3.39,
        "frostDays": 184.2,
        "daysBelowMinus20": 16.71,
        "daysBelowMinus30": 4.36,
        "rainMm": 423.61,
        "snowCm": 205.07,
        "precipMm": 594.85,
        "rainDays": 113.51,
        "…": "14 more keys"
      },
      "frost": {
        "lastSpringFrostDayOfYear": 146,
        "lastSpringFrost": "May 26",
        "firstFallFrostDayOfYear": 248,
        "firstFallFrost": "Sep 5",
        "frostFreeDays": 101
      }
    }
  },
  "meta": {
    "source": "Environment and Climate Change Canada, Canadian Climate Normals (Prince George Airport 1991–2020; Prince George A 1981–2010)",
    "sourceUrl": "https://climate.weather.gc.ca/climate_normals/",
    "updatedAt": "2026-10-01T00:00:00-07:00",
    "updatedAtPrecision": "day",
    "ageSec": 1309701,
    "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/climate/normals",
    "next": null,
    "docs": "/developers/reference/climate/#get-climate-normals"
  }
}

GET /api/v1/climate/records #

Temperature records: all-time, monthly and every calendar day.

ParameterInTypeDescription
dayquerystringOnly this calendar day, MM-DD. Example: 07-29.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/climate/records"

Example response (trimmed)

json
{
  "data": {
    "source": "Environment and Climate Change Canada, Daily climate records (LTCE), Prince George area virtual station VSBC79V",
    "sourceUrl": "https://api.weather.gc.ca/collections/ltce-temperature/items?VIRTUAL_CLIMATE_ID=VSBC79V",
    "pageUrl": "https://climate.weather.gc.ca/",
    "asOf": "2026-10-11",
    "recordBegins": "1912-08-01",
    "notes": "Official ECCC daily records for the Prince George area. They join the town station Prince George (1912–1942), Prince George A at the airport (1942–2009) and Prince George Airport Auto (2009 on) into one continuous rec…",
    "allTime": {
      "highest": {
        "value": 38.9,
        "year": 1941,
        "month": 7,
        "day": 17,
        "station": "Prince George (town station)"
      },
      "lowest": {
        "value": -50,
        "year": 1950,
        "month": 1,
        "day": 2
      },
      "wettestDay": {
        "value": 63.5,
        "year": 1913,
        "month": 4,
        "day": 5
      },
      "snowiestDay": {
        "value": 61,
        "year": 1920,
        "month": 1,
        "day": 29
      },
      "since1942": {
        "note": "The wettest and snowiest days come from the early town station and far exceed anything measured at the airport since 1942; the April 1913 total is more than six times the next-wettest April 5.",
        "wettestDay": {
          "value": 50,
          "date": "1948-08-04"
        },
        "snowiestDay": {
          "value": 30.8,
          "date": "1990-12-30"
        },
        "source": "ECCC Canadian Climate Normals 1991–2020, Prince George (1096439), long-term extremes 1942–2020"
      }
    },
    "monthly": [
      {
        "month": 1,
        "hi": 13.2,
        "hiDate": "2024-01-31",
        "lo": -50,
        "loDate": "1950-01-02",
        "pr": 61,
        "prDate": "1920-01-29",
        "sn": 61,
        "snDate": "1920-01-29"
      },
      {
        "month": 2,
        "hi": 14.4,
        "hiDate": "1941-02-04",
        "lo": -46.7,
        "loDate": "1936-02-14",
        "pr": 29.2,
        "prDate": "1913-02-15",
        "sn": 27.9,
        "snDate": "1917-02-02"
      },
      "… 10 more"
    ],
    "daily": [
      {
        "m": 1,
        "d": 1,
        "hi": 10,
        "hiY": 1918,
        "lo": -49.4,
        "loY": 1928,
        "coldHi": -34.4,
        "coldHiY": 1928,
        "warmLo": 3.8,
        "warmLoY": 1992,
        "pr": 15.2,
        "prY": 1935,
        "…": "2 more keys"
      },
      {
        "m": 1,
        "d": 2,
        "hi": 9.4,
        "hiY": 1918,
        "lo": -50,
        "loY": 1950,
        "coldHi": -31.7,
        "coldHiY": 1950,
        "warmLo": 1.3,
        "warmLoY": 2007,
        "pr": 20.5,
        "prY": 2014,
        "…": "2 more keys"
      },
      "… 364 more"
    ],
    "heatDome2021": {
      "summary": "During the Pacific Northwest heat dome, Prince George Massey Auto, an Environment Canada automatic station in the Bowl near Massey Drive, reached 40.1°C on June 28, 2021, the highest of the Environment Canada stations…",
      "readings": [
        {
          "station": "Prince George Massey Auto",
          "climateId": "1096454",
          "value": 40.1,
          "date": "2021-06-28",
          "url": "https://climate.weather.gc.ca/climate_data/daily_data_e.html?StationID=50169&timeframe=2&StartYear=2012&EndYear=2026&Year=2021&Month=6"
        },
        {
          "station": "Prince George Massey Auto",
          "climateId": "1096454",
          "value": 39.8,
          "date": "2021-06-29",
          "url": "https://climate.weather.gc.ca/climate_data/daily_data_e.html?StationID=50169&timeframe=2&StartYear=2012&EndYear=2026&Year=2021&Month=6"
        },
        "… 2 more"
      ],
      "apiUrl": "https://api.weather.gc.ca/collections/climate-daily/items?CLIMATE_IDENTIFIER=1096454&datetime=2021-06-26/2021-07-01"
    }
  },
  "meta": {
    "source": "Environment and Climate Change Canada, Daily climate records (LTCE), Prince George area virtual station VSBC79V",
    "sourceUrl": "https://api.weather.gc.ca/collections/ltce-temperature/items?VIRTUAL_CLIMATE_ID=VSBC79V",
    "updatedAt": "2026-10-12T13:20:22.635Z",
    "ageSec": 336479,
    "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)",
    "dataset": "climate-records",
    "asOf": "2026-10-11"
  },
  "links": {
    "self": "/api/v1/climate/records",
    "next": null,
    "docs": "/developers/reference/climate/#get-climate-records"
  }
}

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.