MaintenancesGET /maintenances

GET /maintenances

List maintenances

Parameters

NameInRequiredTypeDescription
limitquerynointeger
cursorquerynostring
statequerynostring
sincequerynostring

Example request

curl -X GET "/api/v1/maintenances" \
  -H "Authorization: Bearer YOUR_API_KEY"

Responses

200: ok

{
  "items": [
    {
      "id": "string",
      "title": "string",
      "type": "Incident",
      "severity": null,
      "state": "draft",
      "published_at": null,
      "resolved_at": null,
      "scheduled_start_at": null,
      "scheduled_end_at": null,
      "actual_start_at": null,
      "actual_end_at": null,
      "canceled_at": null,
      "postmortem_url": null,
      "affected_services": [
        {
          "id": "string",
          "name": "string"
        }
      ],
      "visible_to_customer_ids": [
        "string"
      ],
      "messages": [
        {
          "id": "string",
          "type": "Investigating",
          "description": "string",
          "date": "2026-01-01T00:00:00.000Z"
        }
      ],
      "created_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "next_cursor": null
}

401: missing or invalid bearer token

title: unauthenticated. No bearer token was sent, or the key is invalid or revoked. detail distinguishes the two.

403: missing required scope

title: forbidden. The key is valid but does not carry read:maintenances.

429: rate limit exceeded

title: rate_limited. A burst or daily limit was exceeded; detail names which. The body carries retry_after in seconds.

500: internal error

title: internal_error. An unhandled server error. Safe to retry.

Every error is an RFC 7807 problem detail served as application/problem+json:

{
  "type": "https://observer.example/problems/forbidden",
  "title": "forbidden",
  "status": 403,
  "detail": "missing scope: read:maintenances"
}

Branch on title, not on detail. See Errors and status codes for the full catalogue and the rate-limit headers.