Capture
relay listen [--port 4040]
Puts a recording proxy in front of your endpoint. Every incoming webhook is stored with full headers, raw body, timing and TLS details — even the ones your app 500'd on.
┌─[ relay v2.4.1 ]── webhook debugging & replay ──┐
Capture every webhook your app receives, inspect the full payload with headers and signatures intact, then relay replay it against localhost until your handler behaves.
## installation
Relay ships as a single static binary with first-class package-manager support. Pick your poison, paste, done.
# macOS · Linux · Windows (WSL & native) — 6.2 MB, no runtime deps
## features
man relay — everything, documentedSix subcommands that cover the whole miserable lifecycle of a webhook, from "did it even arrive?" to "ship it".
Capture
Puts a recording proxy in front of your endpoint. Every incoming webhook is stored with full headers, raw body, timing and TLS details — even the ones your app 500'd on.
Replay
Re-sends any captured request, byte-for-byte, to localhost or any target. Loop it with --times 50 to hammer a fix, or --speed 0.5 to slow-motion a race condition.
Verify
Checks HMAC signatures against 40+ known provider schemes. Tells you whether a failing signature is your secret, your clock, or a body that got re-encoded in transit.
Diff
Structural diff between two captures. Instantly see which field the provider renamed in their "non-breaking" API update last Tuesday.
Mock
Generates realistic signed payloads for CI. Test your handler against push, pull_request and 200 other event shapes without touching a real repo.
Share
Creates an expiring, secret-redacted link to a capture. Attach the exact failing request to a bug report instead of a screenshot of half a JSON blob.
## the inspector
The Relay inspector shows every capture the way your server saw it — not a prettified approximation. Raw bytes, exact header casing, signature material and all.
r) to replay against localhost## comparison
relay reproduces.Tunnelling tools and log tailing both leave you refreshing a dashboard and begging the provider to "send it again". Relay makes the request itself the artifact.
| capability | relay | tunnels | log tailing |
|---|---|---|---|
| Replay a request on demand | yes — byte-exact | no | no |
| Capture survives your app crashing | yes | partial | no — no app, no log |
| Signature verification built in | yes — 40+ providers | no | no |
| Diff two payloads structurally | yes | no | grep, if you're lucky |
| Works offline / in CI | yes — mock + replay | no — needs live traffic | fixtures you hand-rolled |
| Share an exact failing request | yes — redacted link | no | copy-paste screenshot |
## pricing
The CLI is open source and free forever. Paid plans add hosted capture history, shared workspaces and longer retention.
free
$0 /forever
The full CLI plus a hosted inbox for solo debugging.
pro
$12 /user/mo
For developers who debug webhooks more than once a quarter.
team
$39 /user/mo
Shared visibility for platform and integrations teams.
Install Relay before it lands. Two minutes now saves the 2 a.m. session where you add console.log(JSON.stringify(req.body)) and redeploy to production.