> ## 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.

# Запуск подтверждения владения кошельком API: Travel Rule виджет

> Didit: подтверждение владения кошельком через токен виджета — подпись сообщения, Satoshi test, скриншот или самодекларация. Повтор выбора возобновляет.

Промпт API для запуска Widget Proof
Скопировать промпт в буфер обмена

<pre>
  \`Start a wallet-ownership proof for a widget session. This is the call the hosted widget makes when the end user picks a proof method; use it only if I build my own widget UI.

  Endpoint:
  POST [https://verification.didit.me/v3/travel-rule/widget/\{token}/proofs/](https://verification.didit.me/v3/travel-rule/widget/\{token}/proofs/)

  Authentication:
  None - the widget token in the URL path is the credential. Treat the token as a secret.

  Body:

  * method - one of the context's allowed\_methods: MESSAGE\_SIGNING, SATOSHI\_TEST, SCREENSHOT or SELF\_DECLARATION.
  * wallet\_address, chain - optional, default to the session's.

  Behavior:

  * 201 with a new PENDING proof. MESSAGE\_SIGNING returns the challenge to sign; SATOSHI\_TEST returns deposit\_address, expected\_amount and expires\_at; SELF\_DECLARATION is verified at once.
  * 200 with the proof already open when the same method is picked again (same challenge or amount): resume it, do not treat it as an error.
  * Picking another method closes the unfinished proof as METHOD\_SWITCHED, except a submitted screenshot or a test deposit still being checked.
  * After a REJECTED proof, picking a method starts a new one (201). A session takes a limited number of rejected proofs: the context reports max\_attempts, attempts\_used and attempts\_remaining.
  * Message signing works on EVM chains (Ethereum, BNB Chain, Polygon, Arbitrum, Base, Optimism, Avalanche, Linea and others), Bitcoin (BIP-137 and BIP-322 simple), Solana and Tron.

  Failure modes (errors carry a code to translate):

  * 400 - code CHAIN\_UNSUPPORTED when the method is not available on the chain; also an invalid body or a wallet that does not match the transfer.
  * 403 - SELF\_DECLARATION not allowed for the application.
  * 409 - code OWNERSHIP\_CHANGED: mint a new session for the current holder.
  * 409 - no attempts left (no code; the body carries attempts\_remaining 0): mint a new session.
  * 404 - unknown token. 410 - the session expired.

  Full guide: /transaction-monitoring/wallet-ownership-widget#what-it-proves.\`
</pre>

Вставьте в


## OpenAPI

````yaml ru/openapi-25.json POST /v3/travel-rule/widget/{token}/proofs/
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:
  /v3/travel-rule/widget/{token}/proofs/:
    post:
      tags:
        - Travel Rule
      summary: Запустить подтверждение владения кошельком
      description: >-
        Публичный endpoint с доступом по token сессии виджета, API-ключ не
        требуется: размещенный виджет вызывает его, когда конечный пользователь
        выбирает метод подтверждения. Подтверждение создается и учитывается в
        вашей воронке подтверждений только после этого вызова. Повторный выбор
        того же метода возвращает уже открытое подтверждение (200, тот же
        челендж или сумма депозита) вместо создания второго; выбор другого
        метода закрывает незавершенное со статусом METHOD_SWITCHED, за
        исключением уже отправленного скриншота или тестового депозита,
        находящегося на проверке. MESSAGE_SIGNING возвращает челендж для
        подписания; SATOSHI_TEST возвращает адрес депозита, точную сумму и
        временное окно; SELF_DECLARATION проверяется мгновенно (статус
        VERIFIED). Форматы подписей проверяются в зависимости от семейства
        сетей: для EVM-сетей требуется подпись personal_sign (EIP-191) в
        hex-кодировке; для Bitcoin требуется подпись signmessage по стандарту
        BIP-137 (адреса P2PKH, P2SH-P2WPKH и P2WPKH) или простая подпись BIP-322
        (адреса P2WPKH и P2TR) в кодировке base64; для Solana требуется подпись
        Ed25519 для челенджа в кодировке base58; для Tron требуется подпись
        signMessageV2 (TIP-191) в hex-кодировке. Полная подпись BIP-322, подпись
        подтверждения наличия средств или мультисиг-адрес завершаются ошибкой с
        кодом SIGNATURE_UNSUPPORTED_SCHEME.
      operationId: createTravelRuleWidgetProof
      parameters:
        - name: token
          in: path
          required: true
          description: Непрозрачный токен сессии, возвращённый при создании сессии виджета.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleWidgetProofCreate'
      responses:
        '200':
          description: Подтверждение, уже открытое для этого метода, возобновлено.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        '201':
          description: >-
            Новое подтверждение в статусе PENDING (VERIFIED для
            SELF_DECLARATION).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        '400':
          description: >-
            Недопустимое тело запроса, кошелёк не соответствует переводу,
            SCREENSHOT не разрешён или код CHAIN_UNSUPPORTED, если метод
            недоступен в данной сети.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '403':
          description: SELF_DECLARATION не разрешено для этого приложения.
        '404':
          description: Неизвестный token.
        '409':
          description: >-
            код OWNERSHIP_CHANGED: владелец кошелька изменился или кошелёк был
            удалён после создания сессии; создайте новую сессию для текущего
            владельца. Также возвращается для SATOSHI_TEST, когда у сессии нет
            satoshi_deposit_address, и когда у сессии не осталось попыток (без
            кода; тело содержит max_attempts, attempts_used и attempts_remaining
            0): создайте новую сессию.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '410':
          description: Срок действия сессии истек.
      security:
        - {}
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/
            \
              -H 'Content-Type: application/json' \
              -d '{"method": "MESSAGE_SIGNING"}'
components:
  schemas:
    TravelRuleWidgetProofCreate:
      type: object
      required:
        - method
      properties:
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
          description: >-
            Метод подтверждения, выбранный конечным пользователем. Он должен
            входить в allowed_methods контекста.
        wallet_address:
          type: string
          maxLength: 128
          description: >-
            По умолчанию соответствует wallet_address сессии. Должен совпадать с
            кошельком перевода, если сессия привязана к переводу.
        chain:
          type: string
          maxLength: 32
          description: По умолчанию соответствует блокчейну сессии.
    TravelRuleWidgetProofSummary:
      type: object
      properties:
        proof_id:
          type: string
          format: uuid
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
        status:
          type: string
          enum:
            - PENDING
            - VERIFIED
            - REJECTED
            - EXPIRED
          description: >-
            PENDING: конечный пользователь выбрал этот метод, и решение по
            подтверждению ещё не принято. Неудачная подпись или тестовый
            депозит, который ещё не удаётся прочитать или подтвердить, сохраняет
            подтверждение в статусе PENDING с указанием failure_reason, чтобы
            конечный пользователь мог повторить попытку; отправленный депозит
            SATOSHI_TEST перепроверяется автоматически до закрытия временного
            окна, а отправленный SCREENSHOT ожидает вашей проверки. VERIFIED:
            владение доказано. REJECTED: тестовый депозит явно некорректен
            (другой отправитель, сумма на адрес депозита отличается от
            ожидаемой, дата раньше челленджа или транзакция, которая уже
            подтвердила другой кошелёк) либо ваш проверяющий отклонил скриншот;
            failure_reason указывает причину. Отклонённое подтверждение
            окончательно и расходует одну из попыток сессии. EXPIRED: решение по
            подтверждению больше не может быть принято (окно закрылось, конечный
            пользователь сменил метод, время сессии виджета истекло или
            изменился владелец кошелька); failure_reason указывает причину.
        wallet_address:
          type: string
        chain:
          type: string
          description: >-
            Канонический идентификатор сети записи адресной книги, для которой
            предоставлено подтверждение, например ETH, BTC, SOL, TRX.
        deposit_address:
          type: string
          nullable: true
          description: >-
            Адрес депозита, на который клиент должен отправить тестовую сумму
            Сатоши. Присутствует только в подтверждении SATOSHI_TEST.
        expected_amount:
          type: string
          nullable: true
          description: >-
            Точная сумма ончейн в нативной валюте депозита, которой должен
            соответствовать тестовый депозит Satoshi. Присутствует только в
            доказательстве SATOSHI_TEST.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Крайний срок для окна проверки Satoshi test этого подтверждения.
            Присутствует только для подтверждения SATOSHI_TEST; собственный
            expires_at сессии виджета продлевается на этот срок, если
            предлагается SATOSHI_TEST.
        challenge:
          type: string
          nullable: true
          description: >-
            Выпущенное Didit сообщение, которое клиент подписывает своим
            кошельком. Присутствует только в подтверждении MESSAGE_SIGNING.
        rejection_reason:
          type: string
          description: >-
            Причина, по которой подтверждение было отклонено, в виде предложения
            на английском языке для конечного пользователя. Присутствует, только
            если `status` равен REJECTED; пусто, если ваш проверяющий отклонил
            скриншот (ваша заметка остаётся у вас).
        created_at:
          type: string
          format: date-time
        attempts:
          type: integer
          description: >-
            Сколько раз отправлялись доказательства для этого подтверждения
            (подписи, ID транзакций, загрузки).
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Почему последняя попытка не удалась или почему подтверждение было
            закрыто. Пусто, если сбоев не было.
    TravelRuleWidgetProofError:
      type: object
      properties:
        detail:
          type: string
          description: Понятное сообщение на английском языке.
        code:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Машиночитаемая причина, позволяющая клиенту отобразить собственное
            переведённое сообщение.
        status:
          type: string
          enum:
            - PENDING
            - VERIFIED
            - REJECTED
            - EXPIRED
          description: >-
            Присутствует, когда подтверждение закрыто: REJECTED только что
            отправленным депозитом (400), либо REJECTED или EXPIRED, когда
            доказательство отправлено для уже закрытого подтверждения (409).
        proof_id:
          type: string
          format: uuid
          description: 'Присутствует со статусом: закрытое подтверждение.'
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
          description: 'Присутствует со статусом: метод закрытого подтверждения.'
        max_attempts:
          type: integer
          description: >-
            Присутствует со статусом: отклонённые подтверждения кошелька,
            разрешённые в этой сессии.
        attempts_used:
          type: integer
          description: >-
            Присутствует со статусом: отклонённые подтверждения на данный
            момент.
        attempts_remaining:
          type: integer
          description: >-
            Присутствует со статусом: когда значение равно 0, запуск другого
            подтверждения возвращает 409 и вам нужно выпустить новую сессию
            виджета.
    TravelRuleWalletProofFailureReason:
      type: string
      enum:
        - ''
        - SIGNATURE_INVALID
        - SIGNATURE_UNSUPPORTED_SCHEME
        - DEPOSIT_NOT_FOUND
        - DEPOSIT_UNCONFIRMED
        - DEPOSIT_LOOKUP_FAILED
        - DEPOSIT_MISMATCH
        - DEPOSIT_STALE
        - TXID_REUSED
        - CHAIN_UNSUPPORTED
        - WINDOW_EXPIRED
        - OWNERSHIP_CHANGED
        - METHOD_SWITCHED
        - REVIEW_REJECTED
        - ABANDONED
      description: >-
        Причина, по которой подтверждение владения кошельком или его последняя
        попытка не получили статус VERIFIED. Пусто, если сбоев не было. Статус
        PENDING может содержать причину: последняя попытка не удалась, и
        конечный пользователь может попробовать снова. Значения
        DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED и REVIEW_REJECTED переводят
        подтверждение в статус REJECTED. SIGNATURE_INVALID: подпись не
        соответствует кошельку и запросу (вызов). SIGNATURE_UNSUPPORTED_SCHEME:
        кошелёк подписал данные в формате, который Didit не проверяет.
        DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED, DEPOSIT_LOOKUP_FAILED: тестовый
        депозит не удаётся прочитать или он ещё не подтверждён; Didit продолжает
        проверку до закрытия окна тестирования. DEPOSIT_MISMATCH: транзакция не
        отправляет ожидаемую сумму с кошелька на адрес депозита. DEPOSIT_STALE:
        транзакция была совершена до вызова. TXID_REUSED: транзакция уже
        использовалась для подтверждения другого кошелька. CHAIN_UNSUPPORTED:
        метод недоступен в этом блокчейне. WINDOW_EXPIRED: окно тестирования
        истекло. OWNERSHIP_CHANGED: владелец кошелька изменился или кошелёк был
        удалён из адресной книги после создания сессии виджета. METHOD_SWITCHED:
        конечный пользователь выбрал другой метод до завершения текущего.
        REVIEW_REJECTED: проверяющий отклонил скриншот. ABANDONED: время сессии
        виджета истекло до завершения конечным пользователем.

````

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