[01]
Create a connection
Pick a source — Stripe, GitHub, EasyPost, generic HMAC, or internal. Tuma gives you a unique inbound URL and a signing secret.
Inbound webhooks · MIT self-host
Create a connection in the console, paste Tuma's webhook URL into Stripe, GitHub, or EasyPost, and get signature verification, dedup, automatic retries, and replay when your handler was down.
See how it works · Stripe · GitHub · EasyPost · MIT · Docker Compose
# clone, then: cd deploy docker compose up --build Console: http://localhost Webhook: http://localhost/e/your-path # Before Stripe ──► your-app.com/webhooks/stripe # After Stripe ──► tuma/e/your-path ──► your-app.com/webhooks/stripe verify · dedup · retry · replay
How it works
No SDK. No code changes. One URL swap in your provider's dashboard.
[01]
Pick a source — Stripe, GitHub, EasyPost, generic HMAC, or internal. Tuma gives you a unique inbound URL and a signing secret.
[02]
Put Tuma's webhook URL and signing secret into Stripe, GitHub, or EasyPost. Set your destination URL — where events should land in your app.
[03]
Handler was down? Retries exhaust and the event opens in Issues. Fix your app, inspect the payload, and replay — one event or in bulk.
inbound proxy flow
verify · dedup · retry · replay — open Issues when your handler was down
Console
A React dashboard ships with the stack — no separate observability setup required for day-to-day ops.
Source-to-destination pipes with 24h stats — delivered count, p95 latency, open issues. Status pills: Delivering, Degraded, or Failing.
Platform-wide throughput, failure rate, p95, and hourly charts. Per-connection breakdown. Grafana on port 3001 for deeper Prometheus ops.
Failed deliveries after retries exhaust. Inspect payloads, replay individually, or bulk-replay after you fix the destination.
Why Tuma
Same URL-swap idea as Hookdeck, without cloud-only lock-in. Narrower scope than Convoy — inbound only, one compose stack, genuinely MIT with no license key for core features.
No vendor lock-in. docker compose up --build in deploy/, Caddy on port 80, payloads stay in your Postgres. MIT licensed.
Issues isn't a graveyard — it's a queue you drain from the console. Fix the destination, replay, and delivery resumes from durable history.
Built on Temporal — battle-tested durable execution, not hand-rolled retry loops. At-least-once delivery; dedupe on X-Tuma-Delivery-Id or your own business key.
In-app Metrics plus bundled Prometheus and Grafana. Go API, Temporal worker, Postgres, React UI — one compose file, no external SaaS dependencies.
Compare
Not a price war — Hookdeck has a real free tier and Convoy Community is free to self-host. Tuma wins on where your payloads live, license terms, and scope. Tuma v1 is early; we don't claim maturity or scale parity with either.
Same inbound job — different deployment model. Hookdeck Event Gateway is cloud-only; Tuma is first-class self-host.
| Hookdeck | Tuma | |
|---|---|---|
| Self-host | No — cloud only | Yes — MIT |
| Setup | Sign up → paste URL | docker compose up |
| Entry price | $0 tier, then from $39/mo | $0 self-hosted, always |
| Data location | Their cloud | Your Postgres, your infra |
| Maturity | Years, SOC2, transforms, CLI | v1 OSS — Connections, Issues, replay |
Convoy is a multi-tenant gateway for inbound and outbound. Tuma is inbound-only — one stack, actually MIT.
| Convoy | Tuma | |
|---|---|---|
| Scope | Inbound + outbound gateway | Inbound only (v1) |
| Complexity | API, workers, scheduler, socket | One compose stack |
| Self-host license | Community: source-available. Premium: $999/mo license | Full v1 MIT — no license key |
| Mental model | Event bus for platforms | Provider → you pipe |
| Best for | Sending webhooks to your customers | Receiving Stripe, GitHub, EasyPost reliably |
Competitor pricing verified Aug 25, 2026 — hookdeck.com/pricing, getconvoy.io/pricing. Convoy's core gateway is source-available under Frain's license, not MIT — only their client SDKs are MIT.
Pricing
Self-hosting is the product — not a cheaper Hookdeck tier. Hosted SaaS (instant URL, zero infra) is what we're building next for teams that won't run compose.
OPEN SOURCE
$0
Self-hosted · you run the stack
HOSTED
Coming soon
Managed SaaS · we run the stack
Built for
You want URL-swap simplicity but payloads can't live in someone else's cloud. Honest at-least-once semantics, durable retries via Temporal.
You only receive webhooks — you don't need outbound delivery or a multi-tenant gateway. Actually MIT, no $999/mo license for basics.
EasyPost tracking and shipment events into your stack — same retry and Issues flow as payments, self-hosted in your Postgres.
Stripe, GitHub, EasyPost, or any signed POST — one URL, one console, replay from Issues. Try the live playground with bundled simulators.
Hosted SaaS
The open-source v1 is live — clone it, run compose, you're in. Join the waitlist for the managed tier: instant URL, no Docker, dogfooded on koto7 before we open it up.
tuma-demo.koto7.dev/playground · github.com/koto7-io/koto7-tuma