← IntegrationsIntegrations

Webhook retries and duplicate events

Handle delayed or repeated webhook delivery safely.

Reviewed September 23, 2026

Retry schedule

The outgoing worker allows six attempts total: the first attempt, then retries after approximately 30 seconds, 2 minutes, 10 minutes, 1 hour and 6 hours. These are delays between attempts, not guaranteed delivery times. The worker uses a five-second request timeout and does not follow redirects.

Acknowledge durable receipt

Return a 2xx response after safely recording the event for processing. Deduplicate using the payload’s eventId. Use durable storage or a transactional queue so a crash does not turn an unfinished event into an ignored duplicate.

After repeated failures

A delivery becomes dead after the final failed attempt. An endpoint can also be disabled after 20 consecutive failed attempts. Fix the endpoint and check the product’s delivery log and enable controls. Do not assume every product supports replay of a dead event.

Read the implementation guide

See https://www.message.com/developers/webhooks/retries-and-idempotency for the detailed contract. Generic REST requests do not gain idempotency merely by adding an Idempotency-Key header.

Keep going

Put the next step into practice, or ask us about your setup.