A webhook channel receives one POST per event with a JSON body. Add it under Alerts → Channels → Add channel → Webhook with an https URL that has no credentials in it; private and reserved addresses are refused. Webhooks added over plain http before 31 October 2026 keep working and are marked «http · needs https when changed» on the Alerts list; the next time one is edited it must be https.
Headers
Content-Type: application/json
X-PingWise-Event: monitor.down
X-PingWise-Timestamp: 1761912000
X-PingWise-Signature: sha256=<hex>
The signature is HMAC-SHA256(secret, "<timestamp>.<raw body>"), with the signing secret shown on the channel page. Verify it on your side and reject requests whose timestamp is more than a few minutes old. The same three headers are also sent under the older X-UptimeBox-* names.
Body
{
"event": "monitor.down",
"monitor": {"id": "…", "name": "Shop", "type": "http", "target": "https://shop.example.com/"},
"state": "down",
"previous_state": "up",
"reason": "timeout",
"detail": "No response within 10 s",
"at": "2026-10-31T12:00:00Z",
"incident": {"id": 42, "started_at": "…", "confirmed_at": "…", "resolved_at": null, "duration_seconds": null},
"explanation": null,
"checks": [{"status": "down", "reason": "timeout", "ms": null, "code": null, "continent": "EU"}],
"notes": "Hosted on web-03. Contact: Nikos."
}
Events: monitor.down, monitor.up, monitor.blocked, monitor.unblocked, monitor.partial, monitor.reachable, monitor.slow, monitor.normal; group.<kind> for a grouped alert, with group, count and monitors[]; domain.expiring and domain.expired; and test from the Send test button. explanation is filled on accounts with AI explanations.
Delivery
Ten-second timeout, redirects not followed. A failed delivery is retried up to six times: after 30 seconds, 2 minutes, 10 minutes, 30 minutes and an hour. A 400, 401, 403, 404 or 410 is taken as final and not retried; a 429 with Retry-After is honoured, up to an hour. The channel page lists the last 20 deliveries and their responses.
Last change: 31 October 2026.