Post to Slack via API — Channels, Blocks, Webhooks
Schedule text (up to 40,000 chars with mrkdwn), image blocks, and link unfurls to any Slack channel via Incoming Webhook URL. No OAuth — install the app, pick the channel, paste the URL. Custom username, emoji, or avatar per post.
Slack API controls
Webhook-native — long-form text, image blocks, video unfurls, per-post identity.
post_type: textUp to 40,000 characters — the longest content limit of any platform we support. Slack mrkdwn renders natively: *bold*, _italic_, `code`, and quoted blocks.
post_type: imageUp to 5 images per message, each posted as a Block Kit image block that previews inline. Mix images with text for context-rich posts.
post_type: videoVideo URLs auto-unfurl as Slack previews — viewers see a playable thumbnail inline without leaving the channel.
slack_icon_emoji + slack_usernameOverride the webhook's default display name and avatar — use a different identity per post type (release bot, status bot, daily digest) without spawning multiple webhooks.
Slack release announcement with image
Post a release announcement with an image block and a custom "Release Bot" identity. Slack mrkdwn renders the bold heading and inline code naturally.
# Post a release announcement to Slack
curl -X POST \
https://api.codivupload.com/v1/posts \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"profile_name": "my-team",
"platforms": ["slack"],
"post_type": "image",
"description": "*v2.5 ships today!* New webhook params, faster scheduler, fixes for `analytics_export`.",
"media_urls": ["https://cdn.example.com/release-banner.png"],
"slack_username": "Release Bot",
"slack_icon_emoji": ":rocket:"
}'Getting Started with Slack
Slack uses Incoming Webhook URLs instead of OAuth for this flow. The setup is three steps and skips the platform-approval queue entirely. You'll need workspace admin permission to install the app.
Step 1 — Create a Slack app. Open api.slack.com/apps and click Create New App → From scratch. Give it a name (e.g. "CodivUpload") and pick your workspace.
Step 2 — Enable Incoming Webhooks. In your app settings, select Incoming Webhooks from the sidebar and toggle Activate Incoming Webhooks to On. Scroll down and click Add New Webhook to Workspace, choose the destination channel, then click Allow.
Step 3 — Connect in CodivUpload. Copy the generated webhook URL — it looks like https://hooks.slack.com/services/T.../B.../.... Open the Profiles page in CodivUpload, click Connect Slack, paste the URL. We validate the URL format and store it encrypted (AES-256-GCM).
To revoke access at any time, either delete the connection in CodivUpload (drops our encrypted copy) or remove the Incoming Webhook from your Slack app config — the old URL stops working immediately.
Slack Content Tips
Slack is a team workspace, not a public feed. Subscribers are coworkers (or paying community members) who opted into your channel for specific signal. That changes the optimal cadence: low frequency, high signal, never broadcast for engagement's sake.
mrkdwn is the lingua franca. Use *bold* for headers, > quote for callouts, triple backticks for code blocks. Slack renders all of this inline — formatting beats length for scannability.
40,000 chars is for postmortems, not announcements. When you have an incident retrospective, weekly metrics report, or detailed release notes, dump it all in one Slack message and pin it. For one-line announcements, keep it under 280 chars so it doesn't look like wall of text.
Image blocks beat URL paste. When you attach images via media_urls, CodivUpload sends them as Block Kit image blocks — proper inline preview, clickable expand, alt text rendered. Pasting a URL hopes Slack auto-unfurls (it often doesn't for hot-linked CDNs).
Different bot identities for different content streams. One webhook can post as "Release Bot" :rocket: for changelogs, "Status Bot" :traffic_light: for incident updates, and "Daily Digest" :scroll: for summaries — set slack_username + slack_icon_emoji per call. The channel stays scannable without installing 3 webhooks.
@here and @channel are loud. Slack mentions in webhook messages do trigger notifications when the app has the right scopes. Reserve them for genuine all-hands signals — using them on every release tank your team's notification trust.
Related resources
Publish to Slack alongside Twitter/X, Instagram, LinkedIn, Discord, and more — one API request, every platform.
Full endpoint reference including Slack-specific parameters (slack_text, slack_media_urls, slack_username, slack_icon_emoji, slack_icon_url).
Start posting to Slack for free
2 profiles, 10 uploads/mo on the free plan. Upgrade for unlimited.