# Safety: API reference

4 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/crime {#get-crime}

Property-crime summary (last 12 full months vs the 12 before): by type, month, neighbourhood, hour and weekday.

- Cache: 12 h
- Source: [RCMP property crime occurrences, City of Prince George Open Data](https://data-cityofpg.opendata.arcgis.com/)
- Licence: Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `neighbourhood` | query | string | Neighbourhood slug or name. Example: `downtown`. |

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "types": [
      {
        "key": "theft",
        "label": "Theft (other)",
        "short": "Theft"
      },
      {
        "key": "fromauto",
        "label": "Theft from vehicle",
        "short": "From vehicle"
      },
      "… 4 more"
    ],
    "summary": {
      "months": [
        "2024-09",
        "2024-10",
        "… 22 more"
      ],
      "byMonth": {
        "theft": [
          161,
          164,
          "… 22 more"
        ],
        "fromauto": [
          70,
          53,
          "… 22 more"
        ],
        "mischief": [
          94,
          87,
          "… 22 more"
        ],
        "bne": [
          39,
          41,
          "… 22 more"
        ],
        "auto": [
          12,
          13,
          "… 22 more"
        ],
        "bike": [
          13,
          8,
          "… 22 more"
        ]
      },
      "last12": 3958,
      "prev12": 3948,
      "byType12": {
        "theft": 1515,
        "fromauto": 656,
        "mischief": 1002,
        "bne": 500,
        "auto": 196,
        "bike": 89
      },
      "byCommunity12": [
        {
          "name": "West Bowl",
          "count": 1091,
          "perKm2": 90.23133356638813
        },
        {
          "name": "Downtown",
          "count": 968,
          "perKm2": 646.9587462863218
        },
        "… 29 more"
      ],
      "byYear": [
        {
          "year": 2021,
          "count": 4559,
          "partial": false
        },
        {
          "year": 2022,
          "count": 4915,
          "partial": false
        },
        "… 4 more"
      ],
      "byHour": [
        91,
        73,
        "… 22 more"
      ],
      "byWeekday": [
        471,
        549,
        "… 5 more"
      ],
      "periodLabel": "September 2025 to August 2026"
    }
  },
  "meta": {
    "source": "RCMP property crime occurrences, City of Prince George Open Data (PGCrime)",
    "sourceUrl": "https://services2.arcgis.com/CnkB6jCzAsyli34z/arcgis/rest/services/PGCrime/FeatureServer/0",
    "updatedAt": "2026-10-12T00:00:00-07:00",
    "updatedAtPrecision": "day",
    "ageSec": 359301,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George and RCMP, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/crime",
    "next": null,
    "docs": "/developers/reference/safety/#get-crime"
  }
}
```

## GET /api/v1/crime/points {#get-crime-points}

Property-crime occurrences from the last 12 full months as points.

Locations are the City’s published (generalised) occurrence points. `type` is one of the ids in /crime `types`.

- Cache: 12 h
- Source: [RCMP property crime occurrences, City of Prince George Open Data](https://data-cityofpg.opendata.arcgis.com/)
- Licence: Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)
- Paginated: `limit` (default 1000, max 5000) and `offset`; also `format=csv`
- GeoJSON: add `format=geojson` for a bare FeatureCollection

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `neighbourhood` | query | string | Neighbourhood slug or name. Example: `downtown`. |
| `type` | query | string | Crime type id. One of: `theft`, `fromauto`, `mischief`, `bne`, `auto`, `bike`. |
| `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`, `geojson`).

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/crime/points?neighbourhood=downtown&type=bne&limit=3"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -122.73874,
          53.91494
        ]
      },
      "properties": {
        "type": "bne",
        "label": "Break and enter"
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -122.73893,
          53.91493
        ]
      },
      "properties": {
        "type": "bne",
        "label": "Break and enter"
      }
    },
    "… 1 more"
  ],
  "meta": {
    "source": "RCMP property crime occurrences, City of Prince George Open Data (PGCrime)",
    "sourceUrl": "https://services2.arcgis.com/CnkB6jCzAsyli34z/arcgis/rest/services/PGCrime/FeatureServer/0",
    "updatedAt": "2026-10-12T00:00:00-07:00",
    "updatedAtPrecision": "day",
    "ageSec": 359301,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George and RCMP, via PG Pulse (princegeorgepulse.ca)",
    "total": 138,
    "count": 3,
    "limit": 3,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/crime/points?neighbourhood=downtown&type=bne&limit=3",
    "next": "/api/v1/crime/points?neighbourhood=downtown&type=bne&limit=3&offset=3",
    "docs": "/developers/reference/safety/#get-crime-points"
  }
}
```

## GET /api/v1/crime/occurrences {#get-crime-occurrences}

Every property-crime occurrence row since 2021 (date, type, neighbourhood, lat, lng, hour).

`hour` is -1 when unknown. Large: page with limit/offset or filter by `from`/`to` (YYYY-MM-DD).

- Cache: 12 h
- Source: [RCMP property crime occurrences, City of Prince George Open Data](https://data-cityofpg.opendata.arcgis.com/)
- Licence: Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)
- Paginated: `limit` (default 1000, max 5000) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `from` | query | string | Start date (inclusive). Example: `2026-01-01`. |
| `to` | query | string | End date (inclusive). |
| `neighbourhood` | query | string | Neighbourhood slug or name. |
| `type` | query | string | Crime type id. One of: `theft`, `fromauto`, `mischief`, `bne`, `auto`, `bike`. |
| `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/crime/occurrences?from=2026-08-01&limit=3"
```

**Example response** (trimmed)

```json
{
  "data": [
    {
      "date": "2026-08-01",
      "type": "bne",
      "neighbourhood": "Austin East",
      "lat": 53.99572,
      "lng": -122.78528,
      "hour": 19
    },
    {
      "date": "2026-08-01",
      "type": "mischief",
      "neighbourhood": "Downtown",
      "lat": 53.91504,
      "lng": -122.74579,
      "hour": 3
    },
    "… 1 more"
  ],
  "meta": {
    "source": "RCMP property crime occurrences, City of Prince George Open Data (PGCrime)",
    "sourceUrl": "https://services2.arcgis.com/CnkB6jCzAsyli34z/arcgis/rest/services/PGCrime/FeatureServer/0",
    "updatedAt": "2026-10-12T00:00:00-07:00",
    "updatedAtPrecision": "day",
    "ageSec": 359301,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George and RCMP, via PG Pulse (princegeorgepulse.ca)",
    "total": 679,
    "count": 3,
    "limit": 3,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/crime/occurrences?from=2026-08-01&limit=3",
    "next": "/api/v1/crime/occurrences?from=2026-08-01&limit=3&offset=3",
    "docs": "/developers/reference/safety/#get-crime-occurrences"
  }
}
```

## GET /api/v1/crime/severity {#get-crime-severity}

Crime severity index and clearance rates since 2000, Prince George vs BC.

- Cache: 24 h
- Source: [Statistics Canada, table 35-10-0063, Crime severity index and weighted clearance rates](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3510006301)
- Licence: Statistics Canada Open Licence (https://www.statcan.gc.ca/en/terms-conditions/open-licence)

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

**Example request**

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

**Example response** (trimmed)

```json
{
  "data": {
    "source": "Statistics Canada, table 35-10-0063, Crime severity index and weighted clearance rates, police services in British Columbia",
    "sourceUrl": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3510006301",
    "asOf": "2025",
    "geography": "Prince George RCMP, municipal (59710)",
    "notes": "The crime severity index weights each offence by its seriousness; Canada 2006 = 100. It is not a count of crimes.",
    "pg": {
      "csi": [
        {
          "year": 2000,
          "value": 198.88
        },
        {
          "year": 2001,
          "value": 189.06
        },
        "… 24 more"
      ],
      "violentCsi": [
        {
          "year": 2000,
          "value": 183.07
        },
        {
          "year": 2001,
          "value": 162.68
        },
        "… 24 more"
      ],
      "nonViolentCsi": [
        {
          "year": 2000,
          "value": 204.96
        },
        {
          "year": 2001,
          "value": 199.21
        },
        "… 24 more"
      ],
      "weightedClearanceRate": [
        {
          "year": 2000,
          "value": 41.26
        },
        {
          "year": 2001,
          "value": 37.36
        },
        "… 24 more"
      ]
    },
    "bc": {
      "csi": [
        {
          "year": 2000,
          "value": 144.65
        },
        {
          "year": 2001,
          "value": 146.64
        },
        "… 24 more"
      ],
      "violentCsi": [
        {
          "year": 2000,
          "value": 122.2
        },
        {
          "year": 2001,
          "value": 117.29
        },
        "… 24 more"
      ],
      "nonViolentCsi": [
        {
          "year": 2000,
          "value": 153.28
        },
        {
          "year": 2001,
          "value": 157.93
        },
        "… 24 more"
      ]
    }
  },
  "meta": {
    "source": "Statistics Canada, table 35-10-0063, Crime severity index and weighted clearance rates, police services in British Columbia",
    "sourceUrl": "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3510006301",
    "updatedAt": "2026-10-01T04:27:08.351Z",
    "ageSec": 1318873,
    "license": "Statistics Canada Open Licence (https://www.statcan.gc.ca/en/reference/licence)",
    "attribution": "Statistics Canada, via PG Pulse (princegeorgepulse.ca)",
    "dataset": "crime-severity",
    "kind": "fetched",
    "asOf": "2025",
    "checkedAt": "2026-10-01T04:27:08.351Z"
  },
  "links": {
    "self": "/api/v1/crime/severity",
    "next": null,
    "docs": "/developers/reference/safety/#get-crime-severity"
  }
}
```
