> ## 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 del widget de propiedad de wallet

> La API de Didit lee por token el contexto público de una sesión del widget de propiedad de wallet: métodos de prueba permitidos, progreso y estado.

Prompt para la API de obtención del contexto del widget
Copiar el prompt al portapapeles

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

Pegar en


## OpenAPI

````yaml es/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 verificación de identidad. Autentícate con el encabezado x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/widget/{token}/:
    get:
      tags:
        - Travel Rule
      summary: Obtener el contexto del widget de propiedad de wallets
      description: >-
        Endpoint público de lectura identificado por el token de sesión del
        widget; no requiere clave de API. Devuelve el contexto del widget junto
        con el estado de cada prueba, para que puedas consultarlo periódicamente
        y detectar cuándo se completa; completed_at deja de ser null en cuanto
        se verifica una prueba. Una prueba SATOSHI_TEST puede permanecer en
        status PENDING mientras su depósito se ve on-chain pero sin confirmar:
        un proceso en segundo plano la vuelve a comprobar automáticamente y la
        completa cuando el depósito se confirma, así que el cliente no tiene que
        hacer nada mientras espera. Cada prueba incluye los campos que necesita
        su método: deposit_address, expected_amount y su propio expires_at para
        SATOSHI_TEST; challenge para MESSAGE_SIGNING. Cuando la sesión está
        vinculada a una transferencia, es preferible usar el webhook
        travel_rule.status.updated en lugar de la consulta periódica.
      operationId: getTravelRuleWidgetContext
      parameters:
        - name: token
          in: path
          required: true
          description: >-
            Token de sesión opaco devuelto cuando se generó la sesión del
            widget.
          schema:
            type: string
      responses:
        '200':
          description: El contexto del widget y los estados de las pruebas.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetContext'
        '404':
          description: Token desconocido.
        '410':
          description: La sesión expiró sin completarse.
      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: >-
            Nombre legal de tu perfil de VASP, que se muestra al cliente en el
            widget. Vacío si no existe ningún perfil.
        wallet_address:
          type: string
        chain:
          type: string
          description: La cadena con la que se creó la sesión, tal como la enviaste.
        chain_family:
          type: string
          nullable: true
          enum:
            - EVM
            - BTC
            - SOL
            - TRON
            - null
          description: >-
            La familia de claves que corresponde a chain: EVM (Ethereum, BNB
            Chain, Polygon, Arbitrum, Base, Optimism, Avalanche, Linea y las
            demás cadenas EVM), BTC, SOL o TRON. Una misma clave EVM controla la
            misma dirección en todas las cadenas EVM. Es nulo cuando no se puede
            verificar ninguna firma en la cadena.
        holder_name:
          type: string
        allowed_methods:
          type: array
          items:
            type: string
            enum:
              - MESSAGE_SIGNING
              - SCREENSHOT
              - SATOSHI_TEST
              - SELF_DECLARATION
          description: >-
            Métodos de prueba disponibles para esta sesión. MESSAGE_SIGNING
            requiere una cadena con chain_family, SATOSHI_TEST requiere un
            satoshi_deposit_address en la sesión y una cadena cuyos depósitos
            Didit pueda leer, SCREENSHOT requiere la configuración
            allow_screenshot_proof y SELF_DECLARATION requiere la configuración
            allow_self_declaration.
        transfer_status:
          type: string
          nullable: true
          description: >-
            Estado de la transferencia de Travel Rule vinculada. Null cuando la
            sesión se creó sin transaction_id.
        callback_url:
          type: string
          description: >-
            Adónde devuelve el widget al cliente al finalizar. Vacío si no se ha
            configurado.
        expires_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: No es nulo una vez que se ha verificado una prueba.
        proofs:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        max_attempts:
          type: integer
          description: Pruebas de wallet rechazadas que permite esta sesión.
        attempts_used:
          type: integer
          description: Pruebas rechazadas hasta el momento.
        attempts_remaining:
          type: integer
          description: >-
            Cuando es 0, iniciar otra prueba responde 409 y tienes que generar
            una nueva sesión del widget.
        customization:
          type: object
          nullable: true
          description: >-
            La personalización de marca blanca de la aplicación (colores,
            logotipo, familia tipográfica) cuando la marca blanca está
            habilitada: el widget se muestra con la misma imagen de marca que el
            flujo de verificación. Null en caso contrario.
    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: el usuario final eligió este método y la prueba aún no se
            ha decidido. Una firma fallida o un depósito de prueba que todavía
            no se puede leer o no está confirmado mantiene la prueba en PENDING
            con un failure_reason, para que el usuario final pueda volver a
            intentarlo; un depósito SATOSHI_TEST enviado se vuelve a comprobar
            automáticamente hasta que se cierra su ventana, y una SCREENSHOT
            enviada queda a la espera de tu revisión. VERIFIED: la propiedad
            está demostrada. REJECTED: el depósito de prueba es realmente
            incorrecto (otro remitente, un importe distinto del esperado a la
            dirección de depósito, anterior al desafío o una transacción que ya
            demostró otra wallet) o tu revisor rechazó la captura de pantalla;
            failure_reason indica el motivo. Una prueba rechazada es definitiva
            y consume uno de los intentos de la sesión. EXPIRED: la prueba ya no
            se puede decidir (su ventana se cerró, el usuario final cambió de
            método, la sesión del widget caducó o cambió el titular de la
            wallet); failure_reason indica el motivo.
        wallet_address:
          type: string
        chain:
          type: string
          description: >-
            Identificador canónico de la cadena de la entrada de la libreta de
            direcciones a la que corresponde la prueba, p. ej., ETH, BTC, SOL,
            TRX.
        deposit_address:
          type: string
          nullable: true
          description: >-
            Dirección de depósito a la que el cliente debe enviar el importe de
            la prueba Satoshi. Solo está presente en una prueba SATOSHI_TEST.
        expected_amount:
          type: string
          nullable: true
          description: >-
            Importe on-chain exacto, en la moneda nativa del depósito, con el
            que debe coincidir el depósito de prueba de Satoshi. Solo está
            presente en una prueba SATOSHI_TEST.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Fecha límite de la ventana de prueba Satoshi propia de esta prueba.
            Solo está presente en una prueba SATOSHI_TEST; el expires_at propio
            de la sesión del widget se amplía para cubrirla cuando se ofrece
            SATOSHI_TEST.
        challenge:
          type: string
          nullable: true
          description: >-
            Mensaje emitido por Didit que el cliente firma con su wallet. Solo
            está presente en una prueba MESSAGE_SIGNING.
        rejection_reason:
          type: string
          description: >-
            Por qué se rechazó la prueba, como una frase en inglés para el
            usuario final. Solo está presente cuando `status` es REJECTED; vacío
            cuando tu revisor rechazó una captura de pantalla (tu nota se queda
            contigo).
        created_at:
          type: string
          format: date-time
        attempts:
          type: integer
          description: >-
            Cuántas veces se envió evidencia para esta prueba (firmas, ids de
            transacción, archivos subidos).
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Por qué el último intento no fue suficiente, o por qué se cerró la
            prueba. Vacío cuando nada falló.
    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 qué una prueba de propiedad de wallet, o su último intento, no llegó
        a VERIFIED. Vacío cuando nada falló. Una prueba PENDING puede tener uno:
        el último intento falló y el usuario final puede volver a intentarlo.
        DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED y REVIEW_REJECTED cierran
        la prueba como REJECTED. SIGNATURE_INVALID: la firma no coincide con la
        wallet y el desafío. SIGNATURE_UNSUPPORTED_SCHEME: la wallet firmó en un
        formato que Didit no verifica. DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED,
        DEPOSIT_LOOKUP_FAILED: el depósito de prueba no se puede leer o aún no
        está confirmado; Didit sigue comprobándolo hasta que se cierra la
        ventana de prueba. DEPOSIT_MISMATCH: la transacción no envía el importe
        esperado desde la wallet a la dirección de depósito. DEPOSIT_STALE: la
        transacción es anterior al desafío. TXID_REUSED: la transacción ya
        sirvió como prueba de otra wallet. CHAIN_UNSUPPORTED: el método no está
        disponible en esta cadena. WINDOW_EXPIRED: se cerró la ventana de
        prueba. OWNERSHIP_CHANGED: el titular de la wallet cambió, o la wallet
        se eliminó de tu libreta de direcciones, después de que se generara la
        sesión del widget. METHOD_SWITCHED: el usuario final eligió otro método
        antes de terminar este. REVIEW_REJECTED: tu revisor rechazó la captura
        de pantalla. ABANDONED: la sesión del widget caducó antes de que el
        usuario final terminara.

````

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