Reliability guide

Assume every webhook can arrive more than once.

Networks fail, servers time out and acknowledgements get lost. A provider may legitimately deliver the same event again. Your handler should treat duplicate delivery as a normal condition rather than an exceptional one.

Why providers retry

Retries typically happen when the receiver returns an error, times out, closes the connection or fails to provide the acknowledgement the sender expects. Exact retry schedules vary, but duplicate delivery is common enough that robust webhook systems design for it from the beginning.

Use a stable event identifier

When the provider supplies a unique event or delivery ID, store it before performing irreversible work. If the same ID arrives again, return success without repeating the side effect.

Make the side effect idempotent too

A deduplication table helps, but your database operations should also enforce business invariants where possible. Unique constraints, idempotency keys and transactional updates provide stronger protection than an in-memory flag.

Acknowledge fast, process safely

When the provider allows it, validate the request, persist the event, return a successful response and perform expensive work asynchronously. This reduces avoidable retries caused by slow downstream tasks.

Test duplicates deliberately

Send the same representative event twice in a safe environment. The desired result is usually two successful HTTP acknowledgements but only one business side effect.

Frequently asked

Questions developers ask

Why did I receive the same webhook twice?

The sender may have retried after a timeout, error or lost acknowledgement. Duplicate delivery should be expected.

What does idempotent mean for a webhook?

Processing the same event repeatedly produces the intended business result only once.

Should I deduplicate by payload hash?

A provider-issued stable event ID is usually clearer when available. Hashes can be useful in specific designs but need careful handling.

Editorial standard

Built for practical debugging

This guide is written to help developers reproduce and isolate webhook failures. Examples use synthetic data, and production security guidance should always be checked against the official documentation for the provider you integrate.

Last reviewed: September 2026.