Pipory
Node reference

Discord

Discord node reference - all 92 operations, the credential it needs, and a worked example.

Calls the Discord REST API across 92 operations. Messaging works either through an incoming webhook URL (zero setup, one channel, no credential) or a bot token, which additionally unlocks: reading messages and reactions, pins and polls, channel and thread management, members, roles, bans, invites, emoji, scheduled events, and webhook management. No trigger node - Discord delivers content events only over a persistent Gateway WebSocket, not an HTTP callback.

Credential: Discord (Bot) - see Credentials.

Permissions

Each operation below lists the permission it needs. Permissions are granted to the bot per-server and per-channel when it is invited (these are Discord permissions, not OAuth scopes). If a run fails with a permission error, the node names the missing permission in the error - grant it and re-run; you do not need to rebuild the workflow.

Operations (92)

Messages (incoming webhook)

OperationWhat it doesPermission
sendMessageSend message(none — posts via the pasted webhook URL)
editMessageEdit message(none — the pasted webhook URL owns the message)
deleteMessageDelete message(none — the pasted webhook URL owns the message)
getWebhookMessageGet sent message(none — the pasted webhook URL owns the message)
createThreadCreate forum post(none — posts via the pasted webhook URL)
executeSlackWebhookSend Slack-format payload(none — posts via the pasted webhook URL)
executeGithubWebhookSend GitHub-format payload(none — posts via the pasted webhook URL)

Messages (bot)

OperationWhat it doesPermission
sendChannelMessageSend channel messageSEND_MESSAGES (SEND_MESSAGES_IN_THREADS in a thread)
sendDirectMessageSend direct message(none — a DM channel has no server permissions)
getMessageGet messageVIEW_CHANNEL + READ_MESSAGE_HISTORY
getMessagesGet channel messagesVIEW_CHANNEL + READ_MESSAGE_HISTORY
searchGuildMessagesSearch server messagesREAD_MESSAGE_HISTORY
editChannelMessageEdit channel message(none — the bot's own messages only; MANAGE_MESSAGES to edit flags)
deleteChannelMessageDelete channel messageMANAGE_MESSAGES (not needed for the bot's own message)
bulkDeleteMessagesBulk delete messagesMANAGE_MESSAGES
crosspostMessagePublish announcement messageSEND_MESSAGES (+ MANAGE_MESSAGES if not the bot's own message)

Reactions

OperationWhat it doesPermission
addReactionAdd reactionREAD_MESSAGE_HISTORY (+ ADD_REACTIONS for a new emoji)
removeOwnReactionRemove my reaction(none — any valid bot token)
removeUserReactionRemove a user's reactionMANAGE_MESSAGES
getReactionsGet reactions(none — any valid bot token)
removeEmojiReactionsRemove all reactions for emojiMANAGE_MESSAGES
removeAllReactionsRemove all reactionsMANAGE_MESSAGES

Pins & polls

OperationWhat it doesPermission
pinMessagePin messagePIN_MESSAGES
unpinMessageUnpin messagePIN_MESSAGES
getPinnedMessagesGet pinned messagesVIEW_CHANNEL + READ_MESSAGE_HISTORY
getPollAnswerVotersGet poll answer votersVIEW_CHANNEL
endPollEnd poll(none — the bot's own polls only)

Channels

OperationWhat it doesPermission
getChannelGet channelVIEW_CHANNEL
modifyChannelModify channelMANAGE_CHANNELS (MANAGE_ROLES to change overwrites)
deleteChannelDelete channelMANAGE_CHANNELS (MANAGE_THREADS for a thread)
triggerTypingTrigger typing indicator(none — any valid bot token)
followAnnouncementChannelFollow announcement channelMANAGE_WEBHOOKS (in the target channel)
editChannelPermissionsSet permission overwriteMANAGE_ROLES
deleteChannelPermissionDelete permission overwriteMANAGE_ROLES
getChannelInvitesGet channel invitesMANAGE_CHANNELS
createChannelInviteCreate channel inviteCREATE_INSTANT_INVITE

Threads

OperationWhat it doesPermission
startThreadStart threadCREATE_PUBLIC_THREADS (CREATE_PRIVATE_THREADS for a private thread)
startThreadFromMessageStart thread from messageCREATE_PUBLIC_THREADS
joinThreadJoin thread(none — any valid bot token)
leaveThreadLeave thread(none — any valid bot token)
addThreadMemberAdd thread memberSEND_MESSAGES
removeThreadMemberRemove thread memberMANAGE_THREADS
getThreadMemberGet thread member(none — any valid bot token)
listThreadMembersList thread members(none — needs the GUILD_MEMBERS privileged intent)
listPublicArchivedThreadsList public archived threadsREAD_MESSAGE_HISTORY
listPrivateArchivedThreadsList private archived threadsREAD_MESSAGE_HISTORY + MANAGE_THREADS
listJoinedPrivateArchivedThreadsList joined private archived threadsREAD_MESSAGE_HISTORY

Servers

OperationWhat it doesPermission
getGuildGet server(none — the bot must be a member of the server)
getGuildChannelsGet server channels(none — any valid bot token)
createGuildChannelCreate server channelMANAGE_CHANNELS
modifyChannelPositionsReorder server channelsMANAGE_CHANNELS
listActiveThreadsList active threads(none — any valid bot token)
getGuildInvitesGet server invitesMANAGE_GUILD
getGuildIntegrationsGet server integrationsMANAGE_GUILD
getPruneCountGet prune countKICK_MEMBERS

Members

OperationWhat it doesPermission
getGuildMemberGet member(none — the bot must be a member of the server)
listGuildMembersList members(none — needs the GUILD_MEMBERS privileged intent)
searchGuildMembersSearch members(none — any valid bot token)
modifyGuildMemberModify memberMANAGE_ROLES / MANAGE_NICKNAMES / MODERATE_MEMBERS (one per field changed)
modifyCurrentMemberChange my nicknameCHANGE_NICKNAME
addRoleAdd roleMANAGE_ROLES
removeRoleRemove roleMANAGE_ROLES
kickMemberKick memberKICK_MEMBERS

Bans

OperationWhat it doesPermission
banMemberBan memberBAN_MEMBERS
unbanMemberUnban memberBAN_MEMBERS
getGuildBanGet banBAN_MEMBERS
getGuildBansList bansBAN_MEMBERS
bulkBanMembersBulk ban membersBAN_MEMBERS + MANAGE_GUILD

Roles

OperationWhat it doesPermission
getGuildRolesGet roles(none — any valid bot token)
createRoleCreate roleMANAGE_ROLES
modifyRoleModify roleMANAGE_ROLES
deleteRoleDelete roleMANAGE_ROLES

Emoji

OperationWhat it doesPermission
listGuildEmojisList server emojis(none — any valid bot token)
getGuildEmojiGet server emoji(none — any valid bot token)
createGuildEmojiCreate server emojiCREATE_GUILD_EXPRESSIONS
modifyGuildEmojiModify server emojiMANAGE_GUILD_EXPRESSIONS
deleteGuildEmojiDelete server emojiMANAGE_GUILD_EXPRESSIONS

Scheduled events

OperationWhat it doesPermission
listScheduledEventsList scheduled events(none — the bot must be a member of the server)
createScheduledEventCreate scheduled eventCREATE_EVENTS
getScheduledEventGet scheduled eventVIEW_CHANNEL
modifyScheduledEventModify scheduled eventMANAGE_EVENTS
deleteScheduledEventDelete scheduled eventMANAGE_EVENTS
getScheduledEventUsersGet scheduled event subscribersVIEW_CHANNEL

Users

OperationWhat it doesPermission
getCurrentUserGet my bot user(none — any valid bot token)
getUserGet user(none — any valid bot token)
createDMOpen DM channel(none — any valid bot token)

Webhook management

OperationWhat it doesPermission
createWebhookCreate webhookMANAGE_WEBHOOKS
getChannelWebhooksGet channel webhooksMANAGE_WEBHOOKS
getGuildWebhooksGet server webhooksMANAGE_WEBHOOKS
getWebhookGet webhookMANAGE_WEBHOOKS
modifyWebhookModify webhookMANAGE_WEBHOOKS
deleteWebhookDelete webhookMANAGE_WEBHOOKS

Example

Post a build-failure alert into a team channel as the bot

A CI webhook trigger fires when a build fails. The node posts into the engineering channel with a coloured embed linking straight to the failing build, so the alert is readable at a glance instead of a wall of text. This is a bot-token operation, so it needs a Discord bot credential - not a pasted webhook URL.

Set Operation to sendChannelMessage, then fill in:

FieldValueNotes
channelId123456789012345678Enable Developer Mode in Discord, then right-click the channel -> Copy Channel ID
contentBuild failed on {{ci.branch}}Plain message text; Discord caps it at 2000 characters
embedTitleBuild #{{ci.buildNumber}} failedEmbed heading
embedDescription{{ci.errorSummary}}Embed body
embedUrl{{ci.buildUrl}}Makes the embed title a link to the build
embedColor#ED4245Hex colour for the embed's left border; converted to Discord's decimal int

Sets {{alert.messageId}} and {{alert.channelId}}, the whole message at {{alert.message}}, and the resolved text at {{alert.messageContent}}. A later Discord node can pin or edit it by passing {{alert.messageId}} as its messageId.