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

# Panduan Pengujian Travel Rule di Sandbox Didit

> Uji semua hasil Travel Rule di sandbox dengan Didit Test VASP: diterima, ditolak, nama tak cocok, tak dapat dijangkau, timeout, dompet swakelola.

Sebuah aplikasi sandbox bertukar data Travel Rule dengan satu pihak lawan saja: **Didit Test VASP**, sebuah VASP uji yang terintegrasi dalam platform. VASP ini menjawab setiap transfer sesuai dengan instruksi Anda, melalui kode yang sama dengan yang menangani pihak lawan sungguhan, sehingga Anda dapat memantau setiap status, entri linimasa, dan webhook dari sebuah pertukaran sebelum Anda beralih ke produksi.

Tidak ada yang Anda kirim di sandbox yang keluar dari Didit. Tidak ada jaringan, penerima email, atau pelanggan Didit lain yang pernah dihubungi, dan tidak ada biaya yang dikenakan.

## Sebelum memulai

1. Gunakan kunci API dari aplikasi **sandbox**. Aplikasi produksi tidak pernah terhubung ke VASP uji.
2. Aktifkan Travel Rule dengan nama hukum:

```bash theme={null}
curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"is_enabled": true, "legal_name": "Example CASP Sandbox"}'
```

3. Secara opsional, daftarkan tujuan webhook ke `travel_rule.status.updated`. Sandbox mengirimkannya dengan penanda `"environment": "sandbox"`.

## Didit Test VASP

`GET /v1/sandbox/scenarios/` mengembalikan profil VASP uji dan setiap skenario dalam objek `travel_rule`-nya, sehingga pengujian Anda dapat membaca nilai pemicu alih-alih menuliskannya secara tetap:

| Kolom | Nilai |
| - | - |
| `legal_name` | `Didit Test VASP` |
| `lei` | `DIDITESTVASP00000001`, formatnya valid tetapi tidak terdaftar |
| `jurisdiction` | `GB` |
| `compliance_email` | Alamat di bawah `didit.test`, tidak pernah dikirimi email |
| `travel_address` | Travel Address di bawah host `.test`, tidak pernah dapat dijangkau |
| `network_codes` | Kode uji yang tidak pernah dihubungi |
| `default_scenario` | `accept` |
| `inbound_scenarios` | `["accept", "name_mismatch"]` |

Setiap nilai adalah data uji. VASP uji bukan anggota jaringan Travel Rule mana pun, dan tidak ada hasil di sandbox yang menunjukkan bahwa pihak lawan atau jaringan sungguhan dapat dijangkau.

## Skenario keluar

Setiap transaksi `travelRule` keluar dari aplikasi sandbox yang membutuhkan pertukaran akan diarahkan ke VASP uji. Pilih hasilnya dengan alamat dompet penerima (huruf besar kecil tidak berpengaruh), atau dengan nama penerima berbentuk `Didit Test VASP <suffix>`; dompet akan diutamakan jika keduanya diisi. Jika keduanya tidak diisi, atau sufiksnya tidak ada dalam tabel, transfer akan selesai (`accept`).

Transfer yang tidak membutuhkan pertukaran tidak pernah mencapai VASP uji: transfer di bawah `threshold_amount` Anda, transfer ke dompet terverifikasi milik pengguna Anda sendiri, dan transfer yang dompet pihak lawannya telah Anda nyatakan sebagai dompet swakelola. VASP pihak lawan yang dipilih Anda atau pengguna akhir Anda secara manual dari direktori dinilai berdasarkan rute yang akan dimiliki aplikasi produksi: jika entrinya memiliki rute (endpoint `TRP` yang terverifikasi, jaringan tempat aplikasi Anda mengirim, atau kontak kepatuhan), transfer diarahkan ke VASP uji; jika tidak memiliki rute, transfer berakhir dengan `COUNTERPARTY_VASP_NOT_FOUND`, sebagaimana yang terjadi di aplikasi produksi.

| Skenario | Sufiks nama | Dompet (ETH) | Berakhir di |
| - | - | - | - |
| `accept` | tidak ada | `0xc00c4cd93ff83953ce3347b33656d68ab8f35cfb` | `COMPLETED`, lalu `FINISHED` setelah Anda melaporkan `payment_txn_id` |
| `decline` | `Decline` | `0x7694c5b0213859ef409107853a36ff7c85835f18` | `COUNTERPARTY_VASP_GENERAL_DECLINE` |
| `name_mismatch` | `Name Mismatch` | `0x501b7a0886e31f516aaf54fa99107d2377bd2d3e` | `COUNTERPARTY_MISMATCHED_DATA`, pada aturan nama Anda (dengan `NONE` transfer akan selesai) |
| `not_reachable` | `Not Reachable` | `0xf0e986c1a1c3ae41629bf5cdcee0a67dd1eb0cce` | `COUNTERPARTY_VASP_NOT_REACHABLE` setelah jadwal coba ulang yang sebenarnya (30 detik, lalu 2, 10, 30, dan 60 menit, sekitar 1 jam 45 menit secara total), lalu dapat dikirim ulang |
| `timeout` | `Timeout` | `0xb63a1b1d4bee82d109332187cbf5b657eb7da498` | `EXPIRED` pada pemeriksaan pertama setelah batas waktu satu menit terlewati, jadi dalam sekitar 15 menit; `timeout_outcome` Anda kemudian berlaku |
| `self_hosted` | `Self Hosted` | `0x33dcc2a7e69cf965f7f4eaf6ba657bcb078a2b65` | `UNCONFIRMED_OWNERSHIP`, lalu `COMPLETED` setelah bukti kepemilikan dompet dicatat |

```bash theme={null}
curl -X POST https://verification.didit.me/v3/transactions/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "sbx-tr-accept-001",
    "transaction_category": "travelRule",
    "transaction_details": {
      "direction": "outbound",
      "action_type": "transfer",
      "amount": "0.25",
      "currency": "ETH",
      "currency_kind": "crypto"
    },
    "subject": { "entity_type": "individual", "vendor_data": "user-042", "full_name": "Jane Doe" },
    "travel_rule_details": {
      "status": "AWAITING_COUNTERPARTY",
      "beneficiary_data": {
        "wallet_address": "0xc00c4cd93ff83953ce3347b33656d68ab8f35cfb",
        "name": "Carlos Ruiz"
      }
    }
  }'
```

Kolom `rail` pada transfer bernilai `TEST_VASP`, dan daftar transfer mencantumkan `Didit Test VASP` sebagai VASP penerimanya. Pantau transfer tersebut melalui webhook `travel_rule.status.updated`, atau baca `GET /v3/transactions/{transaction_id}/`.

* **`name_mismatch`** membandingkan nama penerima yang Anda kirim dengan nama pemegang yang diberikan oleh VASP uji, pada aturan nama Anda untuk jenis entitas penerima (`matching_rules.individual.name` atau `matching_rules.company.name`, yang mengikuti `name_matching_strictness` sampai Anda mengaturnya). Transfer dan entri linimasa yang memutuskannya memuat `name_match` (dengan `compared_with: "counterparty_vasp"`) dan `data_match` dengan `mismatched_fields: ["name"]`.
* **`not_reachable`** membuat transfer tetap `AWAITING_COUNTERPARTY` selama mencoba ulang, dengan `delivery.status` `RETRYING` dan `last_error` `test VASP is not answering`, lalu mengubahnya menjadi `COUNTERPARTY_VASP_NOT_REACHABLE`. Setelahnya, kirim `{"action": "resend"}` untuk menjalankannya kembali.
* **`self_hosted`** membuat VASP uji menjawab bahwa dompet tersebut adalah dompet swakelola. Catat buktinya dengan [widget kepemilikan dompet](https://docs.didit.me/id/transaction-monitoring/wallet-ownership-widget.md) (dibuat untuk Anda selama `auto_wallet_verification` aktif) atau [`POST .../travel-rule/ownership/`](https://docs.didit.me/id/management-api/travel-rule/confirm-ownership) dengan `{"confirmed": true}`: dompet akan ditambahkan ke buku alamat Anda atas nama penerima, dan kecocokan nama menentukan transfer. Kecocokan akan menyelesaikannya dan menandai dompet sebagai terverifikasi; `{"confirmed": false}` menolaknya.

## Transfer masuk dari VASP uji

Untuk menguji sisi penerimaan, minta VASP uji mengirim transfer ke Anda dengan `POST /v3/travel-rule/test-vasp/inbound/`. Sebutkan salah satu dompet [buku alamat](https://docs.didit.me/id/transaction-monitoring/travel-rule.md#buku-alamat-dompet) aplikasi Anda sendiri: transfer diputuskan oleh jalur masuk yang sama dengan transfer sungguhan, dengan merujuk ke buku alamat, mode kepemilikan, dan aturan nama Anda.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/travel-rule/test-vasp/inbound/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "beneficiary_wallet_address": "0xYourDepositWallet",
    "scenario": "accept",
    "reference": "sbx-inbound-001"
  }'
```

| Kolom | Deskripsi |
| - | - |
| `beneficiary_wallet_address` | Wajib, hingga 128 karakter. Gunakan salah satu dompet di buku alamat Anda sendiri: dompet lain akan dicatat sebagai `ON_HOLD`. |
| `scenario` | `accept` (bawaan): VASP uji menyebutkan pemilik dompet tersebut. `name_mismatch`: VASP uji menyebutkan seseorang yang tidak sesuai dengan pemilik mana pun. |
| `chain`, `amount`, `currency` | Opsional. Bawaan `ETH`, `1`, dan `ETH`. |
| `reference` | Opsional, hingga 128 karakter. Mengirim `reference` yang sama lagi akan mengembalikan jawaban pertama (`201`) dan tidak mencatat apa pun yang baru. |

Respons `201` berisi `transaction_id`, `txn_id`, `scenario`, `travel_rule_status`, `detail`, `test_vasp: true`, dan transfer `travel_rule`. Aplikasi produksi akan menerima `400` (`"The Didit Test VASP is only available on sandbox applications."`), `scenario` lain akan menghasilkan `400`, dan aplikasi yang Travel Rule-nya nonaktif akan menerima `409`.

| Entri dompet Anda | `accept` | `name_mismatch` |
| - | - | - |
| Tidak ada di jaringan tersebut | `ON_HOLD` | `ON_HOLD` |
| Kepemilikan belum terbukti untuk [mode kepemilikan](https://docs.didit.me/id/transaction-monitoring/travel-rule.md#mode-validasi-kepemilikan) Anda | `UNCONFIRMED_OWNERSHIP` | `UNCONFIRMED_OWNERSHIP` |
| Terverifikasi | `COMPLETED` selama `inbound_auto_accept` aktif, jika tidak `ON_HOLD` | `COUNTERPARTY_MISMATCHED_DATA` (pada aturan nama `NONE`, sama seperti `accept`) |

Putuskan transfer yang menunggu dengan [`POST .../travel-rule/ownership/`](https://docs.didit.me/id/management-api/travel-rule/confirm-ownership), sama seperti pada transfer sungguhan: `{"confirmed": true}` menyelesaikannya dan `{"confirmed": false}` menolaknya.

Setoran yang Anda laporkan sendiri melalui `POST /v3/transactions/` bukan transfer yang dikirim VASP uji. Setoran tersebut tetap `AWAITING_COUNTERPARTY` menunggu VASP pengirim, dan linimasanya menyebutkan endpoint di atas. Setoran tidak memicu webhook apa pun sampai kedaluwarsa setelah `confirmation_timeout_hours`. [`POST /v3/travel-rule/inbound/`](https://docs.didit.me/id/management-api/travel-rule/register-inbound) tetap menyelesaikan pendaftaran pascadeposit menggunakan buku alamat Anda, sama seperti pada aplikasi produksi.

## Webhook di sandbox

`travel_rule.status.updated` dipicu untuk aplikasi sandbox pada setiap perubahan status, dengan `"environment": "sandbox"`. Transfer yang dijawab VASP uji juga menyertakan `rail: "TEST_VASP"`, `test_vasp: true`, dan `test_vasp_scenario`. Bagian sandbox lainnya tetap berperilaku seperti dijelaskan di [Pemantauan Transaksi di sandbox](https://docs.didit.me/id/integration/sandbox-testing.md#pemantauan-transaksi-di-sandbox): aturan tidak dievaluasi, `transaction.created` dan `transaction.status.updated` tidak dikirim, dan tidak ada tagihan.

## Yang tidak dibuktikan oleh sandbox

* Bahwa pihak lawan sungguhan, keanggotaan jaringan, atau host TRP publik Didit berfungsi. Tidak ada yang dihubungi.
* Bahwa kredensial jaringan Anda valid. Keanggotaan yang terhubung baru terbukti setelah pertukaran produksi pertamanya.
* Rute [direktori](https://docs.didit.me/id/transaction-monitoring/travel-rule.md#direktori) dari VASP sungguhan: pada aplikasi sandbox setiap rute menampilkan `unavailable` dengan `reason: sandbox_application`, dan setiap baris `reachable: false`.

Lihat [jaringan Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule-networks.md) untuk mengetahui jangkauan setiap jalur dalam produksi saat ini.


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