xcaDocs
Начало работы

Лимиты и квоты

Сколько запросов можно делать и что происходит, когда лимит исчерпан.

Лимиты зависят от тарифа и считаются отдельно для каждого API-ключа.

Запросы в минуту#

Скользящее окно в одну минуту на ключ. Каждый успешный ответ содержит X-RateLimit-Remaining — сколько запросов осталось в текущем окне. Сверх лимита приходит 429 rateLimited с error.retryAfter в секундах.

200
X-RateLimit-Remaining: 59
429
{
  "error": {
    "code": "rateLimited",
    "message": "Rate limit exceeded",
    "retryAfter": 12
  }
}

Месячная квота#

У каждого ключа есть месячная квота запросов, которая сбрасывается 1-го числа каждого месяца в 00:00 UTC. Когда она заканчивается, запросы возвращают 429 rateLimited с error.reason = quota до следующего месяца.

429
{
  "error": {
    "code": "rateLimited",
    "message": "Monthly quota exceeded",
    "reason": "quota"
  }
}

Сканы в день#

Вызов POST /scans, который действительно запускает скан, тратит один скан из дневного лимита тарифа — общего со сканами, которые ты запускаешь в приложении. Чтение отчётов и вызовы скана, возвращающие свежий отчёт из кеша, лимит сканов не тратят (но считаются запросами к API).

Лимиты по тарифам#

ТарифЗапросов / минЗапросов / мес
Pro60100 000

Полезные практики#

  • Кешируй отчёты на своей стороне — отчёт остаётся свежим несколько минут.
  • При 429 подожди retryAfter секунд, затем повторяй с экспоненциальной задержкой и случайным разбросом.
  • Опрашивай сканы раз в 3–5 секунд, а не в плотном цикле.
  • Распределяй пакетные задачи во времени, а не запускай их параллельно.