Перейти к основному содержанию
Transaction Monitoring отправляет три webhook-события, которые вместе покрывают полный жизненный цикл транзакции, и необязательное четвёртое, которое сообщает о новых предложениях по правилам. Все они передаются через стандартную инфраструктуру webhook Didit с подписью HMAC-SHA256. Подробнее об адресах назначения, подписи и тестировании см. в справочнике по webhook.

Каталог событий

События уровня сущностей (user.status.updated, business.status.updated) также могут возникать как следствие активности транзакций: см. webhook сущностей.
Приложения в песочнице не отправляют webhook transaction.created или transaction.status.updated. Чтобы протестировать эти события, используйте приложение в продакшн-среде или API & Webhooks → Try Webhook в консоли. Обмены Travel Rule в песочнице отправляют webhook travel_rule.status.updated с environment: sandbox; чтобы проверить обмен перед запуском в продакшн, используйте Didit Test VASP.

Структура сообщения

Webhook Didit используют плоское тело: поля события находятся на верхнем уровне рядом с полями конверта, вложенного объекта data нет. Каждая доставка содержит:

Структура payload

transaction.created и transaction.status.updated

Оба события используют одну структуру payload: краткую сводку и блок action_required (или null):
Payload намеренно краткий: получив его, запросите полную запись через GET /v3/transactions/{transaction_id}/. Она содержит полные данные (стороны, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), включая причину изменения статуса.

transaction_rule_suggestions.created

Это событие касается вашего набора правил, а не одной транзакции, поэтому идентификатора транзакции в нём нет. Оно никогда не содержит персональных данных: только идентификаторы предложений, их типы, названия и количество.
Стандартные поля конверта (event_id, timestamp, application_id, environment) добавляются в тело.

travel_rule.status.updated

Отправляется при каждом переходе, включая переход в FINISHED, CANCELLED или EXPIRED. Когда перевод достигает одного из этих статусов, для него больше не отправляются события Travel Rule. Событие может повторять предыдущий статус, например когда повторная отправка снова не находит канал и перевод остаётся в COUNTERPARTY_VASP_NOT_FOUND. rail принимает значения INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (перевод в песочнице, на который ответил Didit Test VASP; он также содержит test_vasp: true и test_vasp_scenario) или "", пока канал не выбран (для регистраций sunrise всегда ""). При создании транзакции, регистрации sunrise, входящем запросе TRP или входящей части по каналу INTERNAL Didit сначала отправляет transaction.created, а затем события travel_rule.status.updated этой транзакции. Правило, которое меняет статус транзакции на этом шаге, может также отправить transaction.status.updated до transaction.created. Регистрация sunrise, привязанная к уже созданной вами транзакции депозита, transaction.created не отправляет. Каждый webhook доставляется отдельно, и для него отдельно выполняются повторные попытки, поэтому повторно отправленное событие может прийти после более позднего. Привязывайте обработчик к transaction_id и при необходимости повторно запрашивайте транзакцию, чтобы получить её текущее состояние.

Примеры сценариев статусов

Простое одобрение

Проверка с последующим одобрением

Дополнительная верификация

Перевод по Travel Rule

Первые два события приходят из одного запроса, и transaction.created ставится в очередь первым. Каждый webhook доставляется отдельно, поэтому не полагайтесь на порядок прихода. Перевод, отправленный по TRUST, никогда не получает событие COMPLETED, потому что TRUST не возвращает Didit ничего, что тот может прочитать: перевод остаётся в AWAITING_COUNTERPARTY до срока подтверждения, а затем переходит в EXPIRED. По GTR, VerifyVASP и Sygna Bridge Didit читает ответ контрагента из сети, и событие следует за этим ответом.

Проверка подписи

Каждая доставка подписывается по HMAC-SHA256 с использованием общего секрета адреса назначения и содержит три заголовка подписи и отметку времени:
Полный код проверки, включая проверку актуальности отметки времени, см. в справочнике по webhook.

Повторные попытки и гарантии доставки

  • При ответе 5xx, 404, таймауте или сбое соединения Didit повторяет доставку до 2 раз: примерно через 1 минуту после первой ошибки, затем ещё примерно через 4 минуты.
  • Повторные доставки используют тот же event_id. Устраняйте дубликаты по этому полю в вашем обработчике.
  • После последней неудачной попытки доставка этого события прекращается, и ваша организация получает уведомление. Адреса назначения никогда не отключаются без уведомления.
  • Быстро возвращайте ответ 2xx: сначала поставьте событие в очередь, затем обработайте его. Медленные подтверждения (ACK) создают риск таймаутов и повторных доставок.

Идемпотентность

Обрабатывайте каждый webhook ровно один раз, сохраняя event_id в собственном хранилище для устранения дубликатов. Повторная доставка того же события возможна, если ваш endpoint отвечает медленно или разрывает соединение во время запроса.

Подписка

Дальнейшие шаги

Справочник по webhook

Адреса назначения, подписи, повторные попытки.

Статусы

Полная модель состояний.

Руководство по интеграции

Обработка webhook в продакшне.
Последнее изменение 7 ноября 2026 г.