List incidents across every check in the project
Returns incidents project-wide, newest-opened first, keyset-paged — the console's Incidents page and any automation that wants a single feed across every monitor instead of walking GET /api/v1/checks/{id}/incidents per check.
Pagination is keyset, on (opened_at, id) descending — not offset-based, so an incident opened while a caller is mid-page can never shift another incident into or out of the page it already fetched. next_cursor is an opaque token; pass it back as cursor verbatim to fetch the next page, and stop when next_cursor is null. A cursor this API did not issue (or one that has been altered) is rejected with 400 INVALID_CURSOR rather than silently starting over.
?since= is unbounded by default: incidents are already retention-bound at 1 year (see /privacy), so there is no reason to bound it the way GET /api/v1/runs bounds its own ?since=.
?state= defaults to all; open returns incidents with a null closed_at, resolved returns the rest.
Trace-level fields (the recorded event timeline, notes) are not part of this list response; fetch GET /api/v1/incidents/{id} for one incident's full detail.
Request
- Base URL: https://app.lastping.dev
- URL: https://app.lastping.dev/api/v1/incidents
- Auth: API key in header X-Api-Key
Query parameters
Restrict to one check's incidents.
Restrict to open or resolved incidents. Defaults to all.
RFC 3339 timestamp. Unbounded by default.
Maximum number of incidents to return (default 20, max 100).
Opaque next_cursor value from a previous page.
Response
A page of incidents (may be empty), newest-opened first.
Example response
{
"incidents": [
{
"incident_id": 4821,
"check_id": "550e8400-e29b-41d4-a716-446655440000",
"check_name": "Nightly backup",
"check_slug": "nightly-backup",
"cause": "fail",
"detail_snippet": "STEP failed: go test ./... exited with code 1",
"opened_at": "2026-07-10T03:10:00Z",
"closed_at": "2026-07-10T04:00:00Z",
"duration_ms": 3000000,
"run_id": "run-2026-08-23-001",
"note_count": 2,
"deliveries_count": 2
}
],
"next_cursor": "MjAyNi0wOS0xNVQxNjo1NTozNC41MzA0MzVafDQ4MjE",
"counts": {
"open": 2,
"resolved": 38,
"total": 40,
"median_resolve_ms": 372000
}
}Changes
No recorded changes to this operation across all 2 revisions of this API.