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

Sports: API reference

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

GET /api/v1/sports/teams #

Local teams with league, record, links and data freshness.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/teams"

Example response (trimmed)

json
{
  "data": [
    {
      "id": "cougars",
      "name": "Prince George Cougars",
      "short": "Cougars",
      "sport": "Hockey",
      "league": "WHL",
      "leagueName": "Western Hockey League",
      "level": "Major junior (CHL)",
      "venue": "cn-centre",
      "record": {
        "w": 2,
        "l": 3,
        "otl": 1,
        "t": null,
        "pts": 5,
        "rank": 6,
        "group": "B.C. Division",
        "from": "standings"
      },
      "recordText": "2-3-1",
      "page": "https://princegeorgepulse.ca/sports/cougars/",
      "links": {
        "site": "https://chl.ca/whl-cougars/",
        "schedule": "https://chl.ca/whl-cougars/schedule/",
        "standings": "https://chl.ca/whl/standings/",
        "tickets": "https://ticketsnorth.evenue.net/events/CSG"
      },
      "…": "6 more keys"
    },
    {
      "id": "spruce-kings",
      "name": "Prince George Spruce Kings",
      "short": "Spruce Kings",
      "sport": "Hockey",
      "league": "BCHL",
      "leagueName": "British Columbia Hockey League",
      "level": "Junior A",
      "venue": "kopar",
      "record": {
        "w": 5,
        "l": 3,
        "otl": 0,
        "t": null,
        "pts": 10,
        "rank": 3,
        "group": "Coastal East",
        "from": "standings"
      },
      "recordText": "5-3-0",
      "page": "https://princegeorgepulse.ca/sports/spruce-kings/",
      "links": {
        "site": "https://www.sprucekings.bc.ca/",
        "schedule": "https://www.sprucekings.bc.ca/schedule2627",
        "standings": "https://bchl.ca/stats/standings/",
        "tickets": "https://www.showpass.com/pgsk20262027/"
      },
      "…": "6 more keys"
    },
    "… 4 more"
  ],
  "meta": {
    "source": "League and team feeds: HockeyTech (WHL, BCHL) and team schedule pages; each team, game and table names its source",
    "sourceUrl": "https://princegeorgepulse.ca/sports/",
    "updatedAt": "2026-10-16T10:30:46.661Z",
    "ageSec": 1052,
    "license": "Facts (schedules, scores, standings) from each source with attribution; HockeyTech data: “Official statistics provided by” the league, powered by HockeyTech.com. See `source` and `licence` per item",
    "attribution": "Each item’s source, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/sports/teams",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-teams"
  }
}

GET /api/v1/sports/teams/{id} #

One team with its next games, latest results and standings.

ParameterInTypeDescription
idpathstringTeam id (from /sports/teams). Required. Example: cougars.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/teams/cougars"

Example response (trimmed)

json
{
  "data": {
    "id": "cougars",
    "name": "Prince George Cougars",
    "short": "Cougars",
    "sport": "Hockey",
    "league": "WHL",
    "leagueName": "Western Hockey League",
    "level": "Major junior (CHL)",
    "venue": "cn-centre",
    "record": {
      "w": 2,
      "l": 3,
      "otl": 1,
      "t": null,
      "pts": 5,
      "rank": 6,
      "group": "B.C. Division",
      "from": "standings"
    },
    "recordText": "2-3-1",
    "page": "https://princegeorgepulse.ca/sports/cougars/",
    "links": {
      "site": "https://chl.ca/whl-cougars/",
      "schedule": "https://chl.ca/whl-cougars/schedule/",
      "standings": "https://chl.ca/whl/standings/",
      "tickets": "https://ticketsnorth.evenue.net/events/CSG"
    },
    "…": "9 more keys"
  },
  "meta": {
    "source": "League and team feeds: HockeyTech (WHL, BCHL) and team schedule pages; each team, game and table names its source",
    "sourceUrl": "https://princegeorgepulse.ca/sports/",
    "updatedAt": "2026-10-16T09:50:13.147Z",
    "ageSec": 3486,
    "license": "Facts (schedules, scores, standings) from each source with attribution; HockeyTech data: “Official statistics provided by” the league, powered by HockeyTech.com. See `source` and `licence` per item",
    "attribution": "Each item’s source, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/sports/teams/cougars",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-teams-id"
  }
}

GET /api/v1/sports/games #

Games: schedule, live scores and results, with filters.

Every game the local teams’ feeds list, home and away. status is scheduled, live, final, postponed or cancelled; score is from our team’s side (team, opponent) and by venue (home, away). Live scores update every few minutes while a game is on, from the league feed when it provides them. start is UTC; localDate is the game day in the city.

ParameterInTypeDescription
teamquerystringTeam id, or several separated by commas (see /sports/teams). Example: cougars.
fromquerystringFrom this local date (YYYY-MM-DD) or ISO date-time. Default: no limit. Example: 2026-10-01.
toquerystringUp to this local date (YYYY-MM-DD, inclusive) or ISO date-time. Example: 2026-10-31.
statusquerystringscheduled, live, final, postponed or cancelled (comma-separated for several). Example: final.
homequerybooleantrue = home games only, false = away only.
orderquerystringasc (default, oldest first) or desc. One of: asc, desc.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/games?team=cougars&from=2026-10-01&limit=5"

Example response (trimmed)

json
{
  "data": [
    {
      "id": "cougars:1023123",
      "team": "cougars",
      "season": "295",
      "seasonType": "regular",
      "start": "2026-10-03T02:00:00.000Z",
      "localDate": "2026-10-02",
      "timeTbd": false,
      "home": true,
      "opponent": "Brandon Wheat Kings",
      "venue": "CN Centre",
      "venueCity": "Prince George",
      "status": "final",
      "…": "17 more keys"
    },
    {
      "id": "cougars:1023161",
      "team": "cougars",
      "season": "295",
      "seasonType": "regular",
      "start": "2026-10-11T20:00:00.000Z",
      "localDate": "2026-10-11",
      "timeTbd": false,
      "home": true,
      "opponent": "Swift Current Broncos",
      "venue": "CN Centre",
      "venueCity": "Prince George",
      "status": "final",
      "…": "17 more keys"
    },
    "… 3 more"
  ],
  "meta": {
    "source": "League and team feeds: HockeyTech (WHL, BCHL) and team schedule pages; each team, game and table names its source",
    "sourceUrl": "https://princegeorgepulse.ca/sports/",
    "updatedAt": "2026-10-16T10:30:46.661Z",
    "ageSec": 1052,
    "license": "Facts (schedules, scores, standings) from each source with attribution; HockeyTech data: “Official statistics provided by” the league, powered by HockeyTech.com. See `source` and `licence` per item",
    "attribution": "Each item’s source, via PG Pulse (princegeorgepulse.ca)",
    "total": 64,
    "count": 5,
    "limit": 5,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/sports/games?team=cougars&from=2026-10-01&limit=5",
    "next": "/api/v1/sports/games?team=cougars&from=2026-10-01&limit=5&offset=5",
    "docs": "/developers/reference/sports/#get-sports-games"
  }
}

GET /api/v1/sports/standings #

Latest standings for the division or conference each team plays in.

ParameterInTypeDescription
teamquerystringTeam id (see /sports/teams). Example: spruce-kings.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/standings"

Example response (trimmed)

json
{
  "data": [
    {
      "team": "cougars",
      "season": "295",
      "group": "B.C. Division",
      "rows": [
        {
          "rank": 1,
          "team": "Victoria Royals",
          "us": false,
          "gp": 7,
          "w": 6,
          "l": 1,
          "otl": 0,
          "t": 0,
          "pts": 12,
          "pct": 0.857,
          "gf": 31,
          "ga": 18,
          "…": "2 more keys"
        },
        {
          "rank": 2,
          "team": "Vancouver Giants",
          "us": false,
          "gp": 9,
          "w": 5,
          "l": 2,
          "otl": 2,
          "t": 0,
          "pts": 12,
          "pct": 0.667,
          "gf": 27,
          "ga": 23,
          "…": "2 more keys"
        },
        "… 4 more"
      ],
      "source": "Western Hockey League via HockeyTech",
      "sourceUrl": "https://chl.ca/whl/standings/",
      "licence": "Official statistics provided by Western Hockey League. Powered by HockeyTech.com (leaguestat.com). Facts (schedule, scores, standings) shown with attribution and a link to the league",
      "updatedAt": "2026-10-16T09:50:17.932Z"
    },
    {
      "team": "spruce-kings",
      "season": "72",
      "group": "Coastal East",
      "rows": [
        {
          "rank": 1,
          "team": "Chilliwack Chiefs",
          "us": false,
          "gp": 10,
          "w": 7,
          "l": 3,
          "otl": 0,
          "t": 0,
          "pts": 14,
          "pct": 0.7,
          "gf": 27,
          "ga": 24,
          "…": "2 more keys"
        },
        {
          "rank": 2,
          "team": "Coquitlam Express",
          "us": false,
          "gp": 9,
          "w": 5,
          "l": 2,
          "otl": 2,
          "t": 0,
          "pts": 12,
          "pct": 0.667,
          "gf": 31,
          "ga": 30,
          "…": "2 more keys"
        },
        "… 3 more"
      ],
      "source": "British Columbia Hockey League via HockeyTech",
      "sourceUrl": "https://bchl.ca/stats/standings/",
      "licence": "Official statistics provided by British Columbia Hockey League. Powered by HockeyTech.com (leaguestat.com). Facts (schedule, scores, standings) shown with attribution and a link to the league",
      "updatedAt": "2026-10-16T06:50:18.658Z"
    },
    "… 4 more"
  ],
  "meta": {
    "source": "League and team feeds: HockeyTech (WHL, BCHL) and team schedule pages; each team, game and table names its source",
    "sourceUrl": "https://princegeorgepulse.ca/sports/",
    "updatedAt": "2026-10-16T10:30:46.661Z",
    "ageSec": 1052,
    "license": "Facts (schedules, scores, standings) from each source with attribution; HockeyTech data: “Official statistics provided by” the league, powered by HockeyTech.com. See `source` and `licence` per item",
    "attribution": "Each item’s source, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/sports/standings",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-standings"
  }
}

GET /api/v1/sports/clubs #

Minor and community sports clubs and leagues, with sport, age group and official links.

From the City’s Community Recreation Directory (sports types), refreshed weekly, plus clubs the directory lacks. sport and age (youth, adult, all) are derived from the club’s name and the City’s description and corrected by hand where wrong; age=youth also returns all-ages clubs. directory links the club’s listing in our business directory when there is one. description is the City’s own short text.

ParameterInTypeDescription
sportquerystringSport name or slug (see /sports/clubs/sports). Example: hockey.
agequerystringyouth, adult or all. One of: youth, adult, all.
qquerystringSearch name, sport and description. Example: fastball.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/clubs?sport=hockey&age=youth"

Example response (trimmed)

json
{
  "data": [
    {
      "id": "cariboo-cougars",
      "name": "Cariboo Cougars (U18 AAA hockey)",
      "sport": "Hockey",
      "sportSlug": "hockey",
      "age": "youth",
      "adaptive": false,
      "types": [],
      "description": "Prince George’s U18 AAA team in the BC Elite Hockey League. Schedules are on the league site (Spordle), which has no public feed.",
      "url": "https://www.cariboocougars.net/",
      "cityUrl": null,
      "directorySlug": "cariboo-hockey-ltd",
      "venue": null,
      "…": "8 more keys"
    },
    {
      "id": "pg-frost-bites-para-ice-hockey",
      "name": "PG Frost Bites Para Ice Hockey",
      "sport": "Hockey",
      "sportSlug": "hockey",
      "age": "all",
      "adaptive": true,
      "types": [
        "Ice Sports"
      ],
      "description": null,
      "url": "https://northernadaptedsports.ca/hockey/",
      "cityUrl": "https://www.princegeorge.ca/node/278",
      "directorySlug": null,
      "venue": null,
      "…": "8 more keys"
    },
    "… 2 more"
  ],
  "meta": {
    "source": "City of Prince George Community Recreation Directory (sports clubs), plus clubs added by PG Pulse editors; community events from clubs’ own public listings",
    "sourceUrl": "https://www.princegeorge.ca/community-culture/your-community/community-recreation-directory",
    "updatedAt": "2026-10-10T18:32:02.820Z",
    "ageSec": 490576,
    "license": "Public information published by the City of Prince George and the clubs: names, links, short descriptions and event facts, with attribution. See `source` and `licence` per item",
    "attribution": "City of Prince George and each club, via PG Pulse (princegeorgepulse.ca)",
    "total": 4,
    "count": 4,
    "limit": 100,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/sports/clubs?sport=hockey&age=youth",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-clubs"
  }
}

GET /api/v1/sports/clubs/sports #

Sports with the number of clubs for each.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/clubs/sports"

Example response (trimmed)

json
{
  "data": [
    {
      "sport": "Hockey",
      "slug": "hockey",
      "count": 9
    },
    {
      "sport": "Equestrian",
      "slug": "equestrian",
      "count": 5
    },
    "… 31 more"
  ],
  "meta": {
    "source": "City of Prince George Community Recreation Directory (sports clubs), plus clubs added by PG Pulse editors; community events from clubs’ own public listings",
    "sourceUrl": "https://www.princegeorge.ca/community-culture/your-community/community-recreation-directory",
    "updatedAt": "2026-10-10T18:32:02.820Z",
    "ageSec": 490576,
    "license": "Public information published by the City of Prince George and the clubs: names, links, short descriptions and event facts, with attribution. See `source` and `licence` per item",
    "attribution": "City of Prince George and each club, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/sports/clubs/sports",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-clubs-sports"
  }
}

GET /api/v1/sports/clubs/{id} #

One club with its upcoming community events.

ParameterInTypeDescription
idpathstringClub id (from /sports/clubs). Required.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/clubs/caledonia-adaptive-snow-sports-society"

Example response (trimmed)

json
{
  "data": {
    "id": "caledonia-adaptive-snow-sports-society",
    "name": "Caledonia Adaptive Snow Sports Society",
    "sport": "Alpine skiing",
    "sportSlug": "alpine-skiing",
    "age": "all",
    "adaptive": true,
    "types": [
      "Skiing & Snow Sports"
    ],
    "description": "Caledonia Adaptive Snow Sports Society provides ski instruction to anyone who cannot be part of a regular ski lesson due to a cognitive or physical impairment of any type.",
    "url": "https://www.facebook.com/caledoniaadaptive/",
    "cityUrl": "https://www.princegeorge.ca/community-culture/your-community-events/community-recreation-directory/caledonia-adaptive-snow",
    "directorySlug": null,
    "venue": null,
    "…": "9 more keys"
  },
  "meta": {
    "source": "City of Prince George Community Recreation Directory (sports clubs), plus clubs added by PG Pulse editors; community events from clubs’ own public listings",
    "sourceUrl": "https://www.princegeorge.ca/community-culture/your-community/community-recreation-directory",
    "updatedAt": "2026-10-10T18:30:25.560Z",
    "ageSec": 490673,
    "license": "Public information published by the City of Prince George and the clubs: names, links, short descriptions and event facts, with attribution. See `source` and `licence` per item",
    "attribution": "City of Prince George and each club, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/sports/clubs/caledonia-adaptive-snow-sports-society",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-clubs-id"
  }
}

GET /api/v1/sports/events #

Community sports events (bonspiels, tournaments, club events) from clubs’ public listings.

Imported every 6 hours from the clubs’ own public event feeds (see source). Dates are local; start is UTC when the event has a time. Sports events in the general events calendar are at /events?category=sports.

ParameterInTypeDescription
fromquerystringFrom this local date (YYYY-MM-DD, default today). Example: 2026-10-01.
toquerystringUp to this local date (YYYY-MM-DD).
clubquerystringClub id.
sportquerystringSport name or slug. Example: curling.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

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

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/sports/events"

Example response (trimmed)

json
{
  "data": [
    {
      "id": "pg-curling-bonspiels:30098",
      "club": "pg-golf-and-curling-club",
      "clubName": "Prince George Golf & Curling Club",
      "title": "2026 Ice Breaker Bonspiel Team Entry",
      "sport": "Curling",
      "age": "all",
      "startDate": "2026-10-16",
      "endDate": "2026-10-18",
      "start": null,
      "allDay": true,
      "venue": "Prince George Golf & Curling Club",
      "url": "https://prince-george.curling.io/en/events/30098-2026-ice-breaker-bonspiel-team-entry",
      "…": "5 more keys"
    },
    {
      "id": "pg-curling-bonspiels:30462",
      "club": "pg-golf-and-curling-club",
      "clubName": "Prince George Golf & Curling Club",
      "title": "Pioneer 50+ Curling Bonspiel",
      "sport": "Curling",
      "age": "adult",
      "startDate": "2026-11-06",
      "endDate": "2026-11-08",
      "start": null,
      "allDay": true,
      "venue": "Prince George Golf & Curling Club",
      "url": "https://prince-george.curling.io/en/events/30462-pioneer-50-curling-bonspiel",
      "…": "5 more keys"
    }
  ],
  "meta": {
    "source": "City of Prince George Community Recreation Directory (sports clubs), plus clubs added by PG Pulse editors; community events from clubs’ own public listings",
    "sourceUrl": "https://www.princegeorge.ca/community-culture/your-community/community-recreation-directory",
    "updatedAt": "2026-10-16T10:30:46.661Z",
    "ageSec": 1052,
    "license": "Public information published by the City of Prince George and the clubs: names, links, short descriptions and event facts, with attribution. See `source` and `licence` per item",
    "attribution": "City of Prince George and each club, via PG Pulse (princegeorgepulse.ca)",
    "total": 2,
    "count": 2,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/sports/events",
    "next": null,
    "docs": "/developers/reference/sports/#get-sports-events"
  }
}

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.