Категории транзакций
У каждой транзакции естьtransaction_category, который определяет, как правила и аналитика обрабатывают её:
Данные транзакции
Объектtransaction_details содержит финансовые данные:
Субъект и контрагент
Каждая транзакция имеет субъекта (обязательно) и необязательного контрагента. Оба используют одну модель стороны:
Если
address передан объектом, Didit получает country_code стороны из address.country. Если address передан строкой, country_code для этой стороны возвращается как null.
Когда vendor_data совпадает с существующим пользователем или компанией, Didit автоматически связывает транзакцию с профилем этой сущности, что позволяет оценивать правила в рамках нескольких сессий и проверять частоту операций.
В ответе обе стороны возвращаются в массиве parties с ролями APPLICANT и COUNTERPARTY.
Способы оплаты
Прикрепитеpayment_method к каждой стороне, чтобы описать платёжный инструмент с её стороны:
В транзакциях
travelRule способ оплаты контрагента с method_type: "unhosted_wallet" (псевдоним type) указывает, что кошелёк контрагента является некастодиальным.
Если Travel Rule включён и сумма в валюте по умолчанию вашего приложения не ниже threshold_amount, перевод сразу переходит в статус UNCONFIRMED_OWNERSHIP и попадает в процесс подтверждения владения. См. раздел Заявленные некастодиальные кошельки.
Для криптотранзакций указывайте адреса кошельков в account_id и задавайте currency_kind равным crypto, чтобы скрининг блокчейна запускался автоматически. Направление определяет, какой кошелёк проверяется: при входящем скрининге до перевода используется кошелёк отправителя в counterparty.payment_method.account_id; при исходящем скрининге используется кошелёк получателя в counterparty.payment_method.account_id. Если вы передаёте хеш блокчейна в transaction_details.payment_reference_id, для скрининга входящей транзакции требуется адрес депозита вашего сервиса в subject.payment_method.account_id, а для скрининга исходящей транзакции требуется кошелёк получателя в counterparty.payment_method.account_id.
Переопределение скрининга криптовалют
Используйтеinclude_crypto_screening на верхнем уровне запроса, чтобы переопределить значение по умолчанию, заданное в разделе Транзакции > Настройки в консоли:
Контекст устройства
Передайте информацию об устройстве субъекта (а при необходимости и контрагента), чтобы работали правила анализа устройства. Поле запроса называетсяdevice_context и передаётся для каждой стороны. Также принимается алиас в camelCase device, именно он используется в формате SDK. В ответе оно возвращается как device в каждом элементе массива parties.
browser_family и platform не выводятся из user_agent. Их нужно передавать как явные ключи верхнего уровня внутри device_context, иначе правила анализа устройства не сработают. Если вы используете SDK Didit, эти поля собираются автоматически.userAgent, browserFamily, browserVersion, osFamily, osVersion, acceptLang, sessionId, sessionAgeMs. Подобъект network_context принимает алиасы ip / countryCode3 / lat / lon, а блок верхнего уровня ipInfo также включается в network_context.
Контекст устройства позволяет настроить правила для выявления мультиаккаунтинга (один и тот же отпечаток у разных субъектов), сочетания нового браузера и нового IP, перевода крупной суммы при малом возрасте сессии, а также скоринга риска по местоположению.
Пользовательские свойства
Добавляйте любые дополнительные пары ключ-значение в объектcustom_properties. Правила могут ссылаться на эти поля в своих условиях. Это удобно для передачи бизнес-контекста, например категории товара, ID мерчанта или канала.
custom_values.<key>. Например, payload выше соответствует условию custom_values.product_category eq "electronics". В конструкторе правил в Console ключи, встречавшиеся в недавно поступивших транзакциях, отображаются в селекторе полей условий в разделе Пользовательские свойства. Кнопка Ввести пользовательское свойство в той же группе позволяет вручную ввести любой ключ (с учётом регистра). Подробности см. в разделе Правила и скоринг.
Пример запроса
Ответ
API возвращает созданную транзакцию с первичными результатами оценки:
Полную схему запроса и ответа см. в справочнике API. Разбор payload с пояснениями см. в справочнике схемы ответа.
Назначение транзакции проверяющему
Назначьте приостановленную транзакцию участнику вашего приложения или снимите назначение с помощью API-ключа с правомwrite:transactions. Каждое изменение фиксируется на временной шкале транзакции как TRANSACTION_ASSIGNED.
В обоих вызовах передаётся
assignee_email, адрес электронной почты участника приложения, который вошёл в Didit. Передайте null или пустую строку, чтобы снять назначение. Массовый вызов также принимает transaction_ids, список из 1–500 UUID транзакций.
uuid, transaction_number, assignee и changed (false, если транзакции уже был назначен этот проверяющий), либо 404, если транзакция не существует в приложении. Массовый вызов возвращает transactions (по одной записи в формате выше), updated_count и not_found_transaction_ids.
Фильтруйте список транзакций по assignee. Это список через запятую, где достаточно совпадения любого значения: me, unassigned, rules (решение принято только правилами, проверяющий не участвовал) или email участника.
Идемпотентность
txn_id (transaction_id, который вы отправляете) уникален в рамках приложения.
Повторная отправка существующего transaction_id возвращает 400 с сообщением A transaction with this transaction_id already exists. в поле transaction_id, а два одинаковых запроса, отправленных одновременно, дают второму запросу ответ 409.
Ни один из этих ответов не возвращает существующую транзакцию.
Чтобы безопасно повторить запрос, считайте ответ 400 или 409 на дубликат transaction_id признаком того, что транзакция уже создана, и найдите существующую транзакцию, а не отправляйте запрос повторно: получите её через GET /v3/transactions/{uuid}/, используя uuid из первого ответа, или используйте transaction_id (uuid Didit), который передаётся в webhook transaction.created рядом с вашим txn_id.
Всегда генерируйте txn_id на своей стороне (например, ID из вашей базы транзакций, UUID или детерминированный хеш).
Загрузка исторических транзакций
Передайтеtxn_date в прошлом, чтобы загрузить исторические транзакции. Правила по умолчанию всё равно выполняются. Если вы хотите пропустить оценку правил при массовой загрузке исторических данных, используйте импорт CSV в консоли в режиме dry-ingest. См. руководство по интеграции.
Дальнейшие шаги
Правила и скоринг
Как отправленные транзакции оцениваются по правилам.
Схема ответа
Полный аннотированный payload ответа.
Скрининг криптовалют
Автоматический скрининг кошельков и транзакций для криптовалютных транзакций.
Travel Rule
Прикрепление данных о соблюдении Travel Rule к переводам виртуальных активов.
Обогащение данных по IP
Контекст, полученный из IP, доступен правилам.
Справочник API
Полная схема запроса для endpoint Create Transaction.