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

# Mulai Bukti Kepemilikan Dompet API - Travel Rule Widget

> Mulai bukti dompet dengan token sesi widget Didit: tanda tangan pesan, Satoshi test, tangkapan layar, atau deklarasi. Memilih lagi melanjutkannya.

Prompt API untuk Memulai Widget Proof
Salin prompt ke papan klip

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

Tempel ke


## OpenAPI

````yaml id/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 Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/widget/{token}/proofs/:
    post:
      tags:
        - Travel Rule
      summary: Mulai pembuktian kepemilikan dompet
      description: >-
        Endpoint publik yang diidentifikasi dengan token sesi widget, tidak
        memerlukan kunci API: widget yang di-hosting memanggilnya saat pengguna
        akhir memilih metode bukti. Bukti ada, dan dihitung dalam funnel bukti
        Anda, hanya dari panggilan ini. Memilih metode yang sama lagi
        mengembalikan bukti yang sudah terbuka (200, challenge atau jumlah
        deposit yang sama) alih-alih memulai yang kedua; memilih metode lain
        menutup bukti yang belum selesai sebagai METHOD_SWITCHED, kecuali
        screenshot yang sudah dikirimkan atau deposit uji yang masih diperiksa.
        MESSAGE_SIGNING mengembalikan challenge untuk ditandatangani;
        SATOSHI_TEST mengembalikan alamat deposit, jumlah pasti, dan jendela
        waktu; SELF_DECLARATION langsung diverifikasi seketika (status
        VERIFIED). Format tanda tangan yang diverifikasi per rumpun rantai:
        rantai EVM menerima tanda tangan personal_sign (EIP-191), dienkode hex;
        Bitcoin menerima tanda tangan signmessage BIP-137 (alamat P2PKH,
        P2SH-P2WPKH, dan P2WPKH) atau tanda tangan sederhana BIP-322 (alamat
        P2WPKH dan P2TR), dienkode base64; Solana menerima tanda tangan Ed25519
        atas challenge, dienkode base58; Tron menerima tanda tangan
        signMessageV2 (TIP-191), dienkode hex. Tanda tangan BIP-322 penuh atau
        bukti dana, atau alamat multisig, gagal dengan
        SIGNATURE_UNSUPPORTED_SCHEME.
      operationId: createTravelRuleWidgetProof
      parameters:
        - name: token
          in: path
          required: true
          description: >-
            Token sesi yang tidak transparan yang dikembalikan saat sesi widget
            dibuat.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleWidgetProofCreate'
      responses:
        '200':
          description: Bukti yang sudah terbuka untuk metode ini, dilanjutkan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        '201':
          description: Bukti PENDING baru (VERIFIED untuk SELF_DECLARATION).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        '400':
          description: >-
            Body tidak valid, dompet yang tidak cocok dengan transfer,
            SCREENSHOT tidak diizinkan, atau kode CHAIN_UNSUPPORTED saat metode
            tidak tersedia pada blockchain tersebut.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '403':
          description: SELF_DECLARATION tidak diizinkan untuk aplikasi ini.
        '404':
          description: Token tidak dikenal.
        '409':
          description: >-
            kode OWNERSHIP_CHANGED: pemegang dompet berubah atau dompet dihapus
            setelah sesi dibuat; buat sesi baru untuk pemegang saat ini. Juga
            dikembalikan untuk SATOSHI_TEST ketika sesi tidak memiliki
            satoshi_deposit_address, dan ketika sesi tidak memiliki sisa
            percobaan (tidak ada kode; isi memuat max_attempts, attempts_used,
            dan attempts_remaining 0): buat sesi baru.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '410':
          description: Sesi kedaluwarsa.
      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: >-
            Metode bukti yang dipilih pengguna akhir. Harus berupa salah satu
            dari allowed_methods milik konteks.
        wallet_address:
          type: string
          maxLength: 128
          description: >-
            Default-nya adalah wallet_address sesi. Harus cocok dengan dompet
            transfer saat sesi ditautkan ke suatu transfer.
        chain:
          type: string
          maxLength: 32
          description: Default-nya adalah blockchain sesi.
    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.
    TravelRuleWidgetProofError:
      type: object
      properties:
        detail:
          type: string
          description: Pesan dalam bahasa Inggris yang mudah dibaca manusia.
        code:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            Alasan yang dapat dibaca mesin, agar klien dapat menampilkan pesan
            terjemahannya sendiri.
        status:
          type: string
          enum:
            - PENDING
            - VERIFIED
            - REJECTED
            - EXPIRED
          description: >-
            Hadir ketika bukti ditutup: REJECTED oleh deposit yang baru saja
            dikirimkan (400), atau REJECTED atau EXPIRED ketika bukti pendukung
            dikirimkan ke bukti yang sudah ditutup (409).
        proof_id:
          type: string
          format: uuid
          description: 'Hadir dengan status: bukti yang ditutup.'
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
          description: 'Hadir dengan status: metode bukti yang ditutup.'
        max_attempts:
          type: integer
          description: >-
            Hadir dengan status: bukti dompet yang ditolak yang diizinkan sesi
            ini.
        attempts_used:
          type: integer
          description: 'Hadir dengan status: bukti yang ditolak sejauh ini.'
        attempts_remaining:
          type: integer
          description: >-
            Hadir dengan status: jika 0, memulai bukti lain akan menghasilkan
            409 dan Anda perlu membuat sesi widget baru.
    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.