Skip to main content
Documentation - Discord Docs

Search documentation

Type to search this documentation.

On this pageOverview

Webhook Resource

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.

Used to represent a webhook.

Field Type Description
id snowflake the id of the webhook
type integer the type of the webhook
guild_id? ?snowflake the guild id this webhook is for, if any
channel_id ?snowflake the channel id this webhook is for, if any
user? user object the user this webhook was created by (not returned when getting a webhook with its token)
name ?string the default name of the webhook
avatar ?string the default user avatar hash of the webhook
token? string the secure token of the webhook (returned for Incoming Webhooks)
application_id ?snowflake the bot/OAuth2 application that created this webhook
source_guild? * partial guild object the guild of the channel that this webhook is following (returned for Channel Follower Webhooks)
source_channel? * partial channel object the channel that this webhook is following (returned for Channel Follower Webhooks)
url? string the url used for executing the webhook (returned by the webhooks OAuth2 flow)

* These fields will be absent if the webhook creator has since lost access to the guild where the followed channel resides

Value Name Description
1 Incoming Incoming Webhooks can post messages to channels with a generated token
2 Channel Follower Channel Follower Webhooks are internal webhooks used with Channel Following to post new messages into channels
3 Application Application webhooks are webhooks used with Interactions
JSON
{
  "name": "test webhook",
  "type": 1,
  "channel_id": "199737254929760256",
  "token": "3d89bb7572e0fb30d8128367b3b1b44fecd1726de135cbe28a41f8b2f777c372ba2939e72279b94526ff5d1bd4358d65cf11",
  "avatar": null,
  "guild_id": "199737254929760256",
  "id": "223704706495545344",
  "application_id": null,
  "user": {
    "username": "test",
    "discriminator": "7479",
    "id": "190320984123768832",
    "avatar": "b004ec1740a63ca06ae2e14c5cee11f3",
    "public_flags": 131328
  }
}
JSON
{
  "type": 2,
  "id": "752831914402115456",
  "name": "Guildy name",
  "avatar": "bb71f469c158984e265093a81b3397fb",
  "channel_id": "561885260615255432",
  "guild_id": "56188498421443265",
  "application_id": null,
  "source_guild": {
    "id": "56188498421476534",
    "name": "Guildy name",
    "icon": "bb71f469c158984e265093a81b3397fb"
  },
  "source_channel": {
    "id": "5618852344134324",
    "name": "announcements"
  },
  "user": {
    "username": "test",
    "discriminator": "7479",
    "id": "190320984123768832",
    "avatar": "b004ec1740a63ca06ae2e14c5cee11f3",
    "public_flags": 131328
  }
}
JSON
{
  "type": 3,
  "id": "658822586720976555",
  "name": "Clyde",
  "avatar": "689161dc90ac261d00f1608694ac6bfd",
  "channel_id": null,
  "guild_id": null,
  "application_id": "658822586720976555"
}

/channels/{channel.id}/webhooks

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
Field Type Description
name string name of the webhook (1-80 characters)
avatar? ?image data image for the default webhook avatar

/channels/{channel.id}/webhooks

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

/guilds/{guild.id}/webhooks

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

/webhooks/{webhook.id}

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)

/webhooks/{webhook.id}/{webhook.token}

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

/webhooks/{webhook.id}

Modify a webhook. Requires the MANAGE_WEBHOOKS permission. Returns the updated webhook object on success. Fires a Webhooks Update Gateway event.

Field Type Description
name string the default name of the webhook
avatar ?image data image for the default webhook avatar
channel_id snowflake the new channel id this webhook should be moved to

/webhooks/{webhook.id}/{webhook.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.

/webhooks/{webhook.id}

Delete a webhook permanently. Requires the MANAGE_WEBHOOKS permission. Returns a 204 No Content response on success. Fires a Webhooks Update Gateway event.

/webhooks/{webhook.id}/{webhook.token}

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

/webhooks/{webhook.id}/{webhook.token}

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.

Field Type Description Required
wait boolean waits for server confirmation of message send before response, and returns the created message body (defaults to false; when false a message that is not saved does not return an error) false
thread_id snowflake Send a message to the specified thread within a webhook's channel. The thread will automatically be unarchived. false
with_components boolean whether to respect the components field of the request. When enabled, allows application-owned webhooks to use all components and non-owned webhooks to use non-interactive components. (defaults to false) false
Field Type Description Required
content string the message contents (up to 2000 characters) one of content, file, embeds, poll
username string override the default username of the webhook false
avatar_url string override the default avatar of the webhook false
tts boolean true if this is a TTS message false
embeds array of up to 10 embed objects embedded rich content one of content, file, embeds, poll
allowed_mentions allowed mention object allowed mentions for the message false
components * array of message component the components to include with the message false
files[n] ** file contents the contents of the file being sent one of content, file, embeds, poll
payload_json ** string JSON encoded body of non-file params multipart/form-data only
attachments ** array of partial attachment request objects metadata for the attachments false
flags *** integer message flags combined as a bitfield (only SUPPRESS_EMBEDS, SUPPRESS_NOTIFICATIONS and IS_COMPONENTS_V2 can be set) false
thread_name string name of thread to create (requires the webhook channel to be a forum or media channel) false
applied_tags array of snowflakes array of tag ids to apply to the thread (requires the webhook channel to be a forum or media channel) false
poll poll request object A poll! one of content, file, embeds, poll

* 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.

/webhooks/{webhook.id}/{webhook.token}/slack

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

Field Type Description Required
thread_id snowflake id of the thread to send the message in false
wait boolean waits for server confirmation of message send before response (defaults to true; when false a message that is not saved does not return an error) false

/webhooks/{webhook.id}/{webhook.token}/github

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.

Field Type Description Required
thread_id snowflake id of the thread to send the message in false
wait boolean waits for server confirmation of message send before response (defaults to true; when false a message that is not saved does not return an error) false

/webhooks/{webhook.id}/{webhook.token}/messages/{message.id}

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

Field Type Description Required
thread_id snowflake id of the thread the message is in false

/webhooks/{webhook.id}/{webhook.token}/messages/{message.id}

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.

Field Type Description Required
thread_id snowflake id of the thread the message is in false
with_components boolean whether to respect the components field of the request. When enabled, allows application-owned webhooks to use all components and non-owned webhooks to use non-interactive components. (defaults to false) false
Field Type Description
content string the message contents (up to 2000 characters)
embeds array of up to 10 embed objects embedded rich content
flags * integer message flags combined as a bitfield (SUPPRESS_EMBEDS and IS_COMPONENTS_V2 only)
allowed_mentions allowed mention object allowed mentions for the message
components ** array of message component the components to include with the message
files[n] *** file contents the contents of the file being sent/edited
payload_json *** string JSON encoded body of non-file params (multipart/form-data only)
attachments *** array of partial attachment request objects attached files to keep and their metadata
poll **** poll request object A poll!

* 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.

/webhooks/{webhook.id}/{webhook.token}/messages/{message.id}

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

Field Type Description Required
thread_id snowflake id of the thread the message is in false
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu