LLM call > 20s → Stripe marks failure, retries → handler runs twice → duplicate fulfillment.
/v1/webhook_endpoints · status: failed
Your handler takes 45s for an LLM call. Stripe gives up at 20s and retries. Your customers get double-fulfilled — and your CFO sees the chargebacks.
AnyHook sits between the sender and your handler. Queues, retries, dedupes, logs everything — without touching your handler code.
evt_3Pk2X3b1Lcx
Request timed out. Retrying in 5 min (1 / 3).
$ stripe webhooks update we_1234
--url in.anyhook.net/u/app
✓ Endpoint updated
✓ Delivering to AnyHookevt_3Pk2X3b1Lcx
attempt 1 · idempotent · 47.2s handler
// before
await llm.run(evt); /* 45s */
// after
return Response.json({ ok: true });duplicates prevented
127
LLM call > 20s → Stripe marks failure, retries → handler runs twice → duplicate fulfillment.
/v1/webhook_endpoints · status: failed
Bot must reply in 3s. AI agent takes 30s → Slack drops the event entirely. User sees nothing.
Function killed at 10s. Cold start + AI inference = 504. Sender retries → 504 loop.
Production webhook traffic. Cheaper than 2 weeks of building retries yourself.
Or self-host the entire stack under Apache 2.0: github.com/gba3124/anyhook. Same code as the cloud.
Sign up with email or Google. AnyHook gives you an inbound URL like https://in.anyhook.net/you/app. No credit card needed for the free tier.
Open Stripe Dashboard → Webhooks → edit the endpoint → paste the AnyHook URL. Same change works for GitHub, Shopify, Slack, Discord, Paddle. Your handler code stays untouched.
AnyHook returns 200 to the sender in <50ms, queues the event, and forwards to your handler with retries + idempotency. Failed events sit in the dashboard with a one-click Replay button.
Good fit
Not a fit
If you've got eng bandwidth to install an SDK and rewrite handlers as durable functions, Inngest is great. AnyHook is for teams who want it solved without changing their handler shape — change one webhook URL, keep your existing code.
Yes. 3,000 events / month (capped at 100 / day), 1 app, no credit card. We keep it small enough that hobby projects ship, but tight enough that production traffic upgrades naturally. No tricks, no expiry.
GitHub, Shopify, Slack, Discord, Paddle, Linear, Clerk — same URL swap pattern works for all of them. Signature verification is auto-detected from the incoming headers.
Same code (Apache 2.0). Self-host gives you full data sovereignty and zero per-event cost; cloud removes all ops work and includes the dashboard. Most teams start on cloud and self-host later if scale demands it.
We store it encrypted at rest (AES-256-GCM) for the retention window of your plan (3 / 30 / 90 days), then it's gone. The key never leaves our infra. You can also enable zero-retention mode where we never persist the body.
On Free, we return an error at the cap and the sender's own retries take over — nothing is silently dropped. Upgrading to Pro lifts the limit immediately; Pro overage is $0.90 / 1K events, with an optional spending cap in the dashboard if you'd rather block than pay.
Sign up free, get your inbound URL, swap it in Stripe. AnyHook absorbs the retries — your handler keeps running exactly the way it does today.