Ошибки и лимиты
Коды
Мы используем обычные коды ответов HTTP для обозначения результата выполнения запроса.
Коды группы 2** указывают на успех. Коды группы 3** указывают на перенаправление (например, при скачивании файла). Коды группы 4** указывают на ошибку запроса, который не удался с учетом предоставленной информации (например, обязательный параметр был пропущен, несуществующий идентификатор и др.). Коды группы 5** указывают на ошибки на серверах Пачки (они редки).
Пояснения ошибки
В зависимости от типа ошибки вы получите в теле ответа одну из следующих структур:
- ApiError — для кодов
400,403,404,409,410,422. Содержит массивerrorsс детальной информацией об ошибках. - OAuthError — для кодов
401и403. Содержит поляerrorиerror_descriptionс информацией об ошибке авторизации.
Код 403 может вернуть обе структуры:
OAuthErrorс кодомinsufficient_scope, когда у токена нет нужного скоупа (scope) для вызываемого метода.ApiError, когда бизнес-логика запрещает действие (например, недостаточно прав для управления экспортом).
Лимиты
Мы следим за стабильностью API, поэтому есть лимиты на запросы (rate limiting). Они гибкие, зависят от нагрузки, но мы сделали их комфортными — должно хватить для любых ваших задач.
/webhooks/user123 считаем по user123Если за секунду отправите больше 2 запросов на один идентификатор, лишние получат 429 Too Many Requests. В заголовке Retry-After мы укажем, через сколько секунд можно попробовать снова.
API
HTTP_AUTHORIZATION). Один токен — один лимит. Запросы учитываются по каждому чату отдельно. Дополнительно, допускаются короткие ускорения выше указанного лимита отправки сообщений: до 30 запросов в секунду на протяжении 5 секунд в каждый чат.HTTP_AUTHORIZATION). Один токен — один лимит.HTTP_AUTHORIZATION). Один токен — один лимит.Если за секунду будет больше указанных запросов с одним токеном, API вернёт 429 Too Many Requests. В заголовке Retry-After мы укажем, через сколько секунд можно попробовать снова.
- Лимиты гибкие: они ориентировочные и могут меняться, чтобы всё работало гладко;
- Должно хватать на всё: мы настроили их так, чтобы вам было комфортно в любых сценариях;
- Если упёрлись в лимит: при ошибке
429смотрите заголовокRetry-After— он подскажет, через сколько секунд повторить запрос (или используйте экспоненциальныйbackoff, если хотите перестраховаться).