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
/user/componentsNeeds the dashboard.read permission, or an API key with the matching scope.
Query parameters
page_idintegerrequired- The status page to read from.
curl "https://api.statusbee.co/user/components?page_id=4" \
-H "Authorization: Bearer sb_live_…"{
"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
/user/componentsNeeds 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.
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
}'{
"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
/user/components/:idConfiguration 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
namestringdescriptionstring- Pass an empty string to clear.
group_idinteger- Pass
nullto ungroup. monitor_idinteger- Pass
nullto unlink. positioninteger- Sort position within the page.
display_uptimeboolean
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"
}'{
"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
/user/components/:id/statusA 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
statusstringrequiredoperational,degraded_performance,partial_outage,major_outageorunder_maintenance.
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"
}'{
"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
/user/components/reorderOne 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 }.
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
}
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"ok": true
}
}Delete a component
/user/components/:idNeeds the components.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Component id.
curl -X DELETE "https://api.statusbee.co/user/components/25" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"deleted": 1
}
}List groups
/user/components/groupsNeeds the dashboard.read permission, or an API key with the matching scope.
Query parameters
page_idintegerrequired- The status page to read from.
curl "https://api.statusbee.co/user/components/groups?page_id=4" \
-H "Authorization: Bearer sb_live_…"{
"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
/user/components/groupsNeeds 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.
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
}'{
"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
/user/components/groups/:idNeeds the components.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Group id.
Body
namestringpositionintegercollapsed_defaultboolean
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"
}'{
"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
/user/components/groups/:idIts components stay on the page, ungrouped.
Needs the components.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Group id.
curl -X DELETE "https://api.statusbee.co/user/components/groups/9" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"deleted": 1
}
}