Every attempt, on the record.
What your team sees in the dashboard (sample events).
| status | event | detail |
|---|---|---|
| 200 | invoice.paid to ep_9f2c | 84ms, attempt 1 |
| 503 | invoice.paid to ep_71ab | retry 2/8 in 4m |
| 200 | user.created to ep_9f2c | 61ms, attempt 1 |
| 200 | invoice.paid to ep_71ab | 92ms, attempt 3 |
| 410 | plan.changed to ep_0c4d | dead-letter, replayable |
Automatic retries
Exponential backoff up to 8 attempts, then a dead-letter queue you can replay.
retry.max, retry.backoffSigned payloads
Every request carries an HMAC signature your customers verify in one line.
hmac-sha256Replay anything
Re-send one event or a whole time range after an outage.
POST /v1/replayPer-endpoint logs
Request, response and timing for every attempt, searchable for 30 days.
retention: 30dCustomer portal
Your users add endpoints and see their own deliveries.
<HooklinePortal />
Webhooks fail quietly. Your customers notice first.
A queue, a cron job and a retry loop look simple until an endpoint goes down at 2am.
Silent drops
A 500 from a customer’s server and the event is gone. Nobody knows until support hears about it.
Retry storms
Naive retries hammer an endpoint that’s already struggling and take it down for good.
No paper trail
“Did you send it?” turns into an afternoon of grepping logs.
From npm install to a delivered webhook in five minutes.
0:00
npm i hookline
1:00
Add your API key
3:00
Register an endpoint
5:00
First event delivered
Engineers who stopped babysitting webhooks
Demo concept, sample data“We deleted 600 lines of retry code and a cron job the week we switched.”
Sample reviewer A, Staff engineer (sample)
“Support can answer “did you send it?” themselves now. That alone paid for it.”
Sample reviewer B, CTO (sample)
“Replay by time range saved us after a customer’s outage. Two clicks.”
Sample reviewer C, Platform lead (sample)
Pay for events, not seats.
First 10k events every month are free. Above that, the more you send, the less each one costs.
Events a month, in blocks of 100k
- 1+: $9
- 10+: $7
- 50+: $5
1M events a month
$70 a month
Hookline vs. building it yourself vs. a generic queue
| Feature | Hookline | DIY | Generic queue |
|---|---|---|---|
| Retries with backoff | You write it | ||
| Signed payloads | You write it | ||
| Replay by time range | |||
| Customer-facing logs | |||
| Time to first event | ~5 min | Days | Hours |
Sample comparison for this demo. A real page compares named competitors from their public docs, with a date.
30-day money-back on paid plans. Upgrade, send real traffic, and if Hookline doesn’t pay for itself in a month, we refund you. The free tier stays free.
Questions developers ask
What happens when my customer’s endpoint is down?
How do my customers verify a webhook is from me?
Do you guarantee ordering?
Which languages have SDKs?
What counts as an event?
Can I self-host?
import { Hookline } from 'hookline'const hl = new Hookline(process.env.HL_KEY)await hl.send({endpoint: 'ep_9f2c',event: 'invoice.paid',payload: { id: 'in_42', amount: 4900 },retry: { max: 8, backoff: 'exp' },})
That’s everything. If we missed a question, the changelog and status pages answer most of the rest.
The Hookline team, 23 October 2026