Receive webhooks, verify signatures, transform payloads, and deliver them to your endpoints, with retries until each one lands.
Events
Everything Acme has received, newest first.
Point a provider at a Hookrail ingest URL and give Hookrail your endpoint. It verifies, filters, and retries in between.
Your provider
sends a webhook
Hookrail
Your app
gets one clean call
The parts you would otherwise write twice: retries, verification, routing, and somewhere to look when one fails.
Failed deliveries retry on a backoff schedule you set. Replay any event by hand, one at a time or in bulk.
Repeated failures open a persistent issue you acknowledge and resolve. Alerts post to a Slack or Discord webhook.
Reject payloads the sender didn’t sign. Pick a provider preset, or set the header, format, and key yourself.
Send a destination only the events it cares about, and reshape the payload before it goes out.
Webhooks that fail verification are held instead of dropped, so you can see what arrived and why it was rejected.
Keep environments and teams in separate projects. Everything in the UI is in the REST API too, behind an API key.
The CLI signs in from the terminal and streams live deliveries to a local port.
$ hookrail login ✓ Logged in to Acme $ hookrail listen 3000 --source stripe stripe → http://localhost:3000 Waiting for events… (Ctrl-C to stop)
Every attempt keeps its response code and body, so a failure is something you can read rather than guess at. Statuses mean one thing across the whole app.
Deliveries
https://acme.test/hooks