Skip to main content
A delivery succeeds when your endpoint returns any 2xx status within 10 seconds. Anything else — 4xx, 5xx, connection refused, DNS failure, timeout — triggers the retry schedule.

Retry schedule

Each delivery gets one initial attempt plus five retries — six attempts total — spaced so a receiver outage of up to ~15 hours can recover without dropping events.
AttemptDelay from previous
1 (initial)
21 minute
35 minutes
430 minutes
52 hours
612 hours
After the 6th attempt fails, the delivery is dead-lettered: Quippy stops retrying and marks it in the admin portal for manual attention.
Retries reuse the same delivery_id. Persist that ID on your side and short-circuit on duplicates — the same event landing in your receiver twice should be a no-op, not a double-count.

What’s in the delivery log

Every attempt — successful or failed — is recorded and visible on the endpoint’s detail page:
  • HTTP status code (or null if the request never got a response)
  • Request body (truncated if large)
  • Response body (truncated)
  • Duration in milliseconds
  • Attempt number
  • Whether this row was dead-lettered
  • Network error string when the request didn’t complete (e.g. ETIMEDOUT, ECONNREFUSED)

Manual replay

A dead-lettered delivery can be replayed from the admin portal once you’ve fixed the receiver. Replay resets the attempt counter and schedules a fresh attempt immediately. Under the hood it calls:
POST /api/v2/webhooks/:id/deliveries/:deliveryId/replay
The replayed delivery will re-run the full retry schedule if it fails again — a second dead-letter means the receiver is still broken.

What NOT to rely on

Order is not guaranteed. Two events that fire close together may arrive at your receiver out of order — either because the dispatcher parallelizes, or because the first delivery retries while the second lands on the first try. Use created timestamps and your own ordering logic if order matters.
Exactly-once is not guaranteed. If your endpoint returns 2xx but the response never reaches Quippy (network partition, your load balancer cutting the connection), the delivery will be retried. Dedupe on X-Quippy-Delivery-Id.

Test deliveries don’t retry

The Send test button fires a one-shot webhook.test delivery. It doesn’t participate in the retry schedule — a failed test delivery is dead-lettered on the first failed attempt so the UI can surface the error immediately.