Лимиты скорости¶
Платформа применяет per-IP лимиты к каждому входящему HTTP-запросу, чтобы шумный или скомпрометированный клиент не деградировал сервис для остальных. Лимиты жёсткие на auth + анонимных эндпоинтах и мягкие на трафике вебхуков провайдера.
Когда клиент превышает корзину, ответ:
Значение Retry-After — это число секунд до сброса текущего минутного
окна. Подождите столько, потом повторите — повторный бёрст немедленно
просто продлит cooldown без полезной работы.
Таблица лимитов¶
| Семейство эндпоинтов | Лимит | Scope | Заметки |
|---|---|---|---|
| Auth | 20 / минуту | per source IP | Login, 2FA verify, password reset, accept invitation, refresh-token. Достаточно медленно, чтобы остановить credential-stuffing, не мешая настоящему оператору. |
| Access-request форма | 5 / минуту | per source IP | Форма "запросить доступ" на странице логина оператора. Жёстко, потому что анонимная и подвержена спаму / harvesting'у адресов. |
| Входящий вебхук провайдера | 200 / минуту | per source IP | Используется для callback-эндпоинта upstream provider'а. Допускает реалистичный бёрст из одного региона, не открывая дверь шумному соседу. |
| Остальные эндпоинты | нет per-endpoint лимита | per (productId, environment) — enforce через валидацию API-ключа | Проверка product-credential имеет собственную anti-abuse позицию (allowlist по client IP, ротация ключей, подписанный nonce на чувствительных потоках). |
Best-practice поведение клиента¶
- Кешируйте идемпотентные чтения (level config, applicant list) и избегайте re-fetch на каждом render — данные меняются только когда оператор кликает Save.
- Используйте exponential backoff на
429. Разумный старт — значениеRetry-After, затем2×,4×, потолок 30 с. - На bulk-импортах сами себя ограничивайте в источнике, а не в цикле. Два запроса в секунду на IP держат вас глубоко внутри всех корзин.
- Используйте разные API credentials на разные workload-ы, чтобы sync-job, получивший rate-limit, не блокировал интерактивный трафик operator-портала.
Исходящие webhook доставки (информационно)¶
Исходящие webhook доставки от нас → к вашему endpoint используют Hangfire очередь с exponential backoff per delivery — они не подчиняются входящим лимитам выше. Ваш endpoint может рассчитывать на:
- Не более одной in-flight доставки per outbox entry в любой момент времени (с учётом same-id re-delivery семантики, описанной в разделе idempotency гайда Webhook Integration).
- Расписание retry:
10s · 30s · 1m · 5m · 15mдо 5 попыток до dead-letter. X-Webhook-Delivery-Idheader per attempt — дедуплицируйте по нему.
Если вы видите устойчивый бёрст от нас, это результат event backlog'а (например, вы были offline и мы догоняем). Очередь сама себя темпит в рамках сконфигурированной worker concurrency, и ваш endpoint всегда увидит ровно одну доставку за раз per outbox entry.