How to Create and Use a Discord Webhook
A Discord incoming webhook is the shortest path from a tool or script into one channel. It can set a display name and avatar and post rich Components V2 layouts, but its URL is also a credential. Set it up once, handle it like a password, and test with a message you can recognize.
Before you start
You need access to the target server and the Manage Webhooks permission in the channel. If the Webhooks control is missing or disabled, ask a server administrator to create it or adjust your role. Choose the destination channel carefully: an incoming webhook is tied to a channel until an authorized manager edits it.
Create the incoming webhook
Discord's labels can move between clients, but the canonical control remains under the server's Integrations and Webhooks settings. On a managed server, role and channel overrides can both affect whether you can see or manage it.
- Open the server's settings, choose Integrations, then open Webhooks.
- Choose New Webhook, give it a recognizable name and select the destination channel.
- Copy the webhook URL. Do not paste it into chat, tickets, screenshots, source control or analytics.
- Keep the settings page open until your test succeeds, so you can rotate or delete the webhook immediately if needed.
Build and send the first message
Nothing posts merely because a URL was pasted. DWEEB shows a confirmation before the request. For a normal person-created webhook, use static components and link buttons. Custom-ID buttons and select menus need an app-owned webhook because Discord must deliver their interactions to an application.
- Open DWEEB and choose a blank message or a template.
- Add Text Displays, Containers, Sections, buttons and media while watching the live Discord-style preview.
- Open Send, paste the webhook URL or connect the server and choose a channel.
- Review the resolved destination and validation warnings, then confirm the post.
- Keep the resulting message link if you intend to restore and edit that post later.
A small curl test
For a plain connectivity test, replace the placeholder with the real URL only in your local terminal. Avoid shell history on shared machines and never commit the command with a live token.
curl -H "Content-Type: application/json" \
-d '{"content":"Webhook connected successfully."}' \
"https://discord.com/api/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN"Common failures
| Symptom | Likely cause | What to check |
|---|---|---|
| 401 or invalid webhook token | The URL is incomplete, rotated or deleted | Copy it again from Integrations; do not reconstruct it |
| 403 or missing access | Permissions or a thread target block the request | Manage Webhooks, channel access and thread state |
| 400 invalid form body | The payload breaks a field, component or nesting limit | Use DWEEB's issue list before send |
| Interactive component rejected | A person-created webhook cannot own interactions | Use a guided app-owned destination or make the control a link |
What to do if the URL leaks
Delete or rotate the webhook immediately; removing a leaked post is not enough because the credential remains valid. Search repositories, build logs and team chat for copies, then create a fresh webhook and update only the systems that genuinely need it. Treat unexpected messages from a webhook as a credential incident.
Put the guide into practice
Open the exact workflow in DWEEB. Nothing posts until you review and confirm it.
Build your first webhook message →