---
title: "Get Incident Details"
description: "Returns detailed incident data, including a timeline of failed/recovery checks and alert events."
---

`GET /api/incidents/:incidentPublicId`

## Authentication

Requires a valid session.

- Header: `Authorization: Bearer <token>`

## Parameters

- `incidentPublicId` (Path, required): Incident public UUID.

## Example (cURL)

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"

curl -X GET "$BASE_URL/api/incidents/6bfec6f6-245a-47ce-843b-157d97d56f88" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
```

Note: `evidenceCheck` can be `null`. `screenshotUrl` is only set when `hasScreenshot` is `true`.

## Timeline resolution

Every entry in `outageStartedCheck`, `failedChecks` and `recoveryChecks` carries a `resolution`:

- `raw`: a single check at a single location. `location`, `statusCode` and `errorMessage` are the ones that location reported.
- `1min`: one minute of the monitoring aggregate, used once an incident is older than the raw check retention window (48 hours). `location`, `statusCode` and `errorMessage` are `null`, `responseTimeMs` is the average over the minute, and two extra fields say how many locations were behind it: `totalLocations` and `failedLocations`. The `id` of such an entry is synthetic (`1min-<timestamp>`) and cannot be looked up as a check.

The three lists are resolved independently, so an incident that spans the boundary can return `raw` entries for its recent part and `1min` entries for the older one.

## Example Response (excerpt)

```json
{
  "incident": {
    "id": 123,
    "websiteId": 101,
    "type": "downtime",
    "status": "open",
    "startedAt": "2026-02-26T12:10:00.000Z",
    "resolvedAt": null,
    "statusCode": null,
    "errorMessage": "Timeout",
    "responseTimeMs": null
  },
  "timeline": {
    "outageStartedAt": "2026-02-26T12:08:00.000Z",
    "outageStartedCheck": {
      "id": "chk_01H...",
      "checkedAt": "2026-02-26T12:08:00.000Z",
      "status": "failure",
      "statusCode": 503,
      "errorMessage": "Timeout",
      "responseTimeMs": null,
      "location": { "id": 7, "code": "de-nbg", "name": "Nuremberg (DE)" },
      "resolution": "raw"
    },
    "confirmationAt": "2026-02-26T12:10:00.000Z",
    "failedChecks": [
      {
        "id": "1min-2026-02-26T12:09:00.000Z",
        "checkedAt": "2026-02-26T12:09:00.000Z",
        "status": "failure",
        "statusCode": null,
        "errorMessage": null,
        "responseTimeMs": 246,
        "location": null,
        "resolution": "1min",
        "totalLocations": 3,
        "failedLocations": 2
      }
    ],
    "failedChecksTotal": 2,
    "alertEvents": [
      {
        "id": 987,
        "sentAt": "2026-02-26T12:11:00.000Z",
        "type": "email",
        "status": "sent",
        "channelName": "Ops Email",
        "errorMessage": null
      }
    ],
    "recoveryChecks": [],
    "recoveryChecksTotal": 0
  },
  "evidenceCheck": {
    "id": "chk_01H...",
    "checkedAt": "2026-02-26T12:08:00.000Z",
    "diagnostics": null,
    "hasScreenshot": false,
    "screenshotUrl": null
  }
}
```

## Common Errors

- `400 Incident public ID (UUID) required` if `:incidentPublicId` is invalid
- `401 Unauthorized` if you are not authenticated
- `403 Forbidden` if the incident exists but you do not have access
- `404 Incident not found` if the incident does not exist

