Skip to content

Retries and the delivery log

At-least-once delivery, the stable delivery id you dedupe on, the two-redirect limit, and reading the delivery log.

At-least-once delivery

A delivery that does not return 2xx — or that times out — is retried with exponential backoff on a dedicated queue, so a slow endpoint of yours never holds up anyone else's.

That makes delivery at least once, never exactly once. Your endpoint must tolerate seeing the same event twice.

Dedupe on the delivery id

X-Evoriqa-Delivery — and the identical id field in the body — is minted once when the event is emitted and is byte-identical on every retry. It is the dedupe key.

dedupe.mjs

The ts field is stable across retries too, so a duplicate is always correlatable with the original rather than looking like a fresh event.

Note:

Duplicates can also arrive without a retry: when an event fans out to several endpoints and part of the batch is re-queued, one endpoint may see the same event twice. The dedupe key handles both cases identically.

Redirects

Deliveries follow up to two redirects, and each hop is re-validated against the same protections that block internal and private addresses. That exists so an endpoint behind an http → https upgrade still receives events instead of silently receiving none while appearing active.

Point the endpoint at its final HTTPS URL anyway — a redirect chain is one more thing to fail.

The delivery log

Settings → Webhooks shows recent delivery attempts across your endpoints, newest first, with the event name, the outcome, and the HTTP status your server returned.

Use it to answer the three questions that actually come up:

That last one is the most common real bug: work is done, the response is slow or errors, evoriqa retries, and the work happens again. Respond 2xx first, then process — and dedupe regardless.

Where to go next

Last updated