Перейти к содержимому

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

Лимиты считаются на четырёх уровнях: app-user, app, user и, для публичного ключа, publishable-ip — посетитель сайта (по его адресу). Первые три уровня считаются отдельно для секретных ключей и для публичного: сайт не тратит лимит бота, и наоборот. Каждый ответ после проверки ключа называет действующие уровни и остаток по каждому.

уровень (policy) что считает запросов в минуту
app-user приложение × стример 600
app приложение по всем стримерам 6000
user стример по всем приложениям 1200
publishable-ip публичный ключ × адрес посетителя 60

Уровни app-user, app и user считаются отдельно для секретных ключей и для публичного ключа: сайт не тратит бюджет бота, и наоборот. Все секретные ключи стримера делят один бюджет.

Каждый ответ после успешной проверки ключа несёт заголовки по форме draft-ietf-httpapi-ratelimit-headers-08:

RateLimit-Policy: "app-user";q=600;w=60, "app";q=6000;w=60, "user";q=1200;w=60
RateLimit: "app-user";r=599;t=42, "app";r=5999;t=42, "user";r=1199;t=42

q — квота окна, w — окно в секундах, r — остаток, t — секунды до нового окна. Превышение — 429 с Retry-After и "policy" в теле. Ответы до проверки ключа (401, wrong_token_type, token_in_query, origin_not_allowed) и описание OpenAPI заголовков лимита не несут.

  1. Прочитайте Retry-After в ответе: столько секунд не отправляйте запросы. В теле ответа поле policy называет исчерпанный уровень.
  2. Повторите запрос после паузы. Если ждать приходится снова, увеличивайте паузу каждый раз.
  3. Уменьшите частоту: храните ответ у себя и обновляйте его реже, читайте за запрос максимум записей (limit), не опрашивайте API чаще, чем меняются данные.

Новый секретный ключ лимит не снимет: все секретные ключи стримера делят один бюджет. Публичный ключ упирается в лимит на посетителя, например при частом обновлении страницы: храните ответ на стороне сайта.

Заголовки лимита приходят только в ответах, которые прошли проверку ключа. В 401, wrong_token_type, token_in_query и origin_not_allowed их нет. Страница ошибки: rate_limited.