# Police.uk API

> Police.uk returns crime reports and neighbourhood policing details as a workflow and API.

Police.uk finds crimes within one mile of a UK postcode or place, using the location and an optional reporting month. It finds neighbourhood policing teams, contacts, officers, priorities and events using a UK postcode.

- Page: https://fous.com/workflows/police-uk
- Handle: `@police-uk`
- Category: [Government](https://fous.com/workflows/category/government)
- Source website: https://data.police.uk
- Last verified: Sep 29, 2026
- Fous is not affiliated with Police.uk.

## Methods

### Get crimes near postcode

Operation `get_crimes_near_postcode`, version 1. 1 credit per call.

Get crimes reported within one mile of a UK postcode or place in England, Wales or Northern Ireland, with category totals, up to 100 example incidents, the previous month’s total, and a local crime-map link. Results use anonymised street locations; the latest published month is used unless you choose a month.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `month` | string | no | `"2026-06"` | Crime reporting month in YYYY-MM, such as 2026-06. Defaults to the latest published month. |
| `location` | string | yes | `"SW1A 1AA"` | UK postcode or place, such as SW1A 1AA or Camden, London. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "location"
  ],
  "properties": {
    "month": {
      "type": "string",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$",
      "description": "Crime reporting month in YYYY-MM, such as 2026-06. Defaults to the latest published month.",
      "examples": [
        "2026-06"
      ]
    },
    "location": {
      "type": "string",
      "minLength": 2,
      "description": "UK postcode or place, such as SW1A 1AA or Camden, London.",
      "examples": [
        "SW1A 1AA",
        "Camden, London",
        "BT1 5GS"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "location": "SW1A 1AA"
    },
    {
      "month": "2026-06",
      "location": "Camden, London"
    },
    {
      "location": "BT1 5GS"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `month` | string | `"2026-07"` | Month of the crime reports, YYYY-MM. |
| `crimes` | array |  | Up to 100 crimes sampled from the month, including different crime categories where possible. |
| `crimes[].street` | string or null |  | Approximate anonymised street location. |
| `crimes[].category` | string |  | Crime category in plain words. |
| `crimes[].crime_id` | integer or null |  | Police.uk crime data record ID. |
| `crimes[].latest_outcome` | string or null |  | Latest recorded outcome in words, if available. |
| `latitude` | number | `52.709576` | Latitude of the matched location. |
| `area_link` | string | `"https://www.police.uk/pu/your-area/north-wales-police/corris-mawddwy/?tab=CrimeMap"` | Police.uk crime map for the local policing area. |
| `longitude` | number | `-3.690496` | Longitude of the matched location. |
| `total_crimes` | integer | `0` | Total crimes within one mile in the selected month. |
| `category_counts` | array |  | Counts for each crime category, most frequent first. Empty when there are no crimes. |
| `category_counts[].count` | integer |  | Number of crimes in this category. |
| `category_counts[].category` | string |  | Crime category in plain words. |
| `matched_location` | string | `"SY20 9LS"` | The matched postcode or place name. |
| `previous_month_total` | integer or null | `0` | Total for the prior month, or null if there are no data for that month. |
| `change_from_previous_month` | integer or null | `0` | Current total minus previous month total, or null when the previous month is unavailable. |

**Example input**

```json
{
  "location": "SY20 9LS"
}
```

**Example output**

```json
{
  "month": "2026-07",
  "crimes": [],
  "latitude": 52.709576,
  "area_link": "https://www.police.uk/pu/your-area/north-wales-police/corris-mawddwy/?tab=CrimeMap",
  "longitude": -3.690496,
  "total_crimes": 0,
  "category_counts": [],
  "matched_location": "SY20 9LS",
  "previous_month_total": 0,
  "change_from_previous_month": 0
}
```

### Get neighbourhood team

Operation `get_neighbourhood_team`, version 1. 1 credit per call.

Find the neighbourhood policing team for a UK postcode, with its force, contacts, officers, priorities and upcoming events. Covers England, Wales and Northern Ireland; details depend on what the force publishes.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `postcode` | string | yes | `"M1 1AE"` | UK postcode to look up, for example M1 1AE. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "postcode"
  ],
  "properties": {
    "postcode": {
      "type": "string",
      "description": "UK postcode to look up, for example M1 1AE.",
      "examples": [
        "M1 1AE",
        "CF10 1EP",
        "BT1 5GS"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "postcode": "M1 1AE"
    },
    {
      "postcode": "CF10 1EP"
    },
    {
      "postcode": "BT1 5GS"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `team_members` | array |  |  |
| `team_members[].name` | string | `"Billy Pang"` |  |
| `team_members[].rank_or_role` | string or null | `"PCSO"` |  |
| `contact_details` | object |  |  |
| `contact_details.email` | string or null | `"swp101@south-wales.police.uk"` |  |
| `contact_details.phone` | string or null | `"101"` |  |
| `contact_details.website` | string or null | `"https://www.south-wales.police.uk"` |  |
| `contact_details.social_media` | array |  |  |
| `upcoming_events` | array |  |  |
| `upcoming_events[].date` | string | `"2026-10-01"` |  |
| `upcoming_events[].title` | string or null | `"NCP Patrols & Crime Prevention Advice"` |  |
| `upcoming_events[].address` | string or null | `"Quay Street Cardiff"` |  |
| `upcoming_events[].description` | string or null |  |  |
| `police_force_name` | string | `"South Wales Police"` |  |
| `current_priorities` | array |  |  |
| `current_priorities[].issue` | string or null | `"Shoplifting & Retail crime Thefts from stores, persistent offenders, retail ASB"` |  |
| `current_priorities[].action` | string or null | `"We have conducted plain-clothes operations to target offenders. We have deployed CCTV vans to monitor and identify susp` |  |
| `current_priorities[].issue_date` | string or null | `"2026-06-15"` |  |
| `current_priorities[].action_date` | string or null | `"2026-09-23"` |  |
| `neighbourhood_link` | string | `"https://www.police.uk/pu/your-area/south-wales-police/cathays/"` |  |
| `neighbourhood_name` | string | `"Cathays"` |  |
| `police_force_website` | string or null | `"https://www.south-wales.police.uk"` |  |

**Example input**

```json
{
  "postcode": "CF10 1EP"
}
```

**Example output**

```json
{
  "team_members": [
    {
      "name": "Billy Pang",
      "rank_or_role": "PCSO"
    },
    {
      "name": "Connor Davies",
      "rank_or_role": "PCSO"
    }
  ],
  "contact_details": {
    "email": "swp101@south-wales.police.uk",
    "phone": null,
    "website": "https://www.south-wales.police.uk",
    "social_media": []
  },
  "upcoming_events": [
    {
      "date": "2026-10-01",
      "title": "NCP Patrols & Crime Prevention Advice",
      "address": "Quay Street Cardiff",
      "description": null
    },
    {
      "date": "2026-10-08",
      "title": "NCP Patrols & Crime Prevention Advice",
      "address": "Greyfriars Road Cardiff",
      "description": null
    }
  ],
  "police_force_name": "South Wales Police",
  "current_priorities": [
    {
      "issue": "Shoplifting & Retail crime Thefts from stores, persistent offenders, retail ASB",
      "action": "We have conducted plain-clothes operations to target offenders. We have deployed CCTV vans to monitor and identify suspects. We have carried out high-visibility patrols in identified areas.",
      "issue_date": "2026-06-15",
      "action_date": "2026-09-23"
    },
    {
      "issue": "ASB Youth nuisance, rowdy groups, abusive behaviour, noise complaints",
      "action": "We have carried out high-visibility patrols in identified areas. We have patrolled jointly with partner agencies (Cardiff Council). We have worked with local councils and housing providers to address …",
      "issue_date": "2026-06-15",
      "action_date": "2026-09-23"
    }
  ],
  "neighbourhood_link": "https://www.police.uk/pu/your-area/south-wales-police/cathays/",
  "neighbourhood_name": "Cathays",
  "police_force_website": "https://www.south-wales.police.uk"
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@police-uk",
  "visibility": "public",
  "operation": "get_crimes_near_postcode",
  "version": 1,
  "input": {
    "location": "SW1A 1AA"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@police-uk\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_crimes_near_postcode\",\n  \"version\": 1,\n  \"input\": {\n    \"location\": \"SW1A 1AA\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@police-uk",
  "visibility": "public",
  "operation": "get_crimes_near_postcode",
  "version": 1,
  "input": {
    "location": "SW1A 1AA"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@police-uk","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Compare local crime totals across reporting months
- Review crime categories near a postcode
- Find neighbourhood team contact details
- Track local policing priorities and upcoming events

## FAQ

### Is Fous affiliated with Police.uk?

No. Fous is not affiliated with Police.uk. This workflow reads the public data.police.uk website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a Police.uk account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from data.police.uk when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 29, 2026.

### How many crimes were reported near a postcode?

Get crimes near postcode returns the total for the selected month and the previous month when available.

### Which crime categories are most common nearby?

Get crimes near postcode returns counts for each crime category, ordered from most frequent first.

### Who is the neighbourhood policing team for a postcode?

Get neighbourhood team returns the team, its force, contact details, officers, priorities and upcoming events.

## Related

- [Postcodes.io API](https://fous.com/workflows/postcodes-io.md): Postcodes.io provides UK postcode, location and administrative information; nearby postcode results include distance and coordinates, while retired postcodes lack administrative details.
- [NHS API](https://fous.com/workflows/nhs.md): NHS provides condition and medicine guidance, with condition dates reflecting the latest pages used, and nearby England service listings ordered by distance; availability details may be missing.
- [Rightmove API](https://fous.com/workflows/rightmove.md): Rightmove searches UK homes for sale or rent and finds recent sold prices; searches return up to 100 listings, and area averages reflect returned properties only.
- [Zoopla API](https://fous.com/workflows/zoopla.md): UK homes for sale and to rent.
- [GOV.UK API](https://fous.com/workflows/gov-uk.md): GOV.UK provides summarized current travel advice with linked details, published regional holidays (none for unpublished years), and possible matches on the current UK Sanctions List.
- [Companies House API](https://fous.com/workflows/companies-house.md): Companies House returns UK public-register company details, officers, people with significant control and recent filings; records may be incomplete, and ceased entries are optional.
- [US Census Bureau API](https://fous.com/workflows/us-census-bureau.md): US Census Bureau returns statistics from varying Census years, population estimates through July 1, and address geographies using Census vintages that may differ from representation.
- [FBI API](https://fous.com/workflows/fbi.md): Federal Bureau of Investigation wanted notices and public safety information.
- [All Government workflows](https://fous.com/workflows/category/government)
