The event pipeline for your whole operation
Your data, one stream. Your AI, in command.
Payments, ads, leads, calls, email and LLM spend — 27 sources verified into one canonical stream, with webhooks that arrive, retry and land on a timeline you can read. Dashboards compute your real numbers, deterministic alerts catch the day a number breaks its own pattern, and your own AI assistant can run all of it over MCP.
No credit card. A live project and a test project from the first minute.
-
Attempt 1failed
-
Attempt 2failed
-
Attempt 3delivered
What you get for one POST
The pipeline behind a single publish call, in the order it runs.
Durable first
The event is written before it is acknowledged. The queue is derived from storage, not the other way round, so losing the queue costs throughput and not events.
Signed on the way out
Every delivery carries a Standard Webhooks signature over the raw bytes, with an id that stays constant across retries — the natural idempotency key for the consumer.
Retried on a schedule you choose
Eight attempts across about a day by default, and a custom schedule per endpoint when a destination needs a different rhythm.
Kept when it fails
Exhausted deliveries land in a dead-letter queue you can inspect and replay, with the original event id preserved so a consumer that dedupes will not double-process.
Disabled before it hurts
A destination that keeps failing is taken out automatically, and the fact is published as an event you can subscribe to. Recovery is one call, and it replays what died.
Visible while it happens
Every attempt is on a timeline with its status, latency and the first kilobyte the destination answered. Debugging is reading, not guessing.
Publishing is one request
Anything else the product does is available on the same API with the same key.
curl -X POST https://api.hookget.com/v1/events \
-H "authorization: Bearer $HOOKGET_KEY" \
-H "content-type: application/json" \
-d '{"type":"order.created","payload":{"id":"ord_10241","total":149.9}}'
# 202 Accepted — the event is stored, and fan-out has started
# {"id":"msg_01M0…","type":"order.created","units":1,"endpoints":2}
The response returns only after the event is durable, and it tells you what it will be metered as. On the consumer side, verification is a short function — see the signature guide.
Reshape a delivery without writing code
Six declarative ops per endpoint — pick, omit, rename, set, unwrap, wrap — applied before signing, so the signature covers the bytes that arrive. We deliberately never run your JavaScript in the delivery worker.
{
"type": "order.created",
"data": {
"order": { "id": "ord_10241" },
"card": "4242 4242 4242"
}
}
{
"type": "order.created",
"data": {
"order": { "id": "ord_10241" }
},
"via": "hookget"
}
A failing transformation dead-letters — it never delivers the untransformed body, because an omit may exist precisely to strip a field that must not reach that destination. The transformation guide has all six ops.
Claims you can check on their pages, not ours
Every number links to the vendor's own page, with the date we read it. If one goes stale, our build fails before the page ships.
Events come in, too — 27 sources
The inverse of an endpoint: Stripe, SendGrid, GoHighLevel, n8n and Postmark push verified webhooks in; OpenAI, Anthropic, Google Analytics, Search Console, Meta Ads and TikTok Ads are read on a schedule; Twilio brings inbound calls; Meta Lead Ads brings Facebook and Instagram leads. Fifteen more providers are verified and passed through. Everything lands on the same pipeline — same retries, same timeline, same replay.
Verified, not just accepted
Nothing enters before the provider's own signature checks out over the raw bytes — Stripe's HMAC, SendGrid's ECDSA, GoHighLevel's Ed25519, GitHub, Shopify and more.
Normalised, so one rule covers all
A connector maps vendor events to canonical ones: payment.succeeded with
the amount in cents, whoever processed it. Unmapped events pass through, never dropped.
Your spend, as events
LLM tokens and dollars per model; ad spend, traffic and search performance per day — read from the providers' own APIs, money always in cents. Alert on spend like any other event.
The delivery contract, in one table
Defaults, and what you can change.
| Behaviour | What HookGet does |
|---|---|
| Retry schedule | 8 attempts over about 21 hours, and the schedule is settable per endpoint |
| Acknowledgement | 202 only after the event is written; the queue is derived from storage |
| Signature | Standard Webhooks over the raw bytes, with overlapping rotation so nothing drops. HMAC (v1) or ed25519 (v1a), chosen per endpoint |
| Idempotency | A publish key deduplicates producers; the delivery id is stable across retries for consumers |
| Dead letters | Kept and replayable, with the original event id preserved |
| Auto-disable | 50 consecutive failures, or immediately on 410 Gone; announced as an event |
| Rate limiting | A token bucket per endpoint, plus a limit per project and per inbound source |
| Filtering | By event type, and by payload attributes — a destination that wants one region receives one region |
| Ordering | Per endpoint, by sharding — deliveries to one destination keep their order |
| Egress safety | Private and metadata addresses refused, in code and again at the network layer |
| Metering | Every started 64KB of payload is one unit, returned on every publish |
What you actually get to look at
Support asks "did we send it?" — this is the answer, without a database query.
| # | Time | Status | Code | Latency | Why |
|---|---|---|---|---|---|
| 1 | 09:41:02 | failed | 503 | 1,204 ms | Service Unavailable |
| 2 | 09:41:07 | failed | 503 | 980 ms | retried after 5s |
| 3 | 09:41:37 | failed | timeout | 15,000 ms | retried after 30s |
| 4 | 09:46:37 | delivered | 200 | 142 ms | retried after 5m |
Same webhook-id on every attempt, so the consumer can deduplicate.
Choices we made on purpose
Every product in this category makes these calls; most bury them. Ours, with the reasoning — and what to use when you disagree.
- Transformations are declarative, never customer code. Six auditable ops per endpoint — a delivery worker that runs customer JavaScript has every other customer in its blast radius, so ours never will. Arbitrary logic belongs in your publisher, where it is your code on your terms.
- Local development is a signed listener, not a tunnel. The one-file CLI forwards live events to localhost with real signatures and opens nothing to the internet — which is why a security review waves it through.
- Destinations are HTTPS and object storage. Both signed, both on every plan. Brokers are on the roadmap; until then a bucket is the durable fan-in.
- Compliance is a checkable list before it is a badge. The compliance page shows every control running today; SOC 2 is committed the moment a contract requires it.
- Self-hosting is being packaged. Same engine, one compose file. If it is your blocker, ask — you go first.
Disagree with a call? The comparison pages name who made the opposite one — honestly.
Questions
What is a webhook delivery service?
It is the layer between "our system produced an event" and "our customer's server acknowledged it". It stores the event, signs it, delivers it, retries it on failure, keeps what could not be delivered, and shows an operator exactly what happened to each attempt. Teams usually write the first version themselves and rewrite it after the first outage.
How is this different from a queue?
A queue moves work between systems you control. A webhook service delivers to endpoints you do not control: they go down, they answer slowly, they change their TLS, they return 410 when a customer removes an integration. The retry policy, the signature contract, the circuit breaker and the per-destination rate limit all exist because the far side is someone else's server.
Do I have to change how my consumers verify signatures?
HookGet signs with Standard Webhooks, so a consumer that already verifies a Svix-style signature needs no change. Consumers written against a bespoke scheme need the small verification snippet, which is about fifteen lines in any language.
Where does the data live?
In the EU — Frankfurt, eu-central-1. That is where it was built and there
is no other region to opt into or pay for. See security.
What happens when a destination is down for hours?
Attempts continue on the retry schedule for about a day. When the schedule is spent the event moves to the dead-letter queue, where it is kept rather than dropped. If a destination fails repeatedly it is disabled automatically and an operational event is published, so you hear about it from your own pipeline. When the destination is fixed, one call resumes it and replays everything that died while it was down.
Is there a free tier?
Yes — see pricing. Signing up takes an email and a password and gives you a live project and a test project.
Start delivering webhooks today
Point your webhooks at HookGet and watch the first delivery arrive, signed, in under a minute.
Create a free account Try the free webhook tester
10,000 deliveries a month free, no credit card. The free tier blocks rather than bills, so trying it cannot produce an invoice.