Retries and the delivery log
What counts as a failed delivery, the retry schedule, when an endpoint is switched off, and how to read the log and resend.
What counts as delivered
A delivery succeeds when your endpoint answers with any 2xx status within 10 seconds.
Everything else is a failure:
- any other status, including redirects (
3xx), which we do not follow; - no answer within 10 seconds;
- a connection that cannot be made or breaks off, including DNS and TLS errors.
Retry schedule
A failed delivery is tried again after each of these intervals, counted from the attempt that failed:
| Attempt | After the previous attempt |
|---|---|
| 1 | At once |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
| 6 | 6 hours |
| 7 | 12 hours |
| 8 | 24 hours |
After the eighth failed attempt, about 45 hours after the first, the delivery is not delivered (dead-lettered) and is not tried again unless you resend it.
A 410 Gone answer is not retried: the delivery is dead-lettered at once and the endpoint
is switched off (below). Tests are never retried.
When we switch an endpoint off
We switch an endpoint off, and email the account owner, when it:
- answers
410 Gone, which says the address no longer exists; or - fails 100 deliveries in a row; or
- has been failing for 3 days, however few events it received.
A successful delivery resets the count. Failed tests do not count.
While an endpoint is off, new events are not sent to it, now or later, and deliveries still waiting for a retry are dead-lettered when they come due. Fix your receiver, send it a test, then switch it back on: its failure count starts over.
The delivery log
Each endpoint's Delivery log (Integrations → Webhooks) lists its deliveries from the last 30 days, newest first. A delivery shows its status, the number of attempts, the time of the last and next attempt, the body we sent, the status your endpoint answered and the first 2 KB of its answer.
| Status | Meaning |
|---|---|
| Waiting | Not attempted yet |
| Delivered | Your endpoint answered 2xx |
| Retrying | Failed; another attempt is scheduled |
| Not delivered | Dead-lettered; only a resend sends it again |
Why an attempt failed:
| Failure | Meaning |
|---|---|
status | Your endpoint answered with a status outside 2xx. |
timeout | No answer within 10 seconds. |
unreachable | No connection: check the address, DNS, TLS, and that it is reachable from the internet. |
not_allowed | The address is not a public https:// address. |
secret_unreadable | We could not read the endpoint's signing secret, so nothing was sent. Rotate it. |
endpoint_off | The endpoint was switched off when the delivery came due. |
not_entitled | The account was not on the Business plan when the delivery came due. |
error | Something failed on our side; the delivery is retried on the schedule. |
When you contact support about a delivery, include its Delivery ID (the
X-Revoply-Delivery header) and the event id.
Resend
Resend on a delivery sends the same body again at once, with a fresh signature. The
envelope id is unchanged, so a receiver that deduplicates on it acts on the event once.
If the resend fails, the retry schedule starts again from the beginning.
Resending needs the endpoint to be switched on and the Business plan. Tests and resends are limited to 10 a minute per account.