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.
Discord API controls
Webhook-native — text messages, image embeds, video unfurls, custom identity.
post_type: textPost plain text up to 2,000 characters to any server channel. Markdown formatting (bold, italics, code blocks, mentions) renders natively.
post_type: imageUp to 10 images per message, each rendered as a rich embed Discord previews inline. Mix images with text content for context.
post_type: videoVideo URLs auto-unfurl inline — viewers can play the clip directly in the channel without leaving Discord.
discord_username + discord_avatar_urlOverride the webhook's default display name and avatar on every post — useful when one webhook serves multiple brands or bot personalities.
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.
# 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"
}'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.
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.
Related resources
Start posting to Discord for free
2 profiles, 10 uploads/mo on the free plan. Upgrade for unlimited.