Documentation · Alerts

Webhooks

The JSON we POST, the signature header to verify it with, and how retries work.

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.