How to Get Started with Discord Webhooks
Discord is a communication platform used by developer teams, gaming communities, open-source projects, and businesses for both voice and text-based conversations. Channels can be organized by topic, team, or privacy level, and many of those conversations benefit from automated updates from external services. Discord webhooks make this possible — they provide an HTTP endpoint that any external application can POST to in order to send messages into a Discord channel.
This article covers what Discord webhooks do, how they work, how to create one, and a practical example of connecting GitHub to a Discord channel. We'll also answer the most common questions developers have when getting started.
What do webhooks do in Discord?
You may have worked with webhooks on other providers like GitHub, Shopify, or CircleCI, or this may be your first time working with webhooks. In either case, it helps to understand the specific role webhooks play in Discord, as the concept varies from platform to platform.
Discord webhooks provide an easy way to get automated messages and data updates into a text channel. An external source of information uses a Discord webhook URL to POST a payload, and that payload appears as a message in the channel. Any application capable of sending an HTTP POST request can integrate with Discord this way — no bot, no SDK, no OAuth flow required.
For example, a finance team that uses Discord for conversations could have their daily sales summaries posted automatically from a payment platform like Chargebee at the end of each business day. A DevOps team could route deployment notifications from their CI/CD pipeline into a dedicated channel. The setup is the same in both cases: create a webhook, get the URL, and point the external service at it.
Webhook types
Discord supports three types of webhooks:
- Incoming Webhooks are the most common type. They generate a URL with a token that any external application can POST to. This is what most people mean when they say "Discord webhooks."
- Channel Follower Webhooks are internal webhooks that Discord creates automatically when a server follows an announcement channel in another server. Messages published in the source channel are replicated to the follower's channel via this webhook.
- Application Webhooks are used by Discord applications (bots) in the context of Interactions. These are created and managed through the Discord application system rather than manually.
This guide focuses on Incoming Webhooks, since those are what you'll use to send messages from external applications.
What you can send
A webhook payload must include at least one of: content (a text message), embeds (rich embed objects), components (UI components), file (file uploads), or poll (a poll). You can combine these in a single request.
You can also override the webhook's display name and avatar on a per-message basis using the username and avatar_url fields, and target a specific thread by passing a thread_id query parameter.
For the full payload specification, see the Execute Webhook documentation.
Limits to be aware of
- Message content: maximum 2,000 characters
- Embeds: up to 10 per message, with a combined character limit of 6,000 across all embeds
- Rate limits: approximately 5 requests per 2 seconds per webhook. Failed requests count toward the limit. Check the
X-RateLimit-RemainingandX-RateLimit-Reset-Afterresponse headers to avoid hitting the limit. - Webhook names: 1–80 characters, and cannot contain "clyde" or "discord" (case-insensitive)
- Webhooks are supported in text-based channels only. Voice channels do not support webhooks.
Where can I find Discord webhooks?
Every webhook is scoped to a specific server and connected to a channel on that server. To find the webhooks that belong to a server, click the down arrow beside the server name to open the context menu:

Click Server Settings and go to Integrations on the side menu. You'll see your existing webhooks and the option to create new ones. You need the Manage Webhooks permission to access this page.

You can also manage webhooks programmatically through the Discord API. The API lets you list all webhooks for a channel or guild, create new webhooks, modify existing ones, and delete them.
How do I add a webhook to Discord?
There are two ways to create a Discord webhook: through the UI (web or desktop app) or through the Discord API. The UI is the quickest way to get started.
To add a webhook to your Discord server:
- Go to the Integrations page on your Discord server as described above and click Create Webhook
- Give your webhook a descriptive name and select the channel you want messages sent to
- Click Save Changes

That's it. Click Copy Webhook URL to get your webhook URL. The URL contains an embedded token and looks like https://discord.com/api/webhooks/{webhook.id}/{webhook.token}. Anyone with this URL can post messages to your channel, so treat it like a secret.
You can test it immediately with a curl command:
curl -X POST YOUR_WEBHOOK_URL \
-H "Content-Type: application/json" \
-d '{"content": "Hello from a webhook!"}'
If you want to manage webhooks programmatically, check out our tutorial on configuring Discord webhooks using the API.
Discord webhook example: GitHub notifications
A common use case is piping GitHub repository events into a Discord channel so a development team gets real-time updates when code is pushed, pull requests are opened, or issues are created.
GitHub has built-in Discord webhook support, which makes this straightforward:
- Create a Discord webhook on the team's server targeting the desired channel
- Copy the webhook URL
- In your GitHub repository, go to Settings > Webhooks > Add webhook
- Paste the Discord webhook URL, appending
/githubto the end (e.g.,https://discord.com/api/webhooks/{id}/{token}/github). This tells Discord to use its GitHub-compatible payload format, which renders commit messages with proper formatting. - Set the content type to
application/jsonand select which events you want to receive (e.g.,push,pull_request,issues)
With this setup, anytime a team member pushes code to the repository, a formatted commit message appears in the Discord channel:

Discord also supports a /slack endpoint (https://discord.com/api/webhooks/{id}/{token}/slack) for services that send Slack-compatible payloads.
For a step-by-step walkthrough of this setup, see our tutorial on configuring Discord webhooks using the admin interface.
Sending rich messages with embeds
Plain text messages are useful, but embeds let you send formatted, visually rich messages. An embed can include a title, description, color bar, fields (key-value pairs), images, thumbnails, a footer, and a timestamp.
Here's an example payload with an embed:
{
"embeds": [
{
"title": "Deployment Succeeded",
"description": "Production deploy completed for **api-service**",
"color": 3066993,
"fields": [
{ "name": "Environment", "value": "production", "inline": true },
{ "name": "Version", "value": "v2.4.1", "inline": true },
{ "name": "Duration", "value": "43s", "inline": true }
],
"timestamp": "2026-02-25T14:30:00Z"
}
]
}
The color field takes a decimal integer representing an RGB color (3066993 is green). You can include up to 10 embeds per message, with a combined character limit of 6,000 across all embeds.
Editing and deleting webhook messages
If you pass ?wait=true as a query parameter when executing a webhook, Discord returns the created message object including its id. You can then use that message ID to edit or delete the message later:
- Edit:
PATCH https://discord.com/api/webhooks/{id}/{token}/messages/{message_id} - Delete:
DELETE https://discord.com/api/webhooks/{id}/{token}/messages/{message_id}
This is useful for status updates that evolve over time, like a deployment message that starts as "Deploying..." and gets edited to "Deploy succeeded" when complete.
Discord webhooks FAQ
If your question isn't covered here, check out the official Discord developer documentation.
| Question | Answer |
|---|---|
| How do I link an external service to Discord? | If the service supports sending outbound webhooks (e.g., GitHub, Shopify, Stripe), paste your Discord webhook URL into that service's webhook configuration. For GitHub and Slack-compatible services, append /github or /slack to the URL for native formatting. |
| Are Discord webhooks free? | Yes. Discord webhooks are free to use with no per-message charges. |
| Are Discord webhooks POST or GET? | POST. You execute a webhook by sending a POST request to the webhook URL. |
| What can I send in a Discord webhook message? | Text content, up to 10 rich embeds, file attachments, UI components (for application-owned webhooks), and polls. At least one of these must be present. See the Execute Webhook docs for the full payload spec. |
| What are the rate limits? | Approximately 5 requests per 2 seconds per webhook. Check the X-RateLimit-Remaining response header to avoid hitting the limit. |
| How do I view my webhooks? | Go to Server Settings > Integrations to view, create, edit, and delete webhooks. You need the Manage Webhooks permission. |
| How do I get my Channel ID? | Enable Developer Mode at User Settings > Advanced, then right-click on a channel and select Copy Channel ID. |
| Can I create multiple webhooks per channel? | Yes. You can create multiple webhooks targeting the same channel, each with its own URL, name, and avatar. |
| Can I use one webhook URL for multiple sources? | Yes. A single webhook URL can receive messages from any number of external applications. |
| Can I send messages to threads? | Yes. Pass the thread_id query parameter when executing the webhook. For forum channels, you can create a new thread by providing a thread_name instead. |
| Can I edit or delete webhook messages? | Yes. Pass ?wait=true when sending to get the message ID, then use the PATCH or DELETE endpoints to modify or remove the message. |
| How do I delete a webhook? | Through the Integrations page in Server Settings, or via a DELETE request to the webhook API endpoint. |
| Are webhooks supported in voice channels? | No. Discord webhooks are supported in text-based channels only. |
Conclusion
Discord webhooks provide one of the simplest ways to integrate external applications with your server — any service that can send an HTTP POST request can deliver messages to a Discord channel. For production tips on security, payload formatting, and error handling, see our guide to Discord webhooks features and best practices.
Happy coding!