v2

latestOpenAPI 3.1.02026-08-075421692.0 MB
Discord

Send a Discord Direct Message

Send a 1:1 Direct Message from the bot to a Discord user (by snowflake ID). Supports the same payload shape as channel posts — content, embeds, media attachments, and TTS.

Constraints (Discord platform limits):

  • The bot can only DM users it shares at least one guild with.
  • If the recipient has DMs disabled for non-friends, Discord returns 403 (surfaces as a 502 platform error).
  • content capped at 2,000 chars.
  • At least one of content, embeds, or attachments is required.
  • The recipient must be identified by Discord snowflake ID (not username).

This is a dedicated endpoint rather than a POST /v1/posts variant because DMs are 1:1 operational messages (onboarding, billing reminders, support pings) with a different lifecycle than scheduled channel posts. DMs are not persisted to Post / ExternalPost and are always sent immediately.

post/v1/discord/dms

Request body

accountIdstring required

SocialAccount _id of the connected Discord account the bot speaks as. Caller must own the account (directly or via team membership).

userIdstring required

Discord snowflake ID of the recipient (15-21 digits).

contentstring

Message text, up to 2,000 characters.

embedsobject[]

Up to 10 Discord embeds. Same shape as channel-post embeds (title, description, color, fields, etc.). See DiscordPlatformData.embeds for the embed object schema.

ttsboolean

Send as text-to-speech message.

Example request

{
  "accountId": "65a1b2c3d4e5f60718293a4b",
  "userId": "1234567890123456789"
}

Response

DM sent successfully.

messageIdstring

Discord message snowflake ID

channelIdstring

DM channel snowflake (Discord auto-creates one per recipient pair)

urlstring

Direct link to the message — uses Discord's @me path for DMs

timestampstring date-time

Example response

{
  "recipient": {
    "platform": "discord"
  }
}