
If you run a Discord bot, you will eventually hit rate limits. Discord throttles API requests to prevent abuse, and understanding how these limits work is essential for keeping your bot online and responsive.
What rate limits are
Discord limits how many API requests your bot can make in a given time window. When you exceed the limit, Discord returns HTTP 429 (Too Many Requests) with a retry_after field telling you how many seconds to wait before sending the next request.
Rate limits apply per route, per bot. Sending messages to channel A has a separate limit from sending messages to channel B. But some limits are global, meaning they apply across all routes.
Common rate limits
- Sending messages: 5 per 5 seconds per channel.
- Editing messages: 5 per 5 seconds per channel.
- Adding reactions: 1 per 0.25 seconds per channel.
- Bulk delete: 1 per 1 second.
- Modifying guild members: varies, typically 10 per 10 seconds.
- Global limit: 50 requests per second across all routes.
These numbers can change without notice. Always read the X-RateLimit-* headers in API responses to know your current budget.
How to handle rate limits in code
Most Discord libraries (discord.js, discord.py, Pycord) handle rate limits automatically. They read the response headers and queue requests when a limit is near. You should not need to write custom rate limit logic in most cases.
If you are making raw HTTP requests, check the X-RateLimit-Remaining header after each call. When it reaches 0, wait until X-RateLimit-Reset before sending more requests.
Never retry immediately after a 429. Always respect the retry_after value, or Discord will extend your cooldown and eventually ban your bot's token.
Webhook rate limits
Webhooks have their own limits: 5 messages per 2 seconds per webhook. If you use webhooks for logging or alerts, space your sends or batch messages. The discord-webhook-rate-limits-official-2026 blog covers webhook-specific patterns.
Common mistakes
- Sending reactions in a loop without delays. Each reaction has a 250ms minimum interval.
- Mass-DMing users. DM rate limits are very strict and trigger anti-spam measures.
- Not using the built-in rate limit handler in your library and writing custom HTTP retry logic that ignores
retry_after.
The short answer
Discord rate limits are per route, per bot, with a global 50 req/s cap. Your library handles most of this automatically. Never ignore 429 responses, always respect retry_after, and space reactions and bulk operations.
Need a fast, low-latency server for your Discord bot? Space-Node runs bots on Ryzen hardware in the Netherlands with sub-10ms Discord API latency. See our Discord bot hosting plans.