Skip to main content

Webhook Deliveries

Each notification sent to an endpoint is recorded as a delivery, enabling monitoring and retry.

Delivery Status

StatusDescription
pendingAwaiting delivery
deliveredSuccessfully delivered (HTTP 2xx)
failedDelivery failed
retryingAwaiting retry

Delivery Fields

FieldDescription
EndpointDestination webhook
EventEvent that triggered the delivery
HTTP StatusDestination response code
Request headersHeaders sent
Request bodyPayload sent (JSON)
Response headersHeaders received
Response bodyResponse body (max 2000 characters)
ErrorError message (if failed)
AttemptsNumber of attempts
Next retryDate/time of the next attempt
Delivered atSuccess 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