Elido ограничивает частоту запросов к API на уровне ключа, а не рабочего пространства. Это означает, что каждая созданная вами интеграция может использовать свой лимит, не мешая остальным. В этой статье рассматриваются лимиты для каждого тарифного плана, заголовки, которые необходимо учитывать, и способы корректного снижения нагрузки.
Цифры#
Постоянные лимиты на ключ:
| Plan | В минуту | Burst |
|---|---|---|
| Free | 60 | 120 |
| Pro | 600 | 1200 |
| Business | 6000 | 12000 |
Burst — это то, насколько вы можете кратковременно превысить лимит в 10-секундном окне. Sustained — это ограничение в устойчивом состоянии, при котором корзина пополняется.
Ограничений на отдельные эндпоинты нет — GET /v1/links учитывается так же, как и POST /v1/links. Единственные исключения:
POST /v1/bulk-import— 5 активных импортов на рабочее пространство одновременно.POST /v1/linksс кастомным слагом, конфликтующим с существующим — они все равно учитываются, но не освобождают слот при конфликте.GET /v1/analytics/timeseriesсinterval=second— ограничение 60/минуту даже на Business, так как лежащий в основе запрос ClickHouse более ресурсоемок.
Заголовки ответов#
Каждый ответ API включает:
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 587
X-RateLimit-Reset: 1747386240
X-RateLimit-Reset — это Unix timestamp, сообщающий вам, когда корзина будет полностью заполнена. Используйте его для планирования повторных попыток вместо фиксированных задержек.
Как выглядит ошибка 429#
При превышении лимита:
HTTP/1.1 429 Too Many Requests
Retry-After: 12
Content-Type: application/json
{
"error": "rate_limited",
"message": "API rate limit exceeded for this key",
"retry_after_seconds": 12
}
Retry-After указан в секундах. Подождите указанное время, затем повторите попытку. SDK делают это автоматически с добавлением джиттера; если вы пишете собственный HTTP-клиент, поступайте так же.
Стратегия снижения нагрузки#
Если вы активно нагружаете API (разовая массовая задача, заполнение данных), настройте скорость вашего клиента на постоянный лимит, а не на burst. Простой цикл быстро исчерпает лимит burst, затем остановится на 50 секунд, а затем снова ударит по лимиту burst — в среднем это будет медленнее, чем просто равномерное распределение нагрузки.
Псевдокод:
const limit = 600; // per minute
const delayMs = (60 * 1000) / limit; // 100ms between requests
for (const item of items) {
await fetch(...);
await sleep(delayMs);
}
Этот паттерн использует 100% лимита без возникновения ошибок 429.
Параллелизм#
Параллельные запросы используют одну и ту же корзину. Если вы запускаете 100 параллельных запросов из пула воркеров на плане Pro (600/min), первые 100 будут выполнены мгновенно; затем корзина будет пополняться со скоростью 10/sec. Ваш пул воркеров должен быть ориентирован на постоянную скорость, а не на глубину очереди.
На ключ или на IP#
Корзина привязана к ключу, а не к IP. Если вы используете один и тот же ключ с 10 машин, эти 10 машин делят лимит между собой. Выпустите по ключу для каждой машины, если вам нужно в 10 раз больше ресурсов.
На уровне IP существует отдельный, очень щедрый лимит (10,000/min/IP), предназначенный только для остановки некорректно работающих клиентов. Вы никогда не столкнетесь с ним при обычном использовании; если же это произойдет, придет ответ 429 с телом "error": "ip_rate_limited".
Ключи идемпотентности не обходят лимиты#
Повторная отправка одного и того же Idempotency-Key все равно учитывается как запрос в вашей корзине — мы можем вернуть кэшированный ответ, не выполняя основную работу, но счетчик будет увеличен. Не используйте цикл по ключам идемпотентности в качестве стратегии повторных попыток.
Увеличение лимитов#
Если для вашего варианта использования действительно требуется более 6000/min постоянной нагрузки, напишите на support@elido.app, указав:
- ID вашего рабочего пространства.
- Название интеграции.
- Ожидаемую постоянную и пиковую частоту запросов.
- Эндпоинты (чтобы мы могли спланировать нагрузку для наиболее ресурсоемких из них).
Мы предоставляем увеличение лимитов на ключ корпоративным клиентам по контракту, обычно в течение одного рабочего дня.
Устранение неполадок#
Внезапно стали приходить ошибки 429 на ключе, который раньше работал. Либо в вашем коде возник бесконечный цикл (наиболее часто), либо кто-то еще в рабочем пространстве начал использовать тот же ключ. Проверьте вкладку Usage для API-ключа в панели управления, чтобы увидеть минутный график.
Ошибки 429 при первом запросе за день. Корзины на бесплатном тарифе сбрасываются в скользящем окне, а не в полночь по UTC. Если вы тестировали лимит вчера в 23:59 и он еще не успел полностью пополниться к 00:01, первый burst все равно может быть ограничен. Подождите 60 секунд.
X-RateLimit-Remaining имеет отрицательное значение. Превышение лимита burst. Это число показывает, насколько глубоко вы ушли "в минус"; умножьте его на 60/limit, чтобы получить количество секунд до возврата к нулю.