Discord API · error code

Discord error 20028: Channel write rate limit

RetryableHTTP 429Rate limits and slowmode

Last verified against Discord Developer Docs - Opcodes and status codes

What Discord returns
The write action you are performing on the channel has hit the write rate limit

What 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

  1. 1Back off for retry_after seconds and spread subsequent writes over time
  2. 2Queue writes per channel in your bot and cap throughput (for example one write per second per channel)
  3. 3Split very high-volume logs across several channels or aggregate them into fewer, larger messages
  4. 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

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.