Slack error rate_limited: Posting messages too quickly
Last verified against Slack API reference - chat.postMessage errors
Application has posted too many messages, read the Rate Limit documentation for more information.What error rate_limited means
The message-posting variant of throttling. chat.postMessage documents rate_limited (with the underscore) as "Application has posted too many messages, read the Rate Limit documentation for more information" — distinct from the generic ratelimited string that any method can return. Message posting has a special condition on top of the tier system: Slack's rate-limit documentation states it will "generally allow an app to post 1 message per second to a specific channel," with short bursts over that tolerated but sustained overruns throttled. Incoming webhooks carry the same 1-per-second guidance.
The per-channel scoping is the useful detail: an app can message many channels concurrently, but hammering one channel — an alert storm into #ops, a migration replaying history into a single room — trips this quickly. The remedy is per-channel pacing: a queue per destination that releases at 1 message per second, coalescing bursts into digests where the product allows.
Handle the response like any 429: honor Retry-After, then resume paced. If a feature fundamentally needs higher sustained throughput into one channel, no parameter unlocks it — redesign toward fewer, richer messages (Block Kit sections, threads, or files) instead of more messages.
What it looks like
HTTP/1.1 429 Too Many Requests
Retry-After: 30
{"ok": false, "error": "rate_limited"}Why it happens
- Sustained posting above ~1 message per second into a single channel.
- Alert storms or replay jobs fanning many events into one destination without coalescing.
- Parallel workers all posting to the same channel with no shared per-channel pacing.
- Webhook integrations exceeding the same 1-per-second guidance.
How to fix Slack error rate_limited
- 1Honor the Retry-After header before any retry.
- 2Add a per-channel send queue paced at 1 message per second; make it the only path to chat.postMessage.
- 3Coalesce bursts into digest messages or thread replies instead of individual posts.
- 4Spread genuinely bulk sends across time and across channels where the product allows.
How to stop it recurring
Assume every destination channel tolerates one message per second and design notification volume accordingly — summarize, thread, and batch. Alerting products should include storm suppression (N alerts in a minute become one digest) as a feature, not an afterthought. The posting rule sits alongside the tier table in Slack rate limits.
Official reference: Slack API reference - chat.postMessage errors. See all Slack error codes or the Slack limits and quotas.
Related codes
- ratelimited: Request was rate limited (HTTP 429)The request has been ratelimited. Refer to the Retry-After header for when to…
- message_limit_exceeded: Workspace message usage limit reachedMembers on this team are sending too many messages. For more details, see…
- app_rate_limited: Events API deliveries rate limited"type": "app_rate_limited"
- msg_too_long: Message text is too longMessage text is too long.
Error rate_limited - quick answers
What does Slack error rate_limited mean?
The message-posting variant of throttling. chat.postMessage documents rate_limited (with the underscore) as "Application has posted too many messages, read the Rate Limit documentation for more information" — distinct from the generic ratelimited string that any method can return.
How do I fix Slack error rate_limited?
1. Honor the Retry-After header before any retry. 2. Add a per-channel send queue paced at 1 message per second; make it the only path to chat.postMessage. 3. Coalesce bursts into digest messages or thread replies instead of individual posts. 4. Spread genuinely bulk sends across time and across channels where the product allows.
Can I retry after error rate_limited?
Yes - this is a retryable condition. Back off (start around one second and double on each attempt, with jitter) and watch for a retry-after hint from the platform before resending.
Stop debugging Slack by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.