> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Получение транзакции из SDK: клиентский KYT

> Didit: повторное чтение транзакции с устройства пользователя по токену SDK — статус, Travel Rule и ожидающее action_required.

Промпт для API: получение транзакции (SDK Token)
Скопировать промпт в буфер обмена

<pre>
  \`Re-read a transaction from an end-user device using the same scoped SDK token that submitted it. The Didit SDKs call this automatically after a launched action flow completes or its window closes; call it yourself when handling flows manually.

  Endpoint:
  GET [https://verification.didit.me/v1/transactions/\{transaction\_id}/](https://verification.didit.me/v1/transactions/\{transaction_id}/)

  Authentication:
  X-Transaction-Token header with the sdk\_token used at submission (still within TTL). {transaction_id} is the Didit transaction uuid returned at creation.

  When to call:

  * After the user finishes (or abandons) a wallet-ownership or verification flow, to pick up the refreshed status.
  * To poll status and action\_required while the token is valid, instead of depending on any single event or notification.

  What to read from the response:

  * status - APPROVED | IN\_REVIEW | DECLINED | AWAITING\_USER.
  * travel\_rule.status - the Travel Rule exchange state (COMPLETED means the exchange concluded; the transfer can settle).
  * action\_required - null once the pending action is resolved; otherwise the same block returned at submission.

  Failure modes:

  * 401 - token missing, unknown, revoked, over max\_uses, or expired ("expired" appears in the detail).
  * 404 - the transaction does not belong to the token's application, or it was submitted for a different end user (another vendor\_data) than the token's.

  From your backend, GET /v3/transactions/{transaction_id}/ (x-api-key) returns the same record without any token constraints.

  Full guide: /transaction-monitoring/sdk-transaction-submission.\`
</pre>

Вставьте в


## OpenAPI

````yaml ru/openapi-25.json GET /v1/transactions/{transaction_id}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: >-
    API верификации личности. Аутентификация выполняется с помощью заголовка
    x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v1/transactions/{transaction_id}/:
    get:
      tags:
        - Transactions
      summary: Получить транзакцию из SDK
      description: >-
        Endpoint чтения, предназначенный для вызова с устройства,
        аутентифицируемый тем же токеном `X-Transaction-Token`, который
        использовался при отправке. SDK опрашивают его после завершения
        автоматически запущенного сценария действия или закрытия его окна,
        поэтому финальное состояние никогда не зависит от единичного
        уведомления. Возвращает те же подробные сведения о транзакции, что и
        ответ на отправку, включая текущий блок `action_required` (`null` после
        выполнения действия).
      operationId: getTransactionFromSdk
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: >-
            Стабильный UUID транзакции Didit (`uuid` из ответа на отправку, а
            **не** ваш `txnId`).
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: >-
            Полные детали транзакции, включая `action_required` (`null`, как
            только ожидающее действие урегулировано).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
        '401':
          description: >-
            Токен транзакции был отклонен: отсутствует, неизвестен, отозван,
            превысил `max_uses` или его срок действия истек.
          content:
            application/json:
              examples:
                Expired token:
                  value:
                    detail: Transaction token expired.
        '404':
          description: >-
            Транзакция с этим UUID не существует для приложения токена, либо
            сегмент пути не является валидным UUID.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
      security:
        - TransactionTokenAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v1/transactions/22222222-3333-4444-5555-666666666666/'
            \
              -H 'X-Transaction-Token: SDK_TOKEN'
components:
  schemas:
    TransactionDetail:
      type: object
      description: >-
        Полная запись мониторинга для одной транзакции, возвращаемая `GET
        /v3/transactions/{transaction_id}/` и `POST /v3/transactions/`.
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Стабильный идентификатор транзакции Didit. Используйте как
            `{transaction_id}` для последующих вызовов.
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            Среда приложения, которому принадлежит транзакция. Транзакция в
            `sandbox` сохраняется, но никогда не оценивается, не проверяется
            скринингом, по ней не отправляются уведомления и не взимается плата,
            поэтому пустое значение `rule_runs` означает «не оценивалась».
        transaction_number:
          type: integer
          description: >-
            Порядковый номер транзакции в рамках приложения, отображаемый в
            консоли (например, `4123`).
        txn_id:
          type: string
          description: >-
            `transaction_id`, переданный вами при создании (не более 128
            символов). Уникален в рамках приложения.
        txn_date:
          type: string
          format: date-time
          description: >-
            Когда произошла транзакция (из `transaction_at`; по умолчанию
            используется время отправки).
        zone_id:
          type: string
          nullable: true
          description: Идентификатор часового пояса IANA, указанный при создании.
        transaction_type:
          type: string
          description: >-
            Категория верхнего уровня в том виде, в котором она сохранена:
            `finance`, `kyc`, `travelRule`, `userPlatformEvent`, `gamblingBet`,
            `gamblingLimitChange`, `gamblingBonusChange`, `auditTrailEvent`.
            Обратите внимание, что значения из нескольких слов возвращаются в
            camelCase, даже если они были переданы в snake_case.
        action_type:
          type: string
          description: >-
            Подтип внутри категории (например, `deposit`, `withdrawal`,
            `transfer`). Если не указан, по умолчанию совпадает с категорией.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            Направление относительно субъекта. Сохраняется в верхнем регистре
            независимо от переданного регистра (на вход принимаются
            `in`/`out`/`inbound`/`outbound`).
        status:
          type: string
          enum:
            - APPROVED
            - IN_REVIEW
            - DECLINED
            - AWAITING_USER
          description: >-
            Текущий вердикт мониторинга. Транзакции создаются со статусом
            `APPROVED`; правила могут синхронно изменить его на
            `IN_REVIEW`/`DECLINED`.
        source:
          type: string
          enum:
            - LIVE
            - IMPORTED
          description: >-
            Происхождение записи: `LIVE` для транзакций, переданных через API
            или SDK, `IMPORTED` для транзакций, загруженных через импорт в
            панели управления.
        amount:
          type: string
          description: >-
            Сумма транзакции в виде десятичной строки без завершающих нулей
            (например, `"1500"`, `"0.5"`, `"0.123456789012345678"`). До 18
            знаков после запятой.
        currency:
          type: string
          description: >-
            Код валюты для `amount`. Принимается любой буквенный код ISO 4217
            (например, `EUR`, `USD`, `NGN`), а также символ криптоактива
            (например, `BTC`). Предпочтительно использовать находящийся в
            обращении код. Не для каждого принятого кода доступен обменный курс:
            если для кода курс отсутствует (например, расчетная единица ISO
            `XSU` или символ криптовалюты, для которого Didit не рассчитывает
            цену), автоматическая конвертация завершается ошибкой и
            `preferred_currency_amount` возвращается со значением null, если
            только в запросе не был передан предварительно сконвертированный
            `amount_in_default_currency`.
        currency_type:
          type: string
          nullable: true
          description: '`fiat` или `crypto`, как передано в `currency_kind`.'
        amount_in_default_currency:
          type: string
          nullable: true
          description: >-
            Предоставленная вами предварительно сконвертированная сумма в виде
            десятичной строки с удалёнными замыкающими нулями.
        default_currency_code:
          type: string
          nullable: true
        preferred_currency_amount:
          type: string
          nullable: true
          description: >-
            Значение `amount`, конвертированное в предпочтительную валюту
            приложения, если доступно.
        preferred_currency_code:
          type: string
          nullable: true
        payment_details:
          type: string
          nullable: true
          description: >-
            Назначение платежа или примечание из отправленных данных в виде
            произвольного текста.
        payment_txn_id:
          type: string
          nullable: true
          description: >-
            Внешний идентификатор платёжной системы (например, хэш
            блокчейн-транзакции) из `payment_reference_id`.
        score:
          type: integer
          description: >-
            Оценка риска, накопленная правилами (обычно 0–100). Выше =
            рискованнее.
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Категориальный уровень риска, установленный правилами/провайдерами
            (`UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`). `null`, пока он не
            будет задан.
        decision_reason_code:
          type: string
          nullable: true
          description: Машиночитаемая причина текущего `status`.
        decision_reason_label:
          type: string
          nullable: true
          description: Понятная метка для `decision_reason_code`.
        vendor_data:
          type: string
          nullable: true
          description: Удобная копия `vendor_data` заявителя.
        metadata:
          type: object
          description: >-
            Снимок payload `subject` и `counterparty` в том виде, в котором они
            были отправлены при создании.
        props:
          type: object
          description: >-
            Параметры `custom_properties`, переданные вами при создании. К
            каждому ключу можно обращаться в условиях правил как к
            `custom_values.<key>`.
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
              description:
                type: string
                nullable: true
              source:
                type: string
                enum:
                  - didit
                  - custom
                description: >-
                  Является ли тег предустановленным тегом Didit или
                  пользовательским.
          description: Теги, прикрепленные к транзакции (вручную или правилами).
        parties:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              role:
                type: string
                enum:
                  - APPLICANT
                  - REMITTER
                  - BENEFICIARY
                  - COUNTERPARTY
                description: >-
                  Роль стороны. Endpoint создания присваивает `APPLICANT`
                  (субъект) и `COUNTERPARTY`.
              entity_type:
                type: string
                enum:
                  - individual
                  - company
                  - external
                  - unhostedWallet
              kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
                description: >-
                  Стороны с типом `USER`/`BUSINESS` связаны с сущностью в Didit
                  через `vendor_data`. У сторон с типом `EXTERNAL` связанной
                  сущности в Didit нет.
              vendor_data:
                type: string
                nullable: true
                description: Ваш внутренний идентификатор пользователя/бизнеса.
              full_name:
                type: string
                nullable: true
              first_name:
                type: string
                nullable: true
              last_name:
                type: string
                nullable: true
              country_code:
                type: string
                nullable: true
                description: >-
                  Код страны из переданного `address.country` (обычно ISO 3166-1
                  alpha-3).
              dob:
                type: string
                format: date
                nullable: true
                description: Дата рождения из переданного `date_of_birth`.
              address:
                type: object
                description: Объект адреса в отправленном виде. `{}` при отсутствии.
              institution_info:
                type: object
                description: >-
                  Сведения об учреждении в отправленном виде. `{}` при
                  отсутствии.
              device:
                type: object
                description: >-
                  Нормализованный контекст устройства, включая обогащение данных
                  об IP на стороне сервера в network_context (геолокация, флаги
                  VPN/дата-центров), если был передан IP.
                properties:
                  fingerprint:
                    type: string
                    description: Уникальный цифровой отпечаток устройства.
                  persistent_device_id:
                    type: string
                    description: >-
                      Постоянный межсессионный идентификатор устройства (схема
                      фингерпринта v2).
                  user_agent:
                    type: string
                    description: Строка user agent браузера или приложения.
                  browser_family:
                    type: string
                    description: Семейство браузеров (например, Chrome, Firefox, Safari).
                  browser_version:
                    type: string
                    description: Строка версии браузера.
                  platform:
                    type: string
                    description: >-
                      Идентификатор платформы (web, ios, android, macos,
                      windows, linux).
                  os_family:
                    type: string
                    description: >-
                      Семейство операционной системы (например, iOS, Android,
                      Windows).
                  os_version:
                    type: string
                    description: Строка версии операционной системы.
                  accept_language:
                    type: string
                    description: Значение заголовка Accept-Language.
                  session_id:
                    type: string
                    description: Идентификатор сессии (сохранённый в метаданных).
                  session_age_ms:
                    type: number
                    description: Возраст сессии в миллисекундах.
                  network_context:
                    type: object
                    description: Сетевой контекст с IP-адресом и геолокацией.
                    properties:
                      ip_address:
                        type: string
                        description: IP-адрес клиента.
                      ip_country_code:
                        type: string
                        description: Страна, определённая по IP (ISO 3166-1 alpha-3).
                      latitude:
                        type: number
                        description: Географическая широта IP-адреса.
                      longitude:
                        type: number
                        description: Географическая долгота IP-адреса.
              external_party_snapshot:
                type: object
                nullable: true
                description: >-
                  Зафиксированная копия данных стороны для сторон типа
                  `EXTERNAL`. `null`, пока сторона связана с пользователем или
                  компанией Didit.
          description: Стороны транзакции (заявитель, контрагент).
        payment_methods:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              payment_method_type:
                type: string
                enum:
                  - bank_card
                  - bank_account
                  - e_wallet
                  - crypto_wallet
                  - unhosted_wallet
                  - other
              label:
                type: string
                nullable: true
              fingerprint:
                type: string
                nullable: true
                description: >-
                  SHA-256 от `type:account_id:issuing_country` — стабильный
                  идентификатор для отслеживания повторного использования одного
                  и того же инструмента.
              account_id:
                type: string
                nullable: true
                description: Идентификатор счёта (IBAN, адрес, token карты, …).
              issuing_country:
                type: string
                nullable: true
              owner_kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
              vendor_data:
                type: string
                nullable: true
                description: Ваш идентификатор пользователя/компании-владельца.
              owner_name:
                type: string
                nullable: true
              institution_info:
                type: object
              details:
                type: object
                description: Необработанный объект `payment_method` в переданном виде.
              external_owner_snapshot:
                type: object
                nullable: true
              role:
                type: string
                enum:
                  - SOURCE
                  - DESTINATION
                  - FUNDING
                  - BENEFICIARY
                description: >-
                  Как этот метод использовался в транзакции. Endpoint создания
                  присваивает `SOURCE`/`DESTINATION` на основе направления
                  (исходящее: субъект = SOURCE; входящее: субъект =
                  DESTINATION).
          description: Способы оплаты, привязанные к транзакции.
        documents:
          type: array
          description: >-
            Файлы, прикреплённые к транзакции из панели управления. `[]`, если
            файлы отсутствуют.
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              label:
                type: string
                nullable: true
              note:
                type: string
                nullable: true
              uploaded_by:
                type: string
                nullable: true
              created_at:
                type: string
                format: date-time
              files:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Временный подписанный URL для скачивания; запрашивайте
                        его при необходимости, а не сохраняйте.
                    original_filename:
                      type: string
                      nullable: true
                    file_size:
                      type: integer
                      nullable: true
        activities:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              activity_type:
                type: string
                description: >-
                  Например, `TRANSACTION_CREATED`, `TRANSACTION_NOTE_ADDED`,
                  `TRANSACTION_STATUS_CHANGED`.
              source:
                type: string
              status:
                type: string
                nullable: true
              title:
                type: string
                nullable: true
              description:
                type: string
                nullable: true
              metadata:
                type: object
              occurred_at:
                type: string
                format: date-time
          description: >-
            Записи журнала действий (создание, заметки, ручные проверки,
            изменения статуса).
        alerts:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              title:
                type: string
              description:
                type: string
                nullable: true
              severity:
                type: string
                enum:
                  - UNKNOWN
                  - LOW
                  - MEDIUM
                  - HIGH
                  - CRITICAL
              status:
                type: string
                enum:
                  - OPEN
                  - INVESTIGATING
                  - AWAITING_USER
                  - PENDING_SAR
                  - SAR_FILED
                  - RESOLVED
                  - DISMISSED
              source:
                type: string
                enum:
                  - RULE
                  - PROVIDER
                  - MANUAL
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
              due_at:
                type: string
                format: date-time
                nullable: true
          description: >-
            В настоящее время всегда пусто. Открытое оповещение представляет
            собой транзакцию со статусом `IN_REVIEW` или `AWAITING_USER`.
        rule_runs:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              rule:
                type: string
                format: uuid
                description: UUID правила, которое сработало.
              rule_title:
                type: string
              rule_description:
                type: string
                nullable: true
              rule_category:
                type: string
              matched:
                type: boolean
                description: >-
                  Совпали ли условия правила с этой транзакцией. Запуск
                  фиксируется только для совпавших правил, поэтому при
                  непосредственной оценке всегда возвращается `true`.
              is_test:
                type: boolean
                description: >-
                  True, когда правило выполнялось в режиме TEST (без влияния на
                  статус или скоринг).
              mode:
                type: string
                enum:
                  - ACTIVE
                  - DISABLED
                  - TEST
              severity:
                type: string
                nullable: true
              score_delta:
                type: integer
                description: Оценка, добавленная действиями `add_score` этого правила.
              status_target:
                type: string
                nullable: true
                description: >-
                  Статус, установленный действием `change_status`, если оно
                  было.
              action_summary:
                type: string
                nullable: true
                description: >-
                  Сводка действий, выполненных правилом, объединенных через `; `
                  (например, `score +30; change_status:IN_REVIEW;
                  add_tag:high_risk_country`). Компоненты: `score +N`,
                  `change_status:<STATUS>`, `add_tag:<name>`, `add_note`,
                  `add_to_list`, `open_case`. `null`, если правило не выполнило
                  никаких действий.
              metadata:
                type: object
                description: >-
                  Детали оценки: `scope_match`, `conditions[]` и
                  `aggregations[]`. Каждая запись условия содержит `field`,
                  `operator`, `expected_value`, `current_value`, считанное из
                  транзакции, `matched`, `group_index` и `group_logic`. Каждая
                  запись агрегации (скорость / количество / сумма) содержит
                  `metric`, `field`, `operator`, `expected_value`,
                  `computed_value`, вычисленное для агрегата, `window`,
                  `filters`, `matched` и `sample_references`; отложенные
                  асинхронные агрегации содержат `computed_value: null` и
                  `deferred: true`. Вложенная группа условий представляет собой
                  одну запись в `conditions[]` с `operator` `any_of` или
                  `all_of`, `field` со значением null и результатами своих
                  элементов в собственном `conditions`.
              created_at:
                type: string
                format: date-time
          description: >-
            Результаты выполнения по правилам — какое правило сработало и как
            оно повлияло на скоринг.
        provider_results:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              provider:
                type: string
              result_type:
                type: string
                enum:
                  - FIAT_MONITORING
                  - WALLET_SCREENING
                  - TRANSACTION_SCREENING
                  - TRAVEL_RULE
                  - NETWORK_GRAPH
                  - CUSTOM
              status:
                type: string
              severity:
                type: string
                nullable: true
              score:
                type: integer
              summary:
                type: string
                nullable: true
              payload:
                type: object
                description: Необработанный payload ответа провайдера.
              created_at:
                type: string
                format: date-time
          description: >-
            Необработанные payload от провайдеров (AML-скрининг,
            блокчейн-аналитика и т. д.).
        travel_rule:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TransactionTravelRule'
          description: >-
            Перевод или проверка Travel Rule. Заполняется, если были переданы
            `travel_rule_details`, а также если включён Travel Rule и транзакция
            была создана с `transaction_category: travelRule` (Didit инициирует
            обмен самостоятельно, даже без `travel_rule_details`). Имеет
            значение `null`, если перевод или проверка отсутствуют. При входящем
            переводе поля контрагента `originator_data` и `beneficiary_data`
            остаются маскированными (`data_masked: true`) до подтверждения
            владения кошельком.
        network_snapshot:
          type: object
          nullable: true
          description: >-
            Снимок графа связанных транзакций/сторон, используемый движком
            правил. Либо `network_snapshot`, переданный вместе с транзакцией,
            либо граф, который Didit строит на основе успешного AML-скрининга
            кошелька (заменяющий переданный). `null`, если нет ни того, ни
            другого.
          properties:
            uuid:
              type: string
              format: uuid
            nodes:
              type: array
              items:
                type: object
            edges:
              type: array
              items:
                type: object
            metrics:
              type: object
        remediation:
          type: object
          nullable: true
          description: >-
            Сессия устранения проблемы, предлагаемая пользователю при
            необходимости повторной верификации. Заменена на `action_required`,
            являющийся каноническим блоком; сохранена для обратной
            совместимости.
          properties:
            session_id:
              type: string
            session_token:
              type: string
            url:
              type: string
              format: uri
            status:
              type: string
        action_required:
          type: object
          nullable: true
          description: >-
            Ожидающее выполнения действие конечного пользователя, необходимое
            для завершения этой транзакции, или null, если действий нет. Didit
            SDK автоматически запускают действие по умолчанию и обновляют
            транзакцию по его завершении. Два варианта, различаемые по полю
            `type`: `verification_session` (размещённая сессия верификации,
            созданная действием правила) и `wallet_ownership` (сессия виджета
            подтверждения владения кошельком, автоматически созданная для
            перевода Travel Rule, требующего подтверждения контроля над
            кошельком; управляется настройкой Travel Rule
            `auto_wallet_verification`). Если применимы оба варианта, приоритет
            имеет `wallet_ownership`, поскольку оно блокирует обмен данными
            Travel Rule.
          oneOf:
            - $ref: '#/components/schemas/TransactionVerificationSessionAction'
            - $ref: '#/components/schemas/TransactionWalletOwnershipAction'
          discriminator:
            propertyName: type
            mapping:
              verification_session: '#/components/schemas/TransactionVerificationSessionAction'
              wallet_ownership: '#/components/schemas/TransactionWalletOwnershipAction'
        cost_breakdown:
          type: object
          nullable: true
          description: >-
            Стоимость этой транзакции: `total_price` и `items`, по одному на
            каждое списание, каждый с полями `usage_type`, `price`, `details` и
            `created_at`. Повторный скрининг той же транзакции формирует новую
            позицию.
    TransactionTravelRule:
      type: object
      description: >-
        Перевод Travel Rule для транзакции в том виде, в котором его возвращают
        `GET /v3/transactions/{transaction_id}/`, ответ `201` метода `POST
        /v3/transactions/` и каждая строка `GET /v3/transactions/`. Поля
        `direction`, `rail`, `counterparty_vasp`, `delivery`, `discovery`,
        `reason` и `next_actions` имеют ту же структуру, что и в `PATCH
        /v3/transactions/{transaction_id}/travel-rule/`, поэтому одно чтение
        транзакции объясняет, почему перевод заблокирован и что необходимо
        сделать для его продвижения.
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
        protocol:
          type: string
          nullable: true
        required:
          type: boolean
        obligations_count:
          type: integer
        originator_data:
          type: object
          description: >-
            Сторона-отправитель. Для входящего перевода значения контрагента
            маскируются до тех пор, пока владение не будет подтверждено.
        beneficiary_data:
          type: object
          description: >-
            Сторона-получатель. Для входящего перевода значения контрагента
            маскируются до подтверждения владения.
        name_match:
          type: object
          nullable: true
          description: >-
            Сравнение имен, на основе которого было принято решение по переводу
            (оценка и строгость). Null до выполнения проверки. Сравниваемые
            имена маскируются вместе со сторонами.
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: >-
            Сокращение для `data_match.mismatched_fields`. Пусто, если различий
            нет.
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: >-
            Имеет значение true, пока персональные данные контрагента
            маскируются в этом ответе.
        metadata:
          type: object
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: Какой стороной обмена является данный перевод.
        rail:
          type: string
          nullable: true
          description: >-
            Транспортная сеть (rail), через которую прошёл перевод: `INTERNAL`,
            `TRP`, `GTR`, `TRUST`, `VERIFYVASP`, `SYGNA` или `EMAIL`
            (`TEST_VASP` в приложении в песочнице, когда ответил Didit Test
            VASP), либо `null` до выбора сети.
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: >-
                Оценка дью-дилидженс от 0 до 100, где большее значение лучше. Та
                же шкала, что и в каталоге VASP.
            dd_score_breakdown:
              type: object
              description: >-
                Вклад каждого компонента в dd_score: один объект на компонент в
                соответствии со справочником VASP (jurisdiction, verification,
                protocol, lei, history, essentials, responsiveness), каждый со
                структурой {points, max, reason, detail}. Пустой объект {}, пока
                контрагент не был оценён.
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: Баллы, начисленные за этот компонент.
                  max:
                    type: integer
                    description: >-
                      Максимальное количество баллов, которое может начислить
                      этот компонент.
                  reason:
                    type: string
                    description: Машиночитаемый код вердикта компонента.
                  detail:
                    type: string
                    description: Понятная человеку причина начисления баллов.
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Когда в последний раз проводилась оценка в рамках комплексной
                проверки. Null, пока контрагент не был оценён.
          description: >-
            Запись контрагента в каталоге или `null`, если перевод не привязан
            ни к одной.
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            Последнее сообщение, которое перевод должен отправить другой
            стороне. `null`, если отправка не требовалась, например ниже
            `threshold_amount` или для заявленного некастодиального кошелька.
        discovery:
          type: array
          description: >-
            Как Didit выполнял поиск контрагента: по одной записи на каждый
            выполненный шаг. Пусто, если поиск не выполнялся, например для
            входящего перевода.
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            Причина, по которой перевод со статусом
            `COUNTERPARTY_VASP_NOT_FOUND` или `COUNTERPARTY_VASP_NOT_REACHABLE`
            приостановлен; `""` для любого другого статуса. Неудачная доставка
            определяет её в первую очередь и только при
            `COUNTERPARTY_VASP_NOT_REACHABLE`: `email_undeliverable` (почтовый
            провайдер отклонил комплаенс-письмо, и адресов для повторной попытки
            не осталось: при отправке, при напоминании или в виде постоянного
            сбоя доставки, о котором сообщено позже) или `delivery_failed`
            (канал доставки окончательно вышел из строя: сетевой канал отклонил
            сообщение или исчерпал лимит повторных попыток, хост идентификации
            `TRP` не ответил либо `TRP`-хост контрагента не принял запрос). В
            противном случае её определяет трассировка `discovery`:
            `awaiting_end_user` (ни на одном шаге не указан контрагент, с
            которым Didit может связаться), `directory_match_no_route` (на шаге
            указан VASP из каталога, у которого нет маршрута),
            `picked_member_without_proven_wallet` (конечный пользователь выбрал
            клиента Didit, который не подтвердил контроль над кошельком) или
            `no_directory_match`, если трассировка не возвращает иной причины.
            Повторная отправка продвигает перевод дальше, поэтому причина
            сбрасывается. См. [Почему перевод
            приостановлен](/ru/transaction-monitoring/travel-rule#почему-перевод-застрял).
        next_actions:
          type: array
          description: >-
            Действия, продвигающие перевод дальше; `[]` для любого статуса,
            кроме `COUNTERPARTY_VASP_NOT_FOUND` или
            `COUNTERPARTY_VASP_NOT_REACHABLE`. `email_undeliverable` предлагает
            `update_compliance_email`, затем `resend`. `delivery_failed`
            предлагает `resend`. Причина типа discovery предлагает
            `select_counterparty_vasp`, `declare_self_hosted`, `add_vasp_hint` и
            `resend`.
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TransactionVerificationSessionAction:
      title: Verification session
      type: object
      properties:
        type:
          type: string
          enum:
            - verification_session
        url:
          type: string
          format: uri
          description: Размещённый URL верификации для открытия конечным пользователем.
        session_id:
          type: string
          format: uuid
          description: ID сессии верификации.
        session_token:
          type: string
          description: >-
            token сессии, используемый мобильными SDK для нативного запуска
            сценария.
        status:
          type: string
          description: Статус сессии верификации.
      required:
        - type
        - url
    TransactionWalletOwnershipAction:
      title: Wallet ownership
      type: object
      properties:
        type:
          type: string
          enum:
            - wallet_ownership
        url:
          type: string
          format: uri
          description: >-
            Размещённый URL виджета подтверждения владения кошельком. Открывайте
            его в полноценном интерфейсе браузера: на мобильных устройствах
            используйте SFSafariViewController или Chrome Custom Tab, ни в коем
            случае не встроенный webview.
        widget_session_id:
          type: string
          format: uuid
          description: Идентификатор сессии виджета подтверждения владения кошельком.
        expires_at:
          type: string
          format: date-time
          description: Когда истекает срок сессии виджета.
      required:
        - type
        - url
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        Сравнение по каждому полю данных стороны перевода с тем, что известно
        другой стороне о владельце кошелька. Указывает поля и результаты, но
        никогда значения, сохраняя читаемость при маскировании данных
        контрагента. Имеет значение null до запуска сравнения.
      properties:
        matched:
          type: boolean
          description: True, когда ни одно из сравниваемых полей не отличается.
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: Поля, которые различаются.
        fields:
          type: object
          description: >-
            Одна запись на каждое сравниваемое поле для типа стороны (`name`,
            `date_of_birth`, `address`, `account`; у компании нет поля
            `date_of_birth`).
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: >-
                  `not_compared`, если правило имеет значение `NONE` или на
                  одной из сторон отсутствует значение для поля.
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: >-
        Запись аудита момента, когда данные контрагента были демаскированы.
        Имеет значение null, пока данные всё ещё замаскированы, а также для
        исходящих переводов.
      properties:
        at:
          type: string
          format: date-time
        reason:
          type: string
          enum:
            - ownership_confirmed
            - wallet_proof
            - address_book_match
            - own_verified_wallet
            - inquiry_approved
            - known_payment_method
            - travel_address
          description: >-
            Что подтвердило владение: ownership_confirmed (ваше подтверждение
            через консоль или API), wallet_proof (подтверждение кошелька в
            виджете или входящий перевод INTERNAL, устанавливается при его
            создании), address_book_match (верифицированный кошелёк из адресной
            книги), own_verified_wallet (собственный верифицированный кошелёк
            вашего пользователя), inquiry_approved (ваше одобрение входящего
            TRP-запроса или сообщения GTR либо Sygna), known_payment_method
            (кошелёк, с которого ваш пользователь уже совершал оплату) или
            travel_address (Travel Address конкретного кошелька, обозначающий
            этот кошелёк).
        actor:
          type: string
          description: >-
            Кто подтвердил решение: email пользователя консоли или метка
            API-ключа. Пусто для автоматического решения.
    TravelRuleDelivery:
      type: object
      description: >-
        Текущий статус последнего сообщения, которое перевод должен отправить
        другой стороне. Didit связывается с контрагентом после возврата ответа
        на запрос, создавший или изменивший перевод, поэтому данный объект
        показывает, было ли доставлено это сообщение: в очереди, отправляется,
        ожидает повторной попытки после ошибки, доставлено или произошел сбой. В
        случае сбоя, после которого сеть еще может восстановиться (нет ответа
        вовремя, ошибка соединения, HTTP `408`, `429` или `5xx`), повторная
        попытка выполняется через 30 секунд, 2 минуты, 10 минут, 30 минут и 1
        час. Если первое сообщение (`kind: SEND`) окончательно завершается сбоем
        из-за отказа сети или неудачи шестой попытки, перевод переходит в статус
        `COUNTERPARTY_VASP_NOT_REACHABLE` с полем `last_error` в истории
        `timeline`; любое другое сообщение, окончательно завершившееся ошибкой,
        фиксируется в `timeline`. Поле `status` перевода остается
        первоисточником истины для самого обмена.
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            Что содержит сообщение. `SEND`: первое сообщение перевода
            контрагенту (исходящее; канал передачи выбирается при отправке).
            `ANSWER`: ваше согласие или отклонение, направляемое запросившей
            сети (входящее). `TXID`: хеш ончейн-транзакции после завершения
            перевода. `CANCEL`: отмена после того, как вы отменили перевод.
            `POLL`: запрос статуса к сети, поддерживающей такую возможность,
            повторяемый каждые 5 минут, пока перевод ожидает ответа от
            контрагента.
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`: ожидает отправки. `SENDING`: выполняется попытка.
            `RETRYING`: попытка завершилась неудачей, следующая запустится в
            `next_attempt_at`. `DELIVERED`: принимающая сторона приняла
            сообщение. `FAILED`: принимающая сторона отклонила его или последняя
            попытка завершилась неудачей.
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: >-
            Транспортная сеть (rail), передающая сообщение. Пусто до тех пор,
            пока Didit не выберет её для первого сообщения.
        attempts:
          type: integer
          minimum: 0
          description: >-
            Количество попыток, сделанных для этого сообщения на данный момент.
            Для сообщения, не являющегося опросом статуса, выполняется не более
            6 попыток.
        last_error:
          type: string
          description: >-
            Тип сбоя, возникшего при последней попытке, либо `""`, если сбоев не
            было: например `email undeliverable`, `trp identity endpoint
            unreachable` или `trp transfer inquiry delivery failed`. Он никогда
            не содержит собственный ответ контрагента, который сохраняется в
            `timeline` перевода.

            Когда GTR возвращает ошибку, включаются собственный код состояния и
            сообщение. Тела ответов никогда не включаются.
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Время следующей попытки, пока сообщение находится в статусе `QUEUED`
            или `RETRYING`.
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: Время получения сообщения другой стороной.
    TravelRuleDiscoveryStep:
      type: object
      description: >-
        Один шаг поиска контрагента, выполненный Didit для исходящего перевода,
        в порядке их выполнения. Первый шаг, определяющий VASP с доступным
        маршрутом, завершает цепочку.
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`: другой клиент Didit, подтвердивший контроль
            над кошельком назначения. `wallet_attribution`: атрибуция
            блокчейн-аналитики кошелька. `network_lookup`: сеть, способная
            определить, какой VASP управляет адресом. `customer_hint`: имя VASP,
            LEI или юрисдикция, переданные вами в `beneficiary_data`.
            `end_user`: контрагент, выбранный конечным пользователем (или вами),
            либо запрос на его выбор.
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: >-
            `match`: шаг определил контрагента. `miss`: шаг был выполнен, но
            совпадений не найдено. `skipped`: шаг не удалось выполнить, причина
            указана в `reason`.
        reason:
          type: string
          description: >-
            Машиночитаемая причина, `""` при совпадении:
            `no_proven_internal_wallet`, `attribution_disabled`,
            `already_attributed`, `no_attributed_entity`,
            `directory_match_no_route`, `gtr_address_lookup_runs_on_dispatch`,
            `no_membership`, `network_switched_off`,
            `no_network_address_lookup`, `no_directory_match`,
            `awaiting_end_user` или `picked_member_without_proven_wallet`.
        vasp:
          type: string
          format: uuid
          nullable: true
          description: VASP из каталога, указанный на данном шаге, если он был указан.
        rail:
          type: string
          nullable: true
          description: >-
            Транспортная сеть (rail), через которую достигается этот контрагент,
            если шаг её обнаружил.
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        Одно действие, которое позволяет продвинуть перевод со статусом
        `COUNTERPARTY_VASP_NOT_FOUND` или `COUNTERPARTY_VASP_NOT_REACHABLE`. См.
        раздел [Почему перевод
        завис](/ru/transaction-monitoring/travel-rule#почему-перевод-застрял).
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`: конечный пользователь выбирает VASP
            назначения в виджете владения кошельком, либо вы отправляете PATCH с
            `action=beneficiary_vasp`. `declare_self_hosted`: конечный
            пользователь объявляет кошелёк некастодиальным в виджете.
            `add_vasp_hint`: укажите Didit, кто является контрагентом, с помощью
            названия VASP, LEI или Travel Address (например, `travel_address` в
            записи адресной книги кошелька назначения), затем повторите
            отправку. `update_compliance_email` и `resend` являются значениями
            `action` для `PATCH /v3/transactions/{transaction_id}/travel-rule/`:
            передайте адрес электронной почты комплаенс-службы контрагента
            повторно и перезапустите маршрутизацию.
        url:
          type: string
          format: uri
          description: >-
            Ссылка на виджет подтверждения владения кошельком, при
            `select_counterparty_vasp` и `declare_self_hosted`, пока у перевода
            есть открытая сессия виджета.
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        Как блокчейн перевода именует два своих кошелька, когда перевод
        выполняется не просто с одного адреса на другой. Пусто (`{}`) для
        переводов в сетях на основе аккаунтов (EVM, Solana, Tron), где эти два
        адреса и есть кошельки. Сопоставление, маршрутизация и адресная книга
        читают кошельки в первую очередь отсюда.
      properties:
        chain:
          type: string
          description: >-
            Каноническая сеть, например `BTC`, `XRP` или `LIGHTNING` для
            перевода через Lightning.
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: >-
            Для перевода UTXO: входы и выходы в сохраненном виде (суммы в виде
            десятичных строк) и то, как именно Didit интерпретировал выходы.
          properties:
            inputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            outputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            change_output_indexes:
              type: array
              items:
                type: integer
              description: Выходы, возвращающие средства обратно на адрес входа.
            beneficiary_output_index:
              type: integer
              nullable: true
              description: >-
                Выход, выплачивающий средства получателю; null, если не удалось
                определить ни один.
        lightning:
          type: object
          description: >-
            Для перевода Lightning: содержимое платежного запроса. Всегда `kind`
            (`bolt11`, `bolt12_offer`, `bolt12_invoice`,
            `bolt12_invoice_request`, `lnurl`, `lightning_address`, `node_id`
            или `unknown`); инвойс BOLT11 добавляет `network`, `payee_node_id`,
            `payment_hash`, `amount_msat`, `created_at` и `expires_at`; строка
            BOLT12 добавляет `blinded_paths` и `payee_node_id`; LNURL или
            Lightning Address добавляет свой `domain`. По сети ничего не
            запрашивается: выполняется только декодирование запроса.
          additionalProperties: true
        warnings:
          type: array
          items:
            type: string
            enum:
              - declared_originator_not_an_input
              - declared_beneficiary_not_an_output
              - beneficiary_output_ambiguous
              - beneficiary_output_amount_differs
          description: >-
            Несоответствия UTXO, заслуживающие внимания: заявленный отправитель
            отсутствует во входах (inputs), заявленный получатель отсутствует в
            выходах (outputs), невозможно выделить единственный выход получателя
            или сумма в выходе получателя отличается от указанной в транзакции.
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            Для исходящего перевода Lightning, в платежном запросе которого не
            указан получатель: причина, почему перевод имеет статус
            `NOT_APPLICABLE`. `LIGHTNING_NO_PAYEE_IDENTIFIER` (в запросе не
            указан узел получателя или запрос не удалось декодировать),
            `LIGHTNING_BOLT12_BLINDED_PAYEE` (предложение скрывает своего
            получателя за слепыми путями), `LIGHTNING_LNURL_NAMES_NO_PAYEE`
            (LNURL указывает сервис, а не получателя). Тот же код открывает
            последнюю запись `timeline` перевода.
    TravelRuleChainSide:
      type: object
      description: Кошелёк одной из сторон, определённый Didit на основе данных блокчейна.
      properties:
        address:
          type: string
          description: >-
            Кошелёк. В сетях с memo это классический адрес (XRP X-address
            разделяется на классический адрес и тег); в Lightning это
            идентификатор узла получателя или Lightning Address.
        memo:
          type: string
          description: >-
            Destination tag или memo, являющиеся частью кошелька; `""`, если
            отсутствует.
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            Откуда получен кошелёк: `declared` (ваш запрос), `x_address`
            (выделен из X-адреса XRP), `largest_input` (входной адрес UTXO с
            наибольшим вкладом), `only_non_change_output` (единственный выход
            UTXO, не являющийся сдачей), `amount_match` (единственный выход
            UTXO, выплачивающий сумму перевода), `invoice_payee` (получатель,
            указанный в платежном запросе Lightning), `updated` (установлен
            позже с помощью `action: update_originator_wallet`).
    TravelRuleUtxoEntry:
      type: object
      description: >-
        Один вход или выход UTXO-транзакции в том виде, в каком он зафиксирован
        в блокчейне.
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: >-
            Десятичная строка в единицах самой монеты (BTC, не сатоши).
            Необязательно.
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: Необязательно. Транзакция, которую расходует вход (input).
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: >-
            Необязательно. Индекс выхода (output index), который расходуется
            входом (input).
  securitySchemes:
    TransactionTokenAuth:
      type: apiKey
      in: header
      name: X-Transaction-Token
      description: >-
        Краткосрочный токен с ограниченной областью действия, сгенерированный
        вашим бэкендом через POST /v3/transactions/sdk-token/. Используется SDK
        Didit на endpoints /v1/transactions/, предназначенных для взаимодействия
        с устройством.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.