> ## 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 Setujui atau Tolak Bukti Dompet Tangkapan Layar

> Setujui atau tolak bukti kepemilikan dompet tangkapan layar di Didit. Persetujuan memverifikasi dompet dan menerapkannya ke transaksi terkait.

Prompt API untuk Menentukan Bukti Dompet
Salin prompt ke papan klip

<pre>
  \`Approve or reject a screenshot wallet-ownership proof from my review queue.

  Endpoint:
  POST [https://verification.didit.me/v3/travel-rule/wallet-proofs/\{proof\_uuid}/decision/](https://verification.didit.me/v3/travel-rule/wallet-proofs/\{proof_uuid}/decision/)

  Authentication:
  Use the x-api-key header with my Didit API key.

  Body:

  * decision - "approve" or "reject".
  * note - optional, up to 512 characters, kept with the proof and returned as review\_note.

  Behavior:

  * approve verifies the proof and the wallet address book entry, and applies the ownership to the transfer the widget session was minted for, exactly as a verified signature does.
  * A screenshot never confirms a transfer another Didit customer sent over the INTERNAL rail: that needs a signed message or a test deposit.
  * reject closes the proof as REJECTED with failure\_reason REVIEW\_REJECTED. It uses one of the widget session's attempts; the end user can start a new proof from the widget while attempts remain. Your note is never shown to the end user.
  * Returns the decided proof, in the same shape as the review queue.

  Failure modes:

  * 404 - no submitted screenshot proof with this id in my application.
  * 409 - already decided (the body carries its status), or code OWNERSHIP\_CHANGED when the wallet's holder changed or the wallet was deleted after the widget session was minted; ask the current holder for a new proof.
  * 400 - invalid decision or a note that is too long.
  * 401 - missing or malformed x-api-key.

  Full guide: /transaction-monitoring/wallet-ownership-widget#what-it-proves.\`
</pre>

Tempel ke


## OpenAPI

````yaml id/openapi-25.json POST /v3/travel-rule/wallet-proofs/{proof_uuid}/decision/
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/wallet-proofs/{proof_uuid}/decision/:
    post:
      tags:
        - Travel Rule
      summary: Setujui atau tolak bukti dompet berupa tangkapan layar
      description: >-
        Putuskan bukti tangkapan layar dari antrean peninjauan Anda. approve
        memverifikasi bukti dan entri buku alamat serta menerapkan kepemilikan
        ke transfer yang menjadi tujuan penerbitan sesi widget, persis seperti
        yang dilakukan verifikasi tanda tangan. Tangkapan layar tidak pernah
        mengonfirmasi transfer yang dikirim pelanggan Didit lain melalui jalur
        INTERNAL: hal tersebut memerlukan pesan bertanda tangan atau setoran uji
        coba. reject menutup bukti sebagai REJECTED dengan failure_reason
        REVIEW_REJECTED; pengguna akhir dapat memulai bukti baru dari widget.
        Catatan disimpan bersama bukti.
      operationId: decideTravelRuleWalletProof
      parameters:
        - name: proof_uuid
          in: path
          required: true
          description: proof_id dari antrean peninjauan.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleWalletProofDecision'
            example:
              decision: approve
              note: Address matches the wallet app.
      responses:
        '200':
          description: Bukti yang telah ditetapkan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWalletProofReview'
        '400':
          description: Keputusan tidak valid, atau catatan lebih dari 512 karakter.
        '401':
          description: x-api-key tidak ada atau tidak valid.
        '403':
          description: Pemanggil tidak memiliki izin transaksi.
        '404':
          description: >-
            Tidak ada bukti tangkapan layar yang dikirimkan dengan id ini di
            aplikasi Anda.
        '409':
          description: >-
            Bukti telah diputuskan (isi respons memuat statusnya), atau kode
            OWNERSHIP_CHANGED: pemegang dompet telah berubah atau dompet dihapus
            setelah sesi widget dibuat, sehingga bukti ditutup dan pemegang saat
            ini memerlukan bukti baru.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/wallet-proofs/{proof_uuid}/decision/
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"decision": "approve", "note": "Address matches the wallet app."}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.wallet_proofs.decide(
                "11111111-2222-3333-4444-555555555555",
                decision="approve",
                note="Address matches the wallet app.",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.travelRule.walletProofs.decide("11111111-2222-3333-4444-555555555555",
            {
              decision: "approve",
              note: "Address matches the wallet app.",
            });

            console.log(result);
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.TravelRuleWalletProofDecision;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().walletProofs().decide("11111111-2222-3333-4444-555555555555",
            TravelRuleWalletProofDecision.builder()
                    .decision(TravelRuleWalletProofDecision.Decision.of("approve"))
                    .note("Address matches the wallet app.")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->travelRule->walletProofs->decide('11111111-2222-3333-4444-555555555555',
            [
                'decision' => 'approve',
                'note' => 'Address matches the wallet app.',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.travel_rule.wallet_proofs.decide(
              "11111111-2222-3333-4444-555555555555",
              decision: "approve",
              note: "Address matches the wallet app."
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.TravelRule.WalletProofs.DecideAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleWalletProofDecision

            {
                Decision = "approve",
                Note = "Address matches the wallet app.",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleWalletProofDecision:
      type: object
      required:
        - decision
      properties:
        decision:
          type: string
          enum:
            - approve
            - reject
        note:
          type: string
          maxLength: 512
          description: >-
            Opsional. Disimpan bersama bukti dan dikembalikan sebagai
            review_note.
    TravelRuleWalletProofReview:
      type: object
      properties:
        proof_id:
          type: string
          format: uuid
        method:
          type: string
          enum:
            - SCREENSHOT
        status:
          type: string
          enum:
            - PENDING
            - VERIFIED
            - REJECTED
            - EXPIRED
        wallet_address:
          type: string
        chain:
          type: string
          description: Pengenal blockchain kanonis, misalnya ETH, BTC, SOL, TRX.
        holder_name:
          type: string
        is_ownership_verified:
          type: boolean
          description: >-
            Apakah entri buku alamat diverifikasi kepemilikannya, melalui bukti
            ini atau yang lain.
        transaction_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Transaksi tempat transfer Travel Rule dibuatkan sesi widget-nya.
            Null untuk sesi yang dibuat tanpa transaction_id.
        file_name:
          type: string
          nullable: true
        content_type:
          type: string
          nullable: true
        screenshot_url:
          type: string
          nullable: true
          description: >-
            Tautan dengan batas waktu ke tangkapan layar yang diunggah.
            Tampilkan antrean lagi untuk mendapatkan tautan baru.
        attempts:
          type: integer
          description: Berapa banyak file yang diunggah pengguna akhir untuk bukti ini.
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: >-
            REVIEW_REJECTED setelah penolakan, OWNERSHIP_CHANGED saat dompet
            berganti pemilik atau dihapus sebelum keputusan diambil. Jika tidak,
            kosong.
        method_chosen_at:
          type: string
          format: date-time
          nullable: true
          description: Waktu ketika pengguna akhir memilih metode tangkapan layar.
        decided_at:
          type: string
          format: date-time
          nullable: true
        decided_by:
          type: string
          description: >-
            Pihak yang menutup bukti: review:<user identifier> untuk peninjau
            konsol, review untuk keputusan kunci API, widget atau sweeper saat
            Didit menutupnya secara otomatis. Kosong selama PENDING.
        review_note:
          type: string
          description: Catatan yang dikirim bersama keputusan. Kosong jika tidak ada.
        created_at:
          type: string
          format: date-time
    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.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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