Works with all AI agents

Connect your AI agent

Choose your AI agent and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

PostEverywhere Discord API Guide

PostEverywhere API reference for Discord: channel webhook setup, request fields and examples for text, image embeds and media.

Publish text and media to a Discord server channel via an Incoming Webhook. PostEverywhere posts to the webhook URL you provide at setup: there is no OAuth, no bot, and no app review process. For a general overview of all supported platforms, see the Introduction.

Connect your Discord account to PostEverywhere

Discord uses an Incoming Webhook URL. A webhook is bound to one specific channel: if you want to post to multiple channels, create multiple webhooks and connect each separately.

  1. In Discord, open your server. Go to Server Settings → Integrations → Webhooks.
  2. Click New Webhook, give it a name, and select the target channel.
  3. Click Copy Webhook URL. The URL looks like https://discord.com/api/webhooks/<id>/<token>.
  4. In your PostEverywhere dashboard, go to Accounts → Connect Discord and paste the webhook URL.

We validate the URL by fetching the webhook metadata before saving. If Discord rejects the URL (404 / deleted webhook), reconnect after recreating it.

What you can post to Discord

Content Type Media Required Description
Text post None Plain message, up to 2,000 characters.
Image post Image(s) Up to 10 images, each rendered as an embed.
Video post One video Videos up to 20 MB are uploaded as a file; larger videos are posted as a permanent link that Discord renders inline.

Discord webhooks render attached images as embeds, not native attachments. This means images appear as preview cards rather than uploaded files; the visual result is similar but the underlying mechanism is different from native bot uploads.

Discord-specific options in the API

Discord accepts a per-platform content override plus four optional webhook settings under platform_content.discord.settings: username (display name for this message, max 80 characters), avatarUrl (avatar for this message), suppressMentions (do not ping @everyone, @here or roles) and silent (deliver without a notification). Leave them out to use the name and avatar configured on the webhook in Discord. Discord does not allow "discord" or "clyde" in a webhook name: a username containing either is not used, the message posts with the webhook's own name, and the post carries a discord_username_not_used warning.

{
  "platform_content": {
    "discord": {
      "content": "Discord-specific message (up to 2,000 chars)"
    }
  }
}

Publish to Discord: a working request

Schedule a Discord Text Post

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Release v2.4.0 is live! Patch notes: https://example.com/changelog",
    "account_ids": [3105],
    "scheduled_for": "2026-06-15T17:00:00Z",
    "timezone": "America/Los_Angeles"
  }'

Schedule a Discord Post with Multiple Image Embeds

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Concept art drop for the new map",
    "account_ids": [3105],
    "media_ids": [
      "11111111-1111-1111-1111-111111111111",
      "22222222-2222-2222-2222-222222222222",
      "33333333-3333-3333-3333-333333333333"
    ]
  }'

Send Follow-up Messages

thread_posts works on Discord too. content (with any media) goes out first, then each string in thread_posts is posted to the same webhook as its own text message, in order, with the same username, avatarUrl, suppressMentions and silent settings. You can add up to 25 parts, each up to 2,000 characters; a part that is too long is rejected with 400 invalid_thread_posts before anything is sent. Media goes on the first message only. If a follow-up message fails, the main post still counts as published and carries a discord_followup_not_posted warning.

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Release v2.4.0 is live! Highlights below.",
    "account_ids": [3105],
    "thread_posts": [
      "New: ranked playlists for every map.",
      "Fixed: voice chat drops on reconnect.",
      "Full patch notes: https://example.com/changelog"
    ]
  }'

Discord limits: characters, media and video

Requirement Limit
Message length 2,000 characters (longer is refused with 400 content_too_long). When a video is posted as a link, the link is kept and the text is cut to make room, with a discord_text_cut warning on the post.
Image embeds per message Up to 10
Image formats JPEG, PNG, WebP, GIF
Image max file size 20 MB (PostEverywhere upload limit; images are embedded by URL, not uploaded to Discord)
Video One per post; up to 20 MB uploaded as a file, larger videos posted as a permanent link
Follow-up messages Up to 25 in thread_posts, text only
Channel binding One webhook = one channel
Webhook URL must be valid Must be a current Discord webhook (not deleted/revoked)

Webhook deletion = silent failures

If the webhook is deleted on Discord, every subsequent publish fails with 404. Recreate the webhook in Discord and reconnect the account in PostEverywhere.

Getting better results on Discord

  • Webhook = one channel. To post to multiple channels in the same server, create one webhook per channel and connect each as a separate "account" in PostEverywhere. Use account_ids to fan out.
  • Images are embeds, not attachments. Up to 10 image URLs are passed as embed objects. Discord fetches each URL, so if your media is behind a private store, ensure the URL is publicly accessible (PostEverywhere's media URLs are).
  • Small videos upload, large videos link. A video up to 20 MB is uploaded to Discord as a file. Anything larger is posted as a permanent link in the message body, and Discord renders the embed automatically.

Common questions about posting to Discord

How do I connect a Discord server?

Open the server in Discord, go to Server Settings → Integrations → Webhooks, create a new webhook for the channel you want to post to, copy the webhook URL, then paste it under Accounts → Connect Discord in your PostEverywhere dashboard.

Why did my Discord webhook stop working?

The most common cause is that someone deleted the webhook on Discord, or the channel itself was deleted. Recreate the webhook in Discord and reconnect the account in PostEverywhere: the URL changes whenever a webhook is recreated.

Can I post to a Discord channel that requires a role?

A webhook posts as the webhook itself, bypassing role checks for posting permission. However, if the channel is read-restricted by role, members without that role won't see the post. The webhook itself can post regardless of channel permissions, as long as the webhook still exists.

Can I edit a Discord post after it's published?

No. Discord webhooks support PATCH /webhooks/<id>/<token>/messages/<id>, but PATCH /v1/posts/:id only accepts scheduled or draft posts on our API. Once published, edits return 400 invalid_post_status: edit the message manually in Discord if needed.

Other platforms you can publish to

  • Telegram: bot-token connection model, similar low-friction setup
  • Bluesky: app-password model, also no OAuth
  • Threads: Meta's short-form text platform

Related: Discord media requirements · connecting a Discord webhook · testing posts safely · posting to Discord with an API · one API for every social network