Discord API

Discord API for posting and scheduling without the bot permission rabbit hole

A Discord API for server announcements, with bot permissions and slowmode handled per channel so you do not run a separate announcement queue.

Built for SaaS products, developer tools, and the communities and launch channels they serve. Add Discord publishing with one API for scheduling, media, status, and reporting workflows.

Last updated: July 2026

One API key. No per-account fees. 15 platforms.

API key authScheduled publishing15 platforms
Quick start
API request
1await fetch("https://api.bundle.social/api/v1/post", {2  method: "POST",3  headers: {4    "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY,5    "Content-Type": "application/json"6  },7  body: JSON.stringify({8    teamId: "team_123",9    title: "Launch announcement",10    postDate: "2026-05-14T10:00:00.000Z",11    status: "SCHEDULED",12    socialAccountTypes: ["DISCORD"],13    data: {14      DISCORD: {15        channelId: "channel_announcements_123",16        content: "We just shipped a new feature. Check it out at bundle.social"17      }18    }19  })20});
Official APIs500k+ connected accountsDirect engineer support

Building directly on Discord API

Discord bot setup, channel permissions, and server targeting add setup overhead before the first message lands.
Scheduling Discord announcements around public launches means juggling two different tools.
Teams want community announcements timed with the campaign, not sent manually afterward.

What bundle.social handles

Schedule Discord channel posts from the same API used for public social announcements.
Target specific channels and control message content without maintaining a separate bot.
Keep community announcements in the same publishing calendar as the rest of the campaign.

Discord announcements without maintaining a separate bot queue

Community launches need channel targeting, server permissions, message timing, and delivery status. bundle.social keeps Discord announcements coordinated with the rest of the campaign.

Workflow

How it works

Connect accounts once, then create and schedule posts with channel-specific fields from one API.

01

Create an API key

Generate an organization API key in the dashboard and use it with the x-api-key header.

02

Connect accounts

Connect each social account once. bundle.social keeps the account mapping ready for future posts.

03

We post through the bot with channel checks

Discord delivery depends on channel permissions, slowmode, and whether a webhook still exists. You send one request; bundle.social posts through the connected bot, queues around slowmode, and reports permission problems distinctly from validation errors.

Product architecture

Build social media workflows without rebuilding every platform

Discord API for community announcements and launch timing

Developer communities, SaaS products, and their community managers reach for a Discord API when announcements have to coincide with a public release: server announcements, channel posts, community updates, and webhook-backed workflows. Discord is community infrastructure rather than a broadcast feed, so channel selection, permissions, and timing matter more than automation volume.

bundle.social publishes to Discord through a connected bot and schedules those announcements in the same calendar as public channels. Your product can target a channel, schedule the message with the rest of the campaign, and track delivery status without building bot lifecycle handling of its own.

Permission state is the thing that breaks

A Discord integration that worked yesterday and fails today has almost always lost a permission rather than a token. Server admins reorganize channels, tighten roles, move a channel into a category with different overrides, or remove the bot during a cleanup. None of that notifies your integration, and all of it produces a failure on the next send.

This is why Discord errors need to be classified by cause rather than retried. A missing channel permission is not retryable and needs a server admin to act. A slowmode rejection is retryable after a delay. A deleted webhook needs to be recreated before anything else will work. Treating all three as "try again later" produces an integration that fails silently for days.

Webhooks are convenient and fragile

Posting through a webhook avoids bot permission management, which is why it is a common shortcut. The trade-off is lifecycle: a webhook can be deleted by any admin with channel access, and once deleted it cannot be resurrected: the URL is dead and a new webhook must be created and re-stored. Integrations that cache webhook URLs indefinitely break permanently the first time someone tidies up a channel's integrations tab.

The bot path costs more to set up and survives channel maintenance, which is why bundle.social publishes through a connected bot and reports webhook problems as a distinct failure class rather than a generic send error.

What Discord is for in a scheduling product

Discord is a community channel, not a broadcast one: release announcements, launch coordination, creator updates, changelog posts. The 2,000-character cap and the absence of engagement metrics comparable to public networks mean it rarely belongs in the same report as Instagram or TikTok. It belongs in the same calendar, so a launch reaches the community at the same moment it reaches the public channels.

Capabilities

Discord API workflows for community launch channels

Server-aware channel posts, announcement copy, hosted account connection, scheduling, and delivery status for community updates.

Channel-specific announcement payloads

Send scheduled Discord messages with server-aware channel IDs, content fields, and announcement context where supported.

API key authentication

Use one bundle.social API key for server-to-server requests while users connect Discord servers through the hosted OAuth flow.

Server permission visibility

Keep Discord channel and server permission constraints visible instead of treating announcements like generic social captions.

Delivery status tracking

Track scheduled, processing, posted, retrying, and error states without building a separate Discord message queue.

Platform specifics

Discord API constraints worth knowing before you build

Discord posting is a permission problem more than an API problem: the request shape is simple, the authorization surface is not.

It runs through a bot, not a user token

bundle.social requests identify, guilds, email, and the bot scope. Publishing happens as the bot, which means the bot must be present in the server and hold channel-level permission to send messages and attach files, a state a server admin controls and can revoke at any time.

2,000 characters per message

Discord caps message content at 2,000 characters, the tightest limit of any long-form channel we support. Username overrides are capped at 80 characters and link fields at 2,048.

Up to 10 attachments

A message accepts up to 10 uploads. Attachment size limits depend on the server's boost tier, so the same file can succeed in one server and be rejected in another.

Slowmode is a delay, not an error

A channel in slowmode rejects rapid posting even from a correctly permissioned bot. The right response is queueing, not retrying immediately or surfacing a failure. bundle.social queues around slowmode and rate limits instead of burning retries.

Developer example

Schedule a Discord post

Examples use bundle.social's public API shape: API key authentication, a post date, selected social account types, and platform-specific data.

TypeScript
API request
1await fetch("https://api.bundle.social/api/v1/post", {2  method: "POST",3  headers: {4    "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY,5    "Content-Type": "application/json"6  },7  body: JSON.stringify({8    teamId: "team_123",9    title: "Launch announcement",10    postDate: "2026-05-14T10:00:00.000Z",11    status: "SCHEDULED",12    socialAccountTypes: ["DISCORD"],13    data: {14      DISCORD: {15        channelId: "channel_announcements_123",16        content: "We just shipped a new feature. Check it out at bundle.social"17      }18    }19  })20});

Supported content

Server announcementsChannel postsCommunity updatesWebhook-backed workflows

Honest limitations

  • Discord bot permissions, server roles, and channel access still control what can be posted.
  • Discord analytics are very limited by nature.
  • Complex embeds or interactive message components require additional Discord-native tooling.

Guarantees

Developer-first infrastructure

Visible post status

Track scheduled, processing, posted, retrying, and error states per post.

Verbose errors

When native APIs fail, we return human-readable error messages and actionable recovery steps.

Flat pricing

No per-post counting. Predictable pricing for teams managing many users, workspaces, and connected accounts.

Same-day support

Direct access to the engineers building the API. We respond to technical issues the same day, sometimes the same hour.

FAQ

Questions developers ask before building

Which Discord scopes and permissions are required?

bundle.social requests identify, guilds, email, and the bot scope. Publishing happens as the bot, so it must be present in the server and hold channel-level permission to send messages and attach files, a state a server admin controls and can revoke at any time.

How should slowmode be handled?

By queueing, not by retrying immediately or surfacing a failure. A channel in slowmode rejects rapid posting even from a correctly permissioned bot, so treating it as an error burns retries on something that only needs time.

What are the Discord message limits?

2,000 characters of content and up to 10 attachments, with username overrides capped at 80 characters and link fields at 2,048. Attachment size depends on the server's boost tier rather than on the API.

Does this replace Discord API?

No. bundle.social calls Discord API for you and absorbs the work around it: token storage and refresh, media handling, scheduling, status transitions, and turning platform errors into a cause and a next action.

Are Discord analytics available through the API?

Discord analytics are limited or unavailable through the native API, so post status and delivery state are the reliable signals to build on.