Перейти к основному содержанию
Didit применяет несколько уровней ограничения частоты запросов (rate limiting), чтобы сохранять стабильность API и при этом допускать оправданные всплески трафика. Лимиты применяются для каждого идентификатора: это ваш x-api-key или, если API-ключ не передан, IP-адрес клиента. Каждая область ведёт независимый счётчик со скользящим окном 60 секунд.

Идентификатор и исключения

Промежуточное ПО выбирает идентификатор для ограничения частоты в следующем порядке:
  1. Заголовок x-api-key → счётчик, привязанный к ключу.
  2. Первый хоп X-Forwarded-For → счётчик, привязанный к IP-адресу.
  3. REMOTE_ADDR → счётчик, привязанный к IP-адресу.
Следующие вызовы полностью обходят ограничение частоты:
  • Внутренний DIDIT_WEBAPP_API_KEY (используется только консолью Didit).
  • Эндпоинты, защищённые разрешением IsValidSession (трафик встроенных сессий и сессий SDK).
  • GET /system/healthcheck (обрабатывается HealthMiddleware до этого стека).
  • Webhook’и провайдеров: Stripe, AML-скрининг, callback-вызовы верификации лиц, изменение списков KYC.

Глобальные лимиты

Каждый аутентифицированный запрос также помещается в общую область в зависимости от HTTP-метода, поэтому любой новый маршрут получает разумное значение по умолчанию: Создание транзакций и приём событий учитываются в области ingest-write, а не в generic-write: интеграция с высоким объёмом приёма данных получает 600 запросов в минуту на каждый API-ключ и не расходует бюджет своих остальных операций записи. Лимиты для отдельных endpoint’ов (следующий раздел) применяются в дополнение к глобальному лимиту. Первая область, в которой превышен лимит, вызывает ответ 429.

Лимиты для отдельных endpoint’ов

Middleware определяет более строгие области для самых критичных маршрутов:
GET /v3/session/<id>/decision/ обслуживается SessionV3RetrieveView и не входит в область session-decision. Для него действует только общий потолок generic-get 600 в минуту. Ограничение 100 в минуту по решению распространяется только на пути решений v1 и v2.
В кодовой базе также определены FREE_SESSION_RATE_LIMIT = 10 и PAID_SESSION_RATE_LIMIT = 600. Эти константы сейчас не применяются к POST /v3/session/: для этого endpoint’а для всех приложений действует единый лимит session-v2-create в 600 в минуту. Не планируйте мощности, опираясь на ограничение бесплатного тарифа для каждого сценария, пока оно не будет описано как работающее.

Формат ответа 429

Если вы превысили лимит в любой области, вы получите HTTP-ответ 429 с таким телом и заголовками:
Заголовки X-RateLimit-* возвращаются только в ответе 429: успешные ответы сейчас их не содержат. Используйте значение Retry-After (или X-RateLimit-Reset - now) как задержку перед следующей попыткой.

Рекомендации для клиента

  • Учитывайте Retry-After как минимальную задержку перед повторной попыткой. Поверх неё добавьте экспоненциальную задержку с джиттером (5s → 10s → 20s → 40s ± random), чтобы два клиента, получившие 429 одновременно, не синхронизировались.
  • Прекращайте повторные попытки после небольшого предела (например, 5 попыток). Передайте ошибку вызывающему коду и оповестите свою команду: постоянные ответы 429 обычно означают неконтролируемый цикл, а не кратковременный всплеск.
  • Используйте один идентификатор на каждую нагрузку. Если один x-api-key используется сразу многими бэкендами, они попадают в один счётчик, и один «шумный» сосед может лишить остальных доступа к лимиту. Создавайте отдельное приложение (а значит, и отдельный api_key) для каждой среды, бренда или клиента. См. Программная регистрация.
  • Кэшируйте результаты запросов решений. Endpoint’ы /decision/ не предназначены для частого опроса в тесных циклах. Если нужны обновления в реальном времени, используйте webhook, а GET /v3/session/<id>/decision/ вызывайте только для догрузки данных или аудита.
  • Генерируйте PDF офлайн. Рендеринг PDF нагружает процессор и ограничен 50 запросами в минуту. Запускайте его из очереди после того, как сессия перейдёт в конечный статус, а не при каждом просмотре страницы.

Пример клиента с обработкой 429

Нужен больший запас?

Если 600 сессий в минуту недостаточно, например при маркетинговом запуске или догрузке данных, напишите на support@didit.me, указав UUID вашего application и ожидаемые постоянную и пиковую интенсивности запросов. Переопределения настраиваются для каждого приложения.
Последнее изменение 7 ноября 2026 г.