Webhook Deliveries
Each notification sent to an endpoint is recorded as a delivery, enabling monitoring and retry.
Delivery Status
| Status | Description |
|---|---|
pending | Awaiting delivery |
delivered | Successfully delivered (HTTP 2xx) |
failed | Delivery failed |
retrying | Awaiting retry |
Delivery Fields
| Field | Description |
|---|---|
| Endpoint | Destination webhook |
| Event | Event that triggered the delivery |
| HTTP Status | Destination response code |
| Request headers | Headers sent |
| Request body | Payload sent (JSON) |
| Response headers | Headers received |
| Response body | Response body (max 2000 characters) |
| Error | Error message (if failed) |
| Attempts | Number of attempts |
| Next retry | Date/time of the next attempt |
| Delivered at | Success timestamp |
Processing Pipeline
Step 1: Event Creation
Operation on resource (e.g., payment created)
→ Event created in database
→ Job enqueued: EVENT_DISPATCH
Step 2: Event Dispatch
Worker processes EVENT_DISPATCH
→ Fetches active webhooks for the organization
→ Filters by subscribed events
→ For each matching webhook:
→ Creates WebhookDelivery record
→ Enqueues job: WEBHOOK_DELIVERY
Step 3: Delivery
Worker processes WEBHOOK_DELIVERY
→ Generates payload + signature
→ POST to webhook URL (timeout: 30s)
→ Success (2xx): marks as delivered, resets failure counter
→ Failure: updates stats, schedules retry
→ After 10 consecutive failures: deactivates endpoint
Automatic Retry
- Failed deliveries are retried automatically
- Exponential backoff (1s, 2s, 4s, 8s...)
- Maximum attempts configurable per job
Manual Retry
Individual deliveries can be retried manually from the dashboard.
Monitoring
For each organization:
- Total active/inactive webhooks
- Total deliveries
- Failed deliveries
- Consecutive failure counters