Skip to content

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.

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).

GET /api/v1/status/summary
{
"data": [{ "monitor_id": "", "name": "API Gateway", "status": "active", "uptime_24h": 99.98 }]
}
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.

GET /api/v1/incidents

Open and past incidents, with their update timeline on GET /api/v1/incidents/:id. Full details on the Incidents API page.

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 site
const 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 route
const { 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.

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).