# Webhooks: Hear about it the moment it happens.

Kaabist sends signed events to your endpoints: jobs that finish, wait for input or need attention, schedules that found a change, programs that drifted. Deliveries are retried with backoff and can go straight to Slack or Discord.

## Setup

```sh
kaab webhooks create --url https://example.com/hooks --events 'job.*'
```

## Signed, every time

Every delivery carries a Kaab-Signature header: a timestamp and an HMAC-SHA256 of the raw body. Verify it on the bytes as they arrived; the SDKs do it in one call.

```
Kaab-Signature: t=1758362400,v1=5257a869e7ec…

webhooks.verify(rawBody, signatureHeader, secret)  // in every SDK
```

## Retried until it lands

A failed delivery is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. Every attempt is in the event log, and you can resend any of them.

## Pick what you hear

Subscribe to exact events or whole groups: job.succeeded, job.awaiting_input, job.needs_attention, schedule.changed, proposal.created, program.drift_detected, credits.low and more.

Guide: http://localhost:3001/guides/webhooks
