QivunaDevelopers

Rate limits

Limits keep one bot from crowding out the others and from flooding people. They depend on the bot's tier: new for its first 14 days, then standard, or verified with the blue check (getMe shows it).

Per bot#

Limitnewstandardverified
API calls per second103060
Messages per second, all chats together53060
Messages per chat1 per second, bursts of 3 (3 in any 3-second window)
Messages per group or channel per minute202040
Unsolicited 1:1 messages per person per day31050
Rooms joined per day1050500
Upload volume per UTC day200 MB1 GB5 GB
Moderation actions per room per minute30
Command-list changes (setMyCommands + deleteMyCommands)10 per minute
Key proposals (setMyEncryptionKey)5 per hour
setWebhook20 per hour per bot, 40 per hour per owner; 30 failed challenges per destination host per hour
Concurrent getUpdates1 (a second one answers 409 conflict)

“Messages” includes media and encrypted replies. Unsolicited messages are 1:1 messages to someone who has not written to the bot, pressed its button or started it in the last 24 hours; past the cap the answer is 403 unsolicited_limit, not 429. “Rooms joined per day” is checked when an admin adds the bot; the admin sees the refusal.

Platform-wide#

Limits on people (for context)#

How a 429 looks#

HTTP/1.1 429 Too Many Requests
Retry-After: 3
X-Request-Id: 01JB2H9M4T7Q2V8X5C1N6R3K0W

{"ok":false,"error":{"code":"rate_limited","message":"Too many requests","retry_after":3,"parameter":null},
 "request_id":"01JB2H9M4T7Q2V8X5C1N6R3K0W"}

Wait retry_after seconds before retrying that call. An edge limit answers the same shape with retry_after: 1 but without request_id. The SDKs wait and retry for you, up to a maximum you choose.

Spread bulk sends over time rather than retrying in a tight loop: a bot that keeps hitting limits gets slower, not faster.