Discord error 20028: Channel write rate limit
Last verified against Discord Developer Docs - Opcodes and status codes
The write action you are performing on the channel has hit the write rate limitWhat error 20028 means
A channel-scoped write limit has been exceeded. Unlike the per-route buckets described in the rate limit docs, this limit is applied to a specific channel and is shared across everyone writing to it. Discord does not publish the exact threshold; it is a server-side protection that tends to trigger when a channel receives a burst of writes (messages, edits, reactions, thread operations) far above normal, or when a channel is under active abuse.
You will see it most often in shared-bucket situations: several bots or webhooks posting to the same log channel, a bot that mirrors a high-traffic source into one channel, or a reaction-role setup that adds many reactions to one message at once. The X-RateLimit-Scope: shared header is a hint that the limit is not specific to your bot.
What it looks like
{
"message": "The resource is being rate limited.",
"retry_after": 4.21,
"global": false,
"code": 20028
}Why it happens
- Burst of messages or reactions into a single channel from one or more bots
- Mirroring a high-volume feed into one Discord channel
- Adding many reactions to a message in a tight loop
- Multiple webhooks plus a bot all writing to the same channel
How to fix Discord error 20028
- 1Back off for retry_after seconds and spread subsequent writes over time
- 2Queue writes per channel in your bot and cap throughput (for example one write per second per channel)
- 3Split very high-volume logs across several channels or aggregate them into fewer, larger messages
- 4Look at the X-RateLimit-Scope header; if it says shared, reduce total traffic to the channel from all sources
How to stop it recurring
Design around per-channel throughput from the start: one outbound queue per channel, batching where the content allows it, and a hard ceiling on writes per minute. Avoid channels that are simultaneously written to by several independent systems.
Per-channel throughput problems compound quietly: the log channel that three services share works for months, then a traffic spike puts all three into backoff at once. Budget writes per channel the way you budget REST calls overall, per the bucket model in http 429 and the pacing guidance in chatbot API rate limiting.
Official reference: Discord Developer Docs - Opcodes and status codes. See all Discord error codes or the Discord limits and quotas.
Related codes
- 20029: Server write rate limitThe write action you are performing on the server has hit the write rate limit
- 20016: Slowmode rate limitThis action cannot be performed due to slowmode rate limit
- 429: HTTP 429 Too Many Requests (rate limited)You are being rate limited.
- 30010: Maximum number of reactions reached (20)Maximum number of reactions reached (20)
Error 20028 - quick answers
What does Discord error 20028 mean?
A channel-scoped write limit has been exceeded. Unlike the per-route buckets described in the rate limit docs, this limit is applied to a specific channel and is shared across everyone writing to it.
How do I fix Discord error 20028?
1. Back off for retry_after seconds and spread subsequent writes over time 2. Queue writes per channel in your bot and cap throughput (for example one write per second per channel) 3. Split very high-volume logs across several channels or aggregate them into fewer, larger messages 4. Look at the X-RateLimit-Scope header; if it says shared, reduce total traffic to the channel from all sources
Can I retry after error 20028?
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 Discord by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.