> ## 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 de contexto do widget de propriedade de carteira

> A API da Didit retorna o contexto público do widget de propriedade de carteira por token: métodos de prova permitidos, progresso e conclusão.

Prompt da API para obter o contexto do widget
Copiar o prompt para a área de transferência

<pre>
  \`Read the public context of a wallet-ownership widget session - the same endpoint the hosted widget page itself is driven by. Poll it to track proof progress from your backend.

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

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

  What to read from the response:

  * completed\_at - non-null once a proof has been verified. This is the completion signal.
  * allowed\_methods - which proof methods this session offers (MESSAGE\_SIGNING, SATOSHI\_TEST, SCREENSHOT, SELF\_DECLARATION).
    MESSAGE\_SIGNING works with wallets installed in the customer's browser, discovered in the page (EIP-6963 / Wallet Standard).
    Pairing a mobile wallet app (for example by scanning a QR code) is not available in production today.
  * transfer\_status - the linked Travel Rule transfer's status, when the session was minted with a transaction\_id.
  * proofs\[] - per-proof progress. A SATOSHI\_TEST proof carries deposit\_address, expected\_amount, and its own expires\_at; a MESSAGE\_SIGNING proof carries the challenge string. A SATOSHI\_TEST proof can sit at status PENDING while its deposit is seen on-chain but unconfirmed - a background job completes it automatically once it confirms. Each proof also carries attempts and failure\_reason (why the last attempt fell short, or why the proof closed; empty when nothing failed). A REJECTED proof carries rejection\_reason, an English sentence for the end user.
  * max\_attempts, attempts\_used, attempts\_remaining - how many rejected proofs this session allows, has had and has left. When attempts\_remaining is 0, starting another proof answers 409: mint a new session.
  * chain\_family - EVM, BTC, SOL or TRON: the key family behind chain, so a client picks the right wallet. One EVM key holds the same address on every EVM chain.
  * wallet\_address, chain (as minted, for example "ETH"), holder\_name, vasp\_name, callback\_url, expires\_at.

  Failure modes:

  * 404 - unknown token.
  * 410 - the session expired without completing.

  Prefer travel\_rule.status.updated webhooks over polling when the session is linked to a transfer.

  Full guide: /transaction-monitoring/wallet-ownership-widget#detect-completion.\`
</pre>

Colar em


## OpenAPI

````yaml pt-br/openapi-25.json GET /v3/travel-rule/widget/{token}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/widget/{token}/:
    get:
      tags:
        - Travel Rule
      summary: Obter o contexto do widget de propriedade de carteira
      description: >-
        Endpoint público de leitura identificado pelo token de sessão do widget,
        sem necessidade de chave de API. Retorna o contexto do widget e o status
        de cada prova, para que você possa consultá-lo periodicamente (polling)
        e detectar a conclusão; completed_at deixa de ser nulo quando uma prova
        é verificada. Uma prova SATOSHI_TEST pode permanecer com status PENDING
        enquanto seu depósito foi detectado on-chain, mas ainda não confirmado;
        um job em segundo plano a verifica novamente de forma automática e a
        conclui quando o depósito é confirmado, então nenhuma ação do cliente é
        necessária durante a espera. Cada prova traz os campos de que seu método
        precisa: deposit_address, expected_amount e seu próprio expires_at para
        SATOSHI_TEST; challenge para MESSAGE_SIGNING. Prefira o webhook
        travel_rule.status.updated ao polling quando a sessão estiver vinculada
        a uma transferência.
      operationId: getTravelRuleWidgetContext
      parameters:
        - name: token
          in: path
          required: true
          description: >-
            Token de sessão opaco retornado quando a sessão do widget foi
            criada.
          schema:
            type: string
      responses:
        '200':
          description: O contexto do widget e os status das provas.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetContext'
        '404':
          description: Token desconhecido.
        '410':
          description: A sessão expirou sem ser concluída.
      security:
        - {}
      x-codeSamples:
        - lang: curl
          label: curl
          source: curl https://verification.didit.me/v3/travel-rule/widget/{token}/
components:
  schemas:
    TravelRuleWidgetContext:
      type: object
      properties:
        vasp_name:
          type: string
          description: >-
            Razão social do seu perfil de VASP, exibida ao cliente no widget.
            Vazio quando não existe perfil.
        wallet_address:
          type: string
        chain:
          type: string
          description: A blockchain com a qual a sessão foi criada, como você a enviou.
        chain_family:
          type: string
          nullable: true
          enum:
            - EVM
            - BTC
            - SOL
            - TRON
            - null
          description: >-
            A família de chaves por trás de chain: EVM (Ethereum, BNB Chain,
            Polygon, Arbitrum, Base, Optimism, Avalanche, Linea e as demais
            redes EVM), BTC, SOL ou TRON. Uma única chave EVM controla o mesmo
            endereço em todas as redes EVM. Nulo quando nenhuma assinatura pode
            ser verificada na rede.
        holder_name:
          type: string
        allowed_methods:
          type: array
          items:
            type: string
            enum:
              - MESSAGE_SIGNING
              - SCREENSHOT
              - SATOSHI_TEST
              - SELF_DECLARATION
          description: >-
            Métodos de comprovação disponíveis para esta sessão. MESSAGE_SIGNING
            exige uma blockchain com chain_family, SATOSHI_TEST exige um
            satoshi_deposit_address na sessão e uma blockchain cujos depósitos a
            Didit consiga ler de volta, SCREENSHOT exige a configuração
            allow_screenshot_proof e SELF_DECLARATION exige a configuração
            allow_self_declaration.
        transfer_status:
          type: string
          nullable: true
          description: >-
            Status da transferência de Travel Rule vinculada. Nulo quando a
            sessão foi criada sem um transaction_id.
        callback_url:
          type: string
          description: >-
            Para onde o widget retorna o cliente após a conclusão. Vazio quando
            não definido.
        expires_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Não nulo depois que um comprovante é verificado.
        proofs:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        max_attempts:
          type: integer
          description: Provas de carteira rejeitadas que esta sessão permite.
        attempts_used:
          type: integer
          description: Provas rejeitadas até o momento.
        attempts_remaining:
          type: integer
          description: >-
            Quando for 0, iniciar outra prova retorna 409 e você gera uma nova
            sessão do widget.
        customization:
          type: object
          nullable: true
          description: >-
            A personalização de marca própria da aplicação (cores, logotipo,
            família de fonte) quando a marca própria está habilitada - o widget
            é exibido com a mesma identidade visual do fluxo de verificação.
            Null nos demais casos.
    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: o usuário final escolheu este método e a prova ainda não
            foi decidida. Uma assinatura que falhou ou um depósito de teste que
            ainda não pôde ser lido ou confirmado mantém a prova em PENDING com
            um failure_reason, para que o usuário final possa tentar novamente;
            um depósito SATOSHI_TEST enviado é verificado de novo
            automaticamente até sua janela se encerrar, e um SCREENSHOT enviado
            aguarda a sua revisão. VERIFIED: a propriedade está comprovada.
            REJECTED: o depósito de teste está realmente incorreto (outro
            remetente, valor diferente do esperado para o endereço de depósito,
            anterior ao desafio ou uma transação que já comprovou outra
            carteira) ou o seu revisor rejeitou a captura de tela;
            failure_reason indica qual. Uma prova rejeitada é definitiva e
            consome uma das tentativas da sessão. EXPIRED: a prova não pode mais
            ser decidida (sua janela se encerrou, o usuário final trocou de
            método, a sessão do widget expirou ou o titular da carteira mudou);
            failure_reason indica qual.
        wallet_address:
          type: string
        chain:
          type: string
          description: >-
            Identificador canônico da blockchain da entrada do catálogo de
            endereços à qual a prova se refere, por exemplo, ETH, BTC, SOL, TRX.
        deposit_address:
          type: string
          nullable: true
          description: >-
            Endereço de depósito para o qual o cliente deve enviar o valor de
            teste em Satoshi. Presente apenas em uma prova SATOSHI_TEST.
        expected_amount:
          type: string
          nullable: true
          description: >-
            Valor on-chain exato, na moeda nativa do depósito, ao qual o
            depósito de teste Satoshi deve corresponder. Presente apenas em uma
            prova SATOSHI_TEST.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Prazo da janela do teste Satoshi desta prova. Presente apenas em uma
            prova SATOSHI_TEST; o expires_at da própria sessão do widget é
            estendido para cobri-lo quando SATOSHI_TEST é oferecido.
        challenge:
          type: string
          nullable: true
          description: >-
            Mensagem emitida pela Didit que o cliente assina com a própria
            carteira. Presente apenas em uma prova MESSAGE_SIGNING.
        rejection_reason:
          type: string
          description: >-
            Por que a comprovação foi rejeitada, como uma frase em inglês para o
            usuário final. Presente apenas quando `status` é REJECTED; vazio
            quando seu revisor rejeitou uma captura de tela (sua observação fica
            só com você).
        created_at:
          type: string
          format: date-time
        attempts:
          type: integer
          description: >-
            Quantas vezes evidências foram enviadas para esta comprovação
            (assinaturas, IDs de transação, uploads).
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Por que a última tentativa não foi suficiente, ou por que a
            comprovação foi encerrada. Vazio quando nada falhou.
    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: >-
        Por que uma prova de propriedade de carteira, ou sua última tentativa,
        não chegou a VERIFIED. Vazio quando nada falhou. Uma prova PENDING pode
        ter um motivo: a última tentativa falhou e o usuário final pode tentar
        novamente. DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED e
        REVIEW_REJECTED encerram a prova como REJECTED. SIGNATURE_INVALID: a
        assinatura não corresponde à carteira e ao desafio.
        SIGNATURE_UNSUPPORTED_SCHEME: a carteira assinou em um formato que a
        Didit não verifica. DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED,
        DEPOSIT_LOOKUP_FAILED: o depósito de teste não pode ser lido ou ainda
        não foi confirmado; a Didit continua verificando-o até a janela de teste
        fechar. DEPOSIT_MISMATCH: a transação não envia o valor esperado da
        carteira para o endereço de depósito. DEPOSIT_STALE: a transação é
        anterior ao desafio. TXID_REUSED: a transação já comprovou outra
        carteira. CHAIN_UNSUPPORTED: o método não está disponível nesta
        blockchain. WINDOW_EXPIRED: a janela de teste fechou. OWNERSHIP_CHANGED:
        o titular da carteira mudou, ou a carteira foi excluída do seu catálogo
        de endereços, depois que a sessão do widget foi criada. METHOD_SWITCHED:
        o usuário final escolheu outro método antes de concluir este.
        REVIEW_REJECTED: seu revisor rejeitou a captura de tela. ABANDONED: a
        sessão do widget expirou antes de o usuário final concluir.

````

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