Status, maintenances & website embedding
Everything shown on your OKStatus dashboard and status pages can also be queried directly with an API key — global status, per-monitor uptime, open incidents and scheduled maintenance windows. That makes it easy to build your own status widget, banner or internal dashboard on top of OKStatus.
Base URL: https://api.okstatus.eu/api/v1 — every request needs an Authorization: Bearer oks_live_... header, see Authentication.
Global status
Section titled “Global status”GET /api/v1/status{ "data": { "status": "operational", "monitors": 12, "active_incidents": 0 }}status is operational, degraded (at least one open incident) or major_outage (a critical incident, or any monitor down).
Per-monitor summary
Section titled “Per-monitor summary”GET /api/v1/status/summary{ "data": [{ "monitor_id": "…", "name": "API Gateway", "status": "active", "uptime_24h": 99.98 }]}Maintenance windows
Section titled “Maintenance windows”GET /api/v1/maintenances{ "maintenances": [ { "id": "…", "title": "DB upgrade", "message": "Planned database maintenance", "status": "scheduled", "scheduledStart": "2026-09-02T01:00:00.000Z", "scheduledEnd": "2026-09-02T03:00:00.000Z", "monitorIds": ["…"] } ]}status is scheduled, in_progress, completed or cancelled. You can also create, update and delete maintenances by API (POST /maintenances, PATCH /maintenances/:id, DELETE /maintenances/:id) — see the interactive reference for the full schemas.
Incidents
Section titled “Incidents”GET /api/v1/incidentsOpen and past incidents, with their update timeline on GET /api/v1/incidents/:id. Full details on the Incidents API page.
Embedding status into your website
Section titled “Embedding status into your website”The API key must stay secret, so never call the API directly from public browser code — proxy it through your own backend and expose only what you need:
// server-side (Node) — e.g. an /api/status route of your own siteconst res = await fetch("https://api.okstatus.eu/api/v1/status", { headers: { Authorization: `Bearer ${process.env.OKSTATUS_API_KEY}` },});const { data } = await res.json();// → { status: "operational", monitors: 12, active_incidents: 0 }// client-side — render a banner from your own proxy routeconst { data } = await (await fetch("/api/status")).json();if (data.status !== "operational") { showBanner( data.status === "major_outage" ? "We are experiencing an outage — see our status page." : "Some services are degraded — see our status page." );}To show upcoming maintenance on your site, do the same with /api/v1/maintenances and filter on status === "scheduled" and scheduledStart in the future.
Rate limits
Section titled “Rate limits”The public API is capped at 1000 requests per hour per organization — the same budget as every other /api/v1 endpoint, see Authentication. Cache responses on your side (30–60 s is plenty for a status widget).