Лимиты запросов
Запросы к API ограничиваются по API-ключу и по группе эндпоинтов:
| Эндпоинты | Лимит |
|---|---|
| GET /v1/products · GET /v1/balance · GET /v1/api-key · GET /v1/tasks/{token} · GET /v1/tasks/{token}/result · GET /v1/tasks/{token}/download | 60 запросов / минуту на API-ключ (120 / минуту на IP) |
| POST /v1/detect · POST /v1/detect/file | 10 запросов / минуту на API-ключ (30 / минуту на IP) |
| POST /v1/realtime/check/{series} · POST /v1/realtime/detect | Token bucket на API-ключ: всплеск 60, пополнение 1/с (≈60 / минуту устойчиво); на аккаунт: всплеск 120, пополнение 2/с. Уровень IP допускает 180 / минуту. Каждый ответ содержит заголовок X-RateLimit-Remaining. |
Заголовки ответа
Заголовок раздела «Заголовки ответа»Набор заголовков зависит от того, какой слой ответил, и три группы ведут себя неодинаково:
| Заголовок | Значение | Когда присутствует |
|---|---|---|
X-RateLimit-Remaining | Остаток запросов (или токенов) в текущем окне | В каждом ответе всех трёх групп |
X-RateLimit-Limit | Применённый потолок | Во всех общих ответах и ответах детекции, а также в каждом 429 от слоя IP. Никогда в ответе реального времени — реальное время расходует бакет, поэтому фиксированного потолка нет |
Retry-After | Сколько секунд ждать перед повтором | Только при 429 |
X-RateLimit-Reset | Unix-время сброса окна | Только при 429 из общей группы или группы детекции; никогда от реального времени или слоя IP |
X-RateLimit-Remaining — единственный заголовок, на который можно положиться всегда, и единственный, который реальное время сообщает при успехе.
Когда вы получаете 429
Заголовок раздела «Когда вы получаете 429»При превышении лимита API возвращает 429 с заголовком Retry-After (realtime-ответы также содержат поле retry_after). Приостановите запросы на указанное число секунд, затем продолжайте с экспоненциальной задержкой.
{ "message": "Too many requests. Limit: 60/min."}Retry-After: 12X-RateLimit-Limit: 60X-RateLimit-Remaining: 0