Browse the docs

Incidents

Create, update, resolve and publish incidents. Every write emits an event and, when asked, notifies subscribers.

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

GET/user/incidents

Newest 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.
openboolean
true for anything not resolved.
limitintegerdefault 20
Rows per page, up to 50.
offsetintegerdefault 0
Rows to skip.
Request
curl "https://api.statusbee.co/user/incidents?workspace_id=5&open=true" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

GET/user/incidents/:id

The 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.
Request
curl "https://api.statusbee.co/user/incidents/91" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

POST/user/incidents

Creates 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 investigating
impactstringdefault minor
componentsarray
[{ 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 true
false creates a draft.
Request
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"
    }
  ]
}'
Response
{
  "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

POST/user/incidents/:id/updates

Appends 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
Request
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."
}'
Response
{
  "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

POST/user/incidents/:id/resolve

Shorthand 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
Request
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."
}'
Response
{
  "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

POST/user/incidents/:id/publish

Makes 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.
Request
curl -X POST "https://api.statusbee.co/user/incidents/92/publish" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

PATCH/user/incidents/:id

Needs the incidents.manage permission, or an API key with the matching scope.

Path parameters

idintegerrequired
Incident id.

Body

titlestring
impactstring
postmortem_mdstring
Markdown shown under the incident on the public page. Empty string clears it.
Request
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 …"
}'
Response
{
  "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

DELETE/user/incidents/:id

Drafts 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.
Request
curl -X DELETE "https://api.statusbee.co/user/incidents/92" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "deleted": 1
  }
}