Free Webhook Tester — Inspect Any HTTP Request

Send a webhook, see exactly what arrived. HookRelay stores the full request — headers, body, query params — so you can inspect and debug anytime. No account. No expiry. Works in 30 seconds.

Unlike webhook.site (7-day expiry) or RequestBin (gone), HookRelay endpoints are permanent. Set it once, use it forever.

How to Test a Webhook in 3 Steps

1

Create an Endpoint

POST to the HookRelay API and get a unique URL. No form to fill out, no email required.

2

Point Your Webhook Here

Paste the URL into Stripe, GitHub, your CI/CD tool, or any service that sends webhooks.

3

Inspect the Requests

GET the requests endpoint to see everything that was sent — headers, body, IP, timestamp.

Quick Start

# Step 1: Create your test endpoint
curl -X POST https://hookrelay-app.netlify.app/api/webhook/create

{"uuid":"f7a2b91c","url":"https://hookrelay-app.netlify.app/api/webhook/f7a2b91c"}

# Step 2: Send a test webhook to it
curl -X POST https://hookrelay-app.netlify.app/api/webhook/f7a2b91c \
  -H "Content-Type: application/json" \
  -H "X-Stripe-Signature: t=1234,v1=abc..." \
  -d '{"type":"payment_intent.succeeded","data":{"amount":2900}}'

{"status":"ok","id":"req_001"}

# Step 3: Inspect what arrived
curl https://hookrelay-app.netlify.app/api/webhook/f7a2b91c/requests

[{"id":"req_001","method":"POST","headers":{"content-type":"application/json","x-stripe-signature":"t=1234,v1=abc..."},"body":{"type":"payment_intent.succeeded","data":{"amount":2900}},"received_at":"2025-03-19T10:00:00Z"}]

What You Can Test with HookRelay

Why Persistent Matters for Webhook Testing

Most webhook testers give you a temporary URL that expires in hours or days. This creates a painful workflow:

  1. Create endpoint on webhook.site
  2. Configure your webhook source with that URL
  3. Wait for the event to fire (could be hours or days)
  4. Come back next week — URL has expired
  5. Start over

With HookRelay, you set the endpoint once and it keeps working. Configure your Stripe test mode webhook URL once, and it's still valid next month when you come back to it.

Inspecting Specific Request Types

JSON Body Webhooks

# Stripe, GitHub, most modern services send JSON
curl -X POST https://hookrelay-app.netlify.app/api/webhook/YOUR_UUID \
  -H "Content-Type: application/json" \
  -d '{"event":"test","data":"hello"}'

Form-Encoded Webhooks

# Older services (Twilio, some payment processors) use form encoding
curl -X POST https://hookrelay-app.netlify.app/api/webhook/YOUR_UUID \
  -d "MessageSid=SM123&From=%2B14155551234&Body=Hello"

XML Webhooks

# Some enterprise services send XML
curl -X POST https://hookrelay-app.netlify.app/api/webhook/YOUR_UUID \
  -H "Content-Type: application/xml" \
  -d "<event><type>payment</type></event>"

Start Testing Webhooks Now

Free endpoint, no expiry, no account. Get started in 30 seconds.

Create Free Test Endpoint →

FAQ

How long are requests stored?

Free tier: 30 days of request history, up to 500 requests/month. Pro tier (coming soon): unlimited history.

Can I see the full headers, not just the body?

Yes. Every stored request includes the full headers map, body, HTTP method, query parameters, and timestamp.

What's the difference between this and ngrok?

ngrok proxies requests to your localhost (for local development). HookRelay stores incoming requests on the cloud so you can inspect them later — no local server needed. Use ngrok if you need live local proxying; use HookRelay if you need to capture and inspect webhooks.

Does it support HTTPS?

Yes. All HookRelay endpoints use HTTPS. Most webhook senders require HTTPS, so this is a requirement we meet by default.

Can I use this as a permanent form backend?

Yes — that's one of our most popular use cases. Point your HTML form's action attribute at your HookRelay endpoint. Submissions are stored and accessible via API indefinitely.