Moving off your own webhooks table
Most webhook systems are a table and a background job. That version works — this page is about the point where it stops being the cheapest option.
In short
- The pitch is not "replace your provider" — it is "get what you never built".
- Publishing replaces one function call in your code; consumers gain signatures and replay.
- Keep your table for a while and dual-publish; the comparison is the proof.
- If delivery is your product, keep building it. This page says so plainly.
| # | 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.
The signs it is time
- Support asks "did we send it?" and the answer requires a database query.
- One slow customer endpoint delays deliveries for everyone.
- A failed delivery is discovered by the customer, not by you.
- Nobody wants to touch the retry logic because it is subtle and unowned.
- Secrets have never been rotated because there is no way to do it without dropping traffic.
What the change looks like in code
The function that used to enqueue a delivery becomes one HTTP call. Fan-out, retries, signing, the dead-letter queue and the log stop being yours.
| Before | After |
|---|---|
deliver_webhook(tenant, payload) |
POST https://api.hookget.com/v1/events with the tenant's key |
A webhooks table and a worker |
Nothing — the event log and the timeline replace both |
| Retry logic in your job runner | A schedule per endpoint, changeable without a deploy |
if customer.region == "eu" around the send |
A filter on the endpoint: {"data.region": "eu"} |
| "We'll add signatures later" | Standard Webhooks on every delivery, with rotation |
A migration that cannot surprise you
- Publish to HookGet in addition to your existing delivery, for one tenant.
- Compare: same events, same order, same destinations reached.
- Point that tenant's consumers at the new signature (or none, if you never signed).
- Stop your own delivery for that tenant. Keep the code for a week.
- Repeat, then delete the worker.
When to keep building it yourself. If webhook delivery is a differentiating part of your product, if you need delivery semantics nobody else offers, or if your volume makes per-delivery pricing worse than an engineer's time — keep it. That is a real answer and we would rather say it than sell around it.
Start delivering webhooks today
Dual-publish one tenant this afternoon. If the two timelines disagree, you have learned something either way.
Create a free account See pricing
10,000 deliveries a month free, no credit card. The free tier blocks rather than bills, so trying the product cannot produce an invoice — which is not true of every free tier in this category.