Catch. Debug. Replay.

Catch the webhook.
Sling it to localhost.

SlingHook gives Stripe, Shopify and GitHub a public URL, streams every request to your browser the moment it lands, and forwards it to the server on your laptop. When a signature fails, it tells you why.

Get a free endpoint
/v1/catch/3f1c9a2e

Start on the free plan. No card needed.

$ slinghook listen 3f1c9a2e --forward http://localhost:3000/webhooks
● Listening on endpoint 3f1c… Forwarding to http://localhost:3000/webhooks
14:02:11 POST #1234 → 200 37ms sig:valid
14:02:15 POST #1235 → 500 41ms sig:invalid
Works with any provider that sends webhooks StripeShopifyGitHubWorkOSTwilioSlackPaddle
The loop

From provider to your breakpoint in one URL.

The same four steps you repeat every time you touch an integration, with no tunnel to babysit.

1 · Catch

Paste one URL

Every endpoint gets a public URL that answers providers instantly, so they never retry because your laptop was asleep.

/v1/catch/3f1c9a2e
2 · Debug

See it live

Headers, query, and JSON, form or XML bodies stream in as they arrive. Secrets are masked for screen sharing.

SSE · no refresh
3 · Relay

Forward to localhost

The CLI connects outbound, the way stripe listen does, and resumes without dropping events.

slinghook listen
4 · Replay

Fix and resend

Change your handler, then replay the exact request, or edit the body and send it once without touching the original.

X-Webhook-Replay: true
Only in SlingHook

The parts other webhook tools leave to you.

A signature debugger that explains the failure

Other tools say “invalid signature” and stop. SlingHook checks each common cause and tells you which one it is, then lets you try another secret without saving it.

  • Wrong kind of secret, like an API key instead of whsec_…
  • Stale or replayed timestamps
  • Bodies re-encoded by your framework or cut off in transit
Signature check · Stripefailed
✓
Secret formatStarts with whsec_, no stray whitespace
✓
TimestampSigned 2s before arrival, inside the 5 min tolerance
✗
Body bytesBody was re-encoded after receipt. Whitespace and key order differ from what Stripe signed.
✓
Payload size4.1 KB, under the capture limit

Turn a captured event into code

One click gives you a typed model of the real payload, a fixture file, or a test that sends the event to your handler. Fields that only some array items have come out optional.

  • TypeScript, Python TypedDict, PHP DTOs, Go structs
  • Jest, Vitest, pytest and Laravel tests
TypeScriptPythonPHPGoTest
export interface InvoicePaymentFailed {
  id: string;
  type: "invoice.payment_failed";
  data: {
    object: {
      customer: string;
      amount_due: number;
      attempt_count: number;
      next_payment_attempt?: number | null;
      paid: boolean;
    };
  };
}

Replay a whole checkout, not one event

Record a flow once, then replay it in order with its original timing as a repeatable test. See where your handler broke and whether the fix held.

Scenario · Subscription checkout5 events · 3.4s
+0.0scheckout.session.completed200
+0.4scustomer.subscription.created200
+0.9sinvoice.created200
+2.7sinvoice.paid500
+3.4spayment_intent.succeeded200
Built for long sessions

Small things that add up.

Command palette⌘K

Jump to any endpoint or request, replay, pause the stream or switch theme from the keyboard.

Provider simulator

Fire a realistic Stripe, Shopify or GitHub event at your endpoint without leaving the app.

Custom responses

Return any status, body and delay to see how a provider reacts when your server misbehaves.

Pins and notes

Star the requests that matter so they survive clears and retention, and leave yourself a note.

Payload diff

Compare two requests side by side when a provider quietly changes its schema.

12 themes

Tokyo Night, Dracula, Nord, Catppuccin and more, plus three light themes for daylight.

Pricing

Free while you build. Flat when you ship.

No per-event surprises. Go over your monthly events on a paid plan and we keep catching instead of dropping your webhooks.

Free

$0

For trying an integration this afternoon.

  • 3 endpoints
  • 1,000 events a month
  • 24 hour history
  • Live feed, replay, CLI relay
Start free

Pro

$12 /month

For developers who live in webhooks.

  • Unlimited endpoints
  • 100,000 events a month
  • 30 day history
  • Keeps catching past the limit
  • Reserved URLs like /v1/catch/stripe-dev
  • Relay retries and email alerts
Get Pro

Team

$39 /month

For bigger volumes and longer history.

  • Everything in Pro
  • 500,000 events a month
  • 90 day history
  • Shared seats, roles and audit log
  • Slack and Discord alerts
Get Team

Business

Custom

For compliance, volume and SSO.

  • 5M+ events
  • 1 year+ history
  • SAML SSO
  • Self-host license
Contact us

Compare every plan and read the billing FAQ →

Your next webhook bug, explained.

Get a URL in ten seconds. Paste it into Stripe. Watch the first event land.

Get a free endpoint