Webhooks

Outbound webhooks let you integrate siteRabbit events into your own systems — Slack bots, PagerDuty rules, custom dashboards, deployment pipelines, and more.

Creating a webhook

  1. Go to Settings → Notifications → Add channel → Webhook.
  2. Enter your endpoint URL (must be HTTPS).
  3. Set a secret — siteRabbit uses it to sign every delivery.
  4. Choose which events to receive.
  5. Click Test to send a sample payload.

Verifying signatures

Every delivery includes an X-SiteRabbit-Signature header. The value is the HMAC-SHA256 of the raw request body, encoded in hex, using your webhook secret.

import crypto from 'node:crypto';

function verifySignature(body: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body, 'utf8')
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected),
  );
}

Always verify signatures before trusting a payload. Reject deliveries with invalid signatures with a 400 status.

Event types

| Event | Fired when | |-------|-----------| | monitor.down | A monitor fails consensus check | | monitor.up | A monitor recovers after being down | | monitor.degraded | Response time exceeds threshold | | incident.created | A new incident is opened | | incident.updated | An incident update is posted | | incident.resolved | An incident is resolved | | ssl.expiring | SSL certificate expiry is within threshold | | domain.expiring | Domain registration expiry is within threshold |

Payload structure

{
  "event": "monitor.down",
  "id": "evt_01HXZ3K9P2BVNQ5XJTYC8D7MF",
  "teamId": "team_abc123",
  "monitorId": "mon_def456",
  "monitorName": "Production API",
  "url": "https://api.example.com/health",
  "status": "DOWN",
  "region": "eu-west-1",
  "responseTime": null,
  "statusCode": null,
  "checkedAt": "2026-06-15T10:30:00.000Z",
  "sentAt": "2026-06-15T10:30:01.234Z"
}

Retries

If your endpoint returns a non-2xx status or times out (10 s timeout), siteRabbit retries with exponential backoff:

| Attempt | Delay | |---------|-------| | 1 | Immediate | | 2 | 30 s | | 3 | 5 min | | 4 | 30 min | | 5 | 2 h |

After 5 failed attempts the delivery is abandoned and marked failed in the webhook delivery log.

Delivery logs

Go to Settings → Notifications → (your webhook) → Deliveries to see recent delivery attempts, response codes, and retry state. You can replay any delivery from this view.