Reporting API
Drive a status page from an external monitor - open incidents, post updates, and set component statuses with a per-page Status API key.
Reporting API
Most of Status is built in the dashboard, but you can also drive a page programmatically. Create a Status API key for a page, then have an external monitor or script open incidents, post updates, and set component statuses. Writes go through the same path the dashboard uses, so the public page, subscriber notifications and the 90-day uptime stay consistent.
A key is scoped to a single page: it can only read and write the page it was created for.
Authentication
Create a key from the page editor in the dashboard. It is shown in full once when you create or rotate it; store it somewhere safe. Send it on every request:
Authorization: Bearer hyd_status_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- A key authorizes only its own page. There is no account-wide Status key.
- Revoke a key by deleting or disabling it in the dashboard; revocation takes effect immediately.
| Status | When | code |
|---|---|---|
| 401 | No Authorization header | NO_KEY |
| 401 | Key not recognized | BAD_KEY |
| 401 | Key disabled | KEY_DISABLED |
| 403 | Page suspended, or the owning account is not in good standing | - |
| 404 | Component or incident id not on this page | - |
| 400 | Body failed validation | - |
Status values
Two enums are used throughout. Sending a value outside these sets returns 400.
- Component status:
operational,degraded,partial,outage,maintenance. - Incident state:
investigating,identified,in_progress,monitoring,resolved. - Incident impact:
none,minor,major,critical.
Anywhere you set affected components you pass an array of { component, status }, where component is the component's id or its name (case-insensitive). Unknown references are ignored silently, so a rename never breaks a caller.
Read current status
https://hep.gg/api/v1/status-api/statusPublic{
"ok": true,
"data": {
"overall": "operational",
"components": [
{ "id": "c_api", "name": "API", "status": "operational" }
],
"activeIncidents": [
{ "id": "i_123", "title": "Elevated latency", "state": "monitoring", "impact": "minor", "startedAt": "2026-06-08T18:00:00.000Z" }
]
}
}Open an incident
https://hep.gg/api/v1/status-api/incidentsPublictitleimpactnone, minor, major, critical. Defaults to none when omitted.bodycomponents{ component, status }. Up to 200 entries.{ "ok": true, "data": { "id": "i_123" } }Post an update / change state
https://hep.gg/api/v1/status-api/incidents/:iid/updatesPublicstateinvestigating, identified, in_progress, monitoring, resolved.bodycomponents{ component, status }. Up to 200 entries.Moving an incident to resolved auto-resets every component the incident touched back to operational and closes out its contribution to the uptime history.
{ "ok": true, "data": { "id": "u_456" } }Set a component status
https://hep.gg/api/v1/status-api/components/:cid/statusPublicstatusoperational, degraded, partial, outage, maintenance.curl -X POST https://api.hep.gg/v1/status-api/components/c_api/status \
-H "Authorization: Bearer hyd_status_xxx" \
-H "Content-Type: application/json" \
-d '{ "status": "operational" }'{ "ok": true }Behaviour notes
- Setting a component's status counts toward its 90-day uptime, exactly like a change made in the dashboard. Maintenance never counts as downtime.
- Resolving an incident restores the components it affected to Online, except components that another open incident is still affecting. Pass
restoreon the resolving update ("all","none", or a list of component ids) to control this explicitly. POST /incidentsalso accepts optionalstate,kind(incidentormaintenance) and, for maintenance,scheduledForandscheduledUntil. A maintenance scheduled for later is created asscheduledand its components are applied at the start time.- Both
POST /incidentsandPOST /incidents/:id/updatesacceptnotify: trueto notify the page's subscribers. - Incidents and updates created through the API are marked with their source in the dashboard history.