Catch. Debug. Replay.
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.
Start on the free plan. No card needed.
The body was changed before verification. Your framework parsed and re-encoded the JSON, so the bytes no longer match. Verify against the raw body, e.g. express.raw().
{
"id": "evt_1Q8xR2Lk",
"type": "invoice.payment_failed",
"data": {
"object": {
"customer": "cus_9x0aBc",
"amount_due": 1200,
"attempt_count": 2,
"paid": false
}
}
}
The same four steps you repeat every time you touch an integration, with no tunnel to babysit.
Every endpoint gets a public URL that answers providers instantly, so they never retry because your laptop was asleep.
/v1/catch/3f1c9a2eHeaders, query, and JSON, form or XML bodies stream in as they arrive. Secrets are masked for screen sharing.
SSE · no refreshThe CLI connects outbound, the way stripe listen does, and resumes without dropping events.
slinghook listenChange your handler, then replay the exact request, or edit the body and send it once without touching the original.
X-Webhook-Replay: trueOther 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.
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.
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; }; }; }
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.
Jump to any endpoint or request, replay, pause the stream or switch theme from the keyboard.
Fire a realistic Stripe, Shopify or GitHub event at your endpoint without leaving the app.
Return any status, body and delay to see how a provider reacts when your server misbehaves.
Star the requests that matter so they survive clears and retention, and leave yourself a note.
Compare two requests side by side when a provider quietly changes its schema.
Tokyo Night, Dracula, Nord, Catppuccin and more, plus three light themes for daylight.
No per-event surprises. Go over your monthly events on a paid plan and we keep catching instead of dropping your webhooks.
For trying an integration this afternoon.
For developers who live in webhooks.
For bigger volumes and longer history.
For compliance, volume and SSO.
Get a URL in ten seconds. Paste it into Stripe. Watch the first event land.
Get a free endpoint