Webhooks
Route alert notifications to any HTTP endpoint — Slack, PagerDuty, Discord, or your own service.
Adding a webhook
In your monitor settings, navigate to Alerts → Webhook and enter your endpoint URL. crond.io will POST a JSON payload to that URL whenever an alert fires.
Webhooks are available on the Pro and Enterprise plans.
Payload format
All webhook events share this base structure:
{
"event": "monitor.failed",
"monitor": {
"uuid": "abc-123-def-456",
"name": "Nightly backup",
"schedule": "0 2 * * *"
},
"triggered_at": "2026-03-10T02:17:00Z",
"message": "Job did not ping within grace period"
}Event types
| Event | Description |
|---|---|
| monitor.failed | Job explicitly reported failure via /fail |
| monitor.late | No ping received within schedule + grace period |
| monitor.recovered | Job pinged successfully after a failure or late state |
Verifying webhook signatures
Each request includes an X-Crond-Signature header containing an HMAC-SHA256 signature of the raw request body, signed with your webhook secret.
# Python example
import hmac, hashlib
def verify(secret: str, body: bytes, signature: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)Retry policy
If your endpoint returns a non-2xx status code or times out (30s), crond.io retries the delivery up to 5 times with exponential backoff (1s, 2s, 4s, 8s, 16s). Failed deliveries are logged in your dashboard under Settings → Webhook Logs.
Slack example
Use a Slack Incoming Webhook URL as your endpoint. The payload is compatible — Slack will display the raw JSON, or you can use a small proxy to format it:
https://hooks.slack.com/services/T000/B000/xxxx