> ## 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 Daftar Transaksi: Pemantauan KYT

> Ambil transaksi Didit yang dipantau beserta skor risiko, tingkat keparahan, pihak lawan, tag, dan status skrining. KYT bayar per panggilan, tanpa kontrak.



Prompt API Daftar Transaksi
        Salin prompt ke papan klip



      
      

\<pre>

\`List monitored transactions for my Didit application through the Management API.

Endpoint:
GET https://verification.didit.me/v3/transactions/

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

Goal:
\- Retrieve a paginated list of high-level transaction summaries (score, severity, status, parties, tags, decision metadata) — suitable for back-office review screens, fraud dashboards, and audit exports.

Query parameters:
\- limit - page size (default 50, min 1).
\- offset — zero-based offset (default 0). Prefer following the next URL from the previous page.

Ordering & pagination:
\- Ordered by txn_date descending (most recent first), with created_at as a tie-breaker.
\- count is a bounded counter (exact up to 100, capped above). Use total_transactions when present for the true count.
\- Transactions deleted via the Console are not returned.

Filtering:
\- Besides limit / offset, this endpoint accepts travel_rule_status, an exact Travel Rule status (for example ON_HOLD), and then returns only transactions whose Travel Rule transfer is in that status.
count follows this filter, but total_transactions always counts every transaction in the application.
\- It also accepts assignee, a comma-separated list where any value matches: me (the calling reviewer, with a user token), unassigned, rules (decided by the rules alone, no reviewer involved), or a member email.
\- For other filtering (party, status, severity, date range), use the Console UI.

Example call:
curl -X GET "https://verification.didit.me/v3/transactions/?limit=50" \
-H "x-api-key: YOUR_API_KEY"

What to read from each row:
\- uuid — stable Didit transaction id; use as {transaction_id} in GET /v3/transactions/{transaction_id}/.
\- transaction_number — application-scoped sequential number shown in Console.
\- txn_id — the identifier you supplied at create time (max 128 chars, unique per application).
\- status, score, severity, decision_reason_code, decision_reason_label — live monitoring verdict.
\- direction, amount, currency — raw submission. amount is a decimal string.
\- subject_name / subject_vendor_data / subject_country — denormalized APPLICANT party fields.
\- counterparty_name / counterparty_vendor_data / counterparty_country — denormalized COUNTERPARTY fields (may be null).
\- tags — Console tags (uuid, name, color).
\- assigned_to_name — Console reviewer who owns the transaction.
\- travel_rule_status - the status of the transaction's Travel Rule transfer (for example COMPLETED), or null when it has none.
\- travel_rule - the same Travel Rule block as GET /v3/transactions/{transaction_id}/ (status, direction, rail, counterparty_vasp, delivery, discovery, reason, next_actions and the rest), or null when the transaction has none.
Read reason and next_actions to see why each COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer is stuck without one read per transaction.

Failure modes:
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401), or a key without permission for this action; the body is a { "detail": "..." } envelope.
\- 429 — rate limited; back off and retry.

Side effects: none. This is a pure read.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

Tempel ke



## OpenAPI

````yaml id/openapi-25.json GET /v3/transactions/
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/transactions/:
    get:
      tags:
        - Transactions
      summary: Daftar transaksi
      description: >-
        Daftar transaksi yang dipantau secara berpaginasi, terbaru terlebih
        dahulu (`txn_date` desc). `count` dibatasi hingga 100; gunakan
        `total_transactions` untuk jumlah baris sebenarnya. Endpoint ini tidak
        mendukung pemfilteran atau parameter pencarian.
      operationId: listTransactions
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
          description: >-
            Ukuran halaman. Nilai default-nya 50 jika dihilangkan. Tidak ada
            batasan maksimum yang diterapkan, tetapi jaga ukuran halaman tetap
            kecil demi latensi.
        - name: offset
          in: query
          schema:
            type: integer
            maximum: 1000000
            minimum: 0
            default: 0
          description: >-
            Offset berbasis nol dari rekaman pertama yang dikembalikan.
            Sebaiknya ikuti URL `next` dari halaman sebelumnya.
        - name: travel_rule_status
          in: query
          required: false
          schema:
            type: string
          description: >-
            Hanya mengembalikan transaksi yang transfer Travel Rule-nya berada
            dalam status persis ini (misalnya `ON_HOLD` atau
            `AWAITING_COUNTERPARTY`). `count` mengikuti filter ini;
            `total_transactions` tetap menghitung setiap transaksi di aplikasi.
        - name: assignee
          in: query
          required: false
          schema:
            type: string
          description: >-
            Dipisahkan koma; transaksi cocok jika memenuhi nilai apa pun.
            `unassigned` berarti belum dipegang siapa pun, `rules` berarti
            diputuskan oleh aturan sendiri tanpa peninjau, dan email anggota
            cocok dengan peninjau yang ditugaskan padanya. `me` adalah peninjau
            Konsol yang sedang masuk, sehingga kunci API yang mengirimkan `me`
            akan menerima `400`.
      responses:
        '200':
          description: Daftar ringkasan transaksi berpaginasi, terbaru terlebih dahulu.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: >-
                      Jumlah transaksi yang cocok yang dibatasi (akurat hingga
                      100, dibatasi setelahnya). Gunakan `total_transactions`
                      untuk jumlah sebenarnya saat melakukan paginasi.
                  next:
                    type: string
                    nullable: true
                    description: >-
                      URL absolut halaman berikutnya, atau `null` di halaman
                      terakhir.
                  previous:
                    type: string
                    nullable: true
                    description: >-
                      URL absolut halaman sebelumnya, atau `null` di halaman
                      pertama.
                  total_transactions:
                    type: integer
                    description: >-
                      Jumlah total persis transaksi (yang belum dihapus) untuk
                      aplikasi. Tersedia dalam respons berpaginasi.
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                          description: >-
                            Pengidentifikasi transaksi Didit yang stabil.
                            Gunakan sebagai `{transaction_id}` dalam panggilan
                            detail/catatan/terkait.
                        transaction_number:
                          type: integer
                          description: >-
                            Nomor transaksi berurutan dalam cakupan aplikasi
                            yang ditampilkan di Konsol (misalnya `4123`).
                        txn_id:
                          type: string
                          description: >-
                            Pengenal yang diberikan pelanggan dari panggilan
                            pembuatan (maks 128 karakter). Unik per aplikasi.
                        transaction_type:
                          type: string
                          description: >-
                            Kategori tingkat atas sebagaimana disimpan:
                            `finance`, `kyc`, `travelRule`, `userPlatformEvent`,
                            `gamblingBet`, `gamblingLimitChange`,
                            `gamblingBonusChange`, `auditTrailEvent`. Perhatikan
                            bahwa nilai multi-kata dikembalikan dalam camelCase
                            bahkan ketika dikirimkan dalam snake_case.
                        action_type:
                          type: string
                          description: >-
                            Subtipe dalam kategori tersebut (misalnya `deposit`,
                            `withdrawal`, `transfer`).
                        status:
                          type: string
                          enum:
                            - APPROVED
                            - IN_REVIEW
                            - DECLINED
                            - AWAITING_USER
                          description: Keputusan pemantauan saat ini.
                        direction:
                          type: string
                          enum:
                            - INBOUND
                            - OUTBOUND
                          description: >-
                            Arah relatif terhadap subjek. Disimpan dalam huruf
                            besar terlepas dari format huruf yang dikirim.
                        amount:
                          type: string
                          description: >-
                            Jumlah transaksi sebagai string desimal dengan nol
                            di akhir yang dihilangkan (misalnya `"1500"`,
                            `"0.5"`, `"0.123456789012345678"`). Hingga 18 tempat
                            desimal.
                        currency:
                          type: string
                          description: >-
                            Kode mata uang untuk `amount`. Kode alfabet ISO 4217
                            apa pun diterima (misalnya `EUR`, `USD`, `NGN`),
                            begitu pula simbol aset kripto (misalnya `BTC`).
                            Sebaiknya gunakan kode yang saat ini beredar. Tidak
                            semua kode yang diterima memiliki nilai tukar: jika
                            tidak ada nilai tukar yang tersedia untuk kode
                            tersebut (misalnya unit akuntansi ISO `XSU`, atau
                            simbol kripto yang harganya tidak ditetapkan oleh
                            Didit), konversi otomatis gagal dan
                            `preferred_currency_amount` dikembalikan sebagai
                            null kecuali permintaan menyertakan
                            `amount_in_default_currency` yang telah dikonversi
                            sebelumnya.
                        preferred_currency_amount:
                          type: string
                          nullable: true
                          description: >-
                            `amount` dikonversi ke mata uang pilihan aplikasi,
                            jika tersedia.
                        preferred_currency_code:
                          type: string
                          nullable: true
                          description: >-
                            Kode mata uang pilihan yang digunakan untuk
                            `preferred_currency_amount` - mata uang dasar
                            aplikasi, kode ISO 4217 apa pun yang saat ini
                            beredar. Kode tanpa nilai tukar yang tersedia
                            membuat `preferred_currency_amount` bernilai null
                            kecuali permintaan menyertakan
                            `amount_in_default_currency` yang telah dikonversi
                            sebelumnya.
                        payment_details:
                          type: string
                          nullable: true
                          description: >-
                            Referensi atau memo pembayaran teks bebas dari
                            pengiriman.
                        score:
                          type: integer
                          description: >-
                            Skor risiko (biasanya 0–100). Lebih tinggi = lebih
                            berisiko.
                        severity:
                          type: string
                          nullable: true
                          enum:
                            - UNKNOWN
                            - LOW
                            - MEDIUM
                            - HIGH
                            - CRITICAL
                          description: >-
                            Tingkat keparahan risiko kategoris yang ditetapkan
                            oleh aturan/penyedia (`UNKNOWN`, `LOW`, `MEDIUM`,
                            `HIGH`, `CRITICAL`). Bernilai `null` hingga ada yang
                            menetapkannya.
                        subject_name:
                          type: string
                          nullable: true
                          description: Nama lengkap pihak `APPLICANT`.
                        subject_vendor_data:
                          type: string
                          nullable: true
                          description: >-
                            Pengenal pengguna/bisnis internal Anda untuk
                            pemohon.
                        subject_country:
                          type: string
                          nullable: true
                          description: >-
                            Kode negara pemohon, dari `address.country` yang
                            dikirimkan (biasanya ISO 3166-1 alpha-3).
                        counterparty_name:
                          type: string
                          nullable: true
                          description: Nama lengkap pihak `COUNTERPARTY`, jika ada.
                        counterparty_vendor_data:
                          type: string
                          nullable: true
                          description: Pengenal internal Anda untuk pihak lawan.
                        counterparty_country:
                          type: string
                          nullable: true
                          description: >-
                            Kode negara pihak lawan, dari `address.country` yang
                            dikirimkan.
                        tags:
                          type: array
                          items:
                            type: object
                            properties:
                              uuid:
                                type: string
                                format: uuid
                              name:
                                type: string
                              color:
                                type: string
                              description:
                                type: string
                                nullable: true
                              source:
                                type: string
                                enum:
                                  - didit
                                  - custom
                                description: >-
                                  Apakah tag tersebut merupakan preset Didit
                                  atau tag kustom.
                          description: >-
                            Tag yang dilampirkan ke transaksi (secara manual
                            atau berdasarkan aturan).
                        txn_date:
                          type: string
                          format: date-time
                          description: >-
                            Kapan transaksi terjadi (dari `transaction_at` pada
                            saat pembuatan).
                        created_at:
                          type: string
                          format: date-time
                          description: Waktu ketika Didit mencatat pengiriman tersebut.
                        decision_reason_code:
                          type: string
                          nullable: true
                          description: >-
                            Alasan yang dapat dibaca mesin untuk `status` saat
                            ini (misalnya `WALLET_HIGH_RISK`).
                        decision_reason_label:
                          type: string
                          nullable: true
                          description: >-
                            Label yang mudah dibaca manusia untuk
                            `decision_reason_code`.
                        assigned_to_name:
                          type: string
                          nullable: true
                          description: >-
                            Nama tampilan peninjau Console yang ditugaskan untuk
                            transaksi ini.
                        travel_rule_status:
                          type: string
                          nullable: true
                          description: >-
                            Status transfer Travel Rule milik transaksi
                            (misalnya `COMPLETED`), atau `null` jika tidak ada.
                        travel_rule:
                          nullable: true
                          allOf:
                            - $ref: '#/components/schemas/TransactionTravelRule'
                          description: >-
                            Transfer Travel Rule milik transaksi tersebut, blok
                            yang sama dengan `travel_rule` pada `GET
                            /v3/transactions/{transaction_id}/`, atau `null`
                            jika transaksi tidak memilikinya.
              examples:
                Single transaction:
                  value:
                    count: 1
                    next: null
                    previous: null
                    total_transactions: 1
                    results:
                      - uuid: abcdef12-3456-4890-abcd-ef1234567890
                        transaction_number: 4123
                        txn_id: your-txn-2026-05-17-001
                        transaction_type: finance
                        action_type: withdrawal
                        status: IN_REVIEW
                        direction: OUTBOUND
                        amount: '1500'
                        currency: EUR
                        preferred_currency_amount: '1620.45'
                        preferred_currency_code: USD
                        payment_details: Withdrawal to crypto wallet
                        txn_date: '2026-05-17T08:42:00Z'
                        created_at: '2026-05-17T08:42:11Z'
                        score: 78
                        severity: HIGH
                        decision_reason_code: WALLET_HIGH_RISK
                        decision_reason_label: Destination wallet flagged as high risk
                        tags:
                          - uuid: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                            name: Manual review
                            color: '#F59E0B'
                            description: null
                            source: custom
                        subject_name: Maria Garcia
                        subject_vendor_data: user-12345
                        counterparty_name: null
                        counterparty_vendor_data: null
                        counterparty_country: null
                        subject_country: null
                        assigned_to_name: Alex Reviewer
                        travel_rule_status: null
                        travel_rule: null
        '403':
          description: >-
            Kunci API tidak ada, tidak valid, atau dicabut, atau kunci tersebut
            tidak dapat menampilkan daftar transaksi untuk aplikasi ini. Kunci
            yang tidak ada mengembalikan `403`; kunci yang salah, dicabut, atau
            kedaluwarsa mengembalikan `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            Batas laju terlampaui; kurangi laju permintaan dan coba lagi setelah
            interval yang ditunjukkan dalam `Retry-After`.
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/transactions/?limit=50' \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.transactions.list():
                print(item)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            for await (const item of didit.transactions.list()) {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.ListAutoPaging(ctx, didit.TransactionsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            for (var item : client.transactions().list()) {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            foreach ($didit->transactions->list() as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            didit.transactions.list.auto_paging_each do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            await foreach (var item in await client.Transactions.ListAsync())
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    TransactionTravelRule:
      type: object
      description: >-
        Transfer Travel Rule dari transaksi, sebagaimana dikembalikan oleh `GET
        /v3/transactions/{transaction_id}/`, `201` dari `POST
        /v3/transactions/`, dan setiap baris dari `GET /v3/transactions/`.
        `direction`, `rail`, `counterparty_vasp`, `delivery`, `discovery`,
        `reason`, dan `next_actions` memiliki struktur yang sama seperti pada
        `PATCH /v3/transactions/{transaction_id}/travel-rule/`, sehingga satu
        kali pembacaan transaksi dapat menjelaskan alasan transfer tertahan dan
        tindakan apa yang dapat melanjutkannya.
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
        protocol:
          type: string
          nullable: true
        required:
          type: boolean
        obligations_count:
          type: integer
        originator_data:
          type: object
          description: >-
            Pihak pengirim. Untuk transfer masuk, nilai pihak lawan disamarkan
            sampai kepemilikan dikonfirmasi.
        beneficiary_data:
          type: object
          description: >-
            Pihak penerima. Untuk transfer masuk, nilai pihak lawan disamarkan
            hingga kepemilikan dikonfirmasi.
        name_match:
          type: object
          nullable: true
          description: >-
            Perbandingan nama yang menentukan transfer (skor dan tingkat
            ketatnya). Null hingga perbandingan dijalankan. Nama-nama yang
            dibandingkan disamarkan bersama dengan para pihak.
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: >-
            Pintasan untuk `data_match.mismatched_fields`. Kosong jika tidak ada
            perbedaan.
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: True selama data pribadi pihak lawan disamarkan dalam respons ini.
        metadata:
          type: object
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: Sisi pertukaran mana transfer ini berada.
        rail:
          type: string
          nullable: true
          description: >-
            Jalur yang dilalui transfer: `INTERNAL`, `TRP`, `GTR`, `TRUST`,
            `VERIFYVASP`, `SYGNA`, atau `EMAIL` (`TEST_VASP` pada aplikasi
            sandbox, saat Test VASP Didit merespons), atau `null` hingga sebuah
            jalur dipilih.
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: >-
                Skor uji tuntas dari 0 hingga 100, dengan nilai lebih tinggi
                lebih baik. Skala yang sama seperti dalam direktori VASP.
            dd_score_breakdown:
              type: object
              description: >-
                Kontribusi per komponen ke dd_score, satu objek per komponen
                seperti di direktori VASP (jurisdiction, verification, protocol,
                lei, history, essentials, responsiveness), masing-masing
                {points, max, reason, detail}. {} sampai pihak lawan telah
                dinilai.
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: Poin yang diberikan untuk komponen ini.
                  max:
                    type: integer
                    description: Poin maksimum yang dapat diberikan komponen ini.
                  reason:
                    type: string
                    description: Kode yang dapat dibaca mesin untuk keputusan komponen.
                  detail:
                    type: string
                    description: Alasan yang dapat dibaca manusia atas poin yang diberikan.
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Waktu ketika penilaian uji tuntas terakhir kali dijalankan. Null
                hingga pihak lawan telah dinilai.
          description: >-
            Entri direktori pihak lawan, atau `null` jika transfer tidak
            menautkan apa pun.
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            Pesan terbaru yang menjadi kewajiban transfer kepada pihak lain.
            `null` jika tidak ada kewajiban, misalnya di bawah
            `threshold_amount` atau untuk dompet swakelola yang dideklarasikan.
        discovery:
          type: array
          description: >-
            Cara Didit mencari pihak lawan, satu entri per langkah yang
            dijalankan. Kosong jika tidak ada penemuan yang dijalankan, misalnya
            pada transfer masuk.
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            Alasan transfer `COUNTERPARTY_VASP_NOT_FOUND` atau
            `COUNTERPARTY_VASP_NOT_REACHABLE` tertahan; `""` untuk status
            lainnya. Pengiriman yang gagal menentukannya terlebih dahulu, hanya
            pada `COUNTERPARTY_VASP_NOT_REACHABLE`: `email_undeliverable`
            (penyedia email menolak email kepatuhan dan tidak ada alamat tersisa
            untuk dicoba: saat dikirim, pada pengingat, atau sebagai pantulan
            permanen yang dilaporkan kemudian) atau `delivery_failed` (jalur
            pengiriman gagal total: jalur jaringan menolak pesan atau kehabisan
            percobaan coba lagi, host identitas `TRP` tidak menjawab, atau host
            `TRP` pihak lawan tidak menerima permintaan informasi). Jika tidak,
            jejak `discovery` yang menentukannya: `awaiting_end_user` (tidak ada
            langkah yang menyebutkan pihak lawan yang dapat dijangkau Didit),
            `directory_match_no_route` (suatu langkah menyebutkan VASP direktori
            yang tidak memiliki rute), `picked_member_without_proven_wallet`
            (pengguna akhir memilih pelanggan Didit yang belum membuktikan
            kendali atas dompet), atau `no_directory_match` saat jejak tidak
            memberikan alasan lain. Pengiriman ulang akan memajukan transfer,
            sehingga alasannya dihapus. Lihat [Mengapa transfer
            tertahan](/id/transaction-monitoring/travel-rule#mengapa-transfer-macet).
        next_actions:
          type: array
          description: >-
            Apa yang melanjutkan transfer; `[]` untuk status apa pun selain
            `COUNTERPARTY_VASP_NOT_FOUND` atau
            `COUNTERPARTY_VASP_NOT_REACHABLE`. `email_undeliverable` menawarkan
            `update_compliance_email`, lalu `resend`. `delivery_failed`
            menawarkan `resend`. Alasan penemuan menawarkan
            `select_counterparty_vasp`, `declare_self_hosted`, `add_vasp_hint`,
            dan `resend`.
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        Perbandingan kolom demi kolom antara data pihak transfer dan apa yang
        diketahui pihak lain tentang pemegang dompet. Ini menyebutkan kolom dan
        hasil, tidak pernah nilai, sehingga tetap dapat dibaca sementara data
        pihak lawan disamarkan. Bernilai null sampai perbandingan dijalankan.
      properties:
        matched:
          type: boolean
          description: True saat tidak ada kolom yang dibandingkan yang berbeda.
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: Kolom yang berbeda.
        fields:
          type: object
          description: >-
            Satu entri per kolom yang dibandingkan untuk tipe entitas pihak
            tersebut (`name`, `date_of_birth`, `address`, `account`; perusahaan
            tidak memiliki `date_of_birth`).
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: >-
                  `not_compared` saat aturan bernilai `NONE` atau salah satu
                  pihak tidak memiliki nilai untuk kolom tersebut.
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: >-
        Catatan audit saat data pihak lawan dibuka penyamarannya. Bernilai null
        selama data masih disamarkan, dan untuk transfer keluar.
      properties:
        at:
          type: string
          format: date-time
        reason:
          type: string
          enum:
            - ownership_confirmed
            - wallet_proof
            - address_book_match
            - own_verified_wallet
            - inquiry_approved
            - known_payment_method
            - travel_address
          description: >-
            Hal yang mengonfirmasi kepemilikan: ownership_confirmed (konfirmasi
            Anda melalui konsol atau API), wallet_proof (bukti dompet di widget,
            atau transfer masuk INTERNAL, ditetapkan saat dibuat),
            address_book_match (dompet di buku alamat yang terverifikasi),
            own_verified_wallet (dompet terverifikasi milik pengguna Anda
            sendiri), inquiry_approved (persetujuan Anda atas permintaan masuk
            TRP atau pesan GTR atau Sygna), known_payment_method (dompet yang
            sudah digunakan pengguna Anda untuk membayar) atau travel_address
            (Travel Address per dompet mencantumkan dompet tersebut).
        actor:
          type: string
          description: >-
            Pihak yang mengonfirmasinya: email pengguna konsol atau label kunci
            API. Kosong untuk keputusan otomatis.
    TravelRuleDelivery:
      type: object
      description: >-
        Status pesan terbaru yang harus dikirimkan transfer ke pihak lain. Didit
        menghubungi pihak lawan setelah permintaan yang membuat atau mengubah
        transfer dikembalikan, sehingga objek ini menunjukkan apakah pesan
        tersebut berhasil terkirim: queued, being sent, waiting to be retried
        after an error, delivered, atau failed. Kegagalan yang masih dapat
        dipulihkan oleh jaringan (tidak ada jawaban tepat waktu, koneksi gagal,
        HTTP `408`, `429`, atau `5xx`) akan dicoba lagi setelah 30 detik, 2
        menit, 10 menit, 30 menit, dan 1 jam. Saat pesan pertama (`kind: SEND`)
        gagal permanen, baik karena jaringan menolaknya atau percobaan keenam
        juga gagal, transfer berpindah ke `COUNTERPARTY_VASP_NOT_REACHABLE`
        dengan `last_error` di `timeline`-nya; pesan lain yang gagal permanen
        akan dicatat di `timeline`. `status` transfer tetap menjadi sumber
        kebenaran tunggal untuk pertukaran itu sendiri.
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            Apa yang dibawa pesan. `SEND`: pesan pertama transfer ke pihak lawan
            (keluar; jalur pembayaran dipilih saat dikirim). `ANSWER`:
            persetujuan atau penolakan Anda, yang harus diberikan ke jaringan
            yang meminta (masuk). `TXID`: hash transaksi on-chain, setelah Anda
            menyelesaikan transfer. `CANCEL`: pembatalan, setelah Anda
            membatalkannya. `POLL`: kueri status ke jaringan yang menawarkannya,
            diulang setiap 5 menit saat transfer menunggu pihak lawan.
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`: menunggu untuk dikirim. `SENDING`: percobaan sedang
            berjalan. `RETRYING`: percobaan gagal dan percobaan berikutnya
            berjalan pada `next_attempt_at`. `DELIVERED`: pihak lain menerima
            pesan. `FAILED`: pihak lain menolaknya, atau percobaan terakhir
            gagal.
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: >-
            Jalur yang membawa pesan. Kosong hingga Didit memilih salah satu
            untuk pesan pertama.
        attempts:
          type: integer
          minimum: 0
          description: >-
            Percobaan yang dilakukan sejauh ini untuk pesan ini. Pesan yang
            bukan polling status dicoba paling banyak 6 kali.
        last_error:
          type: string
          description: >-
            Jenis kegagalan yang dialami pada upaya terakhir, `""` jika tidak
            ada: misalnya `email undeliverable`, `trp identity endpoint
            unreachable`, atau `trp transfer inquiry delivery failed`. Kolom ini
            tidak pernah membawa jawaban pihak lawan itu sendiri, yang tetap
            berada di `timeline` transfer.

            Ketika GTR merespons dengan kesalahan, kode status dan pesannya
            sendiri disertakan. Isi respons tidak pernah disertakan.
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Waktu upaya berikutnya dijalankan saat pesan berstatus `QUEUED` atau
            `RETRYING`.
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: Waktu pihak lain menerima pesan.
    TravelRuleDiscoveryStep:
      type: object
      description: >-
        Satu langkah penemuan pihak lawan yang dijalankan Didit untuk transfer
        keluar, sesuai urutan eksekusinya. Langkah pertama yang menyebutkan VASP
        dengan rute akan mengakhiri rantai tersebut.
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`: pelanggan Didit lain yang membuktikan
            kontrol atas dompet tujuan. `wallet_attribution`: atribusi analitik
            blockchain dompet tersebut. `network_lookup`: jaringan yang dapat
            menyatakan VASP mana yang memegang alamat tersebut. `customer_hint`:
            nama VASP, LEI, atau yurisdiksi yang Anda kirimkan di
            `beneficiary_data`. `end_user`: pihak lawan yang dipilih oleh
            pengguna akhir (atau Anda), atau permintaan untuk memilih salah
            satunya.
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: >-
            `match`: langkah tersebut menyebutkan pihak lawan. `miss`: langkah
            berjalan dan tidak menemukan apa pun. `skipped`: langkah tidak dapat
            berjalan, dan `reason` menjelaskan alasannya.
        reason:
          type: string
          description: >-
            Alasan yang dapat dibaca mesin, `""` pada kecocokan:
            `no_proven_internal_wallet`, `attribution_disabled`,
            `already_attributed`, `no_attributed_entity`,
            `directory_match_no_route`, `gtr_address_lookup_runs_on_dispatch`,
            `no_membership`, `network_switched_off`,
            `no_network_address_lookup`, `no_directory_match`,
            `awaiting_end_user` atau `picked_member_without_proven_wallet`.
        vasp:
          type: string
          format: uuid
          nullable: true
          description: VASP direktori yang disebutkan oleh langkah tersebut, jika ada.
        rail:
          type: string
          nullable: true
          description: >-
            Jalur yang menjangkau pihak lawan tersebut, ketika langkah
            menemukannya.
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        Satu hal yang melanjutkan transfer `COUNTERPARTY_VASP_NOT_FOUND` atau
        `COUNTERPARTY_VASP_NOT_REACHABLE`. Lihat [Mengapa transfer
        terhenti](/id/transaction-monitoring/travel-rule#mengapa-transfer-macet).
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`: pengguna akhir memilih VASP tujuan di
            widget kepemilikan dompet, atau Anda melakukan PATCH
            `action=beneficiary_vasp`. `declare_self_hosted`: pengguna akhir
            menyatakan dompet tersebut swakelola di dalam widget.
            `add_vasp_hint`: beri tahu Didit siapa pihak lawannya, dengan nama
            VASP, LEI, atau Travel Address (misalnya `travel_address` pada entri
            buku alamat dompet tujuan), lalu kirim ulang.
            `update_compliance_email` dan `resend` adalah nilai `action` dari
            `PATCH /v3/transactions/{transaction_id}/travel-rule/`: berikan
            kembali email kepatuhan pihak lawan, dan jalankan perutean ulang.
        url:
          type: string
          format: uri
          description: >-
            Tautan widget kepemilikan dompet, pada `select_counterparty_vasp`
            dan `declare_self_hosted` saat transfer memiliki sesi widget yang
            terbuka.
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        Bagaimana rantai transfer menamai kedua dompetnya, ketika melibatkan
        lebih dari satu alamat yang membayar satu sama lain. Kosong (`{}`) untuk
        transfer rantai akun (EVM, Solana, Tron), di mana kedua alamat tersebut
        adalah dompetnya. Pencocokan, perutean, dan buku alamat membaca dompet
        dari sini terlebih dahulu.
      properties:
        chain:
          type: string
          description: >-
            Blockchain kanonis, misalnya `BTC`, `XRP`, atau `LIGHTNING` untuk
            transfer Lightning.
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: >-
            Pada transfer UTXO: input dan output sebagaimana disimpan (jumlah
            dalam bentuk string desimal) dan output mana yang dibaca Didit
            sebagai apa.
          properties:
            inputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            outputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            change_output_indexes:
              type: array
              items:
                type: integer
              description: Output yang membayar kembali alamat input.
            beneficiary_output_index:
              type: integer
              nullable: true
              description: >-
                Output yang membayar penerima; null jika tidak ada yang dapat
                dibedakan.
        lightning:
          type: object
          description: >-
            Pada transfer Lightning: apa yang tertera pada permintaan
            pembayaran. Selalu berupa `kind` (`bolt11`, `bolt12_offer`,
            `bolt12_invoice`, `bolt12_invoice_request`, `lnurl`,
            `lightning_address`, `node_id`, atau `unknown`); faktur BOLT11
            menambahkan `network`, `payee_node_id`, `payment_hash`,
            `amount_msat`, `created_at`, dan `expires_at`; string BOLT12
            menambahkan `blinded_paths` dan `payee_node_id`; LNURL atau
            Lightning Address menambahkan `domain`-nya. Tidak ada yang
            di-resolve melalui jaringan: permintaan hanya didekode.
          additionalProperties: true
        warnings:
          type: array
          items:
            type: string
            enum:
              - declared_originator_not_an_input
              - declared_beneficiary_not_an_output
              - beneficiary_output_ambiguous
              - beneficiary_output_amount_differs
          description: >-
            Inkonsistensi UTXO yang perlu diperiksa: pengirim yang
            dideklarasikan bukan merupakan input, penerima yang dideklarasikan
            bukan merupakan output, tidak ada satu pun output penerima yang
            dapat dibedakan, atau output penerima membayar jumlah yang berbeda
            dari yang tertera pada transaksi.
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            Pada transfer Lightning keluar yang permintaan pembayarannya tidak
            menyebutkan penerima: alasan transfer berstatus `NOT_APPLICABLE`.
            `LIGHTNING_NO_PAYEE_IDENTIFIER` (permintaan tidak menyebutkan node
            penerima, atau tidak dapat didekode),
            `LIGHTNING_BOLT12_BLINDED_PAYEE` (penawaran menyembunyikan
            penerimanya di balik blinded path), `LIGHTNING_LNURL_NAMES_NO_PAYEE`
            (LNURL menyebutkan nama layanan, bukan penerima). Kode yang sama
            membuka entri `timeline` terakhir dari transfer.
    TravelRuleChainSide:
      type: object
      description: >-
        Dompet salah satu pihak sebagaimana Didit menyelesaikannya dari data
        chain.
      properties:
        address:
          type: string
          description: >-
            Dompet. Pada jaringan memo berupa alamat klasik (alamat X XRP
            dipisahkan menjadi alamat klasik dan tag-nya); pada Lightning berupa
            ID node penerima pembayaran atau Lightning Address.
        memo:
          type: string
          description: >-
            Destination tag atau memo yang merupakan bagian dari dompet; `""`
            jika tidak ada.
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            Asal dompet: `declared` (permintaan Anda), `x_address` (dipisahkan
            dari X-address XRP), `largest_input` (alamat input UTXO yang
            berkontribusi paling banyak), `only_non_change_output` (satu-satunya
            output UTXO yang bukan kembalian), `amount_match` (satu output UTXO
            yang membayar jumlah transfer), `invoice_payee` (penerima pembayaran
            yang disebutkan dalam permintaan pembayaran Lightning), `updated`
            (ditetapkan kemudian dengan `action: update_originator_wallet`).
    TravelRuleUtxoEntry:
      type: object
      description: >-
        Satu input atau output dari transaksi UTXO, sebagaimana dicatat oleh
        rantai blockchain.
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: >-
            String desimal dalam unit koin itu sendiri (BTC, bukan satoshi).
            Opsional.
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: Opsional. Transaksi yang digunakan oleh input.
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: Opsional. Indeks output yang digunakan oleh input.
  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.