Webhooks
Retries and replay
How Arrota retries failed webhook deliveries, how to retry one manually, when endpoints are paused, and how to handle duplicates.
Updated
On this page
What counts as success
A delivery succeeds when your endpoint returns any 2xx status within 10 seconds. Anything else fails: another status code, a timeout, a connection error, or a redirect.
Respond quickly and do slow work afterwards, for example by queueing the event before you answer.
Automatic retries
Each delivery gets up to three attempts in total:
| Attempt | When |
|---|---|
| 1 | Shortly after the event, usually within a few minutes. |
| 2 | About 5 minutes after attempt 1 fails. |
| 3 | About 10 minutes after attempt 2 fails. |
After the third failure the delivery is marked failed and is not retried automatically. Each attempt is signed afresh, and keeps the same X-Arrota-Delivery ID.
Retry a delivery manually
Recent deliveries in API & Webhooks shows your latest deliveries with their status, response code and attempts. Select Retry to send one again. This is a replay: Arrota queues a new delivery of the same event and payload, with a new X-Arrota-Delivery ID, and sends it on the next delivery run. You can retry only to an endpoint that is active.
Paused endpoints
If an endpoint's 10 most recent deliveries have all failed, Arrota pauses it and shows an action-required notification in your dashboard. A paused endpoint receives no new events. Fix the endpoint, then select Resume. You can also pause an endpoint yourself at any time.
Handling duplicates
Delivery is at least once. The same event can arrive more than once:
- Automatic re-sends keep the same
X-Arrota-DeliveryID. Store the IDs you have processed and skip repeats. - Manual retries carry a new delivery ID. Make processing idempotent on the event itself: for example, treat
credential.revokedfor adocument_idyou already marked revoked as a no-op.
Events can also arrive out of order, so check your current state before applying a change.