Documentation

Everything you need to inspect and monitor webhooks in real time.

Quick start

  1. 1

    Create an account

    Sign up at heylistenup.app/sign-up. No credit card required.

  2. 2

    Create an endpoint

    From the dashboard, click New endpoint. You instantly get a unique URL — no configuration needed.

  3. 3

    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}
  4. 4

    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.

Endpoints list

The endpoints list is your home base. Everything starts here.

Creating an endpoint

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.

Copying the endpoint URL

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.

Pausing and resuming

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.

Bulk actions

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.

Renaming an endpoint

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.

Deleting an endpoint

Click the three-dot menu and select Delete. This permanently deletes the endpoint and all its stored events. The URL stops accepting requests immediately.

Endpoint detail

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.

Live event feed

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.

Payload inspector

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.

Sharing a specific event

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.

Downloading event body

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.

Payload diff

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.

  • Green — fields added in the newer event.
  • Red — fields removed since the older event.
  • Unchanged fields are shown in full so you can see the context around each change.

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.

CSV / JSON export Pro

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.

Event replay Pro

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.

Response mocking Pro

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.

  • Status — any integer 100–599. Quick-select buttons for 200, 400, 422, 500 or type any value.
  • Body — optional. If set, returned verbatim. Defaults to {"received":true,"id":"..."} when empty.
  • Headers — optional key/value pairs merged into the response. X-HeyListenUp-Event-Id is always set and cannot be overridden.

Local forwarding (via Browser relay)

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.

Schema drift detection Pro

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.

  • Pin — hover over any JSON event row and click the pin icon, or use the pin button in the payload inspector. Only JSON (application/json) events can be pinned.
  • Drift indicator — the Schema tab in the endpoint header turns amber when drift is detected. Click it to see the full baseline and change history.
  • Re-pin — pin a newer event at any time to update the baseline. Old snapshots are preserved in the schema history.
  • Meta drift — optionally detect changes in HTTP method or content type (opt-in per endpoint in the Schema tab).

Slack notifications Pro

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.

  • New events — a message is sent for every event received, including a body preview.
  • Schema drift — a message is sent when a JSON event deviates from the pinned baseline, listing added, removed, and changed fields.
  • Absence alerts — a message is sent when the endpoint has been silent longer than the configured threshold.

CLI Pro

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.

Install

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.

1. Generate an API key

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.

2. Start forwarding

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.

Replaying events

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.

Response proxying Pro

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.

Keeping it running

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.

Alerts Pro

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.

Absence alerts

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.

Schema drift alerts

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.

Sending a test request

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.

Limits & responses

StatusMeaning
200Event received and stored
429Rate limit exceeded (60 req/min free · 600 req/min Pro). Retry after 60 seconds.
413Payload too large (256 KB free · 1 MB Pro)
404Token not found or endpoint deleted