The delivery contract, signing and retry behaviour are documented in the Webhooks section. These endpoints manage the registrations. The secret is returned once, at creation.
List webhooks
/user/webhooksNeeds the webhooks.manage permission, or an API key with the matching scope.
Query parameters
workspace_idintegerrequired- The workspace to read from.
curl "https://api.statusbee.co/user/webhooks?workspace_id=5" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"rows": [
{
"id": 12,
"workspace_id": 5,
"org_id": 5,
"url": "https://ops.acme.cloud/hooks/statusbee",
"events": [
"incident.created",
"incident.updated",
"incident.resolved",
"monitor.down",
"monitor.up"
],
"failure_count": 0,
"disabled_at": null,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
]
}
}Create a webhook
/user/webhooksThe URL must be https://. An empty events list subscribes to every event type.
Needs the webhooks.manage permission, or an API key with the matching scope.
Body
workspace_idintegerrequiredurlstringrequired- HTTPS URL. Redirects are not followed at delivery time.
eventsarraydefault [] (all)- Event types to receive. Unknown names are dropped.
curl -X POST "https://api.statusbee.co/user/webhooks" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": 5,
"url": "https://ops.acme.cloud/hooks/statusbee",
"events": [
"incident.created",
"incident.updated",
"incident.resolved",
"monitor.down",
"monitor.up"
]
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 12,
"workspace_id": 5,
"org_id": 5,
"url": "https://ops.acme.cloud/hooks/statusbee",
"events": [
"incident.created",
"incident.updated",
"incident.resolved",
"monitor.down",
"monitor.up"
],
"failure_count": 0,
"disabled_at": null,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z",
"secret": "whsec_9f2c…"
}
}Update a webhook
/user/webhooks/:idenabled: true clears disabled_at and resets the failure count; enabled: false disables without deleting.
Needs the webhooks.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Webhook id.
Body
urlstringeventsarrayenabledboolean
curl -X PATCH "https://api.statusbee.co/user/webhooks/12" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"enabled": true
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 12,
"workspace_id": 5,
"org_id": 5,
"url": "https://ops.acme.cloud/hooks/statusbee",
"events": [
"incident.created",
"incident.updated",
"incident.resolved",
"monitor.down",
"monitor.up"
],
"failure_count": 0,
"disabled_at": null,
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Delete a webhook
/user/webhooks/:idNeeds the webhooks.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Webhook id.
curl -X DELETE "https://api.statusbee.co/user/webhooks/12" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"deleted": 1
}
}