Everything you need to inspect and monitor webhooks in real time.
Create an account
Sign up at heylistenup.app/sign-up. No credit card required.
Create an endpoint
From the dashboard, click New endpoint. You instantly get a unique URL — no configuration needed.
Point any service at it
Copy the endpoint URL and paste it into Stripe, GitHub, Twilio, or anything that sends webhooks.
https://hook.heylistenup.app/hook/{your-token}Watch events arrive
Open the endpoint in your dashboard. Events appear instantly via WebSocket — no refresh needed. Click any event to inspect the full payload.
The endpoints list is your home base. Everything starts here.
Click New endpoint in the top-right corner. Give it a descriptive name (e.g. "Stripe payments", "GitHub push events"). The endpoint URL is generated immediately and is ready to receive requests.
Each row shows the full webhook URL. Click the copy icon next to it to copy it to your clipboard, then paste it into whichever service you're integrating with.
Toggle the active switch on any endpoint to pause it. Paused endpoints still accept requests but return your configured mock status immediately without storing events. Useful for temporarily silencing noisy integrations.
Select multiple endpoints using the checkboxes, then use the bulk action bar that appears in the header to pause, resume, or delete them all at once.
Click the three-dot menu on any endpoint row and select Rename. Names are for your reference only — they don't affect the webhook URL.
Click the three-dot menu and select Delete. This permanently deletes the endpoint and all its stored events. The URL stops accepting requests immediately.
Click any endpoint to open its detail view — a split-pane interface with live events on the left and the full payload on the right.
Events appear in real time via WebSocket. Each entry shows the HTTP method, timestamp, content type, and response status. New events are prepended at the top. Click any event to load its full payload in the inspector on the right.
The right pane shows everything about a selected event: request headers, query parameters, source IP, body size, and the full body. JSON bodies are syntax-highlighted and collapsible — click any object or array node to expand or collapse it.
The selected event ID is persisted in the URL as a query parameter (?event=...). Copy the URL from your browser to share a specific event with a teammate — they'll land directly on it.
In the payload inspector, click the Download icon to save the raw event body as a file. Useful for capturing large payloads or feeding them into other tools.
Compare any two events side-by-side to see exactly what changed between payloads. Hover over any event row to reveal its checkbox, then check two events — a Diff button appears in the toolbar. Click it to open the diff view.
Useful for catching silent payload changes from third-party APIs — pick a recent event and an older one to see what was added, removed, or renamed.
Export all events for an endpoint as CSV or JSON from the toolbar. CSV includes method, timestamp, content type, status, and body size per row. JSON includes the full event objects.
Re-send any stored event to any URL. In the payload inspector, click Replay, enter a target URL (e.g. http://localhost:3000/webhook), and click send. The original headers and body are forwarded exactly as received.
Control exactly what the endpoint returns to the sender. Set any HTTP status code (100–599), a custom response body, and custom response headers — all per endpoint. Useful for testing how senders handle errors, validating signature checks, or simulating retry logic based on specific response bodies.
{"received":true,"id":"..."} when empty.X-HeyListenUp-Event-Id is always set and cannot be overridden.Forward live webhook events to a local server — no ngrok or tunnel required. Set a forward URL (e.g. http://localhost:3000/webhook) in the endpoint settings. Every incoming event is relayed directly from the browser to your local server via a POST request.
Requires an open tab. Forwarding is browser-powered — it stops if the tab is closed. On desktop, it keeps working when the tab is unfocused or in the background. On mobile (especially iOS Safari), the browser may suspend the tab and pause forwarding. For always-on forwarding, pair it with Slack notifications so you don't miss events when your tab isn't open.
Use Chrome or Firefox. Safari blocks http:// requests from HTTPS pages, including localhost. Chrome and Firefox allow HTTP connections to localhost from HTTPS — use either for local forwarding.
Pin any JSON event as the schema baseline for an endpoint. Every subsequent JSON event is automatically compared against that baseline — if fields are added, removed, or change type, a drift alert is raised. For best results, add a HeyListenUp endpoint as a separate destination in your webhook source so monitoring stays out-of-band and never touches your production path.
application/json) events can be pinned.Get notified in Slack when events arrive, when schema drift is detected, or when an endpoint goes silent past its threshold. Add a Slack incoming webhook URL in the endpoint settings, then choose which notification types to enable.
The heylistenup CLI forwards webhooks to your local machine from the terminal — no browser tab required. Perfect for running in the background while you work.
Run without installing via npx, or install globally for everyday use:
# one-off npx heylistenup forward # global install npm install -g heylistenup
Both heylistenup and the shorthand hlu are available after a global install.
Go to Settings → API Keys and click Generate. Copy the key — it's only shown once. Then authenticate the CLI:
heylistenup login
Paste your key when prompted. The CLI stores it securely in your system's config directory.
Run heylistenup forward to pick an endpoint interactively, or pass a hook URL directly:
# interactive picker — select endpoint + confirm port
heylistenup forward
# pass a hook URL directly
heylistenup forward https://hook.heylistenup.app/hook/{token}
# specify a port (skips the port prompt)
heylistenup forward --port 4000
# enable response proxying for this endpoint
hlu forward --proxy
# disable response proxying
hlu forward --proxy-disable
# skip TLS verification (for self-signed certs)
hlu forward --insecure Your hook URL is copied to the clipboard automatically. Each forwarded event prints a timestamped log line and an Inspect @ link that opens directly in the dashboard.
If a forward fails with a TLS error and you're using a self-signed certificate, the CLI will suggest running with --insecure.
While forward is running, press r to instantly replay the last received event to the same local URL — no copy-pasting required. The output is identical to a live event: method, status, response time, and an Inspect link.
When enabled, your local server's response is returned directly to the webhook caller — status code, headers, and body. Useful for end-to-end testing where the sender's behavior depends on the response (e.g. retries on non-2xx).
Enable or disable per endpoint from the CLI or the endpoint's Response config tab:
# enable response proxying for this endpoint (persists) hlu forward --proxy # disable response proxying hlu forward --proxy-disable
When enabled but no CLI is connected, the endpoint falls back to its configured mock response. Two settings control timeout behaviour:
# how long to wait for your server (ms, default 10000) hlu config set proxyTimeout 5000 # what to return on timeout: "mock" (default) or "504" hlu config set proxyFallback 504 # view current settings hlu config get
Settings are stored locally in the CLI config file.
The CLI reconnects automatically with exponential backoff if the connection drops. Press Ctrl+C to stop. To run in the background, use your shell's job control or a process manager like pm2.
The Alerts page surfaces two types of active issues: endpoints that have gone silent, and endpoints where incoming JSON no longer matches the pinned schema.
Set a silence threshold on any endpoint — if no events arrive within that window, the endpoint appears in the Alerts page under Silence Alerts. The alert shows how long the endpoint has been silent and clears automatically when a new event arrives.
Configure the threshold in the endpoint's Slack settings tab under Alert me when… Endpoint is silent for…. A Slack webhook URL is required to enable the threshold.
Add a HeyListenUp endpoint as a separate destination in your webhook source — that way absence monitoring runs out-of-band and you get early warning without adding any risk to your production path.
When a JSON event deviates from an endpoint's pinned schema, it appears under Schema Drift. Each entry shows the endpoint name, the change summary (fields added, removed, or changed), and links to both the drifted event and the current schema baseline.
Click Mark drift as read to acknowledge all current drift alerts. Drift events older than 7 days are automatically cleared.
Use curl to send a test webhook to your endpoint:
curl -X POST https://hook.heylistenup.app/hook/{token} \
-H "Content-Type: application/json" \
-d '{"event": "test", "data": {"amount": 2500}}' The endpoint accepts any HTTP method and any body format (JSON, form-encoded, XML, plain text). The default response is:
{ "received": true, "id": "event-id" } If response mocking is configured Pro, the endpoint returns your custom status code, body, and headers instead.
| Status | Meaning |
|---|---|
| 200 | Event received and stored |
| 429 | Rate limit exceeded (60 req/min free · 600 req/min Pro). Retry after 60 seconds. |
| 413 | Payload too large (256 KB free · 1 MB Pro) |
| 404 | Token not found or endpoint deleted |