Лимиты
Мы следим за стабильностью API, поэтому есть лимиты на запросы (rate limiting). Они гибкие, зависят от нагрузки, но мы сделали их комфортными — должно хватить для любых ваших задач.
Входящие вебхуки
/webhooks/user123 считаем по user123Если за секунду отправите больше указанного количества запросов на один идентификатор, лишние получат 429 Too Many Requests. В заголовке Retry-After мы укажем, через сколько секунд можно попробовать снова.
API
HTTP_AUTHORIZATION). Один токен — один лимит. Запросы учитываются по каждому чату отдельно. Дополнительно действует общий предел по всем чатам сразу — 30 запросов за 5 секунд: он допускает короткие ускорения выше посекундного лимита, но не даёт держать такой темп долго.HTTP_AUTHORIZATION). Один токен — один лимит.HTTP_AUTHORIZATION). Один токен — один лимит.GET /webhooks/events. Считаем по токену авторизации.GET /company/chats и GET /company/bots. Считаем по токену авторизации. Лимит заметно строже общего: при странице в 50 записей за минуту получится обойти около 1500 чатов или ботов.GET /chats, когда выборка запрошена номером страницы, а не курсором. Считаем по токену авторизации. Запрос с cursor или limit под этот лимит не подпадает и работает в рамках общего.POST /messages. Считаем по паре «отправитель и чат» за последние 24 часа. Сообщения в тред засчитываются в чат, которому принадлежит родительское сообщение. Квоту расходуют только созданные сообщения: запрос, отклонённый проверкой, её не тратит.Если за секунду будет больше указанных запросов с одним токеном, API вернёт 429 Too Many Requests. В заголовке Retry-After мы укажем, через сколько секунд можно попробовать снова. Тело такого ответа — короткий текст с Content-Type: text/plain, а не JSON: лимиты на частоту запросов обрабатываются до того, как запрос доходит до метода.
Превышение суточного предела отвечает так же — 429 с кодом rate_limit в errors[].code и заголовком Retry-After. Отправка в этот чат приостанавливается на час, и каждая следующая попытка во время паузы удваивает её: 1, 2, 4, 8, 16 и до 24 часов. Дождитесь срока из Retry-After — он учитывает и паузу, и момент, когда в окне освободится место. Отправка, прошедшая после паузы, возвращает шкалу к началу.
- Лимиты гибкие: они ориентировочные и могут меняться, чтобы всё работало гладко;
- Должно хватать на всё: мы настроили их так, чтобы вам было комфортно в любых сценариях;
- Если упёрлись в лимит: при ошибке
429смотрите заголовокRetry-After— он подскажет, через сколько секунд повторить запрос (или используйте экспоненциальныйbackoff, если хотите перестраховаться).
Защита от перегрузки
Если приложение продолжает слать запросы выше лимитов даже после 429, доступ токена может быть временно ограничен — это защита от сбойных циклов и случайной перегрузки. Чтобы этого избежать:
- Соблюдайте
Retry-After— он указывает, через сколько секунд имеет смысл повторить - Используйте экспоненциальный backoff с jitter — готовые примеры ниже в разделе Повторные запросы
- Если ваш сервис не успевает обрабатывать ответы, приостановите запросы, а не ускоряйте retry
Повторные запросы (Retry)
SDK (TypeScript, Python) уже включают автоматический retry с экспоненциальным backoff. Ниже — реализация для кастомных HTTP-клиентов.
TypeScript
Python
Стратегия повторов
| Код | Действие | Задержка |
|---|---|---|
429 | Повторить | Retry-After header или exponential backoff: 1с, 2с, 4с × jitter |
500, 502, 503, 504 | Повторить | Exponential backoff с jitter: ~1с, ~2с, ~4с |
400, 401, 403, 404, 422 | Не повторять | Ошибка клиента — нужно исправить запрос |