Incident endpoints
Read incidents publicly and manage their timelines with an admin token.
Read the incident timeline with /incidents; create and update incidents
through /admin/incidents with a bearer token. Public reads need no token.
If incidents are disabled,
all these routes return 404 { "error": "This feature is disabled." }.
GET /incidents
| Query | Type | Notes |
|---|---|---|
status | investigating, identified, monitoring, resolved | Comma-separated. |
severity | minor, major, critical | Comma-separated. |
from, to | ISO-8601 | Inclusive bounds. |
limit, offset | non-negative integer | Pagination. |
GET /incidents/:id
One incident with its timeline, or 404 { "error": "Incident not found." }.
POST /admin/incidents
Non-empty; trimmed.
Trimmed and de-duplicated. An empty array means global.
The first timeline entry.
Defaults to investigating. Creating one as resolved is rejected.
Returns 201 with the created incident and dispatches incident.created.
POST /admin/incidents/:id/updates
Add a timeline entry when there's news to share. Use this route to move an incident to monitoring or resolved while explaining what changed.
| Field | Required | Notes |
|---|---|---|
status | yes | Any incident status, including resolved. |
message | yes | Timeline text. |
severity | no | Changes severity with this entry. |
Dispatches incident.resolved for resolved, otherwise incident.updated.
PATCH /admin/incidents/:id
Edit fields without writing a narrative update. Omitted fields keep their
current value, and message defaults to "Incident details updated.".
DELETE /admin/incidents/:id
Returns 204 on success or 404 for an unknown incident. Deletion removes
the timeline too, without sending an event. Resolve an incident instead if
you want it to remain in public history and feeds.