Free online webhook tester
Loading your inbox…
How to test a webhook
WebhookTool gives you a unique URL and shows every HTTP request sent to it as it arrives, with its method, path, headers, query, body and files. It records DNS lookups of names under the URL too. Each inbox also has its own email domain, and emails sent to it show up next to the requests. No account needed.
Get a URL
Opening WebhookTool creates an inbox with its own webhook URL. There is nothing to sign up for or install.
Send requests to it
Paste the URL into the webhook settings of the service you are testing, such as Stripe, GitHub, Shopify, Twilio, Zapier or n8n, or send requests with curl or from your own code.
Inspect every request
Each request shows up the moment it arrives, with its method, path, query, headers, body and uploaded files.
Features
Request inspector
JSON and XML bodies are formatted, and gzip, base64, JWTs and JSON inside strings are decoded. Any body can be shown raw or as hex, and bodies and uploaded files can be downloaded.
Custom responses
Choose the status code, content type, body, headers and a delay of up to 30 seconds, and allow CORS. Start the path with a status code, as in
/404, to answer one request differently.DNS lookups
Every inbox also records lookups of names under it, so you can see when a system resolves a hostname you gave it, and through which resolver.
Emails
Every inbox also receives email for any address under its own domain, so you can test sign-up, password reset and notification emails, with their text, HTML, attachments and headers.
Search and notes
Find requests by method, path, header, body, status, size or time, as in
method:post status:4xx, and add notes to them.Copy and export
Copy any request as cURL, HTTPie, JavaScript fetch, Python requests or PowerShell to send it again, and export requests as JSON, CSV or HAR.
API and MCP
Everything works over an HTTP API for scripts and test suites, and AI agents can use it through MCP, with no sign-in.
Frequently asked questions
What is a webhook?
A webhook is an HTTP request that a service sends to a URL you give it when something happens, such as a payment succeeding or code being pushed. To test one, you need a URL that receives it and shows you exactly what arrived.
Is WebhookTool free?
Yes. There is no account to create. Opening the page gives you a webhook URL.
Who can see my requests?
People with your inbox's private link. The webhook URL can only send requests. Reading them needs the private link, which your browser keeps. Whoever has the private link has full control of the inbox, so keep it secret. To operate and maintain the service, the operators may also access inbox data, as the privacy notice explains.
How long are requests kept?
An inbox and its requests are deleted 1 day after it is created, or after a time you choose of up to 3 days. Each inbox keeps up to 50 requests, or up to 100 if you raise the limit. When it is full, the oldest are deleted first. When the server's storage is full, the inboxes of the network that stores the most lose their oldest requests first.
Private link
Open this link in any browser to get back to this inbox. Anyone who has it can read and delete your requests, so keep it to yourself.
Your webhook URL is different. It can only send requests to the inbox, so you can give it to the services that call it.
Searching requests
Type words to find requests that contain them anywhere in the URL, headers, query, form fields, notes or body, and emails by their subject, addresses or text. Narrow it down with these fields.
method:post | HTTP method |
|---|---|
path:/orders | Path after your inbox ID |
body:"order.created" | Text in the body. Use quotes for spaces or symbols |
header.user-agent:stripe | One header (header: searches all of them) |
query.page:2 form.email:example.com | Query string and form fields |
status:4xx status:>=500 | Status your URL answered with |
ip:203.0.113 | Sender IP address |
size:>10kb | Body size |
after:now-1h before:2026-10-01 | Arrival time (dates in UTC, or now-15m, now-2h, now-7d) |
has:files has:header.x-signature | Requests that have a body, files, form, query, note or a given field |
note:refund file:invoice | Your notes and uploaded file names |
source:stripe event:invoice.paid | The sender and event a request names, such as GitHub's or Stripe's |
delivery:evt_123 has:retry | Every attempt of one delivery, or requests their sender marks as a retry |
has:signature has:handshake has:listed | Requests signed the way a known sender signs, sent to verify the URL, or sent from an address on the sender's published list |
network:aws network:vpn has:network | Requests from the published addresses of a cloud, hosting provider, service, crawler, monitor, VPN or anonymizer, such as AWS, Hetzner, GitHub Actions, Google crawlers, NordVPN or Tor, by its name, region or place. network:vpn finds every VPN |
has:secret | Requests that seem to hold a secret, such as an API key, a private key or a card number |
agent:googlebot has:agent has:client | Requests whose User-Agent names a crawler, link preview, AI fetcher, monitor or scanner, by its name or kind, or an HTTP client such as curl |
json.data.status:paid json.amount:>1000 | A field of a JSON body, by its path, with numbers compared like status |
method:dns type:txt name:hello | DNS lookups, by record type or the name looked up |
method:smtp subject:"password reset" | Emails, by their subject |
from:alice@example.com to:hello@ | Emails by their sender, or by a recipient in To, Cc or the envelope. from: also matches the sender's IP address, as ip: does |
spf:fail dkim:pass dmarc:reject | Emails by the result of their SPF, DKIM or DMARC check, such as pass, fail or softfail, which match exactly, or by text in the domain checked. dmarc: also matches the From domain's policy: none, quarantine or reject |
Terms are combined with AND. Use OR, NOT or a leading -, and parentheses, as in method:post (status:4xx OR status:5xx) -path:/health
Keyboard shortcuts
Apart from Esc, shortcuts work while you are not typing in a field. The webhook URL is only copied when no text is selected.
Build an HTML form
Design a form that submits to your webhook URL. Paste the HTML into any page, or try it right here. Submissions show up in your inbox.
HTML