Webhooks + email · one event log

Catch every event, even when nothing's listening.

Point a webhook or an email address at AnyHook: every event caught, retried, and kept in one log your code or your agent reads back.

Signatures verified at the edge for 21 sources. Forged requests never reach your server.

Stripe
GitHub
Shopify
Slack
LINE
Discord
Clerk
Paddle
Twilio
Vercel

Senders give up. Your handler runs twice.

Every retry-on-timeout sender hits the same wall. Four flavors of the same pain, you're probably hitting at least one.

Payments
YOUR DB · user_creditsINSERT +500 creditshandler #1 · 08:41:02INSERT +500 creditshandler #2 (retry) · 08:41:13FULFILLED 2×

Stripe 10s. LLM 45s.

Sender times out → retry → 2× credits for one payment.

AI chatbot
SLACK · #supportbotHere's your summary.botHere's your summary.(dup)botHere's your summary.(dup)3× SPAM

Slack 3s. Agent 15s.

Slack retries → bot dumps identical replies.

Serverless
VERCEL · /api/webhook08:41attempt 1504timeout @ 10s08:42attempt 2504timeout @ 10s08:43attempt 3504timeout @ 10s08:44attempt 4504timeout @ 10s08:45attempt 5504timeout @ 10sretrying forever · never delivered

Vercel kills @ 10s.

Cold start → 504. Sender retries → 504 loop.

Outage recovery
YOUR SERVER · downevt_ma4fdropped · retries exhaustedevt_8bjcdropped · retries exhaustedevt_1k2pdropped · retries exhaustedevt_wqxrdropped · retries exhaustedDATA LOST · 147 eventsno record · no recovery path

Server down. Events pile up.

Sender exhausts retries → 147 events lost forever.

Change one URL.

No SDK. No code changes. Point Stripe, GitHub, or Shopify at your AnyHook inbound URL, we queue, buffer, and forward.

Three steps. Thirty seconds. Async decoupling for your webhooks.

StripeGitHubShopifyPaddleDiscordANYHOOKverifyqueueforwardyour-api.com
1

Swap the URL

In Stripe, GitHub, or Shopify, replace your endpoint with your AnyHook inbound URL. Paste your provider's webhook signing secret so AnyHook can verify every request at the edge.

https://in.anyhook.net/{you}/{app}
2

We queue it instantly

AnyHook's edge verifies the signature and drops the webhook into a durable queue before answering, which takes ~0.4s. The sender gets its 200, your backend processes at its own pace.

3

Your API receives it

Events flow from the queue to your endpoint on a controlled schedule. Full payload, headers, and delivery status, all visible in one dashboard.

See every event.

Inbound payload, each delivery attempt, and the response body, one screen before you hit Replay.

APIs for AI agents.

Give your agent an API key. It handles the rest, provisioning, monitoring, and recovery through a simple REST API.

# All requests require: Authorization: Bearer ahk_live_..., get yours from Dashboard → Settings → API Keys

Provision a relay

Your agent creates a webhook relay and gets an inbound URL. Point Stripe at this URL, AnyHook verifies signatures and forwards to your endpoint.

# Create a relay for Stripe webhooks
POST /api/v1/apps
"name": "stripe-payments"
"destination_url": "https://api.acme.com/hooks"
"source": "stripe" # auto-verifies signatures
→ { "inbound_url": "https://in.anyhook.net/you/stripe-payments" }
# Set Stripe signing secret for edge verification
PATCH /api/v1/apps/stripe-payments
"source_secret": "whsec_..." # from Stripe Dashboard
→ 200 OK
# Now paste the inbound_url into Stripe → Webhooks

Clear traffic, full control.

Receive → normalize → log → deliver. Every webhook visible at each hop, from inbound to your API.

1/4Receive

Catch it fast.
Edge ack in ~0.4s.

Cloudflare Workers at the edge accept the webhook, queue it durably, and only then return 200, in ~0.4s median, 1.1s p95. The tightest sender budget is 3s. Your downstream can take as long as it needs.

receive
POST in.anyhook.net/acme/stripe
1. Accept incoming POST ✓
2. Queue event to pipeline ✓
3. Return 200 OK in ~0.4s ✓
→ Stripe: delivered.
Your agent hasn't started yet.

Drop the SDKs. Check one header.

Stripe, GitHub, Shopify, every provider signs differently. Paste your provider's signing secret once, and AnyHook validates every request at the edge. You get one unified signature.

Original provider headers preserved. Your existing SDK verification still works, or just check one AnyHook header and skip the rest.

your-server.ts
// Every provider. One check.
const sig = req.headers['x-anyhook-signature'];
if (!verify(sig, body, process.env.ANYHOOK_SECRET))
return res.status(401);
// Trust the payload. It's already verified at edge.
// Original Stripe/GitHub headers still included.
21 sources0 SDKs required

Supported Event Sources

Stripe
GitHub
Shopify
Discord
Sentry
Linear
Vercel
Paddle
Clerk
Lemon Squeezy
Intercom
HubSpot
Resend
WooCommerce
PayPal
Slack
Twilio
SendGrid
Svix
Meta
LINE
Others

Zero-config signature unification

Unified AnyHook-Signature

21 sources, one HMAC. AnyHook verifies Stripe/GitHub/Shopify signatures at the edge, then re-signs every delivery with a fresh AnyHook-Signature. Verify once on your server, trust everything.

Retry-safe by design

Original provider signatures expire after ~5 minutes, retries fail verification on your server. AnyHook solves this: we verify once at the edge, then re-sign with a fresh timestamp on every retry. Your server never sees an expired signature.

Original headers preserved

Raw body forwarded byte-for-byte with original Stripe-Signature intact. Need to double-verify on first delivery? Your existing SDK still works, AnyHook-Signature is additive, not a replacement.

AES-256-GCM encrypted at rest

Every webhook payload, header, and signing secret is encrypted before it hits the database. Zero plaintext secrets stored. A database breach yields only ciphertext.

Your server goes down.
Nothing is lost.

Timeout? 500? Deploy gone wrong? AnyHook absorbs the impact, protects your quota, and holds every event until you're ready.

Exponential backoff

5xx or timeout? We retry on an increasing schedule, 5 min, 30 min, 2 hours, 12 hours. Client errors (400, 422, etc.) are marked failed immediately, no wasted retries.

Circuit breaker

20 consecutive failures → progressive pause (10 min → 30 min → 2 h → 24 h → deactivate). Inbound keeps receiving, only outbound pauses. Any single success resets everything.

Failure alert

When all retries are exhausted, you get an email with the event ID, destination, HTTP status, and a direct link to the event in your dashboard.

Batch replay

Server back up? One call to POST /replay-failed replays every failed event. Or inspect first with GET /undelivered. Replays don't count against your quota.

Built for builders.

Same webhook relay, three common situations teams land in first.

AI Agents

Senders retry. Your agent runs twice.

Slack 3s · GitHub 10s · Stripe 10s · Your LLM 45s.

Every retry-on-timeout sender hits the same wall. Stripe retries at 10s. Slack at 3s. GitHub at 10s. Shopify at 5s. Your handler fires again mid-run, duplicate fulfillment, dirty DB rows, duplicate messages, duplicate token burn. We catch the event in ~0.4s and hold it until your agent finishes. One delivery, guaranteed.

ai-agents.ts
1// Without AnyHook, any slow handler
2app.post("/webhook", async (req, res) => {
3 const result = await agent.run(req.body);
4 // ↑ 45s, sender already timed out
5 // ↑ retry fires → handler runs TWICE
6 // Stripe → +500 credits granted 2×
7 // Slack → 3 duplicate replies
8 // GitHub → 5× OpenAI token burn
9 res.json({ ok: true });
10});
11// With AnyHook → 200 in ~0.4s at edge
12// Your agent runs once. No duplicates.
Solo Builders

Swap the URL. Ship tonight.

No SQS. No DLQ config. No SDK.

Point your Stripe webhook here instead of your server. We handle retries, logs, and replay. Developing locally? Set your destination to a tunnel URL, or capture real events in production and replay them to localhost anytime.

solo-builders.ts
1// Step 1: Stripe Dashboard → Webhooks
2// Change endpoint URL to:
3const url = "https://in.anyhook.net/you/app";
4// Local dev? Set destination to:
5"https://your-tunnel.ngrok.io/webhook"
6// Or replay any prod event to localhost
7// ✓ Retries + Logs + Replay included
Backend Devs

Don't build it. Outsource it.

$20/mo beats 2 weeks of your time.

Queue, worker, DLQ, dead-letter alerts, manual replay UI. You've done it before. It still silently drops under load. Outsource the commodity work.

backend-devs.ts
1// What you'd build yourself:
2Ingress → Auth → Kafka → Worker
3→ Fails → Redis Delay Queue → DLQ
4→ CloudWatch Alerting → Manual Replay
5→ 2 weeks eng time · $3k+/mo ongoing
6// What AnyHook replaces it with:
7One URL. $20/mo. Zero maintenance.
8Retries + logs + replay included.

Simple pricing.

Start free. Upgrade when your traffic grows. No surprise bills on Free, metered overage on paid plans so we never silently drop your events.

Free
For testing and first integrations
$0/ month
Start free
  • EventsCovers a Stripe SaaS with ~200 customers, a GitHub team of 20, or a Shopify store with ~500 orders/month. More than enough for most indie projects.3,000 / month
  • HistoryHow long AnyHook keeps your events, fully replayable the whole time. After this period events are permanently deleted.3 days
  • TimeoutTime AnyHook waits for your endpoint to respond. Enough for most endpoints. For longer tasks (AI agents, batch jobs), return HTTP 202, AnyHook handles the rest.60s
All limits
  • Apps1
  • Delivery attempts3
  • Max payload512 KB
  • OverageNone
  • 100 events / day cap
  • Email alerts
  • Email support
Most teams start here
Pro
For production webhook traffic
$20/ month
Start Pro
  • EventsTotal webhook events AnyHook will receive and attempt to deliver per calendar month.50,000 / month
  • HistoryYour events, kept for a year: full replay for 30 days, then a read-only encrypted archive. The log is sealed daily into a published hash chain, so any later edit is detectable and you can recompute it yourself from /api/v1/anchors. Browse, export, and delete archived events from the dashboard's Archived view. Fair use 50 GB included.1 year
  • TimeoutTime AnyHook waits for your endpoint to respond. Great for AI agents and heavier processing. For tasks over 2 minutes, return HTTP 202, AnyHook handles the rest.120s
All limits
  • Apps10
  • Delivery attempts5
  • Max payload2 MB
  • Overage$0.90 / 1k
  • No daily cap
  • 1-year tamper-evident history
  • Metered overage, events never dropped
Scale
For high-volume pipelines
$90/ month
Start Scale
  • EventsTotal webhook events AnyHook will receive and attempt to deliver per calendar month.250,000 / month
  • HistoryYour events, kept for seven years: full replay for 90 days, then a read-only encrypted archive. The log is sealed daily into a published hash chain, so any later edit is detectable and you can recompute it yourself from /api/v1/anchors. Browse, export, and delete archived events from the dashboard's Archived view. Fair use 250 GB included.7 years
  • TimeoutTime AnyHook waits for your endpoint to respond. Built for AI agents, multi-step workflows, and heavy processing. Return HTTP 202 if you need even longer.5 min
All limits
  • Apps50
  • Delivery attempts10
  • Max payload4 MB
  • Overage$0.70 / 1k
  • No daily cap
  • 7-year tamper-evident history
  • Custom domains soon
Enterprise
For security reviews and custom limits
Custom
Contact sales
  • EventsFlexible
  • HistoryFlexible
  • TimeoutFlexible
All limits
  • AppsFlexible
  • Delivery attemptsFlexible
  • Max payloadCustom
  • OverageCustom
  • SSO and reviews
  • Dedicated onboarding
  • Custom routing options

Most teams start with Pro, production-grade volume, zero maintenance. Retry queues, dead-letter handling, idempotency, let us own the complexity so you can ship what matters.

FAQ

You can. Here's what you're signing up for:

Reliability: Idempotency keys, dead-letter queues, backoff state machines. One missed edge case and you double-process a payment or silently drop an event. Most teams find these bugs in production, at 2 AM.

Security: Every provider signs differently. Stripe HMAC-SHA256 + timestamp, GitHub raw SHA-256, Shopify Base64. You maintain one verifier per provider, handle key rotation, encrypted storage. Skip one = accepting unsigned traffic.

Observability: Debugging means grepping CloudWatch across Lambda invocations. No searchable event log, no replay, no full payload history.

Cost: Infra is $50-200/mo. The real cost is $3,000-5,000/mo in engineer time: on-call, migrations, debugging stuck retries. AnyHook Pro is $20/month and zero maintenance.

How delivery works under the hood

Different hops. Stripe's clock runs on the connection to your public URL. Point that at AnyHook and Stripe waits on our edge, which returns 2xx in ~0.4s median, 1.1s p95 against the 10s Stripe allows.

The Timeout column is our delivery clock: how long we wait for your endpoint to respond (60s Free, 120s Pro, 5 min Scale). Most endpoints respond well within that. For tasks that take even longer, return 202 Accepted and process async.

Retry schedule & timeout details

Zapier/Make are low-code automation platforms: visual editors, drag-and-drop flows. AnyHook is a developer-grade relay: your webhook, your endpoint, your code, your infrastructure.

Writing Python or TypeScript to process webhooks? Use AnyHook. Want "if payment → send email" without code? Use Zapier.

Events are written to a durable queue before we return 200 to the sender. If our Forwarder is temporarily down, events queue up and process on recovery. The sender already got their 200, no retries, no data loss.

Uptime published at status.anyhook.net.

Yes: that's exactly what AnyHook is for. We acknowledge Stripe in ~0.4s median, 1.1s p95, well inside the 10s it allows. Your Agent runs as long as it needs.

Your endpoint should return 202 Accepted immediately, then process async. AnyHook's delivery timeout (60s Free, 120s Pro, 5 min Scale) only applies to that initial HTTP round-trip.

Delivery timeout & retry schedule

No. Return 200 as soon as the webhook is authenticated. Run business logic async. This is Stripe's recommended pattern.

With AnyHook: edge validates signature → event queued → Stripe gets its 200 in ~0.4s median, 1.1s p95 → failures retried and replayed in AnyHook instead of forcing Stripe to redeliver.

Ship your agent.
We handle delivery.