Skip to main content
Webhooks are a low-effort way to post messages to channels in Discord. They do not require a bot user or authentication to use. Apps can also subscribe to webhook events (i.e. outgoing webhooks) when events happen in Discord, which is detailed in the Webhook Events documentation.

Webhook Object

Used to represent a webhook.
Webhook Structure
* These fields will be absent if the webhook creator has since lost access to the guild where the followed channel resides
Webhook Types
These types don’t include webhook events, which are outgoing webhooks sent to your app by Discord. See Webhook Events for details.
Example Incoming Webhook
Example Channel Follower Webhook
Example Application Webhook

Create Webhook

Creates a new webhook and returns a webhook object on success. Requires the MANAGE_WEBHOOKS permission. Fires a Webhooks Update Gateway event. An error will be returned if a webhook name (name) is not valid. A webhook name is valid if:
  • It does not contain the substrings clyde or discord (case-insensitive)
  • It follows the nickname guidelines in the Usernames and Nicknames documentation, with an exception that webhook names can be up to 80 characters
This endpoint supports the X-Audit-Log-Reason header.
JSON Params

Get Channel Webhooks

Returns a list of channel webhook objects. Requires the MANAGE_WEBHOOKS permission.

Get Guild Webhooks

Returns a list of guild webhook objects. Requires the MANAGE_WEBHOOKS permission.

Get Webhook

Returns the new webhook object for the given id. This request requires the MANAGE_WEBHOOKS permission unless the application making the request owns the webhook. (see: webhook.application_id)

Get Webhook with Token

Same as above, except this call does not require authentication and returns no user in the webhook object.

Modify Webhook

Modify a webhook. Requires the MANAGE_WEBHOOKS permission. Returns the updated webhook object on success. Fires a Webhooks Update Gateway event.
All parameters to this endpoint are optional.
This endpoint supports the X-Audit-Log-Reason header.
JSON Params

Modify Webhook with Token

Same as above, except this call does not require authentication, does not accept a channel_id parameter in the body, and does not return a user in the webhook object.

Delete Webhook

Delete a webhook permanently. Requires the MANAGE_WEBHOOKS permission. Returns a 204 No Content response on success. Fires a Webhooks Update Gateway event.
This endpoint supports the X-Audit-Log-Reason header.

Delete Webhook with Token

Same as above, except this call does not require authentication.

Execute Webhook

Refer to Uploading Files for details on attachments and multipart/form-data requests. Returns a message or 204 No Content depending on the wait query parameter.
Note that when sending a message, you must provide a value for at least one of content, embeds, components, file, or poll.
If the webhook channel is a forum or media channel, you must provide either thread_id in the query string params, or thread_name in the JSON/form params. If thread_id is provided, the message will send in that thread. If thread_name is provided, a thread with that name will be created in the channel.
Discord may strip certain characters from message content, like invalid unicode characters or characters which cause unexpected message formatting. If you are passing user-generated strings into message content, consider sanitizing the data to prevent unexpected behavior and using allowed_mentions to prevent unexpected mentions.
Query String Params
JSON/Form Params
* Application-owned webhooks can always send components. Non-application-owned webhooks cannot send interactive components, and the components field will be ignored unless they set the with_components query param. ** See Uploading Files for details. *** When the flag IS_COMPONENTS_V2 is set, the webhook message can only contain components. Providing content, embeds, files[n] or poll will fail with a 400 BAD REQUEST response.
For the webhook embed objects, you can set every field except type (it will be rich regardless of if you try to set it), provider, video, and any height, width, or proxy_url values for images.

Execute Slack-Compatible Webhook

Refer to Slack’s documentation for more information. We do not support Slack’s channel, icon_emoji, mrkdwn, or mrkdwn_in properties.
Query String Params

Execute GitHub-Compatible Webhook

Add a new webhook to your GitHub repo (in the repo’s settings), and use this endpoint as the “Payload URL.” You can choose what events your Discord channel receives by choosing the “Let me select individual events” option and selecting individual events for the new webhook you’re configuring. The supported events are commit_comment, create, delete, fork, issue_comment, issues, member, public, pull_request, pull_request_review, pull_request_review_comment, push, release, watch, check_run, check_suite, discussion, and discussion_comment.
Query String Params

Get Webhook Message

Returns a previously-sent webhook message from the same token. Returns a message object on success.
Query String Params

Edit Webhook Message

Edits a previously-sent webhook message from the same token. Returns a message object on success. When the content field is edited, the arrays mentions and mention_roles and the boolean mention_everyone in the message object will be reconstructed from scratch based on the new content. When the message flag IS_COMPONENTS_V2 is set, the reconstructed arrays and boolean are based on the edited content in the components array. The allowed_mentions field of the edit request controls how this happens. If there is no explicit allowed_mentions in the edit request, the content will be parsed with default allowances, that is, without regard to whether or not an allowed_mentions was present in the request that originally created the message. Refer to Uploading Files for details on attachments and multipart/form-data requests. Any provided files will be appended to the message. To remove or replace files you will have to supply the attachments field which specifies the files to retain on the message after edit.
Starting with API v10, the attachments array must contain all attachments that should be present after edit, including retained and new attachments provided in the request body.
All parameters to this endpoint are optional and nullable.
Query String Params
JSON/Form Params
* The SUPPRESS_EMBEDS flag can be both set and unset, while the IS_COMPONENTS_V2 flag can only be set. When the IS_COMPONENTS_V2 flag is set, any of the used content, embeds, files[n] or poll values in the initial message must be set to null first, otherwise it will fail with a 400 BAD REQUEST response. ** Application-owned webhooks can always send components. Non-application-owned webhooks cannot send interactive components, and the components field will be ignored unless they set the with_components query param. *** See Uploading Files for details. **** Polls can only be added when editing a deferred interaction response.

Delete Webhook Message

Deletes a message that was created by the webhook. Returns a 204 No Content response on success.
Query String Params