> ## 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 Konteks Widget Kepemilikan Dompet

> Baca konteks publik sesi widget kepemilikan dompet dengan token di Didit: metode bukti yang diizinkan, progres bukti, dan status penyelesaian.

Prompt API untuk Mendapatkan Konteks Widget
Salin prompt ke papan klip

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

Tempel ke


## OpenAPI

````yaml id/openapi-25.json GET /v3/travel-rule/widget/{token}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/widget/{token}/:
    get:
      tags:
        - Travel Rule
      summary: Dapatkan konteks widget kepemilikan dompet
      description: >-
        Endpoint baca publik yang diidentifikasi dengan token sesi widget -
        tidak memerlukan kunci API. Mengembalikan konteks widget beserta status
        setiap bukti, sehingga Anda dapat melakukan polling untuk mendeteksi
        penyelesaian; completed_at menjadi non-null setelah bukti terverifikasi.
        Bukti SATOSHI_TEST dapat berada pada status PENDING saat depositnya
        terlihat di on-chain tetapi belum dikonfirmasi - tugas latar belakang
        secara otomatis memeriksanya kembali dan menyelesaikannya setelah
        deposit terkonfirmasi, sehingga tidak diperlukan tindakan klien saat
        menunggu. Setiap bukti memuat kolom-kolom yang dibutuhkan metodenya:
        deposit_address, expected_amount, dan expires_at miliknya sendiri untuk
        SATOSHI_TEST; challenge untuk MESSAGE_SIGNING. Utamakan webhook
        travel_rule.status.updated dibandingkan polling jika sesi terhubung
        dengan transfer.
      operationId: getTravelRuleWidgetContext
      parameters:
        - name: token
          in: path
          required: true
          description: >-
            Token sesi yang tidak transparan yang dikembalikan saat sesi widget
            dibuat.
          schema:
            type: string
      responses:
        '200':
          description: Konteks widget dan status bukti.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetContext'
        '404':
          description: Token tidak dikenal.
        '410':
          description: Sesi kedaluwarsa tanpa diselesaikan.
      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: >-
            Nama resmi dari profil VASP Anda, yang ditampilkan kepada pelanggan
            di widget. Kosong jika tidak ada profil.
        wallet_address:
          type: string
        chain:
          type: string
          description: Rantai tempat sesi diterbitkan, sesuai yang Anda kirimkan.
        chain_family:
          type: string
          nullable: true
          enum:
            - EVM
            - BTC
            - SOL
            - TRON
            - null
          description: >-
            Keluarga kunci di balik rantai: EVM (Ethereum, BNB Chain, Polygon,
            Arbitrum, Base, Optimism, Avalanche, Linea, dan rantai EVM lainnya),
            BTC, SOL, atau TRON. Satu kunci EVM mengontrol alamat yang sama di
            setiap rantai EVM. Bernilai null jika tidak ada tanda tangan yang
            dapat diverifikasi pada rantai tersebut.
        holder_name:
          type: string
        allowed_methods:
          type: array
          items:
            type: string
            enum:
              - MESSAGE_SIGNING
              - SCREENSHOT
              - SATOSHI_TEST
              - SELF_DECLARATION
          description: >-
            Metode bukti yang tersedia untuk sesi ini. MESSAGE_SIGNING
            memerlukan chain dengan chain_family, SATOSHI_TEST memerlukan
            satoshi_deposit_address pada sesi dan chain yang setorannya dapat
            dibaca kembali oleh Didit, SCREENSHOT memerlukan pengaturan
            allow_screenshot_proof, dan SELF_DECLARATION memerlukan pengaturan
            allow_self_declaration.
        transfer_status:
          type: string
          nullable: true
          description: >-
            Status transfer Travel Rule yang ditautkan. Null jika sesi dibuat
            tanpa transaction_id.
        callback_url:
          type: string
          description: >-
            Tujuan widget mengarahkan pelanggan kembali setelah selesai. Kosong
            jika tidak diatur.
        expires_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Bernilai non-null setelah bukti diverifikasi.
        proofs:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        max_attempts:
          type: integer
          description: Bukti dompet yang ditolak yang diizinkan oleh sesi ini.
        attempts_used:
          type: integer
          description: Bukti yang ditolak sejauh ini.
        attempts_remaining:
          type: integer
          description: >-
            Jika bernilai 0, memulai bukti lain akan merespons dengan 409 dan
            Anda membuat sesi widget baru.
        customization:
          type: object
          nullable: true
          description: >-
            Kustomisasi White Label aplikasi (warna, logo, keluarga font) saat
            White Label diaktifkan - widget ditampilkan dengan branding yang
            sama seperti alur verifikasi. Bernilai null jika tidak.
    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: pengguna akhir memilih metode ini dan bukti belum
            diputuskan. Tanda tangan yang gagal atau deposit uji yang belum
            dapat dibaca atau belum dikonfirmasi membuat bukti tetap PENDING
            dengan failure_reason, sehingga pengguna akhir dapat mencoba lagi;
            deposit SATOSHI_TEST yang dikirimkan diperiksa ulang secara otomatis
            hingga jendelanya ditutup, dan SCREENSHOT yang dikirimkan menunggu
            peninjauan Anda. VERIFIED: kepemilikan terbukti. REJECTED: deposit
            uji benar-benar salah (pengirim lain, bukan jumlah yang diharapkan
            ke alamat deposit, lebih lama dari tantangan, atau transaksi yang
            sudah membuktikan dompet lain) atau peninjau Anda menolak tangkapan
            layar; failure_reason menyatakan alasannya. Bukti yang ditolak
            bersifat final dan menggunakan salah satu upaya sesi. EXPIRED: bukti
            tidak dapat lagi diputuskan (jendelanya ditutup, pengguna akhir
            berganti metode, sesi widget berakhir, atau pemegang dompet
            berubah); failure_reason menyatakan alasannya.
        wallet_address:
          type: string
        chain:
          type: string
          description: >-
            Pengenal blockchain kanonis untuk entri buku alamat tempat bukti
            tersebut ditujukan, misalnya ETH, BTC, SOL, TRX.
        deposit_address:
          type: string
          nullable: true
          description: >-
            Alamat deposit yang harus dikirimi jumlah Satoshi untuk pengujian
            oleh pelanggan. Hanya ada pada bukti SATOSHI_TEST.
        expected_amount:
          type: string
          nullable: true
          description: >-
            Jumlah on-chain persis, dalam mata uang asli deposit, yang harus
            cocok dengan deposit uji coba Satoshi. Hanya ada pada bukti
            SATOSHI_TEST.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Batas waktu untuk jendela Satoshi test milik bukti ini. Hanya ada
            pada bukti SATOSHI_TEST; expires_at milik sesi widget diperpanjang
            untuk mencakupnya saat SATOSHI_TEST ditawarkan.
        challenge:
          type: string
          nullable: true
          description: >-
            Pesan yang diterbitkan Didit yang ditandatangani pelanggan dengan
            dompet mereka. Hanya ada pada bukti MESSAGE_SIGNING.
        rejection_reason:
          type: string
          description: >-
            Alasan mengapa bukti ditolak, sebagai kalimat bahasa Inggris untuk
            pengguna akhir. Hanya ada jika `status` adalah REJECTED; kosong saat
            peninjau Anda menolak tangkapan layar (catatan Anda tetap tersimpan
            untuk Anda).
        created_at:
          type: string
          format: date-time
        attempts:
          type: integer
          description: >-
            Berapa kali bukti diserahkan untuk bukti ini (tanda tangan, id
            transaksi, unggahan).
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Alasan mengapa upaya terakhir gagal, atau mengapa bukti ditutup.
            Kosong jika tidak ada yang gagal.
    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: >-
        Alasan mengapa bukti kepemilikan dompet, atau upaya terakhirnya, tidak
        mencapai VERIFIED. Kosong jika tidak ada yang gagal. Bukti PENDING dapat
        memuat alasan ini: upaya terakhir gagal dan pengguna akhir dapat mencoba
        lagi. DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED, dan REVIEW_REJECTED
        menutup bukti sebagai REJECTED. SIGNATURE_INVALID: tanda tangan tidak
        cocok dengan dompet dan tantangan. SIGNATURE_UNSUPPORTED_SCHEME: dompet
        menandatangani dalam format yang tidak diverifikasi Didit.
        DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED, DEPOSIT_LOOKUP_FAILED: setoran
        uji tidak terbaca atau belum dikonfirmasi; Didit terus memeriksanya
        hingga jendela pengujian ditutup. DEPOSIT_MISMATCH: transaksi tidak
        mengirim jumlah yang diharapkan dari dompet ke alamat setoran.
        DEPOSIT_STALE: transaksi terjadi sebelum waktu tantangan. TXID_REUSED:
        transaksi telah membuktikan dompet lain. CHAIN_UNSUPPORTED: metode ini
        tidak tersedia pada rantai ini. WINDOW_EXPIRED: jendela pengujian telah
        ditutup. OWNERSHIP_CHANGED: pemegang dompet berubah, atau dompet dihapus
        dari buku alamat Anda, setelah sesi widget dibuat. METHOD_SWITCHED:
        pengguna akhir memilih metode lain sebelum menyelesaikan metode ini.
        REVIEW_REJECTED: peninjau Anda menolak tangkapan layar. ABANDONED: sesi
        widget berakhir sebelum pengguna akhir menyelesaikannya.

````

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