webhook.url sends a signed event to that URL after its runs. This page covers what monitors send. Webhooks covers signature verification, retries, Slack formatting, and replay for monitors and batches.
Events
Set
webhook.events to one or both. With both, a run that finds a change sends two events, each with its own ID. Deduplicate on the X-Context-Id header, which equals the payload’s id and stays the same across retries and replays. Failed and skipped runs send nothing, so subscribe to run.completed if you want a heartbeat. The change.detected and run.completed references show the full payloads.
Configure the webhook
Addwebhook when you create a monitor, or set it later with PATCH /v1/monitors/{monitor_id}. This update subscribes to both events and turns on automatic retries:
retry: {}turns on the default retry schedule. If you omitretrywhen you first add a webhook, delivery is best effort: one attempt, plus one quick retry after a network error,429, or5xx. See Retries.- On update, omitting
retryoreventskeeps the current setting. For a new webhook,eventsdefaults to["change.detected"]. - A new or changed
urlgets a new signing secret, returned inwebhook.secret. Sending the sameurlkeeps the secret. "webhook": nullremoves the webhook.
Delivery failures
When deliveries keep failing, the monitor’swebhook_failure describes the streak:
last_status is rejected (a non-2xx response), failed (no response), or skipped_unsafe_url (the URL isn’t public). With retries on, a delivery counts as failed only after its last retry fails. webhook_failure returns to null after a successful delivery or a URL change. After 3 failed deliveries in a row, everyone in your organization gets an email, once per streak. Monitors that share a receiver send at most one email a day between them.
Each run lists its deliveries in webhook_delivery_ids. Look them up with Retrieve a webhook delivery and List webhook delivery attempts. Runs of monitors without retry also record each outcome in webhook_deliveries.
Rotate the signing secret
POST /v1/monitors/{monitor_id}/webhook/rotate-secret issues a new secret and returns the monitor with it in webhook.secret. Rotation takes effect immediately: the old secret stops working, and every later attempt is signed with the new one, including retries and replays of earlier events. The new secret exists only once the call returns, so update your receiver right after rotating. Accept both secrets for a few minutes so attempts already in flight still verify, and replay any event your receiver rejected in between. A monitor without a webhook returns 409 MONITOR_NO_WEBHOOK.
Related
- Webhooks: verify signatures, retry schedules, Slack, and replay.
- Runs and changes: poll instead of, or alongside, webhooks.
- Rotate a monitor webhook secret reference