REST API v1 · Разработчикам

Лимиты запросов

Лимиты считаются для каждого API-ключа в фиксированном окне длиной в минуту, а их размер зависит от тарифа сервера. Каждый авторизованный ответ сообщает текущее состояние, так что аккуратному клиенту не нужно гадать.

Документация для разработчиков
На этой странице

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

Запросов в минуту на один API-ключ
ТарифЗапросов в минутуАктивных ключей
Free602
Pro и Network60010
White Label60040

У каждого ключа своё окно, поэтому два ключа одного сервера не делят общий запас. Тарифы — на странице цен.

Заголовки лимитов

В каждом авторизованном ответе есть текущее состояние окна:

Заголовки ответа
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1791374460
  • X-RateLimit-Limit — сколько запросов в минуту разрешено этому ключу.
  • X-RateLimit-Remaining — сколько запросов осталось в текущем окне.
  • X-RateLimit-Reset — Unix-время (в секундах), когда окно сбросится.

Если лимит превышен

При превышении лимита придёт 429 RATE_LIMITED с заголовком Retry-After и числовым полем retryAfter в теле (оба — в секундах). Подождите столько и повторите запрос.

Ответ · 429
HTTP/1.1 429 Too Many Requests
Retry-After: 18

{ "error": "RATE_LIMITED", "message": "Rate limit of 60 requests per minute exceeded", "retryAfter": 18 }
Node.js
// Wait and retry on 429 / 503, using the server's Retry-After
async function call(url, init, tries = 3) {
  for (let attempt = 1; ; attempt++) {
    const res = await fetch(url, init);
    if ((res.status !== 429 && res.status !== 503) || attempt >= tries) return res;
    const seconds = Number(res.headers.get('Retry-After')) || attempt * 2;
    await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
  }
}

Повторяющиеся запросы с неверными ключами с одного IP-адреса тоже ограничиваются: после нескольких неудач в минуту они получают 429 вместо 401.

Готовы прокачать свой сервер?

Добавьте BotGG бесплатно и включайте нужные функции в веб-консоли.