The Slack API in 2026.A webhook per channel, or a bot token.
To post in a Slack channel from code, the simplest route is an incoming webhook: your app asks for the incoming-webhook scope, the person installing it picks a channel, and you POST JSON to the URL Slack gives back. For more, such as threads, edits or scheduling, use chat.postMessage with a bot token and chat:write. The API is free to call, about one message a second per channel.

Morning Light ships tomorrow. Honey, orange and cocoa notes, our lightest roast yet. The team gets the first bags at the roastery at 8.

The Slack API at a glanceWhat it takes before the first post.
- Price
- No fee to call the API. Free workspaces can install up to 10 apps
- Webhooks
- One URL per channel, picked by the person installing your app. The URL is the credential
- Bot posting
- chat.postMessage with chat:write; chat:write.public for public channels the bot isn't in
- Message
- text up to 4,000 characters for best results, truncated at 40,000. Up to 50 blocks, 3,000 characters per section
- Images
- Image blocks load a public URL; png, jpg, jpeg and gif only
- Rate limit
- About 1 message a second per channel, with short bursts; 429 with Retry-After
- Scheduling
- chat.scheduleMessage, up to 120 days ahead, 30 per 5 minutes per channel
- Distribution
- Any workspace can install an unlisted app, but Slack's terms send commercial apps to its Marketplace
Checked on October 7, 2026, from Slack's developer documentation and terms.
To post to Slack from your product, use Breakreach's API.We built it, so here's the case.
See the request- No Slack app to create, distribute or get listed: add Breakreach to Slack and pick the channel
- The same request posts the announcement to LinkedIn, X and your other networks
- Your users connect their own channels on a hosted page, through a connect link
When to use Slack's API directly. Breakreach posts through the channel's webhook only: no threads, no edits or deletions, no mentions and no reading the channel. For a bot that answers people, works in threads or reads messages, use Slack's API directly.
How to get access to the Slack APIFrom a developer account to your first real post.
- 1Create an appAt api.slack.com/apps, from scratch or from a manifest. Turn on Incoming Webhooks for the webhook route, or add chat:write under bot token scopes.
- 2Install it to a workspaceInstall to Workspace issues a bot token (xoxb-), and with incoming-webhook, Slack shows a channel picker during the install and returns the webhook URL.
- 3Let other workspaces install itSet up OAuth and click Activate Public Distribution for an Add to Slack button. That's an unlisted app: installers see that it hasn't been reviewed by Slack.
- 4Get listed if you sell itSlack's API terms ask apps that are commercially distributed, a free app tied to a paid product included, for a separate agreement, which for most apps means a Marketplace listing. Submitting needs 10 active workspace installs.
Workspaces can require an Owner's approval for every app, and some only allow Marketplace apps, so an install can turn into a request.
How to post with the Slack APIThe requests in the demo above, one by one.
- 1Post to the webhookPOST JSON with text, which is also the notification text, and optional blocks. Slack answers 200 with the plain text ok, and no message ts.
- 2Or call chat.postMessagePOST https://slack.com/api/chat.postMessage with Authorization: Bearer xoxb-…, the channel id, text and blocks. It returns ok, the channel and the message ts, which you need to reply in a thread, edit or delete.
- 3Upload files the new wayfiles.upload was sunset on November 12, 2025. Use files.getUploadURLExternal, send the bytes to the URL it returns, then files.completeUploadExternal with the channel.
Text is mrkdwn: *bold*, _italic_, ~strike~, <url|label> links, <@U…> mentions. Escape &, < and > in user text. A webhook can't change its channel, name or icon, and its messages can't be deleted through the API.
Common Slack API errorsWhat they mean and how to fix them.
| Error | What it means | Fix |
|---|---|---|
403 action_prohibited | An admin restricted what the app can do. | Ask a Workspace Owner to allow it. |
404 channel_not_found | The channel was deleted, or the webhook's channel is gone. | Reinstall the app and pick a channel. |
410 channel_is_archived | The channel is archived. | Unarchive it, or reinstall for another channel. |
no_service / no_team | The app or the webhook was removed from the workspace. | Install the app again. |
400 invalid_payload | The JSON, or a block in it, is malformed. | Validate the blocks in Block Kit Builder. |
429 | More than about one message a second to the channel. | Wait Retry-After seconds. |
Slack API limitsRate limits, text and media.
- Messagestext up to 4,000 characters for best results; Slack truncates past 40,000 and says so in response_metadata. Up to 50 blocks; a section's text up to 3,000 characters.
- ImagesAn image block needs a public URL and alt text, and takes png, jpg, jpeg or gif. WebP and video go through a file upload, or as a link.
- Rate limitsAbout one message a second per channel, by webhook or chat.postMessage, with short bursts, and several hundred a minute per workspace. Over that, 429 with Retry-After.
- ReadingSince May 29, 2025, conversations.history and conversations.replies allow 1 request a minute and 15 messages for commercial apps that aren't in the Marketplace.
Is the Slack API free?
Calling Slack's API has no fee, and Slack doesn't charge for a Marketplace listing. Free workspaces can install up to 10 apps and see 90 days of messages.
What it costs is approval: unlisted apps get a warning on install, slower reading APIs, and, if you sell them, Slack's terms point to the Marketplace review.
Through Breakreach, each connected channel counts as one account: $5 a month each up to 20, $3 up to 100, then $2.
Ways to post to Slack from code
| What you set up | Price | Posts to Slack | |
|---|---|---|---|
| Breakreach | An API key. Channels connect through Breakreach's Slack app, or your users connect theirs on a hosted page | $5 a month per account, less from 21 | Yes, By webhook |
| Slack's own API | A Slack app: webhook URLs per channel, or a bot token | Free | Yes |
| Upload-Post | An API key | Free for 2 profiles and 10 uploads a month; Basic $24 a month for 5 profiles | Yes, On paid plans, text only |
| Zernio | An API key | First 2 accounts free, then $6 per account up to 10, $3 up to 100, $1 after | Yes |
| Ayrshare | An API key | From $149 a month for 1 profile, no free plan | No |
| Outstand | An API key | $19 a month for 3,000 posts, then per post | No |
What the Slack API can't do
- Get a message id back from a webhook
- Edit or delete a webhook message
- Show WebP images or videos in image blocks
- Report views, except to Enterprise org admins through admin.analytics
- Train a language model on Slack data, under the API terms
Post to Slack with Breakreach's APIOne request, scheduled, with retries.
What it posts on Slack
- Text messagesIn the channel picked when Slack was connected, split into blocks of 3,000 characters at line breaks so long text shows whole.
- PhotosUp to 10 JPG, PNG or GIF photos as image blocks under the text.
- Video and WebPAdded to the text as links.
- SchedulingscheduledAt in your workspace's timezone, the next free slot, or publishNow. Breakreach holds the post; Slack's own scheduling isn't used.
Not yet
- Threads, edits and deletions
- Mentions and @channel
- Reading the channel
- Stats
The full reference, webhooks and the price per connected account are on the developers page, and the OpenAPI spec is at api.breakreach.com/v1/openapi.json.
Questions, answered.
Short answers about the Slack API.
Yes. Slack charges nothing per call and nothing to list an app in its Marketplace. The limits are rate limits, the 10-app cap on free workspaces, and Slack's terms for apps you sell.
To post announcements to one channel, a webhook: the person installing your app picks the channel and you POST to the URL. To reply in threads, edit, delete, schedule or post in many channels, chat.postMessage with a bot token.
POST JSON with a text field, and optional blocks, to the webhook URL. Slack answers ok. Messages can use mrkdwn: *bold*, _italic_ and <url|label> links.
Yes, with chat.scheduleMessage and a bot token: up to 120 days ahead, and no more than 30 messages within 5 minutes in one channel. Webhooks can't schedule.
Put a public png, jpg or gif URL in an image block with alt text, or upload the file with files.getUploadURLExternal and files.completeUploadExternal. files.upload stopped working on November 12, 2025.
Not to work: public distribution gives any workspace an Add to Slack button. But Slack's API terms ask commercially distributed apps, free apps that connect to a paid product included, for a separate agreement, which for most apps is a Marketplace listing.
$5 a month per connected account up to 20, $3 up to 100, then $2. Each Slack channel is one account. You pay per connected account, never per post or per request.
Keep reading
Put your socials on autopilot.Live in two minutes.
Plans from $29 a month. Cancel anytime.