---
title: "Incident summary counts"
method: GET
path: "/v1/data/incidents/summary"
tags: ["Incidents"]
---

# Incident summary counts

`GET /v1/data/incidents/summary`

## Request

- Base URL: `https://api.mapulus.com`
- URL: `https://api.mapulus.com/v1/data/incidents/summary`
- Auth: HTTP bearer

Get aggregated incident counts by type hierarchy.

Returns counts grouped by `incident_type` → `event_type` → `event_subtype`.
Supports the same filters as the list endpoint (type, status, severity, spatial, time range)
but without pagination — the response is a single summary object. Both `type` and `status`
accept comma-separated values (e.g. `?status=active,upcoming`).

The response includes two top-level keys:

- **`types`** — filtered counts matching the current query parameters.
- **`catalog`** — an **unfiltered** list of every `incident_type` / `event_type` /
  `event_subtype` combination that exists in the database. This is always the full
  set regardless of filters, so UIs can render complete filter menus (including
  categories with a zero count in the current view).

## Query parameters

- `type` string, nullable: Filter by incident type (traffic, fire, power, weather). Comma-separated for multiple.
- `event_type` string, nullable: Filter by event type (e.g. roadworks, crash, flood, fire_vegetation).
- `event_subtype` string, nullable: Filter by event subtype (e.g. flash_flood, planned_roadworks, multi_vehicle).
- `status` string: Filter by status (active, upcoming, resolved, expired). Comma-separated for multiple.
- `state` string, nullable: Filter by state (QLD, NSW, etc.).
- `severity` string, nullable: Filter by severity (minor, moderate, major, extreme).
- `source` string, nullable: Filter by source_id.
- `boundary_id` string, nullable: Incidents intersecting this boundary (e.g. `lga:17200`).
- `lat` number, nullable: Latitude for radius search.
- `lng` number, nullable: Longitude for radius search.
- `radius_km` number, nullable: Search radius in km (requires lat, lng).
- `since` string, nullable: Incidents started after this ISO datetime.
- `until` string, nullable: Incidents started before this ISO datetime.
- `ends_after` string, nullable: Incidents with expected_end_at after this ISO datetime.
- `ends_before` string, nullable: Incidents with expected_end_at before this ISO datetime.

## Response `200`

Aggregated counts by incident_type, event_type, and event_subtype.

- ResponseEnvelopeIncidentSummaryResponse
  - `data` IncidentSummaryResponse, required: Aggregated incident counts grouped by incident_type → event_type → event_subtype. The ``types`` array contains counts matching the current filters. The ``catalog`` array is **always unfiltered** — it lists every incident_type / event_type / event_subtype combination that has ever appeared in the database, regardless of the query filters applied to ``types``. This is useful for building UI filter toggles that show all possible categories (including those with a zero count in the current view).
    - `total` integer, required: Total number of matching incidents.
    - `types` IncidentTypeSummaryCount[]: Filtered counts grouped by incident_type → event_type → event_subtype.
      - `incident_type` string, required
      - `count` integer, required
      - `event_types` IncidentEventTypeCount[]
        - `event_type` string, nullable
        - `count` integer, required
        - `subtypes` IncidentSubtypeCount[]
          - `event_subtype` string, nullable
          - `count` integer, required
    - `catalog` IncidentTypeCatalog[]: Unfiltered list of all known incident_type → event_type → event_subtype combinations in the database. Always returned regardless of query filters, so UIs can render complete filter menus including zero-count categories.
      - `incident_type` string, required
      - `event_types` IncidentSubtypeCatalog[]
        - `event_type` string, nullable
        - `subtypes` string[]
  - `meta` ResponseMeta: Response metadata.
    - `request_id` string, nullable
    - `pagination` PaginationMeta: Pagination metadata for list responses.
      - `total` integer, required: Total number of matching records.
      - `limit` integer, required: Maximum records returned per page.
      - `offset` integer, required: Number of records skipped.
      - `has_more` boolean, required: Whether more records exist beyond this page.
    - `demographics` DemographicsMeta: Demographics-specific metadata returned with census data endpoints.
      - `topics_included` string[], required: Topics included in the response.
      - `topics_available` string[]: Additional topics available but not requested.
    - `sources` object, nullable

## Other responses

- `422`: Validation Error

---

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