Browse the docs

Components

The rows on a status page, their groups, ordering and manual status.

Components belong to a page. Every write here rebuilds the page's snapshot. Status values are operational, degraded_performance, partial_outage, major_outage and under_maintenance. See the components guide.

List components

GET/user/components

Needs the dashboard.read permission, or an API key with the matching scope.

Query parameters

page_idintegerrequired
The status page to read from.
Request
curl "https://api.statusbee.co/user/components?page_id=4" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "rows": [
      {
        "id": 21,
        "page_id": 4,
        "workspace_id": 5,
        "org_id": 5,
        "group_id": 8,
        "monitor_id": 1,
        "name": "REST API",
        "description": "Public API at api.acme.cloud",
        "status": "operational",
        "position": 0,
        "display_uptime": true,
        "start_date": "2026-09-05",
        "created_at": "2026-09-14T09:02:11.000Z",
        "updated_at": "2026-09-14T09:02:11.000Z"
      },
      {
        "id": 22,
        "page_id": 4,
        "workspace_id": 5,
        "org_id": 5,
        "group_id": 8,
        "monitor_id": null,
        "name": "Webhooks",
        "description": "Outbound event delivery",
        "status": "partial_outage",
        "position": 1,
        "display_uptime": true,
        "start_date": "2026-09-05",
        "created_at": "2026-09-14T09:02:11.000Z",
        "updated_at": "2026-09-14T09:02:11.000Z"
      }
    ]
  }
}

Create a component

POST/user/components

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

Body

page_idintegerrequired
The page.
namestringrequired
Up to 100 characters.
descriptionstring
Shown under the name on the public page. Up to 2000 characters.
group_idinteger
A group on the same page.
monitor_idinteger
A monitor in the same workspace to associate. Rules on the monitor decide what it does.
display_uptimebooleandefault true
Show the uptime strip.
Request
curl -X POST "https://api.statusbee.co/user/components" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "page_id": 4,
  "name": "Email delivery",
  "description": "Transactional email",
  "group_id": 8
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "id": 25,
    "page_id": 4,
    "workspace_id": 5,
    "org_id": 5,
    "group_id": 8,
    "monitor_id": null,
    "name": "Email delivery",
    "description": "Transactional email",
    "status": "operational",
    "position": 6,
    "display_uptime": true,
    "start_date": "2026-09-05",
    "created_at": "2026-09-14T09:02:11.000Z",
    "updated_at": "2026-09-14T09:02:11.000Z"
  }
}

Update a component

PATCH/user/components/:id

Configuration only. Status has its own endpoint below.

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

Path parameters

idintegerrequired
Component id.

Body

namestring
descriptionstring
Pass an empty string to clear.
group_idinteger
Pass null to ungroup.
monitor_idinteger
Pass null to unlink.
positioninteger
Sort position within the page.
display_uptimeboolean
Request
curl -X PATCH "https://api.statusbee.co/user/components/21" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "description": "Public REST API and webhooks"
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "id": 21,
    "page_id": 4,
    "workspace_id": 5,
    "org_id": 5,
    "group_id": 8,
    "monitor_id": 1,
    "name": "REST API",
    "description": "Public REST API and webhooks",
    "status": "operational",
    "position": 0,
    "display_uptime": true,
    "start_date": "2026-09-05",
    "created_at": "2026-09-14T09:02:11.000Z",
    "updated_at": "2026-09-14T09:02:11.000Z"
  }
}

Set a component's status

PATCH/user/components/:id/status

A manual override. Audited, emits component.status_changed, and wins over monitor rules until a later change. Does not notify subscribers on its own.

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

Path parameters

idintegerrequired
Component id.

Body

statusstringrequired
operational, degraded_performance, partial_outage, major_outage or under_maintenance.
Request
curl -X PATCH "https://api.statusbee.co/user/components/21/status" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "degraded_performance"
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "id": 21,
    "page_id": 4,
    "workspace_id": 5,
    "org_id": 5,
    "group_id": 8,
    "monitor_id": 1,
    "name": "REST API",
    "description": "Public API at api.acme.cloud",
    "status": "degraded_performance",
    "position": 0,
    "display_uptime": true,
    "start_date": "2026-09-05",
    "created_at": "2026-09-14T09:02:11.000Z",
    "updated_at": "2026-09-14T09:02:11.000Z"
  }
}

Reorder components and groups

POST/user/components/reorder

One call with the whole position map, so a drag-and-drop is a single write.

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

Body

page_idintegerrequired
The page.
positionsobject
{ component_id: position }.
group_positionsobject
{ group_id: position }.
Request
curl -X POST "https://api.statusbee.co/user/components/reorder" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "page_id": 4,
  "positions": {
    "21": 0,
    "22": 1,
    "25": 2
  },
  "group_positions": {
    "8": 0
  }
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "ok": true
  }
}

Delete a component

DELETE/user/components/:id

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

Path parameters

idintegerrequired
Component id.
Request
curl -X DELETE "https://api.statusbee.co/user/components/25" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "deleted": 1
  }
}

List groups

GET/user/components/groups

Needs the dashboard.read permission, or an API key with the matching scope.

Query parameters

page_idintegerrequired
The status page to read from.
Request
curl "https://api.statusbee.co/user/components/groups?page_id=4" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "rows": [
      {
        "id": 7,
        "page_id": 4,
        "workspace_id": 5,
        "org_id": 5,
        "name": "Application",
        "position": 0,
        "collapsed_default": false,
        "created_at": "2026-09-14T09:02:11.000Z"
      },
      {
        "id": 8,
        "page_id": 4,
        "workspace_id": 5,
        "org_id": 5,
        "name": "API",
        "position": 1,
        "collapsed_default": false,
        "created_at": "2026-09-14T09:02:11.000Z"
      }
    ]
  }
}

Create a group

POST/user/components/groups

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

Body

page_idintegerrequired
The page.
namestringrequired
Group heading.
collapsed_defaultbooleandefault false
Collapse the group on the public page by default.
Request
curl -X POST "https://api.statusbee.co/user/components/groups" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "page_id": 4,
  "name": "Regions",
  "collapsed_default": true
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "id": 9,
    "page_id": 4,
    "workspace_id": 5,
    "org_id": 5,
    "name": "Regions",
    "position": 3,
    "collapsed_default": true,
    "created_at": "2026-09-14T09:02:11.000Z"
  }
}

Update a group

PATCH/user/components/groups/:id

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

Path parameters

idintegerrequired
Group id.

Body

namestring
positioninteger
collapsed_defaultboolean
Request
curl -X PATCH "https://api.statusbee.co/user/components/groups/9" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Edge regions"
}'
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "id": 9,
    "page_id": 4,
    "workspace_id": 5,
    "org_id": 5,
    "name": "Edge regions",
    "position": 3,
    "collapsed_default": true,
    "created_at": "2026-09-14T09:02:11.000Z"
  }
}

Delete a group

DELETE/user/components/groups/:id

Its components stay on the page, ungrouped.

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

Path parameters

idintegerrequired
Group id.
Request
curl -X DELETE "https://api.statusbee.co/user/components/groups/9" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "deleted": 1
  }
}