What FLOOD_WAIT and "Too Many Requests" mean on Telegram, why they happen, and how admins and bot developers can avoid them and handle them correctly.
FLOOD_WAIT is Telegram telling a client that it made too many requests of one kind too quickly, and that it must wait a stated number of seconds before trying again. Bots see the same idea as a "429 Too Many Requests" error with a retry time. The fix is never to retry harder: wait the time Telegram gives you, then slow down so it does not happen again.
This guide is for two readers. Channel and group admins who meet "please wait" or "too many attempts" messages in the app, and developers whose bots or scripts receive flood errors. It explains what the errors are, what triggers them, the limits Telegram does document, and how to design around them.
Telegram protects its servers and its users from spam by limiting how often an account or bot can perform each action. When a client goes over a limit, Telegram refuses the request and says how long to wait.
There is no single global limit. Each action has its own, and Telegram does not publish most of them. Limits can depend on:
Because most limits are not published, the right approach is not to find the exact number and run just below it. It is to handle the error gracefully and leave a margin.
Flood limits show up differently depending on how you use Telegram.
Normal users and admins never see the word FLOOD_WAIT. Instead the app shows a message such as "Too many attempts, please try again later", or a notice that you must wait some minutes before repeating an action. Sometimes it says nothing and the action simply fails. Our guide to Telegram's "too many attempts" message covers the login and code side of this in detail.
Bots built on the Bot API receive an HTTP error with code 429 and the description "Too Many Requests". The response includes a parameters object with a retry_after field: the number of seconds to wait before repeating the request. This is the official way to learn the wait time, and your code should read it rather than guessing.
Developers who use Telegram's own protocol, through a library, receive error code 420 with names like FLOOD_WAIT_X, where X is the number of seconds to wait. Related errors you may meet:
PEER_FLOOD looks similar but means something different. It usually signals that the account has been limited for behaviour that looks like spam, such as messaging many strangers. Waiting a few seconds does not fix it. A user account in this state can check its status with Telegram's official @SpamBot. Treat PEER_FLOOD as a warning to stop the activity, not as a timer.
Telegram's Bots FAQ gives rough guidance for bot sending rates. In its own words the figures are approximate, but they are the best official reference:
Treat these as ceilings, not targets. Running exactly at the limit leaves no room for retries, edits or replies.
Admins often meet flood limits while doing ordinary management at scale.
Adding many people to a group or channel from your contacts, quickly, is one of the fastest ways to meet a limit. Telegram treats it as a spam pattern because it is a common one. You will be told to wait, and repeated attempts may limit the account further. Invite links are the better tool: people join themselves, and there is no flood risk. See why you can't add members to a group and the invite links guide.
Joining dozens of chats in a row, for example from a folder or a list, can trigger a temporary limit on joining. The app may refuse more joins for a while.
Changing a username or a channel's public link several times in a row can lead to a wait. Telegram limits this partly to stop people squatting or cycling usernames.
Forwarding hundreds of posts, deleting large volumes of messages or editing many posts in quick succession can each meet limits. The app usually handles this by slowing down or showing a wait message.
Looking up many usernames rapidly, whether in the app or through a tool, has a tight limit. Tools that check lists of usernames are a common cause of long waits.
Teams that run large channels can avoid most limits by design rather than by luck.
Answer these before changing any code. They tell you which sections matter most.
If the answer to the first question is "all over the code", start with the send queue. Everything else is easier once sending is in one place.
The basic handling is the same in any language or framework.
Two rules make this robust:
Most popular bot frameworks include a helper for this. Check whether yours already has one before writing your own; built-in helpers are usually tested against real Telegram behaviour.
Handling the error is the safety net. Good design keeps you away from it.
Instead of sending messages directly from your business logic, put them in a queue. A single worker takes messages from the queue and sends them at a controlled pace. This gives you one place to enforce limits, retry and log.
A practical setup limits sending in two ways at once:
A common way to implement this is a token bucket: each chat and the bot as a whole have a bucket that refills at a steady rate, and each message spends one token. If the bucket is empty, the message waits. You do not need the name to use the idea; any limiter that spaces messages out works.
Many flood problems come from sending one message per item. Combine instead.
Edits count as requests. A progress bar that edits a message several times a second will hit limits fast. Update it every few seconds, or only when the percentage changes meaningfully.
When a user presses an inline button, answer the callback query once. Answering is required for the button to stop showing a loading state, but repeated answers or extra messages for every press add load.
For inline bots, the Bot API lets you tell Telegram how long it may cache results. Sensible caching cuts repeated requests for popular queries.
Sending is where most limits bite, but receiving can waste requests too. Bots get updates either by polling with getUpdates or through a webhook.
Two instances of the same bot, for example a forgotten test server and the live one, share the same limits but do not share a queue. Each thinks it is under the limit while together they exceed it. Make sure only one process sends for each bot token, or coordinate them through a shared queue.
Sending an announcement to every user of a bot is where most developers first meet 429 errors.
Example only, with made-up numbers. A bot has 12,000 subscribers to its announcements. The developer chooses to send at 20 messages per second, well under the documented bulk figure.
Ten minutes is fine for a newsletter. If the bot needed to reach everyone within seconds, that is the case paid broadcasts exist for, and the cost should be weighed first.
Keep a record of who has received the message so a crash half-way does not send it twice to the first half.
Rate limits are not the only reason to broadcast carefully. Users who receive too many messages block bots, and blocked bots lose reach. Send announcements people asked for, and consider sending them silently when they are not urgent.
Bots fail for many reasons, and mixing up the retry rules causes trouble.
For 429 and flood errors, follow Telegram's number. The server has told you exactly how long to wait. Waiting less fails again; waiting much more only delays your users. Use retry_after as given, perhaps with a second or two of margin.
For network errors and server errors, use exponential backoff. When a request times out or Telegram returns a temporary server error, you are not told how long to wait. The usual approach is to wait a short time, then double the wait after each failure, up to a sensible maximum such as a minute.
Add jitter to backoff. Jitter means adding a small random amount to each wait. If a hundred workers all fail at the same moment and all wait exactly two seconds, they all retry at the same moment and fail together again. Random spacing spreads them out.
Do not retry permanent errors at all. A 400 error for a malformed request, or a 403 because the user blocked the bot, will never succeed on retry. Log it and move on.
A worker that distinguishes these three cases recovers quickly from real hiccups and never wastes requests on hopeless ones.
Here is the logic of a sending worker described in plain steps. It translates to any language.
Steps 2 and 6 are what keep one busy chat from slowing everyone else, and step 9 is what stops a single broken message from clogging the queue.
Flood limits are hard to test against the real service, because you would have to hit them on purpose. Test your logic instead.
These five tests catch most of the bugs that cause bots to spam retries or lose messages in production.
Group moderation bots face a special case. When a spam raid hits a large group, the bot may need to delete hundreds of messages and ban many accounts within minutes. That is exactly the burst pattern that triggers flood limits.
How to stay effective:
For the admin side of raids, read how to stop spam bots in Telegram groups.
When one bot hits limits, a tempting fix is to create several bots and spread messages across them. For legitimate traffic this is rarely needed, and for bulk messaging it looks like an attempt to evade limits, which Telegram may treat as abuse. It also confuses users, who receive messages from bots they did not start.
Better options are to send fewer, richer messages, to spread a broadcast over a longer time, or to use paid broadcasts where speed really matters.
Some developers automate ordinary Telegram accounts through MTProto libraries, often called userbots. Flood limits on user accounts are stricter than on bots for many actions, because user accounts are where spam happens.
Many MTProto libraries automatically sleep through short flood waits and only raise an error for long ones. There is usually a setting for the threshold. Know what yours does: an automatic sleep can make a script look frozen, while an error you do not catch can crash it.
For most tasks, a bot is the safer tool. Bots have clearer limits and cannot cold-message people, which keeps them out of the spam patterns that get user accounts limited. If you have not built one before, start with how to create a bot with BotFather.
You cannot fix what you do not see. A small amount of logging pays off.
Record, for each flood error:
Then look for patterns:
Example only. A community bot posts each new item from a website feed into a group. When the website publishes many items at once, the bot gets 429 errors and some posts are lost.
The group now receives fewer, tidier messages, and nothing is dropped.
As long as the number in the error. It can be seconds or hours. Read it, wait it, and do not retry early.
Premium raises some limits for user accounts, such as for certain file transfers, but it does not remove anti-spam limits. Bots do not use Premium; for bulk sending they have paid broadcasts.
Check for edits, callback answers, a second instance using the same token, or several messages sent to one group in a short time. The per-chat and per-group limits are much lower than the bulk figure.
No. A flood wait is a temporary limit. Repeated spam-like behaviour, especially messaging strangers, is what leads to longer restrictions or bans.
No complete official list exists. Telegram documents rough bot sending guidance in its Bots FAQ and says clients must handle flood errors. Design for unknown limits by queuing and reading the wait time.
420 with FLOOD_WAIT_X is the form used by Telegram's own protocol in MTProto libraries. 429 Too Many Requests with retry_after is the form the Bot API uses. Both mean wait, then retry.
FLOOD_WAIT, "too many attempts" and 429 Too Many Requests are all Telegram saying slow down. Admins should stop the action, wait, and switch to methods like invite links and scheduled posts. Bot builders should queue messages, limit per chat and globally, combine messages, throttle edits, read retry_after and never retry early. PEER_FLOOD is different: it is a restriction triggered by spam-like behaviour, and the only fix is to stop that behaviour.
Ownership confirmed through our claim process — not an endorsement of their content.
Founder of Telegram.
The official Telegram on Telegram. Much recursion. Very Telegram. Wow.
Telegram Premium – a subscription that unlocks dozens of exclusive features.
Binance Official English Group Binance Official Chinese Group Binance English Announcements Binance Chinese Announcements
is a modern crypto news and research platform covering the latest developments across digital assets, markets, regulation, and blockchain technology.
This channel focuses exclusively on what shapes global finance. Macroeconomics, markets, liquidity, central banks.
BlackBlock Markets exists to observe how capital moves before it becomes obvious.
Bitcoin is a global macro asset. This channel is dedicated to Bitcoin only.
Crypto Invest Next 100x. Admin