Browse the docs

Outbound webhooks

Register HTTPS endpoints that receive workspace events, choose which events, and re-enable after failures.

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

GET/user/webhooks

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

Query parameters

workspace_idintegerrequired
The workspace to read from.
Request
curl "https://api.statusbee.co/user/webhooks?workspace_id=5" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

POST/user/webhooks

The 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_idintegerrequired
urlstringrequired
HTTPS URL. Redirects are not followed at delivery time.
eventsarraydefault [] (all)
Event types to receive. Unknown names are dropped.
Request
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"
  ]
}'
Response (secret shown once)
{
  "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

PATCH/user/webhooks/:id

enabled: 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

urlstring
eventsarray
enabledboolean
Request
curl -X PATCH "https://api.statusbee.co/user/webhooks/12" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": true
}'
Response
{
  "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

DELETE/user/webhooks/:id

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

Path parameters

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