What webhooks do
Outgoing webhooks POST lifecycle events to any HTTPS endpoint you control — pipe alerts into Slack, PagerDuty, your own tooling, or a logging pipeline.
Events
| Event | Fires when |
|---|---|
monitor.down |
A monitor fails its failure threshold (carries status, message, latency, region) |
monitor.up |
A monitor recovers (same fields — pair it with the earlier monitor.down) |
test_event |
You hit Test on a webhook |
| custom event names | Custom events emitted through event rules (POST /status-pages/:id/events/emit) |
A webhook with an empty events list receives everything; otherwise it only receives the listed events.
Payload
Generic webhooks receive the raw event envelope:
{
"user_id": "<uuid>",
"event": "monitor.down",
"data": {
"monitor_id": "<uuid>",
"monitor_name": "API Gateway",
"status": "down",
"message": "HTTP 503",
"latency": 1432,
"region": "eu-central"
}
}
| Provider | Payload |
|---|---|
generic |
Raw envelope above — build your own consumer |
discord |
{"content": "..."} — post straight to a Discord channel webhook URL |
slack |
{"text": "..."} — Slack incoming-webhook format |
telegram |
{"chat_id", "text", "parse_mode": "Markdown"} — the chat id comes from the webhook secret field |
A Discord webhook whose URL is not an https://… URL is treated as a bot integration instead — the Discord bot delivers it (channel embeds + DM fan-out) rather than a plain HTTP POST.
Scoping
status_page_idscopes a webhook to one page's eventsteam_onlywebhooks additionally receive internal-only events (classification: "team_only") that public-facing channels never seealert_channels(JSON mapevent -> channel) routes different events to different Discord channels
Managing webhooks
Per status page via the dashboard (Alert Setup) or the API:
GET /status-pages/:id/alert-setup— configured webhooksPOST /status-pages/:id/alert-setup— add a webhookPUT /status-pages/:status_page_id/alert-setup/:id— updateDELETE /status-pages/:status_page_id/alert-setup/:id— removePOST /status-pages/:status_page_id/alert-setup/:id/test— send a test delivery
Plus account-level management under /webhooks (list, create, update, delete, test, toggle is_active, toggle team_only).
Delivery behavior
- HTTPS endpoints only, with SSRF protection on our side
- Inactive webhooks (
is_active: false) are skipped - Every delivery attempt is logged in
webhook_deliveries— you can inspect exactly what was sent and the response - Discord channel sends are deduplicated per event/alert so multi-region flaps don't spam