Status API

Component state as JSON.

For dashboards, alerting, and status widgets in your own tools. No authentication, no rate limit worth documenting, CORS open to any origin.

Summary

One request returns overall state, every component, and any open incident.

GET https://status.dicast.dev/api/v1/summary
{
  "status": "operational",
  "updated_at": "2026-08-14T17:42:00Z",
  "components": [
    {
      "id": "review-pipeline",
      "group": "core",
      "name": "Review pipeline",
      "status": "operational",
      "uptime_90d": 0.9994
    },
    {
      "id": "merge-gate",
      "group": "core",
      "name": "Merge gate",
      "status": "operational",
      "uptime_90d": 0.9999
    }
  ],
  "incidents": []
}

Status values

ValueMeaning
operationalWorking normally.
degradedWorking, but slower or less reliably than normal.
partial_outageUnavailable for some customers or some requests.
major_outageUnavailable.
maintenanceDeliberately unavailable during an announced window.

The top-level status is the worst state among all components.

Endpoints

EndpointReturns
/api/v1/summaryEverything below in one response.
/api/v1/statusJust the overall status string.
/api/v1/componentsAll components with 90-day uptime.
/api/v1/incidentsOpen incidents with their update timeline.
/api/v1/incidents/historyResolved incidents, most recent first.
/api/v1/maintenanceScheduled windows, upcoming and past.

Polling

Responses carry an ETag; send If-None-Match and you will get a 304 when nothing changed. State is recomputed every 30 seconds, so polling faster than that gains you nothing.

curl -s -H "If-None-Match: \"a1b2c3\"" \
  https://status.dicast.dev/api/v1/summary
Why a separate host

The status API runs on infrastructure independent of the review pipeline. If Dicast is down, its status page should not be.