Introduction
What is Splithook?
Splithook is a webhook debugging and development tool for developers. It sits between the service sending webhooks (Stripe, GitHub, Shopify…) and your local handler, giving you a live feed of every request, the ability to replay any event with a single click, and automatic re-signing so your HMAC verifiers keep passing in development.
The name says it all: split the webhook to as many destinations as you need, and hook it into your local dev workflow.
The three problems Splithook solves
1. Webhooks are invisible in development
Your local server is behind NAT. The provider can't reach localhost:3000, so you either use ngrok and pray the tunnel stays up, or you manually fire curl requests and guess at the payload shape. Neither scales when you're debugging a race condition at 2am.
Splithook gives each workspace a permanent public endpoint (https://splithook.com/e/{slug}) that captures every webhook, stores it, and streams it to your dashboard in real time — no tunnel required just to see what arrives.
2. Replaying breaks signature verification
Stripe timestamps your webhooks. If you try to replay a captured event five minutes later, your handler rejects it: Webhook timestamp outside tolerance. Every provider has a similar mechanism, and every developer has lost time to it.
Splithook re-signs the payload on the fly using your development signing secret, stamping a fresh timestamp before delivery. Your handler sees a perfectly valid signature — even if the original event is three days old.
3. Sharing webhooks across a team is painful
Two developers working on the same Stripe integration both need to receive the same charge.failed event. The usual answer is "pick one, forward manually". Splithook fans out a single captured webhook to N destinations simultaneously — each developer on their own tunnel, each with their own filter and signing secret.
How it compares
| Feature | webhook.site | ngrok | Hookdeck | Splithook |
|---|---|---|---|---|
| Permanent endpoint | ✗ | ✓ | ✓ | ✓ |
| Real-time dashboard | ✓ | ✗ | ✓ | ✓ |
| One-click replay | ✗ | ✗ | ✓ | ✓ |
| Re-sign on replay | ✗ | ✗ | ✗ | ✓ |
| Fan-out to N destinations | ✗ | ✗ | ✗ | ✓ |
| Schema inference | ✗ | ✗ | ✗ | ✓ |
| TypeScript types export | ✗ | ✗ | ✗ | ✓ |
| Self-hostable | ✗ | ✗ | ✗ | ✓ |
Key concepts
- Endpoint — A public URL that captures incoming webhooks. One workspace can have multiple endpoints (one per integration or environment).
- Destination — A target that receives forwarded webhooks. Each endpoint fans out to as many destinations as you configure.
- Replay — Re-delivering any captured event to one or all destinations, with fresh signatures.
- Schema — An inferred TypeScript-compatible type automatically built from the payloads you receive.
- Workspace — A team container. Members share endpoints, secrets, and replay history.
Next steps
- Follow the Quickstart to receive your first webhook in under 5 minutes.
- Read Concepts for a deeper explanation of the data model.
- Check Signing & verification if you're integrating with Stripe, GitHub, or another provider.