Лимиты запросов
Лимиты считаются на четырёх уровнях: 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=60RateLimit: "app-user";r=599;t=42, "app";r=5999;t=42, "user";r=1199;t=42q — квота окна, w — окно в секундах, r — остаток, t — секунды до нового окна. Превышение —
429 с Retry-After и "policy" в теле. Ответы до проверки ключа (401, wrong_token_type,
token_in_query, origin_not_allowed) и описание OpenAPI заголовков лимита не несут.
Что делать после 429
Заголовок раздела «Что делать после 429»- Прочитайте
Retry-Afterв ответе: столько секунд не отправляйте запросы. В теле ответа полеpolicyназывает исчерпанный уровень. - Повторите запрос после паузы. Если ждать приходится снова, увеличивайте паузу каждый раз.
- Уменьшите частоту: храните ответ у себя и обновляйте его реже, читайте за запрос максимум записей (
limit), не опрашивайте API чаще, чем меняются данные.
Новый секретный ключ лимит не снимет: все секретные ключи стримера делят один бюджет. Публичный ключ упирается в лимит на посетителя, например при частом обновлении страницы: храните ответ на стороне сайта.
Заголовки лимита приходят только в ответах, которые прошли проверку ключа. В 401, wrong_token_type, token_in_query и origin_not_allowed их нет. Страница ошибки: rate_limited.