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.

Webhook Object

Used to represent a webhook.

Webhook Structure
FieldTypeDescription
idsnowflakethe id of the webhook
typeintegerthe type of the webhook
guild_id??snowflakethe guild id this webhook is for, if any
channel_id?snowflakethe channel id this webhook is for, if any
user?user objectthe user this webhook was created by (not returned when getting a webhook with its token)
name?stringthe default name of the webhook
avatar?stringthe default user avatar hash of the webhook
token?stringthe secure token of the webhook (returned for Incoming Webhooks)
application_id?snowflakethe bot/OAuth2 application that created this webhook
source_guild?partial guild objectthe guild of the channel that this webhook is following (returned for Channel Follower Webhooks)
source_channel?partial channel objectthe channel that this webhook is following (returned for Channel Follower Webhooks)
url?stringthe url used for executing the webhook (returned by the webhooks OAuth2 flow)
Webhook Types
ValueNameDescription
1IncomingIncoming Webhooks can post messages to channels with a generated token
2Channel FollowerChannel Follower Webhooks are internal webhooks used with Channel Following to post new messages into channels
3ApplicationApplication webhooks are webhooks used with Interactions
Example Incoming Webhook
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
}
}
Example Channel Follower Webhook
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
}
}
Example Application Webhook
json
{
"type": 3,
"id": "658822586720976555",
"name": "Clyde",
"avatar": "689161dc90ac261d00f1608694ac6bfd",
"channel_id": null,
"guild_id": null,
"application_id": "658822586720976555"
}

Endpoints

Create Webhook

POST/channels/{channel.id}/webhooks

Create a new webhook. Requires the MANAGE_WEBHOOKS permission. Returns a webhook object on success. Webhook names follow our naming restrictions that can be found in our Usernames and Nicknames documentation, with the following additional stipulations:

  • Webhook names cannot be: 'clyde'
JSON Params
FieldTypeDescription
namestringname of the webhook (1-80 characters)
avatar??image dataimage for the default webhook avatar

Get Channel Webhooks

GET/channels/{channel.id}/webhooks

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

Get Guild Webhooks

GET/guilds/{guild.id}/webhooks

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

Get Webhook

GET/webhooks/{webhook.id}

Returns the new webhook object for the given id.

Get Webhook with Token

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

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

Modify Webhook

PATCH/webhooks/{webhook.id}

Modify a webhook. Requires the MANAGE_WEBHOOKS permission. Returns the updated webhook object on success.

JSON Params
FieldTypeDescription
namestringthe default name of the webhook
avatar?image dataimage for the default webhook avatar
channel_idsnowflakethe new channel id this webhook should be moved to

Modify Webhook with Token

PATCH/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.

Delete Webhook

DELETE/webhooks/{webhook.id}

Delete a webhook permanently. Requires the MANAGE_WEBHOOKS permission. Returns a 204 NO CONTENT response on success.

Delete Webhook with Token

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

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

Execute Webhook

POST/webhooks/{webhook.id}/{webhook.token}
Query String Params
FieldTypeDescriptionRequired
waitbooleanwaits 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_idsnowflakeSend a message to the specified thread within a webhook's channel. The thread will automatically be unarchived.false
JSON/Form Params
FieldTypeDescriptionRequired
contentstringthe message contents (up to 2000 characters)one of content, file, embeds
usernamestringoverride the default username of the webhookfalse
avatar_urlstringoverride the default avatar of the webhookfalse
ttsbooleantrue if this is a TTS messagefalse
filefile contentsthe contents of the file being sentone of content, file, embeds
embedsarray of up to 10 embed objectsembedded rich contentone of content, file, embeds
payload_jsonstringJSON encoded body of non-file paramsmultipart/form-data only
allowed_mentionsallowed mention objectallowed mentions for the messagefalse
components*array of message componentthe components to include with the messagefalse

* Requires an application-owned webhook

Execute Slack-Compatible Webhook

POST/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.

Query String Params
FieldTypeDescriptionRequired
waitbooleanwaits 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

Execute GitHub-Compatible Webhook

POST/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.

Query String Params
FieldTypeDescriptionRequired
waitbooleanwaits 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

Get Webhook Message

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

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

Edit Webhook Message

PATCH/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 mentions array in the message object will be reconstructed from scratch based on the new content. 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.

JSON/Form Params
FieldTypeDescription
contentstringthe message contents (up to 2000 characters)
embedsarray of up to 10 embed objectsembedded rich content
filefile contentsthe contents of the file being sent/edited
payload_jsonstringJSON encoded body of non-file params (multipart/form-data only)
allowed_mentionsallowed mention objectallowed mentions for the message
attachmentsarray of attachment objectsattached files to keep
components*array of message componentthe components to include with the message

* Requires an application-owned webhook

Delete Webhook Message

DELETE/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.