---
title: "Search incidents by polygon"
method: POST
path: "/v1/data/incidents/search"
tags: ["Incidents"]
---

# Search incidents by polygon

`POST /v1/data/incidents/search`

## Request

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

Search for incidents intersecting a GeoJSON geometry.

Send a GeoJSON Polygon or MultiPolygon in the request body. Optionally filter
by incident type, status, and severity. Both `type` and `status` accept
comma-separated values (e.g. `"status": "active,upcoming"`). Results include
structured location fields (`locality`, `road_name`, `location_detail`).

**Ordering**: Defaults to closest-first (`sort: "distance"`) based on the polygon
centroid, with `distance_km` in each result. Use `sort: "newest"` for newest-first.

Set `detail: true` in the body to include full geometry, description, and
raw source data per incident.

## Request body

- IncidentSearchRequest: Request body for POST /incidents/search.
  - `geometry` GeoJSONGeometry, required: GeoJSON geometry for search request body.
    - `type` string, required: GeoJSON geometry type (Polygon, MultiPolygon, etc.).
    - `coordinates` unknown[], required: GeoJSON coordinates array.
      - unknown
  - `type` string[], nullable: Filter by incident types.
  - `event_type` string, nullable: Filter by event type (e.g. roadworks, crash, flood).
  - `event_subtype` string, nullable: Filter by event subtype (e.g. flash_flood, planned_roadworks).
  - `status` string: Filter by status (active, upcoming, resolved, expired). Comma-separated for multiple.
  - `severity` string, nullable: Filter by severity.
  - `source` string, nullable: Filter by source_id.
  - `state` string, nullable: Filter by state (QLD, NSW, etc.).
  - `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.
  - `detail` boolean: Include full detail (geometry, description, source data).
  - `sort` string, nullable: Sort order: 'distance' or 'newest'. Default: 'distance'.
  - `limit` integer
  - `offset` integer

## Response `200`

Incidents intersecting the provided geometry. Use detail=true for full data.

- ResponseEnvelopeUnionListIncidentSummaryListIncidentDetail
  - `data` union, required: Response payload.
    - IncidentSummary[]
      - `incident_id` string, required
      - `source_id` string, required
      - `incident_type` string, required
      - `event_type` string, nullable
      - `event_subtype` string, nullable
      - `severity` string, nullable
      - `status` string, required
      - `title` string, required
      - `state` string, required
      - `locality` string, nullable: Suburb or locality name.
      - `road_name` string, nullable: Affected road name.
      - `location_detail` string, nullable: Free-text location description.
      - `centroid` object, nullable: GeoJSON point (centroid).
      - `started_at` string, date-time, required
      - `expected_end_at` string, date-time, nullable
      - `resolved_at` string, date-time, nullable
      - `distance_km` number, nullable: Distance in km from the query point.
    - IncidentDetail[]
      - `incident_id` string, required
      - `source_id` string, required
      - `source_incident_id` string, required
      - `incident_type` string, required
      - `event_type` string, nullable
      - `event_subtype` string, nullable
      - `severity` string, nullable
      - `status` string, required
      - `title` string, required
      - `description` string, nullable
      - `state` string, required
      - `locality` string, nullable: Suburb or locality name.
      - `road_name` string, nullable: Affected road name.
      - `location_detail` string, nullable: Free-text location description.
      - `geometry` object, nullable: GeoJSON geometry object.
      - `centroid` object, nullable: GeoJSON point (centroid).
      - `data` object: Source-specific properties.
      - `started_at` string, date-time, required
      - `expected_end_at` string, date-time, nullable
      - `resolved_at` string, date-time, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `distance_km` number, nullable: Distance in km from the query point.
  - `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)
