$crond.io

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

EventDescription
monitor.failedJob explicitly reported failure via /fail
monitor.lateNo ping received within schedule + grace period
monitor.recoveredJob 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