# Transit: API reference

10 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/transit/routes {#get-transit-routes}

Prince George Transit routes with colours and headsigns.

- Cache: 1 h (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "1-PRG",
      "short": "1",
      "name": "Heritage",
      "color": "#004B8D",
      "text": "#FFFFFF",
      "headsigns": [
        "Heritage"
      ]
    },
    {
      "id": "5-PRG",
      "short": "5",
      "name": "Victoria/5th",
      "color": "#8CC63F",
      "text": "#FFFFFF",
      "headsigns": [
        "Victoria - To Pine Centre",
        "Victoria To Downtown"
      ]
    },
    "… 16 more"
  ],
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-12T11:40:09.498Z",
    "ageSec": 360543,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)",
    "feedVersion": "202610120/20261011 21:00:00/20261012 04:00:00",
    "serviceStart": "20261010",
    "serviceEnd": "20270102"
  },
  "links": {
    "self": "/api/v1/transit/routes",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-routes"
  }
}
```

## GET /api/v1/transit/stops {#get-transit-stops}

Bus stops (search by name, route or distance).

- Cache: 1 h (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)
- Paginated: `limit` (default 100, max 1000) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `q` | query | string | Stop name or code contains. Example: `Pine Centre`. |
| `route` | query | string | Route id or short name. Example: `15`. |
| `near` | query | string | Sort by distance from "lat,lng" (adds `distanceM`). Example: `53.9171,-122.7497`. |
| `limit` | query | integer | Items per page (default 50, max 500 unless noted). Example: `20`. |
| `offset` | query | integer | Items 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/transit/stops?near=53.9171,-122.7497&limit=3"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "105098",
      "code": "105098",
      "name": "Victoria St at 3rd Ave",
      "lat": 53.91764,
      "lng": -122.74917,
      "wc": false,
      "routes": [
        "15-PRG",
        "47-PRG"
      ],
      "routeNames": [
        "15",
        "47"
      ],
      "departures": "/api/v1/transit/stops/105098/departures",
      "distanceM": 69
    },
    {
      "id": "105100",
      "code": "105100",
      "name": "Victoria St at 5th Ave",
      "lat": 53.91647,
      "lng": -122.75012,
      "wc": false,
      "routes": [
        "15-PRG",
        "47-PRG"
      ],
      "routeNames": [
        "15",
        "47"
      ],
      "departures": "/api/v1/transit/stops/105100/departures",
      "distanceM": 75
    },
    "… 1 more"
  ],
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-12T11:40:09.498Z",
    "ageSec": 360543,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)",
    "total": 563,
    "count": 3,
    "limit": 3,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/transit/stops?near=53.9171,-122.7497&limit=3",
    "next": "/api/v1/transit/stops?near=53.9171%2C-122.7497&limit=3&offset=3",
    "docs": "/developers/reference/transit/#get-transit-stops"
  }
}
```

## GET /api/v1/transit/stops/{id}/departures {#get-transit-stops-id-departures}

Next departures at a stop (real-time where available) plus relevant service alerts.

`scheduledAt` and `expectedAt` are ISO 8601 times; `scheduled` and `expected` give the same instants in epoch milliseconds. `live` is true when `expected` comes from real-time data rather than the timetable.

- Cache: 20 s (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `id` | path | string | Stop id or stop code (see /transit/stops). Required. Example: `180053`. |

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/transit/stops/180053/departures"
```

**Example response** (trimmed)

```json
{
  "data": {
    "stop": {
      "id": "180053",
      "code": "180053",
      "name": "N Nechako Rd at Arend Dr",
      "lat": 53.94288,
      "lng": -122.79258,
      "wc": false,
      "routes": [
        "91-PRG",
        "96-PRG"
      ]
    },
    "departures": [
      {
        "route": "91-PRG",
        "headsign": "Hart",
        "tripId": "2076562:15402382:15405518",
        "scheduled": 1792167000000,
        "expected": 1792167000000,
        "delaySec": 0,
        "live": true,
        "cancelled": false,
        "terminates": false,
        "scheduledAt": "2026-10-16T16:10:00.000Z",
        "expectedAt": "2026-10-16T16:10:00.000Z"
      },
      {
        "route": "91-PRG",
        "headsign": "Hart",
        "tripId": "2076565:15398275:15405518",
        "scheduled": 1792170600000,
        "expected": 1792170600000,
        "delaySec": 0,
        "live": true,
        "cancelled": false,
        "terminates": false,
        "scheduledAt": "2026-10-16T17:10:00.000Z",
        "expectedAt": "2026-10-16T17:10:00.000Z"
      },
      "… 11 more"
    ],
    "alerts": [],
    "realtime": {
      "ok": true,
      "timestamp": 1792165751,
      "trips": 86
    }
  },
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-16T15:49:11.000Z",
    "ageSec": 2,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/stops/180053/departures",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-stops-id-departures"
  }
}
```

## GET /api/v1/transit/shapes {#get-transit-shapes}

Route lines as GeoJSON (one MultiLineString per route).

- Cache: 24 h (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)

- GeoJSON: add `format=geojson` for a bare FeatureCollection

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                -122.78228,
                53.91828
              ],
              [
                -122.78222,
                53.91763
              ],
              "… 133 more"
            ]
          ]
        },
        "properties": {
          "route": "1-PRG",
          "short": "1",
          "name": "Heritage",
          "color": "#004B8D"
        }
      },
      {
        "type": "Feature",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                -122.74733,
                53.91313
              ],
              [
                -122.74818,
                53.9122
              ],
              "… 53 more"
            ],
            [
              [
                -122.78229,
                53.91791
              ],
              [
                -122.78222,
                53.91763
              ],
              "… 49 more"
            ],
            "… 1 more"
          ]
        },
        "properties": {
          "route": "10-PRG",
          "short": "10",
          "name": "Downtown/Spruceland",
          "color": "#F37421"
        }
      },
      "… 16 more"
    ]
  },
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": null,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/shapes",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-shapes"
  }
}
```

## GET /api/v1/transit/routes/{id} {#get-transit-routes-id}

One route: colours, headsigns, its stops and its line as GeoJSON.

- Cache: 1 h (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `id` | path | string | Route id or short name (see /transit/routes). Required. Example: `15`. |

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/transit/routes/15"
```

**Example response** (trimmed)

```json
{
  "data": {
    "id": "15-PRG",
    "short": "15",
    "name": "UNBC/Downtown",
    "color": "#00AA47",
    "text": "#FFFFFF",
    "headsigns": [
      "Downtown",
      "N Downtown via CNC",
      "… 2 more"
    ],
    "stops": [
      {
        "id": "105017",
        "code": "105017",
        "name": "UNBC Exch Bay A",
        "lat": 53.89128,
        "lng": -122.81364,
        "wheelchair": false
      },
      {
        "id": "105005",
        "code": "105005",
        "name": "Nicholson Exch Bay C",
        "lat": 53.90983,
        "lng": -122.78708,
        "wheelchair": false
      },
      "… 42 more"
    ],
    "line": {
      "type": "Feature",
      "geometry": {
        "type": "MultiLineString",
        "coordinates": [
          [
            [
              -122.81364,
              53.89128
            ],
            [
              -122.81394,
              53.89147
            ],
            "… 95 more"
          ],
          [
            [
              -122.74733,
              53.91313
            ],
            [
              -122.74818,
              53.9122
            ],
            "… 71 more"
          ],
          "… 5 more"
        ]
      },
      "properties": {
        "route": "15-PRG",
        "color": "#00AA47"
      }
    }
  },
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-12T11:40:09.498Z",
    "ageSec": 360544,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/routes/15",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-routes-id"
  }
}
```

## GET /api/v1/transit/feed {#get-transit-feed}

The schedule PG Pulse holds: GTFS feed version, service dates and counts, and when it was loaded.

- Cache: 1 h
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "version": "202610120/20261011 21:00:00/20261012 04:00:00",
    "start": "20261010",
    "end": "20270102",
    "builtAt": "2026-10-12T11:40:09.498Z",
    "routes": 18,
    "stops": 563,
    "trips": 2940,
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://bct.tmix.se/Tmix.Cap.TdExport.WebApi/gtfs/?operatorIds=22",
    "licence": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)"
  },
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-12T11:40:09.498Z",
    "ageSec": 360544,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/feed",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-feed"
  }
}
```

## GET /api/v1/transit/alerts {#get-transit-alerts}

BC Transit service alerts for Prince George (detours, cancellations), current and recent, kept in the PG Pulse database.

- Cache: 1 min (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)
- Paginated: `limit` (default 50, max 500) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `history` | query | boolean | Include alerts that ended in the last `days` days. |
| `days` | query | integer | History window in days (default 90, max 365). Example: `30`. |
| `limit` | query | integer | Items per page (default 50, max 500 unless noted). Example: `20`. |
| `offset` | query | integer | Items 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/transit/alerts"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "ft-TX1298850",
      "header": "DETOUR",
      "description": "Route 46 is on detour Every Saturday till Oct 2026 from 6:30am-4:00:pm. Due to the Farmer's Market closing Quebec St between 3rd Ave to 2nd Ave.",
      "url": null,
      "routes": [
        "46-PRG"
      ],
      "stops": [
        "180003",
        "105031"
      ],
      "startsAt": "2026-10-17T13:30:00.000Z",
      "endsAt": "2026-10-17T23:00:00.000Z",
      "firstSeen": "2026-10-16T14:40:08.055Z",
      "lastSeen": "2026-10-16T15:49:13.108Z",
      "active": true
    }
  ],
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-16T15:49:13.108Z",
    "ageSec": 0,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)",
    "total": 1,
    "count": 1,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/transit/alerts",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-alerts"
  }
}
```

## GET /api/v1/transit/fares {#get-transit-fares}

Prince George Transit fares and passes, copied from BC Transit's fares page.

- Cache: 1 h
- Source: [The transit operator’s published fares page](https://princegeorgepulse.ca/getting-around/)
- Licence: Facts copied from the operator's published fares, with attribution

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "source": {
      "name": "BC Transit: Prince George fares",
      "url": "https://www.bctransit.com/prince-george/fares/"
    },
    "checked": "2026-09-30",
    "effective": "2026-09-06",
    "fares": [
      {
        "id": "adult-single",
        "product": "Single ride",
        "rider": "Adult (19–64)",
        "price": 2.75,
        "note": "No transfers included. Cash (exact change), Umo or contactless.",
        "source": {
          "name": "BC Transit: Prince George fares",
          "url": "https://www.bctransit.com/prince-george/fares/"
        }
      },
      {
        "id": "adult-daypass",
        "product": "DayPASS",
        "rider": "Adult (19–64)",
        "price": 5.5,
        "note": "Applied automatically after the second Umo Cash Balance or contactless payment of the day.",
        "source": {
          "name": "BC Transit: Prince George fares",
          "url": "https://www.bctransit.com/prince-george/fares/"
        }
      },
      "… 12 more"
    ],
    "paymentMethods": [
      "Umo app (QR) or Umo reloadable card",
      "Contactless Visa, Mastercard, American Express, Interac Debit; Apple Pay, Google Pay, Samsung Pay",
      "… 1 more"
    ],
    "notes": "New fares took effect September 6, 2026 (first increase since 2019); 10-ticket sheets discontinued. Children 12 and under ride free (provincial program; no ID needed). Route 161 to Burns Lake has separate fares ($5 on…",
    "discontinued": [
      {
        "product": "10-Tickets",
        "previousPrice": 22.5
      }
    ],
    "relatedSources": [
      {
        "name": "BC Transit: Fare and service change for Prince George (24 Aug 2026)",
        "url": "https://www.bctransit.com/fare-and-service-change-for-prince-george-2026-08-24/"
      },
      {
        "name": "BC Transit: Free transit for children 12 and under",
        "url": "https://www.bctransit.com/prince-george/fares/free-transit-12-under/"
      },
      "… 1 more"
    ]
  },
  "meta": {
    "source": "BC Transit: Prince George fares",
    "sourceUrl": "https://www.bctransit.com/prince-george/fares/",
    "updatedAt": "2026-09-30T12:00:00Z",
    "ageSec": 1396153,
    "license": "Facts copied from the operator's published fares, with attribution",
    "attribution": "The transit operator, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/fares",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-fares"
  }
}
```

## GET /api/v1/transit/handydart {#get-transit-handydart}

handyDART accessible door-to-door service in Prince George: who can use it, how to register and book, fare and contacts.

- Cache: 1 h
- Source: [The transit operator’s published handyDART pages](https://princegeorgepulse.ca/getting-around/)
- Licence: Facts copied from the operator's published pages, with attribution

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "description": "Shared door-to-door accessible transit for people with permanent or temporary disabilities who cannot use fixed-route buses without assistance. Free registration required before booking.",
    "phone": "250-562-1394",
    "fax": "250-562-1393",
    "hours": "Service: Mon–Fri 7:30 am–5:30 pm; Thu evening 5:30 pm–10 pm; Sat–Sun 9:30 am–5:30 pm; no holiday service",
    "open": {
      "mon": [
        [
          "07:30",
          "17:30"
        ]
      ],
      "tue": [
        [
          "07:30",
          "17:30"
        ]
      ],
      "wed": [
        [
          "07:30",
          "17:30"
        ]
      ],
      "thu": [
        [
          "07:30",
          "22:00"
        ]
      ],
      "fri": [
        [
          "07:30",
          "17:30"
        ]
      ],
      "sat": [
        [
          "09:30",
          "17:30"
        ]
      ],
      "sun": [
        [
          "09:30",
          "17:30"
        ]
      ]
    },
    "officeHours": "Mon–Fri 8:30 am–noon and 1 pm–4 pm",
    "officeOpen": {
      "mon": [
        [
          "08:30",
          "12:00"
        ],
        [
          "13:00",
          "16:00"
        ]
      ],
      "tue": [
        [
          "08:30",
          "12:00"
        ],
        [
          "13:00",
          "16:00"
        ]
      ],
      "wed": [
        [
          "08:30",
          "12:00"
        ],
        [
          "13:00",
          "16:00"
        ]
      ],
      "thu": [
        [
          "08:30",
          "12:00"
        ],
        [
          "13:00",
          "16:00"
        ]
      ],
      "fri": [
        [
          "08:30",
          "12:00"
        ],
        [
          "13:00",
          "16:00"
        ]
      ],
      "sat": [],
      "sun": []
    },
    "addr": "Client Registrar, 1041 Great St, Prince George, BC V2N 2K8",
    "eligibility": "People with a permanent or temporary disability that prevents them from using fixed-route transit without assistance; complete the handyDART application form (optional medical verification form).",
    "booking": "Reservation trips up to 14 days ahead, first to call; subscription trips limited. Cancel at least 2 hours before pick-up. 20–30 minute pick-up window.",
    "fare": "$2.75 single ride (ages 13 and up); attendants and children 12 and under free; Umo not accepted.",
    "taxiSaver": "https://www.bctransit.com/prince-george/riderinfo/handydart/taxi-saver/",
    "…": "6 more keys"
  },
  "meta": {
    "source": "BC Transit: Prince George handyDART",
    "sourceUrl": "https://www.bctransit.com/prince-george/riderinfo/handydart/",
    "updatedAt": "2026-09-30T12:00:00Z",
    "ageSec": 1396153,
    "license": "Facts copied from the operator's published pages, with attribution",
    "attribution": "The transit operator, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/handydart",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-handydart"
  }
}
```

## GET /api/v1/transit/vehicles {#get-transit-vehicles}

Live bus positions and current service alerts.

`timestamp` fields are GTFS-realtime epoch seconds (kept for existing clients); `observedAt` gives the same instants in ISO 8601, and `meta.updatedAt` is the feed time.

- Cache: 20 s (live source, cached on our server)
- Source: [BC Transit open data (GTFS and GTFS-realtime)](https://www.bctransit.com/open-data/)
- Licence: BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "ok": true,
    "timestamp": 1792165751,
    "alerts": [
      {
        "id": "ft-TX1298850",
        "routes": [
          "46-PRG"
        ],
        "stops": [
          "180003",
          "105031"
        ],
        "header": "DETOUR",
        "description": "Route 46 is on detour Every Saturday till Oct 2026 from 6:30am-4:00:pm. Due to the Farmer's Market closing Quebec St between 3rd Ave to 2nd Ave.",
        "start": 1792243800,
        "end": 1792278000,
        "cause": 1,
        "effect": 7
      }
    ],
    "vehicles": [
      {
        "id": "3131112990",
        "label": "3131112990",
        "lat": 53.96461868286133,
        "lng": -122.7998046875,
        "bearing": 249.10000610351562,
        "route": "91-PRG",
        "headsign": "Spruceland",
        "timestamp": 1792165732,
        "observedAt": "2026-10-16T15:48:52.000Z"
      },
      {
        "id": "3131119259",
        "label": "3131119259",
        "lat": 53.86691665649414,
        "lng": -122.76509094238281,
        "bearing": 358.20001220703125,
        "route": "16-PRG",
        "headsign": "College Heights",
        "timestamp": 1792165737,
        "observedAt": "2026-10-16T15:48:57.000Z"
      },
      "… 21 more"
    ],
    "observedAt": "2026-10-16T15:49:11.000Z"
  },
  "meta": {
    "source": "BC Transit open data (GTFS and GTFS-realtime)",
    "sourceUrl": "https://www.bctransit.com/open-data/",
    "updatedAt": "2026-10-16T15:49:11.000Z",
    "ageSec": 2,
    "license": "BC Transit Open Data Terms of Use (https://www.bctransit.com/open-data/terms-of-use/)",
    "attribution": "BC Transit, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/transit/vehicles",
    "next": null,
    "docs": "/developers/reference/transit/#get-transit-vehicles"
  }
}
```
