---
title: "List danger spots"
description: "Returns every **approved** spot on the public map, ordered by severity (highest first),\nthen newest. Spots that are pending review or were rejected by moderators are never\nreturned.\n\nThe list is small enough to fetch in full; filter on the client for anything the query\nparameters don't cover. The public map refreshes it every two minutes.\n\nRate limit: **120 requests per minute** per visitor (shared with `/api/stats` and `/api/me`).\n"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.deathspot.org/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Deathspot UG API › Spots

`GET /api/spots`

Returns every **approved** spot on the public map, ordered by severity (highest first),
then newest. Spots that are pending review or were rejected by moderators are never
returned.

The list is small enough to fetch in full; filter on the client for anything the query
parameters don't cover. The public map refreshes it every two minutes.

Rate limit: **120 requests per minute** per visitor (shared with `/api/stats` and `/api/me`).

## Query parameters

- `listSpots.query.category` (string, optional) — Only return spots in this category.
  - one of `"murder"`, `"mob_action"`, `"boda_gang"`, `"robbery"`, `"stabbing"`, `"kidnapping"`, `"other"`
- `listSpots.query.since` (integer, optional) — Only return spots reported within this many days.
  - min 1; example `30`

## Code samples

### cURL

```curl
curl --request GET \
  --url https://deathspot.org/api/spots
```

### TypeScript

```typescript
const url = 'https://deathspot.org/api/spots';
const options = {method: 'GET'};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://deathspot.org/api/spots"

response = requests.get(url)

print(response.text)
```

## Responses

### 200

The approved spots.

#### Example

```json
{
  "spots": [
    {
      "id": 1,
      "title": "Mukwano Road (near CID HQ)",
      "description": "Moses Matovu was reportedly killed here, less than two minutes from CID Headquarters. Residents are calling for more police patrols on Mukwano Road.",
      "lat": 0.30827,
      "lng": 32.58721,
      "area": "Kibuli, Makindye",
      "category": "murder",
      "severity": 5,
      "time_of_day": "night",
      "incident_date": "2026-09-23",
      "source_url": "https://x.com/TonyNatif/status/2102998432218534245",
      "created_at": "2026-09-24T08:55:51.804Z",
      "last_confirmed_at": "2026-09-24T09:40:12.119Z",
      "confirmations": 4,
      "denials": 0,
      "status": "confirmed",
      "moderator_verified": false,
      "seeded": true
    }
  ]
}
```

- `listSpots.response.200.spots` (array<object>, required)
  - `listSpots.response.200.spots.id` (integer, required)
    - example `1`
  - `listSpots.response.200.spots.title` (string, required)
    - maxLength 80; example `"Mukwano Road (near CID HQ)"`
  - `listSpots.response.200.spots.description` (string, required) — What people should know about the place. It may be empty.
    - maxLength 600
  - `listSpots.response.200.spots.lat` (number, required)
    - format `double`; min -1.6; max 4.3; example `0.30827`
  - `listSpots.response.200.spots.lng` (number, required)
    - format `double`; min 29.5; max 35.1; example `32.58721`
  - `listSpots.response.200.spots.area` (string, required) — Neighbourhood, division or landmark. It may be empty.
    - maxLength 80; example `"Kibuli, Makindye"`
  - `listSpots.response.200.spots.category` (string, required) — What happens at the spot: `murder` (killing), `mob_action`, `boda_gang`, `robbery` (robbery or snatching), `stabbing` (stabbing or hacking), `kidnapping`, `other`.
    - one of `"murder"`, `"mob_action"`, `"boda_gang"`, `"robbery"`, `"stabbing"`, `"kidnapping"`, `"other"`
  - `listSpots.response.200.spots.severity` (integer, required) — 1 = feels unsafe, 2 = harassment or threats, 3 = robbery or snatching, 4 = violent attack, 5 = someone was killed.
    - min 1; max 5; example `5`
  - `listSpots.response.200.spots.time_of_day` (string, required) — When the spot is dangerous.
    - one of `"day"`, `"night"`, `"any"`
  - `listSpots.response.200.spots.incident_date` (string | null, required)
    - format `date`; example `"2026-09-23"`
  - `listSpots.response.200.spots.source_url` (string | null, required) — A news, police or court source, if the reporter gave one.
    - format `uri`
  - `listSpots.response.200.spots.created_at` (string, required)
    - format `date-time`
  - `listSpots.response.200.spots.last_confirmed_at` (string | null, required) — When someone last voted "still dangerous".
    - format `date-time`
  - `listSpots.response.200.spots.confirmations` (integer, required) — Number of "still dangerous" votes.
    - min 0
  - `listSpots.response.200.spots.denials` (integer, required) — Number of "not anymore" votes.
    - min 0
  - `listSpots.response.200.spots.status` (string, required) — The community's verdict from votes. `confirmed` needs at least 3 more confirmations than denials, and `disputed` means denials outnumber confirmations by more than 2.
    - one of `"unverified"`, `"confirmed"`, `"disputed"`
  - `listSpots.response.200.spots.moderator_verified` (boolean, required) — `true` when a moderator has checked the spot against a reliable source. Shown as "Verified by moderators".
  - `listSpots.response.200.spots.seeded` (boolean, required) — `true` for spots loaded from the project's sourced seed data rather than reported through the app.

### 429

The caller exceeded a rate limit. Wait `Retry-After` seconds before retrying.

#### Example

```json
{
  "error": "You have reported a lot of spots recently. Please try again in an hour."
}
```

- `listSpots.response.429.error` (string, required) — A human-readable message you can show to users.

### 500

Unexpected server error, usually because the database is unreachable.

#### Example

```text
string
```


Source: https://docs.deathspot.org/api/Spots/listSpots/index.md
