An incident is a title, an impact, the components it affects and a timeline of updates. Statuses are investigating, identified, monitoring and resolved; impacts are none, minor, major and critical. Incidents created with an API key are recorded with source: "api". See the incidents guide.
List incidents
/user/incidentsNewest first. Each row includes its affected components under incidentComponents.
Needs the dashboard.read permission, or an API key with the matching scope.
Query parameters
workspace_idintegerrequired- The workspace to read from.
page_idinteger- Only incidents on this page.
statusstring- One status.
openbooleantruefor anything not resolved.limitintegerdefault 20- Rows per page, up to 50.
offsetintegerdefault 0- Rows to skip.
curl "https://api.statusbee.co/user/incidents?workspace_id=5&open=true" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"rows": [
{
"id": 91,
"workspace_id": 5,
"org_id": 5,
"page_id": 4,
"title": "Checkout errors",
"status": "investigating",
"impact": "major",
"visible": true,
"source": "manual",
"monitor_id": null,
"started_at": "2026-09-14T09:02:11.000Z",
"resolved_at": null,
"postmortem_md": null,
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z",
"incidentComponents": [
{
"incident_id": 91,
"component_id": 21,
"status_override": "major_outage"
}
]
}
],
"count": 1,
"limit": 20,
"offset": 0
}
}Get an incident
/user/incidents/:idThe incident with its full timeline (updates, newest first) and affected components.
Needs the dashboard.read permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Incident id.
curl "https://api.statusbee.co/user/incidents/91" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 91,
"workspace_id": 5,
"org_id": 5,
"page_id": 4,
"title": "Checkout errors",
"status": "investigating",
"impact": "major",
"visible": true,
"source": "manual",
"monitor_id": null,
"started_at": "2026-09-14T09:02:11.000Z",
"resolved_at": null,
"postmortem_md": null,
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z",
"updates": [
{
"id": 240,
"incident_id": 91,
"status": "investigating",
"body_md": "We are seeing elevated error rates on checkout and are investigating.",
"notify": true,
"display_at": "2026-09-14T09:02:11.000Z",
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z"
}
],
"components": [
{
"id": 21,
"name": "REST API",
"status": "major_outage"
}
]
}
}Create an incident
/user/incidentsCreates the incident and its first update in one call. visible: false makes a draft that only the dashboard can see; publish it later.
Needs the incidents.manage permission, or an API key with the matching scope.
Body
workspace_idintegerrequired- The workspace.
page_idintegerrequired- The page the incident appears on.
titlestringrequired- Up to 200 characters.
body_mdstringrequired- The first update, Markdown.
statusstringdefault investigatingimpactstringdefault minorcomponentsarray[{ id, status_override? }]. Components on the page, each optionally forced to a status while the incident is open.notifybooleandefault true- Notify subscribers about this first update.
visiblebooleandefault truefalsecreates a draft.
curl -X POST "https://api.statusbee.co/user/incidents" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": 5,
"page_id": 4,
"title": "Checkout errors",
"impact": "major",
"body_md": "We are seeing elevated error rates on checkout and are investigating.",
"components": [
{
"id": 21,
"status_override": "major_outage"
}
]
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 91,
"workspace_id": 5,
"org_id": 5,
"page_id": 4,
"title": "Checkout errors",
"status": "investigating",
"impact": "major",
"visible": true,
"source": "manual",
"monitor_id": null,
"started_at": "2026-09-14T09:02:11.000Z",
"resolved_at": null,
"postmortem_md": null,
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Post an update
/user/incidents/:id/updatesAppends to the timeline and moves the status. An update with status: "resolved" resolves the incident.
Needs the incidents.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Incident id.
Body
body_mdstringrequired- Markdown.
statusstring- New status. Omit to keep the current one.
notifybooleandefault true
curl -X POST "https://api.statusbee.co/user/incidents/91/updates" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"status": "identified",
"body_md": "A stuck queue consumer is the cause. A fix is rolling out."
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 241,
"incident_id": 91,
"status": "identified",
"body_md": "A stuck queue consumer is the cause. A fix is rolling out.",
"notify": true,
"display_at": "2026-09-14T09:02:11.000Z",
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z"
}
}Resolve an incident
/user/incidents/:id/resolveShorthand for a resolved update. Clears component overrides and sets resolved_at.
Needs the incidents.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Incident id.
Body
body_mdstringdefault This incident has been resolved.notifybooleandefault true
curl -X POST "https://api.statusbee.co/user/incidents/91/resolve" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"body_md": "Error rates have been normal for an hour. Resolved."
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 244,
"incident_id": 91,
"status": "resolved",
"body_md": "Error rates have been normal for an hour. Resolved.",
"notify": true,
"display_at": "2026-09-14T09:02:11.000Z",
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z"
}
}Publish a draft
/user/incidents/:id/publishMakes a draft visible, puts it on the page and notifies subscribers of its first update.
Needs the incidents.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Incident id.
curl -X POST "https://api.statusbee.co/user/incidents/92/publish" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 92,
"workspace_id": 5,
"org_id": 5,
"page_id": 4,
"title": "Dashboard login slowness",
"status": "investigating",
"impact": "minor",
"visible": true,
"source": "manual",
"monitor_id": null,
"started_at": "2026-09-14T09:02:11.000Z",
"resolved_at": null,
"postmortem_md": null,
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Edit title, impact or postmortem
/user/incidents/:idNeeds the incidents.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Incident id.
Body
titlestringimpactstringpostmortem_mdstring- Markdown shown under the incident on the public page. Empty string clears it.
curl -X PATCH "https://api.statusbee.co/user/incidents/91" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"postmortem_md": "## What happened\nA deploy at 02:10 introduced …"
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 91,
"workspace_id": 5,
"org_id": 5,
"page_id": 4,
"title": "Checkout errors",
"status": "resolved",
"impact": "major",
"visible": true,
"source": "manual",
"monitor_id": null,
"started_at": "2026-09-14T09:02:11.000Z",
"resolved_at": "2026-09-14T09:02:11.000Z",
"postmortem_md": "## What happened\nA deploy at 02:10 introduced …",
"created_by": 12,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Delete a draft
/user/incidents/:idDrafts only. A published incident answers 409; resolve it instead.
Needs the incidents.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Incident id.
curl -X DELETE "https://api.statusbee.co/user/incidents/92" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"deleted": 1
}
}