Replace expensive subscriptions
Bobbin
A stable, hard-to-guess URL for every integration, running in your own Laravel Cloud account. Bobbin keeps the request exactly as it arrived — method, query string, headers, body and the moment it landed — so you can read what a provider really sent instead of what its docs say it sends, and replay it at the thing that was meant to receive it.
Work in progress. Available to teams with Unlimited.
- Replaces
- A hosted webhook gateway
- Runs on
- Your Laravel Cloud account
- Needs
- Compute · Database · Queue · Scheduler
What it captures
Whole requests, kept as they arrived, on infrastructure you own
-
A URL per integration
Each endpoint gets its own public capture URL with a hard-to-guess identifier, so one provider misbehaving never means rotating the others.
-
The whole request
Method, query string, headers, body and time of receipt are stored together, which is the version of events an argument with a provider actually needs.
-
Replay on demand
Send any stored capture to the endpoint destination you configured, with automatic retries and a delivery history you can read.
-
Retention you set
One to three hundred and sixty-five days per endpoint, thirty by default, swept daily by a scheduled prune rather than left to grow.
-
Redaction before storage
Name the headers and body fields you never want kept, and Bobbin redacts them on the way in rather than after the fact.
-
No tunnel to your laptop
A deployed Bobbin is the public endpoint, so developing against a real provider never means exposing your own machine to the internet.
-
What arrived, not what was documented
Most webhook debugging is an argument about whose side dropped the field. Bobbin keeps the bytes: the headers as sent, the body unparsed, the query string intact, timestamped. You are reading evidence rather than reconstructing it from a log line somebody remembered to write.
-
At-least-once, and honest about it
2xxA replay counts as delivered only when the receiver answers 2xx, and a failure is retried four times with a visible status. A destination may well process a request before Bobbin records the success, so receivers must tolerate duplicates — that is stated rather than buried.
Bobbin vs. the incumbents
We rebuilt one row of their feature matrix
Hookdeck, Svix and webhook.site are good products and Bobbin is not trying to replace them. It does one slice of what they do — hold on to the requests other people send you, and put them back where they belong — on infrastructure you own, and deliberately does not do the rest. The question is not which product is better. It is which slice you are actually using.
| Feature | Bobbin Self-hosted, MIT | Hookdeck Hosted | Svix Hosted, or enterprise self-host | webhook.site Hosted, or self-host |
|---|---|---|---|---|
| Captures on infrastructure you own the row we rebuilt | Does this well:Your Cloud account | Not built:Hosted only | Works, but on their terms:Enterprise only | Partly, or with a caveat:Self-host available |
| Replay a stored request the row we rebuilt | Does this well:One click, with history | Does this well:Included | Does this well:Included | Partly, or with a caveat:Manual resend |
| Redact secrets before storing | Does this well:Per endpoint | Partly, or with a caveat:Transformations | Partly, or with a caveat:Transformations | Not built:Stored as sent |
| Fan out to several destinations we did not build this | Not built:One destination | Does this well:Core feature | Does this well:Core feature | Not built:Inspection only |
| Verify vendor signatures we did not build this | Not built:Not built | Does this well:Per source | Does this well:Per endpoint | Not built:Not built |
| Transform or filter payloads we did not build this | Not built:Stored as sent | Does this well:Inline scripts | Does this well:Transformations | Partly, or with a caveat:Custom actions |
| Sending webhooks to your customers we did not build this | Not built:Inbound only | Does this well:Included | Does this well:Their core strength | Not built:Inbound only |
| Where your captured payloads live | Does this well:Your own database | Works, but on their terms:Their cluster | Works, but on their terms:Their cluster | Works, but on their terms:Their cluster |
| Cost of catching more events | Does this well:Disk | Works, but on their terms:Per event | Works, but on their terms:Per message | Works, but on their terms:Per plan |
| Who is on call for the tool itself | Partly, or with a caveat:You are | Does this well:They are | Does this well:They are | Does this well:They are |
- Does this well
- Partly, or with a caveat
- Not built
- Works, but on their terms
The honest test
Ask what the webhook gateway is actually for on your team. If these are all true, you are paying per event for a platform to use one row of it.
- The question you ask it is "what did they actually send me?"
- Each integration has exactly one place its events need to end up.
- You would rather own the captured payloads than rent them.
Then you lose very little by moving. Bobbin is experimental today, so start with one noisy integration; the captures stay in your own database either way.
Keep paying them if
These are the parts we chose not to build, and we are not going to pretend otherwise.
- You need one event fanned out to several destinations with independent retries.
- You rely on vendor-specific signature verification at the gateway.
- You transform, filter or enrich payloads before they reach your app.
- You are SENDING webhooks to your own customers and need delivery infrastructure for that.
Small, sharp tools are a deliberate scope, not an unfinished roadmap. Bobbin will not grow into an event platform.
Be honest about it
You don't need us to run Bobbin
The repository is public and MIT licensed. These are the steps, and you are welcome to spend the afternoon doing them by hand.
-
1
Fork the Bobbin repository into your own GitHub organisation.
-
2
Deploy the fork to Laravel Cloud with its own compute, Postgres, a managed queue and the scheduler enabled, then create the first Owner.
-
3
Create an endpoint, give its capture URL to the provider, and set the one destination each replay should go to.
Or buy Unlimited once. Scalpels forks it, provisions exactly what it needs on your Laravel Cloud account, and deploys it. The app and the infrastructure are yours either way — the only question is who spends the afternoon.
Deploy Bobbin with UnlimitedBobbin pairs with the rest of the suite
Bobbin is the inbound half of the same job Sink does for mail: something outside your app sends you a thing, and you want to see it before you trust it. Muster watches the scheduled work on the other side of that boundary, and Hone tells you what the replay did to your application.