Discord webhook tester
Test and debug Discord webhooksbefore they reach your channel
Point your app at a Hooklistener URL instead of the Discord webhook URL to see the exact JSON, headers and embed fields it sends. Switch back once the payload is right.
Related guides: fix Discord "Invalid Form Body" and 429 errorstest a Discord interactions endpoint on localhost
How Discord webhooks work
| Execute endpoint | POST /webhooks/{webhook.id}/{webhook.token} |
|---|---|
| Required body | At least one of content, embeds, components, file or poll. content is up to 2000 characters; embeds is an array of up to 10 embed objects. |
| wait query parameter | Defaults to false, which returns 204 No Content. With ?wait=true Discord waits for the message to be saved and returns the created message. |
| Rate-limit headers | X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-RateLimit-Reset-After and X-RateLimit-Bucket. On 429 responses Discord also sends X-RateLimit-Scope (and X-RateLimit-Global for the global limit). |
| When rate limited | HTTP 429 with a JSON body containing retry_after (seconds, float) and global. Wait for the Retry-After header or retry_after before retrying. |
Sources (checked November 2026)
See what your Discord webhook actually sends
Discord webhooks are the quickest way to post announcements, stream go-live alerts or status updates into a server with custom embeds, but only if the payload is valid. When it is not, Discord answers with an error your code may never log.
Hooklistener records each request your app sends so you can read the headers, the prettified JSON and the order of deliveries in one place. Test against a Hooklistener endpoint first, then paste the real Discord webhook URL back in.
Where Discord webhooks go wrong
Silent embed failures
A malformed embed is rejected with a 400 "Invalid Form Body", and a fire-and-forget script never shows it. Without the request body you are left guessing which field broke.
Manual testing chaos
Sending test requests with curl or Postman to a live channel spams your community. You want to see the payload before anyone else does.
Rate limits during bursts
Announcement bursts run into Discord's 429 responses. Without a request history you cannot tell which message hit the limit or how fast your bot was sending.
How Hooklistener helps you test Discord webhooks
Inspect the embed Discord rejected
Swap the Discord webhook URL for a Hooklistener endpoint and read the exact JSON, headers and embed fields your bot sends, so an "Invalid Form Body" error points at a real field instead of a guess.
Custom responses that stand in for Discord
Have the endpoint answer with 204, or with a 429 plus the headers, body and latency you choose, to check how your Discord bot handles a rate limit without spamming a real channel.
Replay (Pro) to a dev bot
Resend a captured Discord payload to a staging bot or to localhost through `hooklistener tunnel` while you fix the embed, instead of re-running the whole announcement script.
Try it: point Discord at a free webhook URL or run a test with the webhook tester.
Discord webhooks worth testing first
Stream and content alerts
Check Twitch or YouTube go-live notifications and their embeds before they post to a busy server.
SaaS status updates
Feed incident and uptime alerts from your status page into Discord and confirm each message has the fields your community expects.
Community announcements
Send drop announcements or membership updates to private channels and verify the payload in a test run first.
Replay a failed webhook without re-triggering the provider
Once a delivery is captured, you can resend its exact headers and body to localhost, staging or production from the dashboard or through your coding agent over MCP, so the provider never has to fire a new event. Replay is on Pro and above. Read the replay guide.
Discord webhook guides
Comparing webhook debugging tools?
See how Hooklistener stacks up against webhook.site, RequestBin, Beeceptor, Hookdeck and ngrok in the best tools to capture and inspect webhook payloads, or read the head-to-head pages for Hooklistener vs ngrok and Hooklistener vs Beeceptor.
Frequently asked questions
Can I preview Discord embeds before sending?
Yes, as JSON. Send the message to a Hooklistener endpoint instead of the Discord webhook URL and open the prettified body to check embed fields, colors and components before you post to a live channel. Hooklistener shows the payload; it does not draw the embed the way the Discord client does.
What if my bot hits Discord rate limits?
Every request your bot sends to the endpoint is kept in the history for your plan's retention, so you can see which burst triggered the limit. Add a custom response that returns 429 to test your backoff code. Replay is on Pro and above.
Do I have to share my Discord webhook URL?
No. The Discord webhook URL contains its token, so treat it like a password. While testing, your app only needs the Hooklistener endpoint URL; paste the real Discord URL back once the payload is right.
Is there a free tier for hobby servers?
Yes. The Free plan gives you 1 endpoint, 50 stored requests and 1 day of history with no card. Upgrade when you need longer history, more endpoints or replay.
Test your next Discord webhook before it goes live
Capture what your bot sends, check the embed JSON and fix the error before your community sees it.