Try the RankNibbler SEO API

Outages report Beta

GET /api/v1/monitors/{id}/outages

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

NameTypeDescription
from optionalstring | integerStart of the window. Default: 7 days before to.
to optionalstring | integerEnd of the window. Default: now. The window can be up to 1830 days.
order optionalstringasc (oldest first, the default) or desc. Applies to both lists.

Request

Response

200 · application/json
  1. {
  2. "id": "mon_79ce3cf9c4fa56e98af4",
  3. "from": "2026-09-16T00:00:00.000Z",
  4. "to": "2026-09-17T00:00:00.000Z",
  5. "outages": [
  6. {
  7. "id": "1842",
  8. "startedAt": "2026-09-16T22:27:10.114Z",
  9. "endedAt": "2026-09-16T22:41:10.502Z",
  10. "ongoing": false,
  11. "durationSeconds": 840,
  12. "cause": "HTTP 502",
  13. "statusCode": 502,
  14. "region": "default",
  15. "duringMaintenance": false
  16. }
  17. ],
  18. "states": [
  19. { "status": "up", "from": "2026-09-16T00:00:00.000Z", "to": "2026-09-16T22:27:10.114Z" },
  20. { "status": "down", "from": "2026-09-16T22:27:10.114Z", "to": "2026-09-16T22:41:10.502Z" },
  21. { "status": "up", "from": "2026-09-16T22:41:10.502Z", "to": "2026-09-17T00:00:00.000Z" }
  22. ],
  23. "usage": { "used": 23, "dailyLimit": 100, "tier": "free" }
  24. }

Response fields

FieldTypeDescription
outages[].idstringThe outage id.
outages[].startedAtstringThe time of the first failed check. This can be before from for an outage already under way.
outages[].endedAtstring | nullThe time of the next successful check. null while it's still going on.
outages[].ongoingbooleantrue if the monitor is still down.
outages[].durationSecondsintegerThe full length of the outage, up to now if it's ongoing. Not cut to the window.
outages[].causestring | nullWhy the first check failed, such as "HTTP 502" or "Connection refused".
outages[].statusCodeinteger | nullHTTP status of the first failed check.
outages[].regionstringWhere the first failed check ran from.
outages[].duringMaintenancebooleantrue 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

StatusWhen
400from or to isn't a valid time, from isn't before to, the window is too long, or order isn't asc or desc.
401The API key is missing or invalid.
403The key's owner doesn't have access to uptime monitoring, or the key isn't linked to a workspace.
404No monitor with that id in your workspace.
405The endpoint doesn't accept that method.
429A rate limit or your daily quota was hit. Read Retry-After, in seconds.
500Something went wrong on our side. Try again.
503The API is temporarily unavailable. Try again shortly.

Errors are JSON: { "error": "message" }. See Monitoring API errors.

Related