Skip to main content

Status Page API

Public status-page incidents, the incident RSS feed, and double-opt-in email subscriptions Base path: /api/v1/public/incidents Endpoint count: 6

title: “Errors worth branching on” description: “Per-endpoint failure templates matching the envelope — what actually fires, what to retry, what to surface to the operator.”

Errors worth branching on

These five failures cover the status POST (POST /api/v1/status-page/updates), which every incident flow fires. Each block below is a full { error, meta } envelope as the API returns it, and the matrix at the bottom answers retry vs surface for the same five classes. For the platform-wide decision table these branches plug into, see the error handling guide.

401 — Unauthorized

A 401 on this page is the bearer key failing before the route ran — it never means the resource is wrong. Rotate the key or re-mint the scoped token; retrying the same request changes nothing.

403 — Forbidden

A 403 means the key authenticated but the operation is gated by scope — check the key’s scopes on the developer page; a 403 is never a data-not-found shape.

422 — Schema

A 422 means the payload did not match the request schema — branch on error.details.field and resend with an allowed state value instead of blind-retrying the same body.

429 — Rate

The Retry-After header and error.details.retry_after are both set on every 429 — resend the SAME request after the lower of the two.

404 — Not found

List components first and bind ids on the current page config — a stale id never resolves.

60-second retry matrix


List public status-page incidents

GET /api/v1/public/incidents
Returns the platform’s public status-page incidents over a look-back window (default 90 days; days query 1-365), newest first. Optionally filter by component or status. Each incident carries its title, body, status, impact, affected components, and timeline timestamps. Unauthenticated and edge-cached — use it to render a status page or an uptime widget.

Get the status-page incident RSS feed

GET /api/v1/public/incidents.rss
Returns the 50 most recent public status-page incidents as an RSS 2.0 feed so feed readers and uptime aggregators can subscribe to platform incident history without polling the JSON API. Unauthenticated and edge-cached.

Get a public status-page incident

GET /api/v1/public/incidents/{id}
Returns a single public status-page incident by id together with its most recent status-update timeline (newest first): the title, body, status, impact, affected components, and timeline timestamps. Unauthenticated and edge-cached — use it to render an incident detail page. An unknown id returns 404.
string
required
—

Confirm a status-page email subscription

GET /api/v1/public/statuspage/subscribers/confirm/{token}
Finalises the double-opt-in flow: the visitor opens the confirmation link from the subscribe email, flipping their subscription to confirmed so future incidents notify them. Idempotent — an already-confirmed or unknown token still returns a success envelope. Unauthenticated.
string
required
—

Unsubscribe from status-page emails

GET /api/v1/public/statuspage/subscribers/unsubscribe/{token}
Opts a visitor out of status-page incident email updates via the unsubscribe link carried in every notification. Idempotent — an already-unsubscribed or unknown token still returns a success envelope. Unauthenticated; re-subscribing later creates a fresh subscription.
string
required
—

Subscribe to status-page incident emails

POST /api/v1/public/statuspage/subscribers
Starts the double-opt-in flow for status-page incident email updates: submit an email address (and optional name) and a single-click confirmation link is emailed to the visitor. Unauthenticated and rate-limited. Use it to let a visitor subscribe to platform incident notifications from the status page.