Discord

Post to Discord via API — Server Channels, Embeds, Webhooks

Schedule text, image embeds, and video unfurls to any Discord server channel via a webhook URL. No OAuth bureaucracy — create the webhook in your channel settings, paste the URL, post. Custom username and avatar per post.

Get Started FreeNo credit card required

Discord API controls

Webhook-native — text messages, image embeds, video unfurls, custom identity.

Text messagespost_type: text

Post plain text up to 2,000 characters to any server channel. Markdown formatting (bold, italics, code blocks, mentions) renders natively.

Image embedspost_type: image

Up to 10 images per message, each rendered as a rich embed Discord previews inline. Mix images with text content for context.

Video unfurlspost_type: video

Video URLs auto-unfurl inline — viewers can play the clip directly in the channel without leaving Discord.

Custom identity per postdiscord_username + discord_avatar_url

Override the webhook's default display name and avatar on every post — useful when one webhook serves multiple brands or bot personalities.

API Example

Discord image post with custom bot name

Post an image with a release announcement to a Discord channel. The webhook posts as "Release Bot" with a custom avatar — overriding the webhook's default identity for this single message.

discord-image.sh
# Post to Discord with custom username + embed
curl -X POST \
  https://api.codivupload.com/v1/posts \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
    "profile_name": "my-server",
    "platforms": ["discord"],
    "post_type": "image",
    "description": "v2.5 ships today. Highlights inside ⬇",
    "media_urls": ["https://cdn.example.com/release-banner.png"],
    "discord_username": "Release Bot",
    "discord_avatar_url": "https://cdn.example.com/bot-avatar.png"
  }'
Setup

Getting Started with Discord

Discord uses webhook URLs instead of OAuth. The setup is three steps and skips the platform-approval queue entirely.

Step 1 — Create the webhook. Open your Discord server, right-click the channel you want to post to, and pick Edit Channel → Integrations → Webhooks → New Webhook. Give it a name (this becomes the default sender name) and optionally upload an avatar.

Step 2 — Copy the URL. Click Copy Webhook URL. The URL looks like https://discord.com/api/webhooks/123.../abc.... Treat it like a password — anyone holding it can post to your channel.

Step 3 — Connect in CodivUpload. Open the Profiles page, click Connect Discord, and paste the URL. CodivUpload validates it by calling Discord's webhook info endpoint, stores it encrypted (AES-256-GCM), and you're ready to post.

To revoke access at any time, either delete the connection in CodivUpload (drops our encrypted copy) or click Regenerate Webhook URL inside Discord's channel settings — the old URL stops working immediately.

Content Tips

Discord Content Tips

Discord is a conversation surface, not a feed. Subscribers see every message chronologically and most channels have a small, engaged audience that's opted in specifically for your topic. That changes what works: high-context, low-frequency posts beat algorithm-friendly bursts.

Markdown is native. Bold key terms with **text**, format code with triple backticks, and use > quote for callouts. The 2,000-char limit is generous — use it for proper context, not just a teaser link.

Images render as embeds. When you attach images via media_urls, CodivUpload sends them as Discord embeds — each gets its own inline preview and viewers can click to expand. Up to 10 images per message, so a release recap, design review, or screenshot walkthrough all fit in one post.

Video URLs auto-unfurl. Drop an mp4 URL in media_urls and Discord shows a play button inline — viewers watch without leaving the channel. Hosted on R2/CDN by default; the file size cap is Discord-imposed (25 MB on most servers).

Use different bot identities for different post types. One webhook can post as "Release Bot" for changelogs, "Status Bot" for incident updates, and "Daily Digest" for summaries — set discord_username + discord_avatar_url per call. Keeps the channel parseable without spawning multiple webhooks.

@everyone needs explicit allow. By default CodivUpload sends with the same allowed_mentions Discord uses — typing @everyone in description won't ping unless the webhook is configured to allow it. Reserve those pings for genuine all-hands signals.

Start posting to Discord for free

2 profiles, 10 uploads/mo on the free plan. Upgrade for unlimited.

Get Started Free

Discord API questions