---
title: "Full-year incident GeoJSON + neighbourhood ranking"
method: GET
path: "/api/crime-year"
tags: ["history"]
---

# Full-year incident GeoJSON + neighbourhood ranking

`GET /api/crime-year`

## Request

- Base URL: `https://cityalert.live`
- URL: `https://cityalert.live/api/crime-year`
- Auth: none declared

Returns a full year of incident-level data for regions with history (Vancouver VPD back to 2003; other cities via police portals or the media-scrape log).

## Query parameters

- `year` integer, required
- `region` string

## Response `200`

Year archive

- object
  - `year` integer
  - `region` string
  - `label` string
  - `caveat` string
  - `byNeighbourhood` object[]
    - `name` string
    - `count` integer
    - `lat` number
    - `lon` number
  - `geojson` object
    - `type` 'FeatureCollection'
    - `features` object[]
      - `type` 'Feature'
      - `geometry` object
        - `type` 'Point'
        - `coordinates` number[]
      - `properties` object
        - `id` string, required: Stable incident identifier (source-prefixed)
        - `source` string, required: Feed key that produced the incident
        - `category` 'crime' | 'fire' | 'disaster' | 'weather' | 'unrest' | 'health' | 'infra' | 'alert' | 'report', required
        - `group` 'violent' | 'property' | 'vehicle-crime' | 'drug' | 'weapons' | 'sexual' | 'fraud' | 'disorder' | 'traffic' | 'police-ops' | 'crime-other' | 'wildfire' | 'structure-fire' | 'vehicle-fire' | 'alarm' | 'hazmat' | 'rescue' | 'fire-other' | 'earthquake' | 'flood' | 'storm' | 'tsunami' | 'volcano' | 'landslide' | 'disaster-other' | 'wind' | 'winter' | 'heat' | 'rain' | 'marine' | 'fog' | 'air-quality' | 'weather-other' | 'protest' | 'conflict' | 'unrest-other' | 'ems' | 'outbreak' | 'health-other' | 'collision' | 'outage' | 'road' | 'transit' | 'water' | 'infra-other' | 'evacuation' | 'amber' | 'shelter' | 'civil' | 'alert-other' | 'suspicious' | 'missing-person' | 'noise' | 'welfare' | 'hazard' | 'report-other': Normalized subtype within the category (e.g. 'collision', 'wildfire', 'missing-person') — assigned by the central classifier; every incident has one
        - `type` string, required: Source-specific incident type, e.g. 'earthquake' or 'Break and Enter'
        - `title` string, required
        - `description` string
        - `lat` number, required
        - `lon` number, required
        - `time` string, date-time, required: Reported time, ISO 8601
        - `severity` 'low' | 'medium' | 'high' | 'critical', required
        - `url` string, uri
        - `region` string: Focus-region key when the point falls inside one
        - `nhood` string: Neighbourhood/area label when the feed provides one
        - `status` 'pending' | 'active' | 'resolved' | 'hidden': Community-report verification state (manual reports only)

## Other responses

- `400`: Invalid year or region without history
- `404`: No data for that year

---

[API](https://skmtc.dev/cityalert/apis/cityalert-live-api.md) · [All operations](https://skmtc.dev/cityalert/apis/cityalert-live-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cityalert/apis/cityalert-live-api/revisions/75ee240bd387?raw)
