Discord error 20016: Slowmode rate limit
Last verified against Discord Developer Docs - Opcodes and status codes
This action cannot be performed due to slowmode rate limitWhat error 20016 means
The channel has slowmode enabled (rate_limit_per_user between 1 and 21,600 seconds) and the acting user has posted more recently than the slowmode interval allows. This is a per-user, per-channel cooldown set by server moderators, not a Discord API rate limit, even though it is delivered as HTTP 429.
Bots are exempt from slowmode when they hold Manage Channel or Manage Messages in that channel, which is why most bots never see this. If your bot is a plain member with only Send Messages, it is subject to slowmode like any user. You also see 20016 when acting on behalf of a user through OAuth2 (user tokens), where the bot's own permissions do not apply.
The retry_after in the body tells you how long the cooldown has left; it can be minutes, not milliseconds.
What it looks like
{
"message": "The resource is being rate limited.",
"retry_after": 11.42,
"global": false,
"code": 20016
}Why it happens
- Bot lacks Manage Channel and Manage Messages in a slowmode channel
- Bot sends several messages in quick succession to a slowmode channel (for example paginated output)
- Creating threads in a forum channel with slowmode applied to thread creation
- Acting with a user's OAuth2 token rather than the bot token
How to fix Discord error 20016
- 1Grant the bot Manage Messages (or Manage Channel) in the channel; it then bypasses slowmode
- 2Read retry_after from the 429 body and schedule the send for after that delay rather than retrying immediately
- 3Batch multi-part output into one message or one embed instead of several sends
- 4Check the channel's rate_limit_per_user via GET /channels/{id} and adjust behavior when it is non-zero
How to stop it recurring
Document Manage Messages as a required permission for channels where the bot posts frequently, and include it in your invite URL's permission bits. Respect the channel's slowmode setting when you cannot get that permission: cache rate_limit_per_user from CHANNEL_UPDATE and throttle locally.
Slowmode is a channel setting, so the durable fix is social as much as technical: agree with the server's moderators whether the bot should bypass it. The slowmode range and the exemption rule are on the Discord limits page, and the general 429-handling pattern in http 429 applies to the retry.
Official reference: Discord Developer Docs - Opcodes and status codes. See all Discord error codes or the Discord limits and quotas.
Related codes
- 20028: Channel write rate limitThe write action you are performing on the channel has hit the write rate limit
- 20029: Server write rate limitThe write action you are performing on the server has hit the write rate limit
- 429: HTTP 429 Too Many Requests (rate limited)You are being rate limited.
- 50013: Missing permissionsYou lack permissions to perform that action
Error 20016 - quick answers
What does Discord error 20016 mean?
The channel has slowmode enabled ( rate_limit_per_user between 1 and 21,600 seconds) and the acting user has posted more recently than the slowmode interval allows. This is a per-user, per-channel cooldown set by server moderators, not a Discord API rate limit, even though it is delivered as HTTP 429.
How do I fix Discord error 20016?
1. Grant the bot Manage Messages (or Manage Channel) in the channel; it then bypasses slowmode 2. Read retry_after from the 429 body and schedule the send for after that delay rather than retrying immediately 3. Batch multi-part output into one message or one embed instead of several sends 4. Check the channel's rate_limit_per_user via GET /channels/{id} and adjust behavior when it is non-zero
Can I retry after error 20016?
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.