Guide
Rate limits
What the limits are, how they are counted, and how to stay under them.
Bot API limits
Limits are counted per bot per environment. Your test and live tokens have separate budgets.
| Method | Limit |
|---|---|
| sendMessage | 30 calls per second |
| getUpdates | 30 calls per second |
| getMe | 30 calls per second |
| setWebhook / deleteWebhook | 10 calls per minute |
Management methods (bot CRUD, tokens, insights) have no published per-second limits; use them at human-dashboard pace, not in a loop.
Staying under the limits
- Use long polling correctly. One
getUpdatescall withtimeout: 50covers 50 seconds of waiting in a single call. Polling in a tight loop with timeout 0 burns your budget for nothing. - Batch your sends. 30 messages a second is generous; if you are hitting it, you are probably sending one message per update in a busy group. Consider digesting.
- Handle 429 with backoff. See retries and errors. A 429 is the API asking you to slow down, not an error in your code.
Hitting a limit returns
429 with { ok: false, error: "rate limit exceeded: …" }. Limits may change as the platform grows; the dashboard's usage page shows your actual consumption.