Outages report Beta
Every outage that overlaps the window, and a timeline that splits the whole window into up, down and unknown stretches. Use the timeline to draw a status bar.
Needs an X-API-Key header whose owner has access to uptime monitoring in the app. The call counts once against your daily quota. See Monitoring API: getting started for authentication, rate limits and errors.
Query parameters
| Name | Type | Description |
|---|---|---|
from optional | string | integer | Start of the window. Default: 7 days before to. |
to optional | string | integer | End of the window. Default: now. The window can be up to 1830 days. |
order optional | string | asc (oldest first, the default) or desc. Applies to both lists. |
Request
Response
- {
- "id": "mon_79ce3cf9c4fa56e98af4",
- "from": "2026-09-16T00:00:00.000Z",
- "to": "2026-09-17T00:00:00.000Z",
- "outages": [
- {
- "id": "1842",
- "startedAt": "2026-09-16T22:27:10.114Z",
- "endedAt": "2026-09-16T22:41:10.502Z",
- "ongoing": false,
- "durationSeconds": 840,
- "cause": "HTTP 502",
- "statusCode": 502,
- "region": "default",
- "duringMaintenance": false
- }
- ],
- "states": [
- { "status": "up", "from": "2026-09-16T00:00:00.000Z", "to": "2026-09-16T22:27:10.114Z" },
- { "status": "down", "from": "2026-09-16T22:27:10.114Z", "to": "2026-09-16T22:41:10.502Z" },
- { "status": "up", "from": "2026-09-16T22:41:10.502Z", "to": "2026-09-17T00:00:00.000Z" }
- ],
- "usage": { "used": 23, "dailyLimit": 100, "tier": "free" }
- }
Response fields
| Field | Type | Description |
|---|---|---|
outages[].id | string | The outage id. |
outages[].startedAt | string | The time of the first failed check. This can be before from for an outage already under way. |
outages[].endedAt | string | null | The time of the next successful check. null while it's still going on. |
outages[].ongoing | boolean | true if the monitor is still down. |
outages[].durationSeconds | integer | The full length of the outage, up to now if it's ongoing. Not cut to the window. |
outages[].cause | string | null | Why the first check failed, such as "HTTP 502" or "Connection refused". |
outages[].statusCode | integer | null | HTTP status of the first failed check. |
outages[].region | string | Where the first failed check ran from. |
outages[].duringMaintenance | boolean | true when all of the outage's downtime fell inside maintenance. Such outages aren't counted in the summary. |
states[] | object[] | Back-to-back stretches covering the whole window, each with status (up, down, maintenance or unknown), from and to. Where they overlap, unknown takes priority over maintenance, maintenance over down, and down over up. |
Errors
| Status | When |
|---|---|
400 | from or to isn't a valid time, from isn't before to, the window is too long, or order isn't asc or desc. |
401 | The API key is missing or invalid. |
403 | The key's owner doesn't have access to uptime monitoring, or the key isn't linked to a workspace. |
404 | No monitor with that id in your workspace. |
405 | The endpoint doesn't accept that method. |
429 | A rate limit or your daily quota was hit. Read Retry-After, in seconds. |
500 | Something went wrong on our side. Try again. |
503 | The API is temporarily unavailable. Try again shortly. |
Errors are JSON: { "error": "message" }. See Monitoring API errors.