For apps posting to Slack, the developer docs recommend keeping the text field to 4,000 characters. Longer text may be split into several messages of about 4,000 characters each, and anything over 40,000 characters gets truncated. Block Kit has its own caps, such as 3000 characters for a section block and 150 for a header.
When your bot's report arrives cut in half
You've wired up a daily summary, an alert or a form digest to post into a channel, and one morning it arrives in pieces or stops mid-sentence. That's almost always a length problem. The numbers here come from Slack's developer documentation, so they apply to apps and integrations posting through the API, not to people typing in the app.
Every documented cap in one place
| Item | Limit | Applies to |
|---|---|---|
| text field (recommended) | 4,000 characters | chat.postMessage |
| Message truncation | Over 40,000 characters is cut off | chat.postMessage |
| markdown_text | 12,000 characters | chat.postMessage |
| Section block text | 3000 characters | Block Kit |
| Section block fields | 10 items, 2000 characters each | Block Kit |
| Header block text | 150 characters | Block Kit |
| block_id | 255 characters | Block Kit |
| Blocks per message | 50 (100 in modals and Home tabs) | Block Kit |
What happens as a message gets longer
There are three zones. Up to 4,000 characters in the text field, you're within Slack's recommendation and the message should arrive as one piece. Above that, the message may be split into multiple messages of up to about 4,000 characters each, which is why a long report can land as a string of posts. Past 40,000 characters, Slack truncates: everything beyond that point is cut off, and the response your app gets back includes a message_truncated warning.
If your app logs API responses, look for that warning. It's the clearest sign that a message lost its ending, and it's far easier to catch in a log than by someone noticing a half-finished report in a channel.
The markdown_text argument has its own ceiling of 12,000 characters, and Slack says not to use it together with blocks or text. Pick one way of sending the content and stick to it.
Blocks can fail long before plain text would
Slack Developer Docs explain that when you use blocks, the limit and truncation are set by the specific block type, not by the message as a whole. That's the trap. The headline 4,000 and 40,000 numbers apply to the text field, but a section block only takes 1 to 3000 characters of text, a header only 150, and you can't have more than 50 blocks in a single message.
So a long message built from blocks can fail where the same content as plain text would pass. If you're moving from plain text to a nicer block layout, check the longest piece of content against the block it's going into, not against the message limit.
Getting long content into a channel cleanly
Slack's own suggestion for longer content is to upload a snippet instead of posting it as a message. That keeps the channel tidy and the full text intact.
- Keep the posted message short: a headline, the two or three lines that matter, and a pointer to the snippet.
- Split long section text across several section blocks, each under 3000 characters, and stay under 50 blocks.
- Use the fields array for short label and value pairs, up to 10 items of up to 2000 characters each.
- Keep header text under 150 characters, so titles never trip the cap.
If the content isn't urgent, posting it at a quieter time can help too. My guide on scheduling a message in Slack shows how that works from the app.
How Discord compares
Discord documents message content of up to 2000 characters through its API, plus up to 10 rich embeds totalling up to 6000 characters. So it's a much tighter text limit than Slack's recommendation, with embeds doing the heavy lifting. If you're weighing a move, my roundup of team chat apps to consider covers more options.
Want AI doing the heavy lifting in your marketing?
I build the systems that handle the boring 80 percent, so you get your week back. Done properly, with the human kept in.
My take if you're building an app that posts
Design for 4,000 characters of text and treat anything longer as a snippet, not a message. If you use blocks, check each block's own cap and count your blocks. And log the response from every post, so a message_truncated warning tells you there's a problem before your team does.
Want your tool on this list? Featured spots and reviews here are paid partnerships. Here's how to partner with me.
Frequently asked questions
What is the Slack message character limit?
Slack's developer docs recommend 4,000 characters in the text field and truncate messages above 40,000.
What happens past 40,000 characters?
The message is truncated, and the response includes a message_truncated warning.
How do I send something longer?
Slack suggests uploading a snippet instead.
What are the Block Kit limits?
Section text up to 3000 characters, header text up to 150, and up to 50 blocks per message.
Is the limit different for people typing?
The numbers here are from Slack's developer docs for apps posting through the API, so they aren't a stated limit for people typing in the app.


