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