Retries, disabling and resending
When Vipter retries a failed delivery, when it disables the endpoint on its own, what happens to events while it is off, and how to use the test event and the resend button in the dashboard.
Each endpoint gets its own delivery of each event. A delivery goes through these statuses, which appear in the Status column under Recent deliveries:
| Status | Meaning |
|---|---|
pending | In the queue, waiting for the first attempt or a resend. |
delivering | Being sent right now. |
succeeded | Your server answered 2xx within 10 seconds. Final status. |
failed | The last attempt failed and another one is scheduled. |
exhausted | The attempts ran out, or the endpoint was disabled. Final status, until a manual resend. |
What counts as a failure is in The response.
Retry schedule
There are up to 8 attempts per delivery. The first goes out right after the event is created, usually in less than a minute. After each failure, Vipter waits:
| Attempt | Wait after the previous failure | Time since the first attempt |
|---|---|---|
| 1 | 0 | |
| 2 | 1 minute | 1 minute |
| 3 | 5 minutes | 6 minutes |
| 4 | 30 minutes | 36 minutes |
| 5 | 2 hours | about 2 h 36 min |
| 6 | 6 hours | about 8 h 36 min |
| 7 | 24 hours | about 32 h 36 min |
| 8 | 48 hours | about 80 h 36 min |
The waits are minimums: the queue is processed every minute, so each attempt may go out a little later. If the eighth fails, the delivery becomes exhausted. In practice, an endpoint that comes back up within about 3 days and 8 hours of a failure still receives the event on its own.
Each attempt carries the same body, with the same id and the same created, and a new signature, with the t of the moment it was sent.
Automatic disabling
Vipter counts, per endpoint, the consecutive deliveries that ended as exhausted. When the count reaches 20, the endpoint is disabled and its card shows the reason auto-disabled after 20 exhausted deliveries. A succeeded delivery resets the count.
The count is of exhausted deliveries, not attempts: that is 20 events that failed 8 times each. An endpoint that is down is only disabled after going through the whole schedule for at least 20 events.
To turn it back on, fix your server and turn on the endpoint's Active switch. Turning the switch on resets the count and clears the reason.
Events while the endpoint is disabled
This applies both to automatic disabling and to the switch turned off by hand:
- New events are not kept for it. The endpoint only receives deliveries of events created while it is active. An event created while it is disabled never reaches that endpoint, not even after it is turned back on, and there is no way to resend it.
- Deliveries already in the queue are closed. When their turn comes, they become
exhaustedwith the errorendpoint disabled, without trying to send and without counting toward disabling. Turning the endpoint back on does not resume them: use Resend on each one, with the endpoint already active.
The same applies to an endpoint created after an event: it does not receive events from before it was created.
To check what happened during the period, compare your system with the orders, subscriptions and customers lists in the dashboard.
Resend a delivery
Recent deliveries shows the store's 50 most recent deliveries, from all endpoints. Every row that is not succeeded has the Resend button. When you click it:
- The delivery goes back to
pendingwith the attempts reset and is sent right away. - You see Delivery re-queued..
- If it fails again, it follows the schedule from the start.
The resend sends the same event, with the same id: your idempotency check treats it as a repeat if it was already processed. The signature is computed at the moment of the resend, with the current secret.
You can't resend a succeeded delivery from the dashboard. Resending to a disabled endpoint closes the delivery right away with endpoint disabled: turn the endpoint on first.
Test event
The Send test event button creates a new customer.created event, with a fictitious customer and "test": true in data.object. The format is in the catalog.
- It goes to all active endpoints that receive
customer.createdor all events, and only to those. - It is sent right away and you see Test event queued.. If it fails, it follows the same retry schedule as a real event and counts toward automatic disabling.
- Each click creates an event with a new
id. - With no active endpoint, the button is disabled.
Remove an endpoint
Remove deletes the endpoint, its secret and its delivery history. Pending deliveries stop. To change the URL without losing events, create the new endpoint, confirm it receives the test event and only then remove the old one. In the meantime, both receive the same events, with the same id.
What to do next
- See how to answer quickly so you don't trigger needless retries.
- Rotate the secret without losing events in Verify the signature.
Verify the signature
How Vipter signs each webhook, tested code in Node.js, PHP and Python to check the signature, how to rotate the secret without losing events and the mistakes that most often make verification fail.
Checkout URL parameters
Technical reference for every parameter the checkout link accepts, with format, validation, what happens with an invalid value and how to build the links in your code.