---
title: Discord
description: "Integrate with Discord: post messages and rich embeds via a webhook, or read channels and messages with a bot token."
---

Post messages and rich embeds to a Discord channel through a webhook, or read channels and messages and add reactions with a bot.

Pick a saved connection in the **Credential** field, or create one from there. It signs in with a Bearer Token.

## What it does

The Discord node has two ways in, depending on the **Resource**:

* **Webhook → Send** posts to the one channel a webhook belongs to. You can send plain **Message** text, a rich embed (title, link, description, thumbnail image), or both. **Username** changes the sender name for this message only.
* **Channel** and **Message** use a bot: get a channel's details, list a server's channels, read a channel's latest messages (50 by default, up to 100), get one message, or add a reaction.

The bot cannot send messages; use **Webhook → Send** for that.

## When to use it

* Report a page change, price drop or failed check to a team channel.
* Post a card with a title, link and screenshot thumbnail using the embed fields.
* Read a channel's recent messages and summarize them with an AI node.
* Mark a message as handled by reacting with ✅.

## Inputs and settings

Call the Discord API yourself with the HTTP Request node, and pick the same connection in its **Credential** field.

* Leave **Message** empty if you fill the embed fields; at least one of them must have content.
* **Embed Thumbnail URL** must be a public image link. **Embed Description** accepts Discord Markdown, for example `**Price:** {{ $input.price }}`.
* **Emoji** is a plain emoji such as `👍`, or a server emoji written as `name:id`, for example `done:123456789012345678`.
* Channel, message and server ids are long numbers. In Discord, turn on **Developer Mode** (User settings → Advanced), then right-click a channel, message or server and choose **Copy ID**.

## Outputs

* **Webhook → Send** returns the posted message, including its `id`.
* **Channel → List** and **Get messages** return a list, one entry per channel or message, newest message first. Each message has `content`, `author` and `timestamp`.
* **Message → React** returns an empty object when the reaction is added.

## Dependencies and credentials

* **Credential** (connection, Bearer Token): required. See [Connect Discord](/app/connections/discord/).

The secret you store depends on the resource. Create one credential for each, and pick the right one on the node.

* **Webhook**: store the full webhook URL. In Discord, open the channel's **Edit Channel → Integrations → Webhooks**, create a webhook and copy its URL. Anyone with this URL can post to the channel, so keep it secret.
* **Channel** and **Message**: store a bot token from the [Discord Developer Portal](https://discord.com/developers/applications) (your application → **Bot → Reset Token**). Invite the bot to your server, and turn on **Message Content Intent** on the Bot page if you need to read message text.

See [Create a credential](/app/connections/create/).

## Example workflow

1. A [Schedule](/nodes/builtin/trigger/schedule/) trigger runs every hour.
2. [Get HTML from Link](/nodes/builtin/core/gethtmlfromlink/) loads a product page, and [HTML Extract](/nodes/builtin/datatransformation/html-extract/) reads the price.
3. [IF](/nodes/builtin/flow/if/) continues only when the price is below `50`.
4. Discord, **Webhook → Send**, **Embed Title** `Price drop`, **Embed URL** the product link, **Embed Description** `Now {{ $input.price }}`.

## Common issues

* **"Discord API Error: Unknown Webhook".** The webhook URL is wrong or the webhook was deleted. Create a new one and update the credential.
* **"Discord API Error: rate limited".** Discord received too many requests. Run the workflow less often.
* **"Discord API Error: 401: Unauthorized" on Channel or Message.** The credential holds a webhook URL or an invalid token. Use a bot token credential.
* **"Discord API Error: Missing Access".** The bot is not in that server, or cannot see the channel. Invite it, or give its role access to the channel.
* **The run is blocked in the web app.** Discord runs through the browser extension. Install the extension and allow Discord for this workflow when asked, or run the workflow from the extension.

## Related nodes

* [Slack](/nodes/builtin/integration/slack/) and [Telegram](/nodes/builtin/integration/telegram/): other chat apps.
* [Screenshot Page](/nodes/extension/screenshotpage/): capture a page to share.
* [Push Notification](/nodes/builtin/integration/push-notification/): a message to your phone.