# UK Police API
> Open UK policing data as an API, from the official data.police.uk service (UK Home Office). Pull street-level crimes within about a mile of any coordinate for a given month — each with its category, approximate street, location and judicial outcome — query stop-and-search records (type, demographics, object of search, outcome and legislation) for the same area, browse the 44 territorial police forces with contact and engagement details, and list the standard crime categories. Covers England, Wales and Northern Ireland. Ideal for property and neighbourhood-safety apps, real-estate and relocation tools, local-news and civic-data dashboards, and crime and policing research.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/ukpolice-api/..."
```

## Pricing
- **Free** (Free) — 5,500 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 75,000 calls/Mo, 8 req/s
- **Pro** ($18/Mo) — 380,000 calls/Mo, 20 req/s
- **Mega** ($46/Mo) — 1,900,000 calls/Mo, 50 req/s

## Endpoints

### Policing

#### `GET /v1/crimes` — Street-level crimes around a point

**Parameters:**
- `lat` (query, required, string) — Latitude, e.g. 52.629729 Example: `52.629729`
- `lng` (query, required, string) — Longitude, e.g. -1.131592 Example: `-1.131592`
- `date` (query, optional, string) — Month YYYY-MM (default latest), e.g. 2024-01 Example: `2024-01`
- `category` (query, optional, string) — Crime category slug (default all-crime), e.g. burglary
- `limit` (query, optional, string) — Max crimes (1-500, default 100) Example: `100`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/ukpolice-api/v1/crimes?lat=52.629729&lng=-1.131592&date=2024-01&limit=100"
```

**Response:**
```json
{
    "data": {
        "date": "2024-01",
        "count": 100,
        "total": 1472,
        "center": {
            "lat": 52.629729,
            "lng": -1.131592
        },
        "crimes": [
            {
                "id": null,
                "month": "2024-01",
                "street": "On or near Parking Area",
                "outcome": null,
                "category": "anti-social-behaviour",
                "latitude": "52.637041",
                "longitude": "-1.131222",
                "outcome_date": null
            },
            {
                "id": null,
                "month": "2024-01",
                "street": "On or near Bisley Street",
                "outcome": null,
                "category": "anti-social-behaviour",
                "latitude": "52.622852",
                "longitude": "-1.150707",
                "outcome_date": null
            },
            {
                "id": null,
                "month": "2024-01",
                "street": "On or near Supermarket",
                "outcome": null,
                "category": "anti-social-behaviour",
                "latitude": "52.632052",
                "longitude": "-1.146096",
                "outcome_date": null
            },
            {
                "id": null,
                "month": "2024-01",
                "street": "On or near Further/higher Educational Building",
                "outcome": null,
                "category": "anti-social-behaviour",
      
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/stops` — Stop-and-search around a point

**Parameters:**
- `lat` (query, required, string) — Latitude Example: `52.629729`
- `lng` (query, required, string) — Longitude Example: `-1.131592`
- `date` (query, optional, string) — Month YYYY-MM (default latest) Example: `2024-01`
- `limit` (query, optional, string) — Max records (1-500, default 100) Example: `100`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/ukpolice-api/v1/stops?lat=52.629729&lng=-1.131592&date=2024-01&limit=100"
```

**Response:**
```json
{
    "data": {
        "date": "2024-01",
        "count": 100,
        "stops": [
            {
                "type": "Person search",
                "gender": "Male",
                "street": "Leicester (Station)",
                "outcome": "Arrest",
                "datetime": "2024-01-29T21:51:00+00:00",
                "age_range": "over 34",
                "ethnicity": "Black/African/Caribbean/Black British - Caribbean",
                "legislation": "Police and Criminal Evidence Act 1984 (section 1)",
                "object_of_search": "Anything to threaten or harm anyone"
            },
            {
                "type": "Person and Vehicle search",
                "gender": "Male",
                "street": "On or near Parking Area",
                "outcome": "Community resolution",
                "datetime": "2024-01-06T22:45:00+00:00",
                "age_range": "18-24",
                "ethnicity": "Asian/Asian British - Any other Asian background",
                "legislation": null,
                "object_of_search": "Controlled drugs"
            },
            {
                "type": "Person and Vehicle search",
                "gender": "Male",
                "street": "On or near Parking Area",
                "outcome": "Community resolution",
                "datetime": "2024-01-06T22:35:00+00:00",
                "age_range": "18-24",
                "ethnicity": "Asian/Asian British - Any other Asian background",
                "leg
…(truncated, see openapi.json for full schema)
```

### Forces

#### `GET /v1/forces` — Police forces (list, or detail by id)

**Parameters:**
- `id` (query, optional, string) — Force id for detail, e.g. leicestershire

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/ukpolice-api/v1/forces"
```

**Response:**
```json
{
    "data": {
        "count": 44,
        "forces": [
            {
                "id": "avon-and-somerset",
                "name": "Avon and Somerset Constabulary"
            },
            {
                "id": "bedfordshire",
                "name": "Bedfordshire Police"
            },
            {
                "id": "cambridgeshire",
                "name": "Cambridgeshire Constabulary"
            },
            {
                "id": "cheshire",
                "name": "Cheshire Constabulary"
            },
            {
                "id": "city-of-london",
                "name": "City of London Police"
            },
            {
                "id": "cleveland",
                "name": "Cleveland Police"
            },
            {
                "id": "cumbria",
                "name": "Cumbria Constabulary"
            },
            {
                "id": "derbyshire",
                "name": "Derbyshire Constabulary"
            },
            {
                "id": "devon-and-cornwall",
                "name": "Devon & Cornwall Police"
            },
            {
                "id": "dorset",
                "name": "Dorset Police"
            },
            {
                "id": "durham",
                "name": "Durham Constabulary"
            },
            {
                "id": "essex",
                "name": "Essex Police"
            },
            {
                "id": "gloucestershire",
                "name": "Glouceste
…(truncated, see openapi.json for full schema)
```

### Reference

#### `GET /v1/categories` — Crime categories

**Parameters:**
- `date` (query, optional, string) — Month YYYY-MM (default latest)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/ukpolice-api/v1/categories"
```

**Response:**
```json
{
    "data": {
        "date": "latest",
        "count": 15,
        "categories": [
            {
                "url": "all-crime",
                "name": "All crime"
            },
            {
                "url": "anti-social-behaviour",
                "name": "Anti-social behaviour"
            },
            {
                "url": "bicycle-theft",
                "name": "Bicycle theft"
            },
            {
                "url": "burglary",
                "name": "Burglary"
            },
            {
                "url": "criminal-damage-arson",
                "name": "Criminal damage and arson"
            },
            {
                "url": "drugs",
                "name": "Drugs"
            },
            {
                "url": "other-theft",
                "name": "Other theft"
            },
            {
                "url": "possession-of-weapons",
                "name": "Possession of weapons"
            },
            {
                "url": "public-order",
                "name": "Public order"
            },
            {
                "url": "robbery",
                "name": "Robbery"
            },
            {
                "url": "shoplifting",
                "name": "Shoplifting"
            },
            {
                "url": "theft-from-the-person",
                "name": "Theft from the person"
            },
            {
                "url": "vehicle-crime",
                "name": "Vehicle crime"
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Source & usage notes

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/ukpolice-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "England, Wales & Northern Ireland policing data. /v1/crimes = street-level crimes within ~1 mile of lat/lng for a month (category= defaults to all-crime, date=YYYY-MM defaults to latest); /v1/stops = stop-and-search at a location/month; /v1/forces = the 44 police forces (id= for detail); /v1/categories = crime categories. Data lags ~2 months; omit date to get the latest available month.",
        "source": "data.police.uk (UK Home Office open policing data)",
        "endpoints": [
            "/v1/crimes",
            "/v1/stops",
            "/v1/forces",
            "/v1/categories",
            "/v1/meta"
        ]
    },
    "meta": {
        "timestamp": "2026-06-01T00:04:34.943Z",
        "request_id": "c23985f7-72bb-4b99-abdf-0ac813c0fc46"
    },
    "status": "ok",
    "message": "Meta retrieved",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/ukpolice-api
OpenAPI spec: https://www.oanor.com/api/ukpolice-api/openapi.json
