Лимиты запросов
К каждому запросу применяются два лимита: лимит уровня аккаунта, действующий почти на весь API, и, на нескольких эндпоинтах, более строгий лимит самого эндпоинта. Вы упрётесь в тот, который ниже.Лимит уровня аккаунта
Считается по аккаунту в фиксированном минутном окне. Все API-ключи одного аккаунта делят общий бюджет — создание новых ключей лимит не повышает.
Бюджеты без авторизации считаются отдельно для каждой группы эндпоинтов — цены, статус инвойса,
запросы по адресу, аутентификация и всё остальное, — поэтому опрос цен не расходует бюджет
остальных запросов.
Это значения по умолчанию. Если вашей интеграции нужен более высокий потолок, мы поднимем его для
вашего аккаунта — напишите нам в Telegram.
Окно фиксированное, а не скользящее: счётчик обнуляется в начале каждой минуты. Не стройте всплеск
вокруг этой границы. Мешают два независимых механизма. Перед API стоит краевой лимит примерно в 50
запросов в секунду на IP-адрес, и он отвечает
503 с HTML-телом, а не JSON-ошибкой. А аккаунт,
державшийся сверх лимита три минуты подряд, получает лимит вдвое меньше на следующие десять минут;
ещё три такие минуты — полная блокировка на тридцать, с Retry-After: 1800. Аккаунты с ярусом
1000/минута этой лестнице не подвержены.Эндпоинты со своим, более строгим лимитом
Обратите внимание:
POST /api/v1/invoices считается по IP-адресу, а не по аккаунту. Если
несколько ваших клиентов отправляют запросы с одного исходящего IP, они делят общий бюджет в 10
запросов в минуту.
У эндпоинтов покупки — POST /api/v1/energy/buy, POST /api/v1/energy/activate,
POST /api/v1/bandwidth/buy и POST /api/v1/bandwidth/rentals — есть более старый бюджет в 1000
запросов в минуту, считаемый по IP-адресу (оба bandwidth-эндпоинта делят один бюджет). Для
одного аккаунта он никогда не оказывается связывающим, но клиенты за общим исходящим IP делят его
между собой.
Эндпоинты управления вебхуками (/api/v1/webhooks/...) лимитом уровня аккаунта не покрыты. У всех
остальных задокументированных эндпоинтов своего лимита нет — к ним применяется только лимит уровня
аккаунта.
Как выглядит ответ 429
Тело зависит от того, в какой лимит вы упёрлись. Форм три, поэтому разбирайте ответ защитно, а не в расчёте на одну из них. Лимит уровня аккаунта. Ответ содержит заголовокRetry-After с числом секунд ожидания:
POST /api/v1/invoices. Заголовка Retry-After нет, окно — одна
минута:
POST /api/v1/account/withdrawal. Текстовое поле detail с остатком секунд и без кода ошибки:
Ответ 429, который повторами не лечится
POST /api/v1/invoices отвечает 429 ещё и тогда, когда у вас уже слишком много неоплаченных
инвойсов — не более 3 на IP-адрес и не более 5 на аккаунт. Лимит на IP действует и для
авторизованных запросов, поэтому обычно вы упираетесь именно в него:
429 и на посторонние временные сбои — например
{"detail":"Energy price unavailable"}. Прочитайте сообщение, прежде чем решать, как реагировать.
Повторные попытки
- Если в ответе есть заголовок
Retry-After, ждите ровно указанное число секунд. - Иначе используйте экспоненциальную задержку, начиная с одной секунды.
- Никогда не повторяйте запрос немедленно.
- Прочитайте тело перед повтором:
Too many pending invoicesтребует другого действия, а не более долгого ожидания.