# PostEverywhere Discord API Guide > Discord post API: publish and schedule messages to server channels via webhook. Text, image embeds, and media in one REST call. **Source:** https://posteverywhere.ai/docs/platforms/discord **Section:** Platforms **API reference:** https://posteverywhere.ai/docs/api/reference --- 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](/docs). ## 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//`. 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** | Video URL | Video URL appended to the message: Discord renders it 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. ```json { "platform_content": { "discord": { "content": "Discord-specific message (up to 2,000 chars)" } } } ``` ## Publish to Discord: a working request ### Schedule a Discord Text Post ```bash 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 ```bash 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" ] }' ``` ## Discord limits: characters, media and video | Requirement | Limit | |-------------|-------| | Message length | 2,000 characters | | 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 | Sent as URL: Discord renders the link inline | | 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). - **Video is appended as a link, not uploaded.** Discord webhooks don't accept direct video uploads: instead, we append the video URL to the message body and Discord renders the embed automatically. This works well for MP4s served from a CDN. ## 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///messages/`, 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](/docs/platforms/telegram)**: bot-token connection model, similar low-friction setup - **[Bluesky](/docs/platforms/bluesky)**: app-password model, also no OAuth - **[Threads](/docs/platforms/threads)**: Meta's short-form text platform ## Related Discord and API reference pages - [API Reference -- Create Post](/docs/api/create-post) - [Upload Media](/docs/api/init-media-upload) - [Quick Start Guide](/docs/quick-start) **Related:** [Discord media requirements](/docs/media-requirements) · [connecting a Discord webhook](/docs/connecting-accounts) · [testing posts safely](/docs/testing) · [posting to Discord with an API](/blog/post-to-discord-api) · [one API for every social network](/social-media-api)