One URL change · No SDK · Apache 2.0

Stripe webhook insurance
for AI SaaS.

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.

Free3K events/mo
$20Pro · 50K events
$90Scale · 250K
stripe — webhooks
live
FAILED20.04s

evt_3Pk2X3b1Lcx

Request timed out. Retrying in 5 min (1 / 3).

~ stripe-cli
$ stripe webhooks update we_1234
    --url in.anyhook.net/u/app
 Endpoint updated
 Delivering to AnyHook
anyhook · delivered
200 OK

evt_3Pk2X3b1Lcx

attempt 1 · idempotent · 47.2s handler

0dropped
·
100%delivered
handler.ts
// before
await llm.run(evt); /* 45s */

// after
return Response.json({ ok: true });
last 30 days

duplicates prevented

127

01

Three timeouts that eat your money.

StripeWebhooks
20s

LLM call > 20s → Stripe marks failure, retries → handler runs twice → duplicate fulfillment.

/v1/webhook_endpoints · status: failed

SlackEvents
3s

Bot must reply in 3s. AI agent takes 30s → Slack drops the event entirely. User sees nothing.

VercelFunctions
10s

Function killed at 10s. Cold start + AI inference = 504. Sender retries → 504 loop.

02

Pick what fits your stage.

Pro

Most teams start here
$20/ month

Production webhook traffic. Cheaper than 2 weeks of building retries yourself.

  • 50,000 events / month
  • 10 apps · 30 days retention
  • 5 retries · 120s delivery timeout
  • Overage at $0.90 / 1K events — no silent drops
  • Email + signed AnyHook signature on every delivery

Or self-host the entire stack under Apache 2.0: github.com/gba3124/anyhook. Same code as the cloud.

03

Three steps. Thirty seconds.

  1. Step 1

    Sign up. Get your inbound URL.

    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.

  2. Step 2

    Swap the URL in Stripe (or wherever).

    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.

  3. Step 3

    Watch events arrive. Replay anything.

    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.

04

One specific situation.

Good fit

  • Indie SaaS or B2B with real production traffic
  • Stripe-billed product (Checkout, Subscriptions, Connect)
  • Handler does meaningful AI work — LLM, RAG, agent runs
  • Hand-rolled retry logic you don't fully trust
  • You can swap one URL in the provider dashboard

Not a fit

  • Pre-revenue — webhook reliability is not your biggest risk yet
  • Already running Inngest / Hookdeck / Svix in production
  • Workflow-engine needs (durable functions, scheduling) — use Inngest
  • Enterprise on-prem with strict no-cloud-egress policy
  • Live event streaming use case (Kafka, websockets, SSE)
05

The honest answers.

Why not just use Inngest or Hookdeck?

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.

Is the free tier really free? Forever?

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.

What about webhooks that aren't Stripe?

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.

Self-host vs cloud — what's the difference?

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.

Does AnyHook see my webhook payload?

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.

What if I outgrow the free tier mid-month?

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.

30 seconds. No card.

Change one URL.
Sleep better tonight.

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.