> ## 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 context del widget de titularitat de cartera

> Didit: llegeix el context públic d'una sessió del widget de titularitat de cartera amb el token: mètodes de prova, progrés i estat de finalització.

Prompt de l'API per obtenir el context del widget
Copia el prompt al porta-retalls

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

Enganxa a


## OpenAPI

````yaml ca/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ó d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/widget/{token}/:
    get:
      tags:
        - Travel Rule
      summary: Obtenir el context del giny de titularitat de la cartera
      description: >-
        Endpoint públic de lectura identificat pel token de sessió del widget,
        sense necessitat de cap clau d'API. Retorna el context del widget a més
        de l'estat de cada prova, de manera que pots fer-ne sondeig per detectar
        quan s'ha completat; completed_at deixa de ser nul un cop la prova s'ha
        verificat. Una prova SATOSHI_TEST pot romandre en estat PENDING mentre
        el seu dipòsit es detecta on-chain però encara no està confirmat: una
        tasca en segon pla el torna a comprovar automàticament i la completa un
        cop es confirma el dipòsit, per la qual cosa no cal cap acció per part
        del client mentre s'espera. Cada prova conté els camps que el seu mètode
        necessita: deposit_address, expected_amount i el seu propi expires_at
        per a SATOSHI_TEST; challenge per a MESSAGE_SIGNING. És preferible fer
        servir el webhook travel_rule.status.updated en lloc de fer sondeig quan
        la sessió està vinculada a una transferència.
      operationId: getTravelRuleWidgetContext
      parameters:
        - name: token
          in: path
          required: true
          description: Token de sessió opac retornat quan s'ha creat la sessió del widget.
          schema:
            type: string
      responses:
        '200':
          description: El context del widget i els estats de les proves.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetContext'
        '404':
          description: Token desconegut.
        '410':
          description: La sessió ha caducat sense completar-se.
      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: >-
            Nom legal del teu perfil de VASP, mostrat al client al widget. Buit
            quan no hi ha cap perfil.
        wallet_address:
          type: string
        chain:
          type: string
          description: La cadena amb què es va encunyar la sessió, tal com la vas enviar.
        chain_family:
          type: string
          nullable: true
          enum:
            - EVM
            - BTC
            - SOL
            - TRON
            - null
          description: >-
            La família de claus de la cadena: EVM (Ethereum, BNB Chain, Polygon,
            Arbitrum, Base, Optimism, Avalanche, Linea i les altres cadenes
            EVM), BTC, SOL o TRON. Una clau EVM controla la mateixa adreça a
            totes les cadenes EVM. Null quan no es pot verificar cap signatura a
            la cadena.
        holder_name:
          type: string
        allowed_methods:
          type: array
          items:
            type: string
            enum:
              - MESSAGE_SIGNING
              - SCREENSHOT
              - SATOSHI_TEST
              - SELF_DECLARATION
          description: >-
            Mètodes de prova disponibles per a aquesta sessió. MESSAGE_SIGNING
            requereix una cadena amb un chain_family, SATOSHI_TEST requereix un
            satoshi_deposit_address a la sessió i una cadena en què Didit pugui
            llegir els dipòsits, SCREENSHOT requereix la configuració
            allow_screenshot_proof i SELF_DECLARATION requereix la configuració
            allow_self_declaration.
        transfer_status:
          type: string
          nullable: true
          description: >-
            Estat de la transferència vinculada de Travel Rule. Null quan la
            sessió es va crear sense un transaction_id.
        callback_url:
          type: string
          description: >-
            On el widget retorna el client després de completar-se. Buit si no
            s'ha establert.
        expires_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: No nul un cop s'ha verificat una prova.
        proofs:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        max_attempts:
          type: integer
          description: Comprovants de cartera rebutjats que permet aquesta sessió.
        attempts_used:
          type: integer
          description: Comprovants rebutjats fins ara.
        attempts_remaining:
          type: integer
          description: >-
            Quan és 0, iniciar una altra prova respon 409 i crees una nova
            sessió del widget.
        customization:
          type: object
          nullable: true
          description: >-
            La personalització de marca blanca de l'aplicació (colors, logotip,
            família tipogràfica) quan la marca blanca està habilitada: el widget
            es renderitza amb la mateixa identitat visual que el flux de
            verificació. Null en cas contrari.
    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: l'usuari final ha triat aquest mètode i la prova encara no
            s'ha decidit. Una signatura fallida o un dipòsit de prova que encara
            no es pot llegir o confirmar manté la prova com a PENDING amb un
            failure_reason, de manera que l'usuari final pot tornar-ho a provar;
            un dipòsit SATOSHI_TEST enviat es torna a comprovar automàticament
            fins que es tanca la seva finestra temporal, i un SCREENSHOT enviat
            queda a l'espera de la teva revisió. VERIFIED: la titularitat està
            demostrada. REJECTED: el dipòsit de prova és realment incorrecte (un
            altre remitent, un import diferent de l'esperat a l'adreça de
            dipòsit, anterior al repte o una transacció que ja ha demostrat una
            altra cartera) o el teu revisor ha rebutjat la captura de pantalla;
            failure_reason indica quin ha estat el motiu. Una prova rebutjada és
            definitiva i consumeix un dels intents de la sessió. EXPIRED: la
            prova ja no es pot decidir (la finestra s'ha tancat, l'usuari final
            ha canviat de mètode, la sessió del widget ha caducat o el titular
            de la cartera ha canviat); failure_reason indica quin ha estat el
            motiu.
        wallet_address:
          type: string
        chain:
          type: string
          description: >-
            Identificador canònic de la cadena de l'entrada de la llibreta
            d'adreces a la qual correspon el comprovant, p. ex. ETH, BTC, SOL,
            TRX.
        deposit_address:
          type: string
          nullable: true
          description: >-
            Adreça de dipòsit a la qual el client ha d'enviar l'import de la
            prova Satoshi. Només present en una prova SATOSHI_TEST.
        expected_amount:
          type: string
          nullable: true
          description: >-
            Quantitat on-chain exacta, en la moneda nativa del dipòsit, amb la
            qual ha de coincidir el dipòsit de prova de Satoshi. Present només
            en una prova SATOSHI_TEST.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Data límit per a la finestra pròpia de la prova de Satoshi d'aquest
            comprovant. Present només en un comprovant SATOSHI_TEST; el camp
            expires_at de la sessió del widget s'amplia per cobrir-lo quan
            s'ofereix SATOSHI_TEST.
        challenge:
          type: string
          nullable: true
          description: >-
            Missatge emès per Didit que el client signa amb la seva cartera.
            Present només en una prova de MESSAGE_SIGNING.
        rejection_reason:
          type: string
          description: >-
            Per què s'ha rebutjat la prova, com a frase en anglès per a l'usuari
            final. Només present quan `status` és REJECTED; buit quan el teu
            revisor ha rebutjat una captura de pantalla (la teva nota es queda
            amb tu).
        created_at:
          type: string
          format: date-time
        attempts:
          type: integer
          description: >-
            Quants cops s'han enviat proves per a aquest comprovant (signatures,
            identificadors de transacció, fitxers pujats).
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Per què l'últim intent no va reeixir, o per què es va tancar la
            prova. Buit quan res no ha fallat.
    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: >-
        Per què una prova de titularitat de la cartera, o el seu últim intent,
        no ha arribat a VERIFIED. Buit si no ha fallat res. Una prova PENDING en
        pot contenir un: l'últim intent ha fallat i l'usuari final pot tornar-ho
        a provar. DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED i REVIEW_REJECTED
        tanquen la prova com a REJECTED. SIGNATURE_INVALID: la signatura no
        coincideix amb la cartera i el repte. SIGNATURE_UNSUPPORTED_SCHEME: la
        cartera ha signat en un format que Didit no verifica. DEPOSIT_NOT_FOUND,
        DEPOSIT_UNCONFIRMED, DEPOSIT_LOOKUP_FAILED: el dipòsit de prova no es
        pot llegir o encara no està confirmat; Didit continua comprovant-lo fins
        que es tanca la finestra de prova. DEPOSIT_MISMATCH: la transacció no
        envia l'import esperat des de la cartera a l'adreça de dipòsit.
        DEPOSIT_STALE: la transacció és anterior al repte. TXID_REUSED: la
        transacció ja ha provat una altra cartera. CHAIN_UNSUPPORTED: el mètode
        no està disponible en aquesta cadena. WINDOW_EXPIRED: la finestra de
        prova s'ha tancat. OWNERSHIP_CHANGED: el titular de la cartera ha
        canviat, o la cartera s'ha suprimit de la teva llibreta d'adreces,
        després que s'hagués generat la sessió del widget. METHOD_SWITCHED:
        l'usuari final ha triat un altre mètode abans d'acabar aquest.
        REVIEW_REJECTED: el teu revisor ha rebutjat la captura de pantalla.
        ABANDONED: la sessió del widget ha caducat abans que l'usuari final
        acabés.

````

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