# City: API reference

3 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/holidays {#get-holidays}

Statutory holidays, with what changes in the city on each one (buses, garbage pickup).

Statutory holidays for BC (this year and next) from the Canada Holidays API, each with `changes`: how transit runs (from the BC Transit GTFS schedule) and whether each garbage zone’s pickup moves that week (from the City’s collection calendar, which rolls pickups back a day after a holiday). `status` values: transit none | sunday | saturday | normal | holiday | special | unknown; garbage normal | moved | none | unknown (unknown = the schedule for that date isn’t published yet). Refreshed daily.

- Cache: 1 h
- Source: [Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes; transit from BC Transit open data (GTFS schedule); garbage from the City collection calendar (Recycle Coach)](https://canada-holidays.ca/)
- Licence: MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE). Changes: each item’s own source and licence
- Paginated: `limit` (default 50, max 100) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `year` | query | integer | Calendar year (default: from today on). Example: `2026`. |
| `upcoming` | query | boolean | Only today and later (default true unless `year` is set). |

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "date": "2026-11-11",
      "observed": "2026-11-11",
      "name": "Remembrance Day",
      "nameFr": "Jour du Souvenir",
      "federal": true,
      "weekday": "Wednesday",
      "daysAway": 26,
      "source": "Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes",
      "sourceUrl": "https://canada-holidays.ca/provinces/BC",
      "license": "MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE)",
      "fetchedAt": "2026-10-12T11:50:06.825Z",
      "changes": [
        {
          "service": "transit",
          "area": null,
          "status": "sunday",
          "summary": "Sunday schedule",
          "detail": "{…}",
          "source": "BC Transit open data (GTFS schedule)",
          "sourceUrl": "https://www.bctransit.com/open-data/",
          "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
          "fetchedAt": "2026-10-05T11:50:14.256Z"
        },
        {
          "service": "garbage",
          "area": "Blue",
          "status": "moved",
          "summary": "Moves from Thursday, November 12 to Friday, November 13, and stays on Fridays after that",
          "detail": "{…}",
          "source": "City collection calendar (Recycle Coach)",
          "sourceUrl": "https://www.princegeorge.ca/city-services/garbage-recycling",
          "license": "Public information published by the City; dates only, with a link to the City",
          "fetchedAt": "2026-10-05T11:50:14.256Z"
        },
        "… 4 more"
      ]
    },
    {
      "date": "2026-12-25",
      "observed": "2026-12-25",
      "name": "Christmas Day",
      "nameFr": "Noël",
      "federal": true,
      "weekday": "Friday",
      "daysAway": 70,
      "source": "Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes",
      "sourceUrl": "https://canada-holidays.ca/provinces/BC",
      "license": "MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE)",
      "fetchedAt": "2026-10-12T11:50:06.825Z",
      "changes": [
        {
          "service": "transit",
          "area": null,
          "status": "sunday",
          "summary": "Sunday schedule",
          "detail": "{…}",
          "source": "BC Transit open data (GTFS schedule)",
          "sourceUrl": "https://www.bctransit.com/open-data/",
          "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
          "fetchedAt": "2026-10-05T11:50:14.256Z"
        },
        {
          "service": "garbage",
          "area": "Blue",
          "status": "moved",
          "summary": "Moves from Friday, December 25 to Tuesday, December 29",
          "detail": "{…}",
          "source": "City collection calendar (Recycle Coach)",
          "sourceUrl": "https://www.princegeorge.ca/city-services/garbage-recycling",
          "license": "Public information published by the City; dates only, with a link to the City",
          "fetchedAt": "2026-10-05T11:50:14.256Z"
        },
        "… 4 more"
      ]
    },
    "… 11 more"
  ],
  "meta": {
    "source": "Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes; transit from BC Transit open data (GTFS schedule); garbage from the City collection calendar (Recycle Coach)",
    "sourceUrl": "https://canada-holidays.ca/",
    "updatedAt": "2026-10-12T11:50:06.825Z",
    "ageSec": 341898,
    "license": "MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE). Changes: each item’s own source and licence",
    "attribution": "Canada Holidays API, BC Transit, City collection calendar, via PG Pulse (princegeorgepulse.ca)",
    "total": 13,
    "count": 13,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/holidays",
    "next": null,
    "docs": "/developers/reference/city/#get-holidays"
  }
}
```

## GET /api/v1/holidays/next {#get-holidays-next}

Today’s or the next statutory holiday, with what changes.

- Cache: 15 min
- Source: [Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes; transit from BC Transit open data (GTFS schedule); garbage from the City collection calendar (Recycle Coach)](https://canada-holidays.ca/)
- Licence: MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE). Changes: each item’s own source and licence

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "date": "2026-11-11",
    "observed": "2026-11-11",
    "name": "Remembrance Day",
    "nameFr": "Jour du Souvenir",
    "federal": true,
    "weekday": "Wednesday",
    "daysAway": 26,
    "source": "Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes",
    "sourceUrl": "https://canada-holidays.ca/provinces/BC",
    "license": "MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE)",
    "fetchedAt": "2026-10-12T11:50:06.825Z",
    "changes": [
      {
        "service": "transit",
        "area": null,
        "status": "sunday",
        "summary": "Sunday schedule",
        "detail": {
          "trips": 239,
          "reference": "{…}"
        },
        "source": "BC Transit open data (GTFS schedule)",
        "sourceUrl": "https://www.bctransit.com/open-data/",
        "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
        "fetchedAt": "2026-10-05T11:50:14.256Z"
      },
      {
        "service": "garbage",
        "area": "Blue",
        "status": "moved",
        "summary": "Moves from Thursday, November 12 to Friday, November 13, and stays on Fridays after that",
        "detail": {
          "usual": "Thursday",
          "expected": "2026-11-12",
          "actual": "2026-11-13"
        },
        "source": "City collection calendar (Recycle Coach)",
        "sourceUrl": "https://www.princegeorge.ca/city-services/garbage-recycling",
        "license": "Public information published by the City; dates only, with a link to the City",
        "fetchedAt": "2026-10-05T11:50:14.256Z"
      },
      "… 4 more"
    ]
  },
  "meta": {
    "source": "Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes; transit from BC Transit open data (GTFS schedule); garbage from the City collection calendar (Recycle Coach)",
    "sourceUrl": "https://canada-holidays.ca/",
    "updatedAt": "2026-10-12T11:50:06.825Z",
    "ageSec": 341898,
    "license": "MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE). Changes: each item’s own source and licence",
    "attribution": "Canada Holidays API, BC Transit, City collection calendar, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/holidays/next",
    "next": null,
    "docs": "/developers/reference/city/#get-holidays-next"
  }
}
```

## GET /api/v1/holidays/calendar {#get-holidays-calendar}

Every holiday with a page, statutory or not: dates this year and next, and what changes.

The holiday calendar behind /holidays/<slug>/: statutory holidays in BC and other days people plan around (Easter Monday, Boxing Day, Halloween, Mother’s Day, Lunar New Year...). Dates are computed from each day’s rule; `statutory` comes from the Canada Holidays API, checked against the province’s own list (`checks`). `labourCode`: a general holiday under the Canada Labour Code. `changes`: bus and garbage changes for the next occurrence where they are worked out.

- Cache: 1 h
- Source: [Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes; transit from BC Transit open data (GTFS schedule); garbage from the City collection calendar (Recycle Coach)](https://canada-holidays.ca/)
- Licence: MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE). Changes: each item’s own source and licence

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "days": [
      {
        "slug": "halloween",
        "name": "Halloween",
        "path": "/holidays/halloween/",
        "about": "October 31.",
        "rule": "October 31 every year",
        "labourCode": false,
        "thisYear": {
          "year": 2026,
          "date": "2026-10-31",
          "observed": "2026-10-31",
          "statutory": false,
          "daysAway": 15,
          "weekday": "Saturday",
          "from": "source"
        },
        "nextYear": {
          "year": 2027,
          "date": "2027-10-31",
          "observed": "2027-10-31",
          "statutory": false,
          "daysAway": 380,
          "weekday": "Sunday",
          "from": "source"
        },
        "next": {
          "year": 2026,
          "date": "2026-10-31",
          "observed": "2026-10-31",
          "statutory": false,
          "daysAway": 15,
          "weekday": "Saturday",
          "from": "source"
        },
        "changes": []
      },
      {
        "slug": "remembrance-day",
        "name": "Remembrance Day",
        "path": "/holidays/remembrance-day/",
        "about": "November 11, marking the end of the First World War and honouring those who served.",
        "rule": "November 11 every year",
        "labourCode": true,
        "thisYear": {
          "year": 2026,
          "date": "2026-11-11",
          "observed": "2026-11-11",
          "statutory": true,
          "daysAway": 26,
          "weekday": "Wednesday",
          "from": "source"
        },
        "nextYear": {
          "year": 2027,
          "date": "2027-11-11",
          "observed": "2027-11-11",
          "statutory": true,
          "daysAway": 391,
          "weekday": "Thursday",
          "from": "source"
        },
        "next": {
          "year": 2026,
          "date": "2026-11-11",
          "observed": "2026-11-11",
          "statutory": true,
          "daysAway": 26,
          "weekday": "Wednesday",
          "from": "source"
        },
        "changes": [
          "{…}",
          "{…}",
          "… 4 more"
        ]
      },
      "… 20 more"
    ],
    "checks": [
      {
        "year": 2026,
        "status": "match",
        "problems": [],
        "source": "B.C. Employment Standards: statutory holidays",
        "sourceUrl": "https://www2.gov.bc.ca/gov/content/employment-business/employment-standards-advice/employment-standards/statutory-holidays",
        "checkedAt": "2026-10-12T11:50:06.825Z"
      },
      {
        "year": 2027,
        "status": "match",
        "problems": [],
        "source": "B.C. Employment Standards: statutory holidays",
        "sourceUrl": "https://www2.gov.bc.ca/gov/content/employment-business/employment-standards-advice/employment-standards/statutory-holidays",
        "checkedAt": "2026-10-12T11:50:06.825Z"
      }
    ]
  },
  "meta": {
    "source": "Canada Holidays API (canada-holidays.ca), compiled from provincial and federal statutes; transit from BC Transit open data (GTFS schedule); garbage from the City collection calendar (Recycle Coach)",
    "sourceUrl": "https://canada-holidays.ca/",
    "updatedAt": "2026-10-12T11:50:06.825Z",
    "ageSec": 341898,
    "license": "MIT licence, Paul Craig (https://github.com/pcraig3/hols/blob/main/LICENSE). Changes: each item’s own source and licence",
    "attribution": "Canada Holidays API, BC Transit, City collection calendar, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/holidays/calendar",
    "next": null,
    "docs": "/developers/reference/city/#get-holidays-calendar"
  }
}
```
