Webhook ingress with durable delivery
HookRecovery receives webhooks from Stripe and Shopify, stores each one before it responds, and delivers it to your backend with retries. Events that still fail are kept in a Dead Letter Queue, so you can replay them after you deploy a fix.
A free plan is available. Pro is $29 per month.
| Event | Status | Detail |
|---|---|---|
| orders/create | Retrying | next try in 20s |
| invoice.paid | Delivered | 14 ms |
| orders/paid | Delivered | 12 ms |
| checkout.session.completed | Dead | awaiting replay |
Product demo
A 90-second walkthrough: what a failed webhook costs without a gateway, how to create an endpoint, and how retries and replay work. The video is captioned and has no narration.
Chapters
How delivery works
Every event is in exactly one of four states.
| Status | Meaning | What happens next |
|---|---|---|
| Received | The webhook was accepted and written to storage. The provider has its response. | HookRecovery makes the first delivery attempt to your backend. |
| Retrying | Your backend did not return a successful response. | HookRecovery tries again after a delay. Each delay is twice as long as the one before. |
| Delivered | Your backend returned a successful response. | Nothing. The event is complete. |
| Dead | The retries ran out. The event is in the Dead Letter Queue. | Replay it once your backend is fixed. It goes back to Retrying, then Delivered. |
Stripe and Shopify retry failed webhooks for a limited time and then drop them. HookRecovery keeps the event until it is delivered or you remove it, so a long outage does not lose data.
Simulate an outage
Take the backend down, send webhooks, then bring it back and replay what died. This runs in your browser, and retry delays are shortened to a few seconds.
| Event | Status | Attempts |
|---|
Features
Everything between the provider and your backend, in one gateway.
Durable ingest
Each webhook is written to storage before the provider gets a response. Acceptance takes under 20 ms.
Retries with exponential backoff
If your backend is down or returns an error, HookRecovery retries. Each wait is longer than the last.
Dead Letter Queue
Events that use up their retries are kept in the queue instead of being dropped.
Replay
Replay one event, or every missed event, after you deploy a fix.
Endpoint simulator
Send a test payload through an endpoint to see how your backend responds, including when it is down.
Stripe and Shopify
Use an endpoint's ingest URL as the webhook URL in either provider. Your backend stays the destination.
Set up a gateway
Three steps. Your backend code does not change.
- Create an endpoint. Give it a name and set your backend's webhook URL as the destination.
- Copy the ingest URL. HookRecovery generates it when the endpoint is created.
- Enter it in Stripe or Shopify. Use the ingest URL wherever the provider asks for a webhook URL.
Endpoint settings
name shopify-orders destination https://api.acme.io/hooks/shopify ingest url generated when you create the endpoint
Example payload used in the demo
{
"type": "orders/create",
"id": 820982911946154508,
"total_price": "29.00"
}
Pricing
Start on Free. Move to Pro when you need more volume or longer retention.
| Free | Pro | |
|---|---|---|
| Price | $0 per month | $29 per month |
| Events per month | 10,000 | Unlimited |
| Endpoints | 3 | Unlimited |
| Retries with exponential backoff | Included | Included |
| Dead Letter Queue retention | 7 days | 90 days |
| Replay | One event at a time | One event or in bulk |
| Get started | Get started |
Questions
What happens if my server is down during a deploy?
HookRecovery has already accepted and stored the webhook, so the provider sees a success. It then retries delivery to your backend until it responds or the retries run out.
Why not rely on Stripe's or Shopify's own retries?
Providers retry for a limited time and then drop the event. If your outage lasts longer than that, the event is gone. HookRecovery keeps it until you replay it.
How do I recover events after an outage?
Open the Dead Letter Queue, deploy your fix, then replay the events. A replayed event is delivered again like a new one.
Do I have to change my backend?
No. Set your existing webhook URL as the endpoint's destination and enter the ingest URL in the provider's settings.
Is there a free plan?
Yes. The Free plan includes retries, the Dead Letter Queue and replay. Pro raises the limits and adds bulk replay.