# Guides: API reference

15 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/guides/sections {#get-guides-sections}

Guide sections: explore, city, visit, civic.

- Cache: 24 h
- Source: [PG Pulse guides (plain-language guides with links to official sources)](https://princegeorgepulse.ca/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "explore",
      "label": "Explore PG",
      "title": "Explore Prince George: history, geography and neighbourhoods",
      "description": "The story of Prince George: Lheidli T’enneh territory, the fur trade and railway boom, the old glacial lake, the two rivers and every neighbourhood.",
      "icon": "Compass",
      "crumb": "Explore",
      "url": "/explore/",
      "count": 10,
      "api": "/api/v1/guides?section=explore"
    },
    {
      "id": "city",
      "label": "City services",
      "title": "Prince George city services, explained",
      "description": "Plain-language guides to City of Prince George services: garbage and recycling, water, property taxes, snow clearing, transit, permits, bylaws and more.",
      "icon": "Building2",
      "crumb": "City services",
      "url": "/city/",
      "count": 18,
      "api": "/api/v1/guides?section=city"
    },
    "… 2 more"
  ],
  "meta": {
    "source": "PG Pulse guides (plain-language guides with links to official sources)",
    "sourceUrl": "https://princegeorgepulse.ca/",
    "updatedAt": null,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/guides/sections",
    "next": null,
    "docs": "/developers/reference/guides/#get-guides-sections"
  }
}
```

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

Every guide (history, city services, visiting, civic life) with metadata.

- Cache: 24 h
- Source: [PG Pulse guides (plain-language guides with links to official sources)](https://princegeorgepulse.ca/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)
- Paginated: `limit` (default 100, max 200) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `section` | query | string | Section id. One of: `explore`, `city`, `visit`, `civic`. |
| `q` | query | string | Text search. |
| `body` | query | boolean | Include each guide’s Markdown body. |
| `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/guides?section=city&limit=2"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "slug": "moving-to-prince-george",
      "section": "city",
      "title": "Moving to Prince George: a new resident checklist",
      "description": "A checklist for settling into Prince George: utilities, garbage day, alerts, MSP and a family doctor, ICBC, voting, schools and winter readiness.",
      "updated": "2026-09-30T00:00:00.000Z",
      "published": null,
      "checked": null,
      "order": 5,
      "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Prince_George%27s_welcome_sign.JPG/1280px-Prince_George%27s_welcome_sign.JPG",
      "imageAlt": "The white ‘Welcome to Prince George’ sign surrounded by spruce trees",
      "imageCredit": "Photo: Andybremner2012, CC BY-SA 4.0 via Wikimedia Commons",
      "tags": [
        "newcomers",
        "moving",
        "… 2 more"
      ],
      "…": "4 more keys"
    },
    {
      "slug": "garbage-and-recycling",
      "section": "city",
      "title": "Garbage, recycling and the landfill",
      "description": "How curbside garbage and recycling work in Prince George: cart sizes and costs, set-out times, bear rules and where to take what the cart won’t.",
      "updated": "2026-09-30T00:00:00.000Z",
      "published": null,
      "checked": null,
      "order": 10,
      "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/365%2C_Rainbow_theme%2C_Orange_%283201663049%29.jpg/1280px-365%2C_Rainbow_theme%2C_Orange_%283201663049%29.jpg",
      "imageAlt": "A curbside recycling truck collecting on a snowy residential street in winter (a truck in Leamington, Ontario, shown as a generic example)",
      "imageCredit": "Photo: Andrea_44, CC BY 2.0 via Wikimedia Commons",
      "tags": [
        "garbage",
        "recycling",
        "… 3 more"
      ],
      "…": "4 more keys"
    }
  ],
  "meta": {
    "source": "PG Pulse guides (plain-language guides with links to official sources)",
    "sourceUrl": "https://princegeorgepulse.ca/",
    "updatedAt": null,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)",
    "total": 18,
    "count": 2,
    "limit": 2,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/guides?section=city&limit=2",
    "next": "/api/v1/guides?section=city&limit=2&offset=2",
    "docs": "/developers/reference/guides/#get-guides"
  }
}
```

## GET /api/v1/guides/{section}/{slug} {#get-guides-section-slug}

One guide: metadata, at-a-glance facts, FAQ, official links, sources and the full Markdown body.

- Cache: 24 h
- Source: [PG Pulse guides (plain-language guides with links to official sources)](https://princegeorgepulse.ca/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `section` | path | string | Section id. Required. Example: `city`. |
| `slug` | path | string | Guide slug. Required. Example: `garbage-and-recycling`. |

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/guides/city/garbage-and-recycling"
```

**Example response** (trimmed)

```json
{
  "data": {
    "slug": "garbage-and-recycling",
    "section": "city",
    "title": "Garbage, recycling and the landfill",
    "description": "How curbside garbage and recycling work in Prince George: cart sizes and costs, set-out times, bear rules and where to take what the cart won’t.",
    "updated": "2026-09-30T00:00:00.000Z",
    "published": null,
    "checked": null,
    "order": 10,
    "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/365%2C_Rainbow_theme%2C_Orange_%283201663049%29.jpg/1280px-365%2C_Rainbow_theme%2C_Orange_%283201663049%29.jpg",
    "imageAlt": "A curbside recycling truck collecting on a snowy residential street in winter (a truck in Leamington, Ontario, shown as a generic example)",
    "imageCredit": "Photo: Andrea_44, CC BY 2.0 via Wikimedia Commons",
    "tags": [
      "garbage",
      "recycling",
      "… 3 more"
    ],
    "…": "8 more keys"
  },
  "meta": {
    "source": "PG Pulse guides (plain-language guides with links to official sources)",
    "sourceUrl": "https://princegeorgepulse.ca/",
    "updatedAt": "2026-09-30T00:00:00.000Z",
    "ageSec": 1439354,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/guides/city/garbage-and-recycling",
    "next": null,
    "docs": "/developers/reference/guides/#get-guides-section-slug"
  }
}
```

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

Resource hub: forms, PDFs, maps, data, apps and phone numbers.

- Cache: 24 h
- Source: [PG Pulse resource hub (links to official services)](https://princegeorgepulse.ca/resources/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)
- Paginated: `limit` (default 200, max 500) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `category` | query | string | Category name. |
| `kind` | query | string | Kind. One of: `link`, `pdf`, `form`, `map`, `data`, `app`, `phone`. |
| `q` | query | string | Text search. |
| `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/resources"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "988",
      "title": "9-8-8 Suicide Crisis Helpline",
      "url": "https://988.ca",
      "kind": "phone",
      "category": "Health",
      "description": "Call or text 9-8-8 any time for suicide crisis support.",
      "publisher": "9-8-8 Suicide Crisis Helpline"
    },
    {
      "id": "addresschange-bc",
      "title": "AddressChangeBC",
      "url": "https://www.addresschange.gov.bc.ca/",
      "kind": "form",
      "category": "Government",
      "description": "Update your address with several BC government services at once.",
      "publisher": "Province of British Columbia"
    },
    "… 134 more"
  ],
  "meta": {
    "source": "PG Pulse resource hub (links to official services)",
    "sourceUrl": "https://princegeorgepulse.ca/resources/",
    "updatedAt": null,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)",
    "categories": [
      "Business",
      "City services",
      "… 10 more"
    ],
    "total": 136,
    "count": 136,
    "limit": 200,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/resources",
    "next": null,
    "docs": "/developers/reference/guides/#get-resources"
  }
}
```

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

Visit roundups (indoor activities, party venues…) with their place counts.

- Cache: 1 h
- Source: [PG Pulse visit roundups](https://princegeorgepulse.ca/visit/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "indoor-activities",
      "title": "Indoor things to do in Prince George: rainy days and winter",
      "description": "Where to go in Prince George when it rains, smokes or hits −25°C: VR and arcades, bowling, climbing, skating, indoor playgrounds, museums and shows.",
      "updated": "2026-09-30",
      "groups": 6,
      "places": 28,
      "url": "/visit/indoor-activities/",
      "api": "/api/v1/visit/indoor-activities"
    },
    {
      "id": "party-venues",
      "title": "Party and event venues in Prince George",
      "description": "Where to hold a party or event in Prince George: kids’ birthday spots, private rooms, banquet halls, ballrooms, wedding venues and picnic shelters.",
      "updated": "2026-09-30",
      "groups": 6,
      "places": 36,
      "url": "/visit/party-venues/",
      "api": "/api/v1/visit/party-venues"
    }
  ],
  "meta": {
    "source": "Each venue’s own website and published information, and City booking pages (see each list’s sources)",
    "sourceUrl": "https://princegeorgepulse.ca/visit/",
    "updatedAt": "2026-10-12T18:45:48.777Z",
    "ageSec": 335005,
    "license": "Facts (hours, addresses, services) copied from each business’s own published information, with a link to it",
    "attribution": "Each venue’s own website and published information, and City booking pages (see each list’s sources), compiled by PG Pulse"
  },
  "links": {
    "self": "/api/v1/visit",
    "next": null,
    "docs": "/developers/reference/guides/#get-visit"
  }
}
```

## GET /api/v1/visit/{list} {#get-visit-list}

One visit roundup: groups of places with where, what and links, as on the page.

Places link to their directory profile (`business`, when listed) or the official site (`url`). Facts come from each venue’s own published information (`sources`). Hours and prices are deliberately not included.

- Cache: 1 h
- Source: [PG Pulse visit roundups](https://princegeorgepulse.ca/visit/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `list` | path | string | List id from /visit. Required. Example: `indoor-activities`. |

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/visit/indoor-activities"
```

**Example response** (trimmed)

```json
{
  "data": {
    "id": "indoor-activities",
    "title": "Indoor things to do in Prince George: rainy days and winter",
    "description": "Where to go in Prince George when it rains, smokes or hits −25°C: VR and arcades, bowling, climbing, skating, indoor playgrounds, museums and shows.",
    "updated": "2026-09-30",
    "intro": "Smoke days in August, sleet in April and −25°C in January all happen here, so locals know where to go when the weather turns. Everything below is in town and open year-round. Hours change with the season, so check bef…",
    "url": "/visit/indoor-activities/",
    "groups": [
      {
        "id": "games",
        "title": "Games, arcades and VR",
        "intro": "Downtown has two game venues side by side on Victoria Street, and there are arcades on the south side and out on Highway 97.",
        "places": [
          "{…}",
          "{…}",
          "… 3 more"
        ]
      },
      {
        "id": "active",
        "title": "Bowling, climbing, skating and sport",
        "intro": "Burn off energy without going outside: three bowling alleys, a climbing gym, a roller rink and year-round sport.",
        "places": [
          "{…}",
          "{…}",
          "… 6 more"
        ]
      },
      "… 4 more"
    ],
    "notes": null,
    "faq": [],
    "directoryCategories": [
      "venues",
      "kids-play",
      "… 2 more"
    ],
    "sources": [
      "https://www.princegeorge.ca/parks-recreation",
      "https://tourismpg.com/"
    ]
  },
  "meta": {
    "source": "Each venue’s own website and published information, and City booking pages (see each list’s sources)",
    "sourceUrl": "https://princegeorgepulse.ca/visit/",
    "updatedAt": "2026-10-12T18:45:48.777Z",
    "ageSec": 335005,
    "license": "Facts (hours, addresses, services) copied from each business’s own published information, with a link to it",
    "attribution": "Each venue’s own website and published information, and City booking pages (see each list’s sources), compiled by PG Pulse"
  },
  "links": {
    "self": "/api/v1/visit/indoor-activities",
    "next": null,
    "docs": "/developers/reference/guides/#get-visit-list"
  }
}
```

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

The local trivia quiz: questions, answers (first is correct), explanations and source links.

The same questions the quiz page ships to the browser (answers included: the quiz checks them client-side). Edited in the admin; `more` links to the page that backs each answer up.

- Cache: 1 h
- Source: [PG Pulse trivia](https://princegeorgepulse.ca/trivia/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)
- Paginated: `limit` (default 100, max 500) and `offset`; also `format=csv`

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "question": "Which two rivers meet in Prince George?",
      "answers": [
        "The Fraser and the Nechako",
        "The Fraser and the Thompson",
        "… 2 more"
      ],
      "correct": "The Fraser and the Nechako",
      "why": "The Nechako flows in from the west and joins the Fraser right beside downtown.",
      "more": "/explore/geography-and-rivers/"
    },
    {
      "question": "What does “Lheidli T’enneh” mean?",
      "answers": [
        "The people from where the two rivers flow together",
        "The people of the spruce forest",
        "… 2 more"
      ],
      "correct": "The people from where the two rivers flow together",
      "why": "The Lheidli T’enneh have lived at the confluence for thousands of years.",
      "more": "/indigenous/"
    },
    "… 12 more"
  ],
  "meta": {
    "source": "PG Pulse trivia",
    "sourceUrl": "https://princegeorgepulse.ca/trivia/",
    "updatedAt": null,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)",
    "total": 14,
    "count": 14,
    "limit": 100,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/trivia",
    "next": null,
    "docs": "/developers/reference/guides/#get-trivia"
  }
}
```

## GET /api/v1/mascot/today {#get-mascot-today}

The mascot’s line of the day on the home page (null when none is scheduled).

- Cache: 10 min
- Source: [PG Pulse message of the day](https://princegeorgepulse.ca/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "date": "2026-10-16",
    "mascot": "Mr. PG",
    "text": null,
    "href": null
  },
  "meta": {
    "source": "PG Pulse message of the day",
    "sourceUrl": "https://princegeorgepulse.ca/",
    "updatedAt": null,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/mascot/today",
    "next": null,
    "docs": "/developers/reference/guides/#get-mascot-today"
  }
}
```

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

Answers to the questions residents ask most often: short answer, live values, our pages and official sources.

Search with `q` (words of a question) or filter by `topic`. Each answer has `short` (one or two sentences), `answer` (Markdown, live numbers already filled in from our own API), `facts` (each live value with its as-of date and source), `links` (pages on this site), `official` (official sources, with the result of the weekly link check) and `checked` (when the answer was last reviewed).

- Cache: 10 min
- Source: [Answers compiled from our own pages and the official sources linked in each answer; live values from our public API](https://princegeorgepulse.ca/answers/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); each answer links its official sources
- Paginated: `limit` (default 50, max 100) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `q` | query | string | Words of the question. Example: `family doctor`. |
| `topic` | query | string | Topic id (see /answers/topics). Example: `health`. |
| `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/answers"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "should-i-move",
      "theme": 1,
      "topic": "moving",
      "topicLabel": "Moving and settling in",
      "question": "Should I move to Prince George?",
      "also": [
        "Is Prince George a good place to live?",
        "Do people regret moving to PG?",
        "… 1 more"
      ],
      "short": "It depends on what you want: lower housing costs than the south coast, a strong job market in health, education, forestry and trades, and big outdoors, against long cold winters, a pulp-mill smell on some days and a h…",
      "answer": "Look at the numbers before the opinions. Rents run about $1,422 a month for a two-bedroom (CMHC average), the regional unemployment rate is 6.2%, and January averages −7.8 °C. Prince George is the service hub for nort…",
      "facts": [
        {
          "key": "population",
          "label": "Population (latest estimate)",
          "api": "/api/v1/people",
          "value": "85,944",
          "asOf": "July 1, 2025",
          "source": "Statistics Canada, 2021 Census Profile and table 17-10-0155 population estimates",
          "sourceUrl": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1710015501",
          "href": "/dashboard/people/"
        },
        {
          "key": "rent2br",
          "label": "Average rent, two bedrooms",
          "api": "/api/v1/housing",
          "value": "$1,422 a month",
          "asOf": "October 2025",
          "source": "CMHC, BC Northern Real Estate Board, BC Assessment, Statistics Canada",
          "sourceUrl": "https://princegeorgepulse.ca/dashboard/housing/",
          "href": "/dashboard/housing/"
        },
        "… 4 more"
      ],
      "links": [
        {
          "label": "Moving to Prince George: the numbers",
          "url": "/move/"
        },
        {
          "label": "Neighbourhoods compared",
          "url": "/neighbourhoods/"
        },
        "… 2 more"
      ],
      "official": [
        {
          "label": "Statistics Canada: population estimates",
          "url": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1710015501",
          "linkOk": true,
          "linkCheckedAt": "2026-10-14T12:40:01.822Z"
        },
        {
          "label": "CMHC Rental Market Survey (via Statistics Canada)",
          "url": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3410013301",
          "linkOk": true,
          "linkCheckedAt": "2026-10-14T12:40:01.822Z"
        }
      ],
      "checked": "2026-10-01",
      "…": "1 more keys"
    },
    {
      "id": "newcomer-essentials",
      "theme": 2,
      "topic": "moving",
      "topicLabel": "Moving and settling in",
      "question": "I just moved here. What do I need to do first?",
      "also": [
        "New to Prince George, general advice",
        "Moving checklist for Prince George"
      ],
      "short": "Enrol in MSP right away, set up BC Hydro, FortisBC and your City utility account, find your garbage day, sign up for emergency alerts, register for a family doctor, then switch your driver’s licence at ICBC within 90 …",
      "answer": "Do the things with waiting periods first:\n\n- **MSP** (BC health coverage) has a waiting period, so apply in week one and arrange private coverage for the gap.\n- **Health Connect Registry** puts you on the list for a f…",
      "facts": [],
      "links": [
        {
          "label": "Newcomers and students: first weeks",
          "url": "/move/newcomers/"
        },
        {
          "label": "Your first 30 days checklist",
          "url": "/move/#first-30-days"
        },
        "… 2 more"
      ],
      "official": [
        {
          "label": "Enrol in MSP",
          "url": "https://www2.gov.bc.ca/gov/content/health/health-drug-coverage/msp/bc-residents/eligibility-and-enrolment/how-to-enrol",
          "linkOk": false,
          "linkCheckedAt": "2026-10-14T12:40:01.822Z"
        },
        {
          "label": "ICBC: moving to BC",
          "url": "https://www.icbc.com/driver-licensing/moving-bc",
          "linkOk": true,
          "linkCheckedAt": "2026-10-14T12:40:01.822Z"
        },
        "… 2 more"
      ],
      "checked": "2026-10-01",
      "…": "1 more keys"
    },
    "… 46 more"
  ],
  "meta": {
    "source": "Answers compiled from our own pages and the official sources linked in each answer; live values from our public API",
    "sourceUrl": "https://princegeorgepulse.ca/answers/",
    "updatedAt": "2026-10-14T12:40:01.822Z",
    "ageSec": 184153,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); each answer links its official sources",
    "attribution": "Answers compiled from our own pages and the official sources linked in each answer; live values from our public API, via PG Pulse (princegeorgepulse.ca)",
    "total": 48,
    "count": 48,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/answers",
    "next": null,
    "docs": "/developers/reference/guides/#get-answers"
  }
}
```

## GET /api/v1/answers/topics {#get-answers-topics}

Answer topics with the number of questions in each.

- Cache: 1 h
- Source: [Answers compiled from our own pages and the official sources linked in each answer; live values from our public API](https://princegeorgepulse.ca/answers/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); each answer links its official sources

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "moving",
      "label": "Moving and settling in",
      "blurb": "Whether to move, where to live, finding a rental and your rights as a tenant.",
      "count": 6
    },
    {
      "id": "home",
      "label": "Home, utilities and services",
      "blurb": "Power, gas, water, internet, garbage and what they cost.",
      "count": 5
    },
    "… 9 more"
  ],
  "meta": {
    "source": "Answers compiled from our own pages and the official sources linked in each answer; live values from our public API",
    "sourceUrl": "https://princegeorgepulse.ca/answers/",
    "updatedAt": "2026-10-01T00:00:00-07:00",
    "updatedAtPrecision": "day",
    "ageSec": 1327755,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); each answer links its official sources",
    "attribution": "Answers compiled from our own pages and the official sources linked in each answer; live values from our public API, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/answers/topics",
    "next": null,
    "docs": "/developers/reference/guides/#get-answers-topics"
  }
}
```

## GET /api/v1/answers/{id} {#get-answers-id}

One answer with its live values, our pages and official sources.

- Cache: 10 min
- Source: [Answers compiled from our own pages and the official sources linked in each answer; live values from our public API](https://princegeorgepulse.ca/answers/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); each answer links its official sources

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `id` | path | string | Answer id (see /answers). Required. Example: `family-doctor`. |

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/answers/should-i-move"
```

**Example response** (trimmed)

```json
{
  "data": {
    "id": "should-i-move",
    "theme": 1,
    "topic": "moving",
    "topicLabel": "Moving and settling in",
    "question": "Should I move to Prince George?",
    "also": [
      "Is Prince George a good place to live?",
      "Do people regret moving to PG?",
      "… 1 more"
    ],
    "short": "It depends on what you want: lower housing costs than the south coast, a strong job market in health, education, forestry and trades, and big outdoors, against long cold winters, a pulp-mill smell on some days and a h…",
    "answer": "Look at the numbers before the opinions. Rents run about $1,422 a month for a two-bedroom (CMHC average), the regional unemployment rate is 6.2%, and January averages −7.8 °C. Prince George is the service hub for nort…",
    "facts": [
      {
        "key": "population",
        "label": "Population (latest estimate)",
        "api": "/api/v1/people",
        "value": "85,944",
        "asOf": "July 1, 2025",
        "source": "Statistics Canada, 2021 Census Profile and table 17-10-0155 population estimates",
        "sourceUrl": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1710015501",
        "href": "/dashboard/people/"
      },
      {
        "key": "rent2br",
        "label": "Average rent, two bedrooms",
        "api": "/api/v1/housing",
        "value": "$1,422 a month",
        "asOf": "October 2025",
        "source": "CMHC, BC Northern Real Estate Board, BC Assessment, Statistics Canada",
        "sourceUrl": "https://princegeorgepulse.ca/dashboard/housing/",
        "href": "/dashboard/housing/"
      },
      "… 4 more"
    ],
    "links": [
      {
        "label": "Moving to Prince George: the numbers",
        "url": "/move/"
      },
      {
        "label": "Neighbourhoods compared",
        "url": "/neighbourhoods/"
      },
      "… 2 more"
    ],
    "official": [
      {
        "label": "Statistics Canada: population estimates",
        "url": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1710015501",
        "linkOk": true,
        "linkCheckedAt": "2026-10-14T12:40:01.822Z"
      },
      {
        "label": "CMHC Rental Market Survey (via Statistics Canada)",
        "url": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3410013301",
        "linkOk": true,
        "linkCheckedAt": "2026-10-14T12:40:01.822Z"
      }
    ],
    "checked": "2026-10-01",
    "…": "1 more keys"
  },
  "meta": {
    "source": "Answers compiled from our own pages and the official sources linked in each answer; live values from our public API",
    "sourceUrl": "https://princegeorgepulse.ca/answers/",
    "updatedAt": "2026-10-14T12:40:01.822Z",
    "ageSec": 184153,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); each answer links its official sources",
    "attribution": "Answers compiled from our own pages and the official sources linked in each answer; live values from our public API, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/answers/should-i-move",
    "next": null,
    "docs": "/developers/reference/guides/#get-answers-id"
  }
}
```

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

Where to stay in Prince George: hotels, motels, B&Bs, campgrounds and RV parks from the business directory.

Open listings whose main directory category is lodging, each with its type (from its own name, licence description and tags: hotel, motel, bnb, camp, other), neighbourhood, street, phone, website and straight-line distance to Downtown, Airport (YXS), UNBC when the listing has coordinates. No prices or ratings. `campgrounds` in meta lists regional campgrounds from the outdoors guide when that module is on.

- Cache: 1 h
- Source: [PG Pulse business directory, compiled from the City of Prince George business licence registry and business websites: lodging category](https://princegeorgepulse.ca/directory/c/hotels/)
- Licence: Listing facts from each business’s own published information and the City of Prince George business licence open data (Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf))
- Paginated: `limit` (default 100, max 500) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `type` | query | string | Type of place. One of: `hotel`, `motel`, `bnb`, `camp`, `other`. Example: `motel`. |
| `area` | query | string | Neighbourhood name (exact, case-insensitive). |
| `q` | query | string | Words in the name or street. |
| `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/stays"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "slug": "1618-inn",
      "name": "1618 Inn",
      "type": "hotel",
      "types": [
        "hotel"
      ],
      "typeLabel": "Hotels",
      "area": "Central Hart",
      "street": "3454 Hart Hwy",
      "phone": "(778) 983-1618",
      "website": null,
      "bookingUrl": null,
      "lat": 53.956703,
      "lng": -122.765165,
      "…": "2 more keys"
    },
    {
      "slug": "97-motor-inn",
      "name": "97 Motor Inn",
      "type": "motel",
      "types": [
        "motel"
      ],
      "typeLabel": "Motels and motor inns",
      "area": "VLA",
      "street": "2713 Spruce St",
      "phone": null,
      "website": null,
      "bookingUrl": null,
      "lat": 53.895718,
      "lng": -122.75814,
      "…": "2 more keys"
    },
    "… 31 more"
  ],
  "meta": {
    "source": "PG Pulse business directory, compiled from the City of Prince George business licence registry and business websites: lodging category",
    "sourceUrl": "https://princegeorgepulse.ca/directory/c/hotels/",
    "updatedAt": "2026-10-15T09:45:16.195Z",
    "ageSec": 108238,
    "license": "Listing facts from each business’s own published information and the City of Prince George business licence open data (Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/Cityof…",
    "attribution": "PG Pulse business directory, compiled from the City of Prince George business licence registry and business websites: lodging category, via PG Pulse (princegeorgepulse.ca)",
    "types": [
      {
        "id": "hotel",
        "label": "Hotels"
      },
      {
        "id": "motel",
        "label": "Motels and motor inns"
      },
      "… 3 more"
    ],
    "distanceFrom": [
      {
        "id": "downtown",
        "label": "Downtown",
        "lat": 53.9171,
        "lng": -122.7497,
        "note": "Straight-line distance"
      },
      {
        "id": "airport",
        "label": "Airport (YXS)",
        "lat": 53.8837,
        "lng": -122.6745,
        "note": "Straight-line distance"
      },
      "… 1 more"
    ],
    "campgrounds": [
      {
        "name": "Northern Experience RV Park",
        "km": 9,
        "driveMin": 11.9,
        "page": "https://princegeorgepulse.ca/outdoors/northern-experience-rv-park/",
        "source": "OpenStreetMap contributors: campgrounds and RV parks",
        "sourceUrl": "https://www.openstreetmap.org/way/104447462"
      },
      {
        "name": "Blue Cedars RV Park and Campground",
        "km": 8.1,
        "driveMin": 12,
        "page": "https://princegeorgepulse.ca/outdoors/blue-cedars-rv-park-and-campground/",
        "source": "OpenStreetMap contributors: campgrounds and RV parks",
        "sourceUrl": "https://www.openstreetmap.org/way/104428937"
      },
      "… 185 more"
    ],
    "total": 33,
    "count": 33,
    "limit": 100,
    "…": "1 more keys"
  },
  "links": {
    "self": "/api/v1/stays",
    "next": null,
    "docs": "/developers/reference/guides/#get-stays"
  }
}
```

## GET /api/v1/visitor-centre {#get-visitor-centre}

The visitor information centre: address, contact, hours by season (with the current season), services and gear lending.

As published by the operator on its own page (`sourceUrl`), hand-checked (`checked`). Lending prices are included only when the operator publishes them.

- Cache: 1 h
- Source: [Tourism Prince George: Visitor Information Centre](https://tourismpg.com/plan-your-visit/visitor-information-centre/)
- Licence: Facts (hours, address, services, lending prices) as published by Tourism Prince George, with a link to the page

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/visitor-centre"
```

**Example response** (trimmed)

```json
{
  "data": {
    "checked": "2026-10-01",
    "centre": {
      "name": "Visitor Information Centre",
      "operator": "Tourism Prince George",
      "address": "850 Canada Games Way, Prince George, BC V2L 5T6",
      "phone": "250-562-3700",
      "email": "info@tourismpg.com",
      "url": "https://tourismpg.com/plan-your-visit/visitor-information-centre/",
      "services": [
        "Travel advice and local tips",
        "Maps and visitor guides",
        "… 4 more"
      ]
    },
    "seasons": [
      {
        "id": "summer",
        "label": "Summer",
        "months": [
          6,
          7,
          "… 1 more"
        ],
        "hours": [
          "{…}",
          "{…}"
        ]
      },
      {
        "id": "winter",
        "label": "Winter",
        "months": [
          9,
          10,
          "… 7 more"
        ],
        "hours": [
          "{…}",
          "{…}"
        ]
      }
    ],
    "lending": [
      {
        "id": "bikes",
        "item": "Bikes",
        "prices": [
          "$5 an hour",
          "$10 for a half day (4 hours)",
          "… 1 more"
        ]
      },
      {
        "id": "disc-golf",
        "item": "Disc golf sets",
        "prices": [
          "$5 for a half day (up to 4 hours)",
          "$10 for a full day"
        ]
      },
      "… 2 more"
    ],
    "current": {
      "id": "winter",
      "label": "Winter",
      "months": [
        9,
        10,
        "… 7 more"
      ],
      "hours": [
        {
          "days": "Monday to Friday",
          "open": "9 am to 4 pm"
        },
        {
          "days": "Saturday and Sunday",
          "open": "Closed"
        }
      ]
    },
    "sourceUrl": "https://tourismpg.com/plan-your-visit/visitor-information-centre/"
  },
  "meta": {
    "source": "Tourism Prince George: Visitor Information Centre",
    "sourceUrl": "https://tourismpg.com/plan-your-visit/visitor-information-centre/",
    "updatedAt": "2026-10-01T00:00:00-07:00",
    "updatedAtPrecision": "day",
    "ageSec": 1327755,
    "license": "Facts (hours, address, services, lending prices) as published by Tourism Prince George, with a link to the page",
    "attribution": "Tourism Prince George: Visitor Information Centre, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/visitor-centre",
    "next": null,
    "docs": "/developers/reference/guides/#get-visitor-centre"
  }
}
```

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

Annual festivals and big recurring events in and around Prince George: typical month, venue, organiser and the next announced date.

An evergreen, hand-checked list: each record cites its organiser’s site and the past editions its typical month comes from (`editions`). `next` is the soonest matching event in the live events calendar (title match on the record’s `match` terms) or null when dates are not announced yet.

- Cache: 30 min
- Source: [Festival organisers’ own sites and dated past editions (each record’s url and editions)](https://princegeorgepulse.ca/visit/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/), our own compilation; facts link to their public sources
- Paginated: `limit` (default 100, max 200) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `month` | query | integer | Typical month (1-12). Example: `8`. |
| `announced` | query | boolean | Only festivals with an announced upcoming date. |
| `q` | query | string | Words in the name, venue, organiser or town. |
| `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/festivals"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "coldsnap",
      "name": "Coldsnap",
      "months": [
        2
      ],
      "when": "Early February, five days",
      "town": "Prince George",
      "venue": "Knox Performance Centre and other downtown venues",
      "organiser": "Prince George Folkfest Society",
      "url": "https://www.coldsnapfestival.com/",
      "category": "music",
      "description": "Winter music festival running since 2007, with evening mainstage concerts, late-night 19+ shows and free daytime IceJams and workshops around downtown.",
      "editions": [
        {
          "start": "2026-02-04",
          "end": "2026-02-08",
          "sourceUrl": "https://www.coldsnapfestival.com/coldsnap2026schedule"
        }
      ],
      "monthsLabel": "February",
      "…": "2 more keys"
    },
    {
      "id": "northern-fancon",
      "name": "Northern FanCon",
      "months": [
        5
      ],
      "when": "Early May, Friday to Sunday",
      "town": "Prince George",
      "venue": "CN Centre",
      "organiser": "CN Centre",
      "url": "https://www.cncentre.ca/events-tickets/events-calendar/northern-fancon-0",
      "category": "culture",
      "description": "Pop culture expo with guest meet-and-greets, panels, workshops, artist alley and a vendor marketplace covering film, TV, gaming, anime and comics.",
      "editions": [
        {
          "start": "2025-05-02",
          "end": "2025-05-04",
          "sourceUrl": "https://www.cncentre.ca/events-tickets/events-calendar/northern-fancon"
        },
        {
          "start": "2026-05-01",
          "end": "2026-05-03",
          "sourceUrl": "https://www.cncentre.ca/events-tickets/events-calendar/northern-fancon-0"
        }
      ],
      "monthsLabel": "May",
      "…": "2 more keys"
    },
    "… 28 more"
  ],
  "meta": {
    "source": "Festival organisers’ own sites and dated past editions (each record’s url and editions)",
    "sourceUrl": "https://princegeorgepulse.ca/visit/",
    "updatedAt": "2026-10-02T03:12:25.440Z",
    "ageSec": 1255009,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/), our own compilation; facts link to their public sources",
    "attribution": "Festival organisers’ own sites and dated past editions (each record’s url and editions), via PG Pulse (princegeorgepulse.ca)",
    "checked": "2026-10-01",
    "page": "https://princegeorgepulse.ca/visit/festivals/",
    "months": [
      "January",
      "February",
      "… 10 more"
    ],
    "total": 30,
    "count": 30,
    "limit": 100,
    "…": "1 more keys"
  },
  "links": {
    "self": "/api/v1/festivals",
    "next": null,
    "docs": "/developers/reference/guides/#get-festivals"
  }
}
```

## GET /api/v1/nearby-towns {#get-nearby-towns}

Nearby towns: road distance and drive time from Prince George, highways, current weather and DriveBC road events in town or on the way.

Distance and drive time are computed weekly by the OSRM routing engine on OpenStreetMap data (ODbL 1.0, © OpenStreetMap contributors (https://www.openstreetmap.org/copyright)); drive time is OSRM’s, without traffic, weather or stops. Weather: Open-Meteo forecast API (current conditions) (CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence)), refreshed every 30 minutes. Road events: DriveBC Open511 API (BC Ministry of Transportation and Transit) (Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc)); `where` is `town` (within the town radius) or `route` (on the route line, outside the city). `roadEvents` is null when DriveBC could not be reached.

- Cache: 10 min (live source, cached on our server)
- Source: [OSRM routing engine (router.project-osrm.org) on OpenStreetMap data](https://project-osrm.org/)
- Licence: ODbL 1.0, © OpenStreetMap contributors (https://www.openstreetmap.org/copyright)

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `q` | query | string | Town name words. |

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

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/nearby-towns"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "id": "hixon",
      "name": "Hixon",
      "kind": "Community",
      "lat": 53.416667,
      "lng": -122.58333,
      "km": 62.3,
      "driveMin": 50,
      "drive": "50 min",
      "highways": [
        "Hwy 97"
      ],
      "straightKm": 57,
      "routedAt": "2026-10-10T11:40:05.778Z",
      "weather": {
        "temp": 10.4,
        "code": 3,
        "windKmh": 20.8,
        "time": "2026-10-16T08:15:00-07:00"
      },
      "…": "3 more keys"
    },
    {
      "id": "bear-lake",
      "name": "Bear Lake",
      "kind": "Community",
      "lat": 54.5,
      "lng": -122.66667,
      "km": 76.4,
      "driveMin": 63,
      "drive": "1 h 3 min",
      "highways": [
        "Hwy 97"
      ],
      "straightKm": 65,
      "routedAt": "2026-10-10T11:40:07.322Z",
      "weather": {
        "temp": 8.8,
        "code": 3,
        "windKmh": 17.7,
        "time": "2026-10-16T08:15:00-07:00"
      },
      "…": "3 more keys"
    },
    "… 13 more"
  ],
  "meta": {
    "source": "OSRM routing engine (router.project-osrm.org) on OpenStreetMap data",
    "sourceUrl": "https://project-osrm.org/",
    "updatedAt": "2026-10-10T11:40:24.033Z",
    "ageSec": 533333,
    "license": "ODbL 1.0, © OpenStreetMap contributors (https://www.openstreetmap.org/copyright)",
    "attribution": "OSRM routing engine (router.project-osrm.org) on OpenStreetMap data, via PG Pulse (princegeorgepulse.ca)",
    "stale": true,
    "weather": {
      "fetchedAt": "2026-10-16T15:18:26.809Z",
      "stale": false,
      "ageSec": 1850,
      "source": "Open-Meteo forecast API (current conditions)",
      "sourceUrl": "https://open-meteo.com/",
      "licence": "CC BY 4.0, Open-Meteo.com (https://open-meteo.com/en/licence)"
    },
    "roads": {
      "fetchedAt": "2026-10-16T15:18:27.589Z",
      "stale": true,
      "ageSec": 1849,
      "source": "DriveBC Open511 API (BC Ministry of Transportation and Transit)",
      "sourceUrl": "https://www.drivebc.ca/",
      "licence": "Open Government Licence – British Columbia (https://www2.gov.bc.ca/gov/content/data/policy-standards/data-policies/open-data/open-government-licence-bc)"
    },
    "routes": {
      "source": "OSRM routing engine (router.project-osrm.org) on OpenStreetMap data",
      "sourceUrl": "https://project-osrm.org/",
      "licence": "ODbL 1.0, © OpenStreetMap contributors (https://www.openstreetmap.org/copyright)",
      "fetchedAt": "2026-10-10T11:40:24.033Z"
    }
  },
  "links": {
    "self": "/api/v1/nearby-towns",
    "next": null,
    "docs": "/developers/reference/guides/#get-nearby-towns"
  }
}
```
