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

# Interoperabilitas Travel Rule - Terhubung ke VASP Didit

> Cara VASP bertukar data Travel Rule dengan pelanggan Didit: travel address, endpoint TRP publik, callback, email, dan registrasi sunrise.

Halaman ini ditujukan untuk **sisi lain** dari pertukaran [Didit Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule.md): VASP pihak lawan (atau tim teknisnya) yang perlu mengirim data Travel Rule ke, atau menerimanya dari, VASP yang berjalan di Didit.

Semua yang didokumentasikan di sini adalah infrastruktur publik yang dioperasikan oleh Didit. Anda tidak memerlukan akun Didit, kunci API, atau hubungan komersial apa pun dengan Didit untuk berinteroperasi; integrasi yang paling mendalam hanya membutuhkan HTTPS dan JSON.

## Cara Didit merutekan pertukaran

Ketika pelanggan Didit mengirim transfer, Didit mencoba jalur-jalur ini secara berurutan sesuai prioritas dan menggunakan jalur pertama yang dapat menjangkau Anda:

| Prioritas | Jalur | Artinya bagi Anda |
| - | - | - |
| 1 | `INTERNAL` | Kedua VASP beroperasi di Didit - pertukaran diselesaikan di dalam platform dan tidak ada panggilan eksternal. |
| 2 | `TRP` | Anda menyediakan endpoint Travel Rule Protocol (TRP), atau pelanggan Didit mengetahui [Travel Address](#travel-address) Anda. Didit memanggil endpoint permintaan TRP Anda secara mesin-ke-mesin, untuk transfer `BTC`, `ETH` dan `USDC` (`USDC` ketika transfer menyebutkan jaringan tempat transfer itu berjalan). |
| 3 | `GTR` | Keanggotaan Global Travel Rule (GTR) untuk pengirim aktif dan Anda dapat ditemukan menggunakan kode VASP GTR. Didit membaca jawaban Anda dari respons GTR, atau dengan melakukan polling status permintaan. |
| 4 | `TRUST` | Keanggotaan TRUST untuk pengirim aktif dan Anda dapat ditemukan menggunakan ID keanggotaan TRUST. Hanya untuk pengiriman: lihat peringatan di bawah. |
| 5 | `VERIFYVASP` | Keanggotaan VerifyVASP untuk pengirim aktif dan Anda dapat ditemukan menggunakan ID VerifyVASP. Didit membaca jawaban Anda dengan melakukan polling status verifikasi. |
| 6 | `SYGNA` | Keanggotaan Sygna Bridge untuk pengirim aktif dan Anda dapat ditemukan menggunakan kode VASP Sygna. Didit menggunakan protokol Sygna secara langsung (IVMS101 terenkripsi ECIES, permintaan izin yang ditandatangani), dan membaca jawaban izin Anda dengan melakukan polling status transfer: callback Sygna-nya belum aktif. |
| 7 | `EMAIL` | Tidak ada saluran protokol yang tersedia - kontak kepatuhan Anda menerima [tautan pengambilan melalui email sekali pakai](#pengambilan-melalui-email) sebagai gantinya. |

> [!WARNING]
>
> **Didit tidak dapat menerima balasan `TRUST`, dan belum menerima transfer yang dikirim kepadanya melalui jaringan.**
> Melalui `TRUST`, transfer pelanggan Didit sampai kepada Anda, tetapi jawaban Anda tidak dapat kembali, dan transfer kedaluwarsa pada batas konfirmasi pengirim alih-alih diselesaikan.
> Melalui `GTR`, `VERIFYVASP` dan `SYGNA`, Didit membaca jawaban Anda langsung dari jaringan, melalui responsnya atau dengan melakukan polling status transfer.

Tabel di atas mencakup transfer yang dikirim pelanggan Didit.
Ketika Anda mengirim transfer kepada pelanggan Didit, Didit hanya dapat menerimanya sebagai [permintaan transfer](#post-/trp/inquiries//) `TRP`, setelah host TRP publik Didit aktif (host tersebut belum merespons, lihat [endpoint TRP](#endpoint-trp)), atau, setelah penyelesaian, sebagai [pendaftaran sunrise](#sunrise-transfer-yang-diselesaikan-sebelum-pertukaran): saat ini tidak ada jalur jaringan maupun saluran email yang mengirimkan transfer masuk kepada pelanggan Didit.

Jalur jaringan (`GTR`, `TRUST`, `VERIFYVASP`, `SYGNA`) berjalan melalui keanggotaan di sisi pengirim.
Saat ini, keanggotaan itu harus berupa keanggotaan jaringan milik pelanggan Didit yang terhubung: Didit belum memiliki keanggotaan platform di jaringan mana pun dan sedang melakukan onboarding sebagai penyedia.
GTR tidak disertakan secara default, dan persyaratan keanggotaan yang sama berlaku untuk keempat jaringan.
Pengirim sebaiknya memeriksa objek `networks` di [Dapatkan Pengaturan Travel Rule](https://docs.didit.me/id/management-api/travel-rule/get-settings.md): `didit` berarti keanggotaan Didit membawa aplikasi tersebut sebagai peserta miliknya sendiri di jaringan, `own` berarti keanggotaan pelanggan yang terhubung, `off` berarti perutean platform dinonaktifkan, dan `unavailable` berarti belum ada yang dapat mengirim melalui jaringan tersebut untuk aplikasi ini.
Hingga Didit memiliki keanggotaan platform, tidak ada jaringan yang melaporkan `didit`.
Mengaktifkan Travel Rule tidak mengaktifkan keanggotaan jaringan.
Lihat [jaringan Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule-networks.md) untuk mengetahui apa yang dapat dijangkau setiap jaringan saat ini.

Jika Anda berada di salah satu jaringan tersebut dan pelanggan Didit memiliki keanggotaannya sendiri di sana, bagikan pengenal jaringan Anda kepadanya, dan transfer akan sampai kepada Anda melalui jaringan yang sudah Anda operasikan.
Melalui `SYGNA`, jawaban izin Anda menyelesaikan atau menolak transfer: Didit melakukan polling status transfer setiap 5 menit, dan juga mendaftarkan `https://trp.didit.me/sygna/callbacks/permission/{token}/` sebagai callback untuk setiap permintaan izin, dengan token yang dibuat untuk transfer tersebut.
Callback itu berada di host TRP publik Didit, yang belum melayani permintaan.
`permission_status` dengan nilai `ACCEPTED` memindahkan transfer pengirim ke `COMPLETED`, dan `REJECTED` memindahkannya ke `COUNTERPARTY_VASP_GENERAL_DECLINE`, atau ke `COUNTERPARTY_MISMATCHED_DATA` ketika `reject_code` bernilai `BVRC007` (nama penerima tidak cocok).
Callback memerlukan tanda tangan Anda: tanpa tanda tangan yang valid, callback menjawab `401` dengan `{"status": "INVALID_SIGNATURE"}`, `404` untuk token yang tidak dikenal, dan `200` lagi untuk keputusan yang sudah diterapkan.
Jika tidak ada keanggotaan bersama, `TRP` adalah jalur yang perlu direncanakan: bagikan Travel Address Anda kepada pelanggan Didit, dan transfer mereka akan sampai ke endpoint TRP Anda. Jawaban yang Anda berikan dalam respons permintaan akan langsung menyelesaikan atau menolak transfer; jawaban yang Anda kirim kemudian ke callback Didit memerlukan host TRP publik Didit, yang belum aktif.

Ketika tidak ada jalur yang dapat mengidentifikasi Anda, Didit menjalankan satu langkah resolusi tambahan: **atribusi analitik blockchain**.
Dompet tujuan dicocokkan dengan data analitik blockchain, dan ketika dompet tersebut diatribusikan ke layanan bursa atau kustodi Anda, Didit mencatat nama Anda di direktori VASP-nya dan mencoba kembali jalur-jalur dengan nama tersebut.
Ini berarti Anda dapat diidentifikasi meskipun pengirim hanya memberikan alamat.
Transfer yang diatribusikan hanya dirutekan secara otomatis kepada Anda setelah entri direktori Anda memiliki rute: endpoint `TRP` yang terverifikasi, daftar jaringan, atau kontak kepatuhan (lihat [Masuk ke direktori VASP Didit](#masuk-ke-direktori-vasp-didit)).
Dengan demikian, rantai resolusi lengkapnya adalah: pelanggan Didit yang telah membuktikan kendali atas dompet (`INTERNAL`) dan Travel Address yang disimpan pengirim untuk dompet itu, lalu jalur protokol dan jaringan, kemudian analitik blockchain.

## Travel Address

Setiap VASP Didit dengan Travel Rule aktif memiliki **Travel Address**, yaitu string ringkas yang diawali `ta` dan mengodekan URL endpoint permintaan transfer TRP pribadinya.
Pelanggan Didit membaca Travel Address mereka dari pengaturan Travel Rule dan membagikannya kepada pihak lawan. Ketika pelanggan Didit memberikan Travel Address-nya kepada Anda, Anda sudah memiliki semua yang diperlukan untuk menghubunginya melalui TRP.

Pengodean mengikuti konvensi Travel Address TRP:

* Hapus awalan `ta`.
* Dekode sisanya dengan Base58Check (alfabet Bitcoin, checksum double-SHA256).
* Byte hasil dekode adalah URL permintaan tanpa skemanya; tambahkan `https://` di depannya.
* URL selalu memuat pasangan kueri `t=i` (tipe: inquiry).

Travel Address Didit yang sudah didekode memiliki salah satu dari dua bentuk:

```
https://trp.didit.me/trp/inquiries/{profile_uuid}/?t=i
https://trp.didit.me/trp/inquiries/{profile_uuid}/wallets/{entry_uuid}/?t=i
```

`{profile_uuid}` mengidentifikasi profil VASP yang di-hosting. Kirimkan permintaan transfer Anda (POST) ke URL tersebut, dan kueri [endpoint identitas](#get-/trp/identity//) yang sesuai terlebih dahulu untuk memverifikasi siapa yang sedang Anda ajak berkomunikasi.
Bentuk kedua adalah Travel Address **per dompet**: Travel Address ini menunjuk satu dompet milik pelanggan Didit (`receiving_travel_address` pada buku alamatnya), sehingga permintaan Anda sampai ke dompet tersebut tanpa pelanggan harus mencocokkannya berdasarkan nomor rekening atau nama pemegang rekening. Travel Address ini merespons dengan `404` setelah dompet dihapus atau tercatat sebagai milik VASP lain.

## Endpoint TRP

Didit menggunakan TRP API versi `3.2.1` di URL dasar `https://trp.didit.me`.
Semua endpoint bertukar JSON melalui HTTPS.

> [!WARNING]
>
> Host TRP publik Didit belum menyediakan endpoint ini. Sampai host tersebut aktif, inquiry atau permintaan identitas ke pelanggan Didit tidak dapat disampaikan. Bagian ini adalah kontrak yang akan dijawab oleh host setelah aktif.

| Metode | Path | Tujuan |
| - | - | - |
| `GET` | `/identity` | Identitas operator platform (juga tersedia di `/trp/identity`). |
| `GET` | `/trp/identity/{profile_uuid}/` | Identitas satu profil VASP yang di-hosting. |
| `POST` | `/trp/inquiries/{profile_uuid}/` | Mengirim inquiry transfer ke VASP yang di-hosting. |
| `POST` | `/trp/inquiries/{profile_uuid}/wallets/{entry_uuid}/` | Mengirim inquiry transfer untuk satu dompet dari VASP yang di-hosting (Travel Address per dompet). |
| `POST` | `/trp/callbacks/resolution/{token}/` | Menyelesaikan inquiry yang **Didit** kirimkan kepada Anda (setujui atau tolak). |
| `POST` | `/trp/callbacks/confirmation/{token}/` | Mengonfirmasi atau membatalkan transfer yang telah disetujui Didit untuk Anda. |

Dua header TRP berikut penting:

* `api-version`: versi protokol TRP yang Anda gunakan, misalnya `3.2.1`.
  Wajib ada pada inquiry dan pada kedua callback.
* `request-identifier`: ID unik Anda untuk permintaan tersebut, yang dikembalikan di header respons.
  Wajib ada pada inquiry dan pada kedua callback.

Permintaan ke endpoint inquiry atau callback tanpa kedua header ini mengembalikan `400`.

Setiap respons dari Didit membawa `api-version: 3.2.1` dan mengembalikan `request-identifier` Anda.

### GET /identity

Mengembalikan identitas operator platform.
Tidak ada header yang diperlukan.

```bash theme={null}
curl https://trp.didit.me/identity
```

```json theme={null}
{
  "name": "Didit",
  "lei": "",
  "x509": ""
}
```

### GET /trp/identity/{profile_uuid}/

Mengembalikan identitas VASP spesifik yang akan menjadi lawan transaksi Anda. Gunakan ini untuk memverifikasi nama dan LEI sebelum mengirim PII.
Didit melakukan pemeriksaan yang sama secara terbalik saat ia yang memulai: jika identitas yang dilaporkan endpoint Anda tidak cocok dengan LEI atau nama yang diharapkan, pertukaran dibatalkan.

```bash theme={null}
curl https://trp.didit.me/trp/identity/11111111-2222-3333-4444-555555555555/
```

```json theme={null}
{
  "name": "Bene CASP GmbH",
  "lei": "5493001KJTIIGC8Y1R12",
  "x509": ""
}
```

Mengembalikan `404` jika profil tidak ada atau pengaturan Travel Rule-nya dinonaktifkan.

### POST /trp/inquiries/{profile_uuid}/

Mengirim inquiry transfer. Anda adalah VASP pengirim, dan pelanggan Didit adalah VASP penerima.

```bash theme={null}
curl -X POST https://trp.didit.me/trp/inquiries/11111111-2222-3333-4444-555555555555/ \
  -H "Content-Type: application/json" \
  -H "api-version: 3.2.1" \
  -H "request-identifier: 7f6a1c1e-0a63-4b1f-9f6e-7dcd7c3f1a01" \
  -d '{
    "asset": { "dti": "X9J9K872S" },
    "amount": 250000000000000000,
    "callback": "https://trp.yourvasp.example/callbacks/inquiry/abc123",
    "IVMS101": {
      "originator": {
        "originatorPersons": [
          { "naturalPerson": { "name": { "nameIdentifier": [{ "primaryIdentifier": "Ruiz", "secondaryIdentifier": "Carlos", "nameIdentifierType": "LEGL" }] } } }
        ],
        "accountNumber": ["0x77ccff0cc624a53cd8b8d8703ced826710211ec7"]
      },
      "beneficiary": {
        "beneficiaryPersons": [
          { "naturalPerson": { "name": { "nameIdentifier": [{ "primaryIdentifier": "Diaz", "secondaryIdentifier": "Ana", "nameIdentifierType": "LEGL" }] } } }
        ],
        "accountNumber": ["0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb"]
      }
    }
  }'
```

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `asset.dti` | string | Wajib. Digital Token Identifier (ISO 24165) dari aset yang ditransfer. Inquiry tanpa kolom ini dijawab `400`; `asset.slip0044` versi sebelum 3.2.0 tidak dibaca. |
| `amount` | number | Wajib. Jumlah utuh dalam unit terkecil aset (unit dasar sesuai desimal DTI). Notasi JSON apa pun untuk bilangan bulat diterima, termasuk bentuk eksponen, begitu juga string angka. Pecahan, atau jumlah yang terlalu besar untuk dicatat, dijawab `400`. |
| `callback` | string | Wajib. URL `http(s)` publik absolut di sisi Anda tempat Didit mengirim resolusi inquiry (`https` disarankan). Percobaan ulang yang mengulang `callback` yang sama dicocokkan dengan inquiry yang diulang. |
| `IVMS101` | object | Wajib. Payload IVMS 101: `originator.originatorPersons` dan `beneficiary.beneficiaryPersons` (Didit membaca `naturalPerson` pertama dari masing-masing; data badan hukum tidak dibaca), serta array dompet `accountNumber`. |

Pada jalur ini, aset diidentifikasi dengan DTI, dan satu DTI mengidentifikasi token pada satu blockchain.
Saat ini Didit memetakan `BTC` (`4H95J0R2X`), `ETH` (`X9J9K872S`), dan `USDC` di sembilan jaringan, dengan aset lain yang akan ditambahkan seiring waktu.
Lihat [Pengidentifikasi aset TRP](https://docs.didit.me/id/transaction-monitoring/travel-rule.md#pengidentifikasi-aset-trp) untuk daftar lengkapnya.
Inquiry dengan DTI yang tidak dikenali Didit tetap diterima dan ditampilkan kepada VASP penerima dengan DTI sebagai kode aset.

Respons `200` berarti inquiry diterima untuk diproses. `400` berarti header TRP tidak lengkap atau body tidak valid. `404` berarti profil (atau dompet dari alamat per dompet) tidak dikenal atau dinonaktifkan. `422` berarti permintaan menggunakan ekstensi TRP: Didit tidak mendukung ekstensi apa pun, sehingga header `api-extensions` atau kunci `extensions` dalam body ditolak.
Mengirim ulang `request-identifier` yang sama bersifat idempoten: inquiry yang asli digunakan kembali, bukan diduplikasi.

Kemudian Didit membuat transfer masuk di aplikasi pelanggan dan mencocokkannya dengan buku alamat dompet dan kebijakan pelanggan.
Penerima dicocokkan berdasarkan dompet yang disebut oleh Travel Address per dompet. Jika tidak ada, dicocokkan dengan alamat dompet pertama di `IVMS101.beneficiary.accountNumber`. Jika itu juga tidak ada, dicocokkan dengan nama `beneficiaryPersons[0].naturalPerson` terhadap entri dompet terverifikasi milik pelanggan.

Respons `200` membawa jawabannya jika Didit dapat memberikannya segera:

* `{"approved": {"address": "...", "callback": "..."}}` jika inquiry disetujui otomatis. Didit tidak mengirim persetujuan itu lagi ke `callback` Anda.
* `{"rejected": "NOT_ENOUGH_COUNTERPARTY_DATA: inquiry carries no beneficiary identification"}` jika inquiry tidak menyebutkan penerima maupun alamat dompet, jadi selalu sertakan keduanya.
* `{"version": "3.2.1"}` jika keputusan menunggu pelanggan Didit. **Resolusi** kemudian dikirim sebagai POST ke URL `callback` Anda, dengan salah satu dari dua body berikut.

```json theme={null}
{
  "approved": {
    "address": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
    "callback": "https://trp.didit.me/trp/callbacks/confirmation/{token}/"
  }
}
```

```json theme={null}
{
  "rejected": "Wallet ownership denied by beneficiary VASP"
}
```

Persetujuan bisa terjadi secara otomatis, yaitu ketika VASP penerima mengaktifkan terima otomatis dan penerima cocok dengan entri dompet terverifikasi pada blockchain aset tersebut. Persetujuan juga bisa mengikuti peninjauan manual atau pembuktian kepemilikan dompet di sisi penerima, jadi perhitungkan penundaan antara inquiry dan resolusi.
Inquiry tidak pernah cocok dengan dompet yang dicatat pelanggan Didit sebagai milik VASP lain, dan nama VASP Anda dari `originatingVASP` adalah yang dilihat pelanggan Didit sebagai VASP pengirim transfer tersebut.
Didit tidak menetapkan batas waktu untuk inquiry yang Anda kirim, dan pelanggan Didit yang membatalkan inquiry tidak mengirimkan penolakan kepada Anda, jadi terapkan batas waktu Anda sendiri.

Setelah Anda menerima persetujuan dan menyiarkan transfer on-chain, tutup pertukaran dengan mengirim POST ke URL `approved.callback` yang telah diberikan kepada Anda:

```bash theme={null}
curl -X POST "https://trp.didit.me/trp/callbacks/confirmation/{token}/" \
  -H "Content-Type: application/json" \
  -H "api-version: 3.2.1" \
  -H "request-identifier: 0b8e2f4a-6c1d-4e9a-8f3b-2d7c5a1e9f60" \
  -d '{ "txid": "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060" }'
```

Jika Anda membatalkan transfer, kirim `{ "canceled": "reason" }` ke URL yang sama.
`txid` memindahkan transfer di sisi penerima ke `FINISHED`. `canceled` memindahkannya ke `CANCELLED`.
Kedua callback menjawab `204` setelah diproses, `404` untuk token yang tidak dikenal atau transfer yang tidak lagi menunggu callback tersebut, dan `400` untuk body yang tidak berisi salah satu dari dua kolom callback.

### Menanggapi permintaan yang dikirim Didit kepada Anda

Ketika pelanggan Didit mengirim transfer kepada Anda melalui TRP, Didit:

1. Mengambil `/identity` di root host dari URL permintaan Anda (`https://{your-host}/identity`), lalu memverifikasi nama dan LEI yang dilaporkan terhadap yang diharapkan pelanggan. Jika rute berasal dari direktori Didit, `/identity` Anda harus melaporkan LEI dari entri direktori tersebut.
2. Mengirim POST permintaan transfer ke URL permintaan Anda dengan struktur isi yang sama seperti di atas: `asset.dti`, `amount` dalam satuan dasar sebagai angka JSON, `callback`, dan payload `IVMS101`.

Hanya jawaban `2xx` yang dihitung sebagai terkirim. Jawaban `3xx` ditolak karena pengalihan (redirect) tidak diikuti. Jawaban lainnya dicatat pada linimasa transfer pelanggan beserta kode status Anda, misalnya `refused by counterparty (HTTP 403): ...`.

Kedua panggilan membawa kedua header TRP, dan Didit tidak mengikuti pengalihan HTTP pada keduanya, jadi layani `/identity` dan URL permintaan secara langsung. Jika `/identity` tidak dapat dijangkau, tidak melaporkan LEI, melaporkan LEI yang berbeda padahal pelanggan memberikan LEI, atau melaporkan nama yang tidak cocok, Didit berhenti sebelum mengirim permintaan dan transfer pelanggan berpindah ke `COUNTERPARTY_VASP_NOT_REACHABLE`. Jika POST permintaan kemudian gagal, atau endpoint Anda menjawabnya dengan status `4xx` atau `5xx`, transfer juga berpindah ke `COUNTERPARTY_VASP_NOT_REACHABLE`.

`callback` dalam permintaan tersebut mengarah ke endpoint resolusi Didit (`/trp/callbacks/resolution/{token}/`).
Balas dengan mengirim isi resolusi melalui POST, sama seperti yang digunakan Didit: `{ "approved": { "address": "...", "callback": "..." } }` untuk menyetujui (`callback` Anda adalah tempat Didit akan mengirim konfirmasi on-chain), atau `{ "rejected": "reason" }` untuk menolak.
Kirim kedua header TRP bersama body tersebut.
Didit menjawab `204` setelah diproses, `404` jika transfer tidak lagi menunggu resolusi, dan `400` untuk persetujuan tanpa `address` atau yang `callback`-nya bukan URL `http(s)` publik yang dapat dipanggil Didit.

Setelah disetujui, sisi Didit beralih ke `COMPLETED`. Setelah pelanggan melaporkan hash on-chain, Didit mengirim POST `{ "txid": "..." }` ke callback konfirmasi yang Anda berikan (atau `{ "canceled": "reason" }` jika transfer dibatalkan lebih dahulu).

> [!NOTE]
>
> Token callback hanya dapat digunakan untuk satu tujuan dan tidak dapat ditebak, serta dibuat khusus untuk setiap transfer. Perlakukan URL callback lengkap sebagai rahasia, dan perhatikan bahwa resolusi hanya diterima selama transfer masih menunggu resolusi.

## Pengambilan melalui email

Jika tidak ada kanal protokol yang menjangkau Anda dan pelanggan Didit memberikan email kepatuhan Anda, Didit beralih ke email: kontak kepatuhan Anda menerima pesan yang menyebutkan VASP pengirim beserta tautan pengambilan aman sekali pakai.
Tidak diperlukan akun, kunci API, atau integrasi. Token tautan itulah autentikasinya.

Saat tautan dibuka, halaman menampilkan pertukaran yang tertunda. API di baliknya, yang dipanggil oleh halaman yang di-hosting tersebut atas nama Anda, bersifat publik:

```bash theme={null}
curl https://verification.didit.me/v3/travel-rule/pickup/{token}/
```

```json theme={null}
{
  "originator_vasp_name": "Origin CASP SL",
  "amount": "0.250000000000000000",
  "currency": "ETH",
  "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
  "status": "AWAITING_COUNTERPARTY"
}
```

`amount` adalah desimal tersimpan apa adanya, sehingga memuat seluruh 18 tempat desimal.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/travel-rule/pickup/{token}/respond/ \
  -H "Content-Type: application/json" \
  -d '{ "decision": "accept", "beneficiary_name": "Ana Diaz" }'
```

`decision` bernilai `accept` atau `decline`. Pada accept, berikan nama penerima sebagaimana tercatat di data Anda agar sisi pengirim dapat menjalankan pencocokan nama. Atau kirim respons IVMS 101 lengkap sebagai `ivms_response`, yang nama penerimanya kemudian diutamakan.
Pada decline, Anda dapat memberikan `decline_reason` (`data_mismatch`, `not_our_customer`, `wallet_not_hosted`, `sanctions`, `risk_appetite`, `jurisdiction`, `insufficient_data` atau `other`) dan `decline_detail` hingga 512 karakter, yang wajib diisi untuk `other`.
Accept tanpa `beneficiary_name` dicatat sebagai ketidakcocokan jika pengirim memberikan nama penerima, kecuali pengirim mematikan pencocokan nama.
Respons berupa `{"status": "..."}` hasil, yaitu `COMPLETED` jika nama cocok, `COUNTERPARTY_MISMATCHED_DATA` jika tidak cocok, atau `COUNTERPARTY_VASP_GENERAL_DECLINE` setelah penolakan.
Anda hanya dapat merespons sekali, selama transfer masih menunggu Anda. Setelah Anda merespons, setelah transfer dibatalkan, atau setelah tenggat konfirmasinya, kedua endpoint mengembalikan `410`, dan token yang tidak dikenal mengembalikan `404`.
Permintaan menampilkan kolom-kolom pengirim yang dibagikan oleh sisi pengirim dan `ivms_request` IVMS 101 dalam bahasa yurisdiksi Anda. Anda juga akan diingatkan 72, 24, dan 6 jam sebelum tenggat selama Anda belum menjawab.

## Sunrise: transfer yang diselesaikan sebelum pertukaran

Ketika transfer mencapai dompet pelanggan Didit sebelum pertukaran Travel Rule terjadi, karena belum ada jalur bersama pada saat itu, data tetap dapat dikirim setelah penyelesaian.

Kirim payload Travel Rule kepada pelanggan Didit (pihak lawan Anda yang merupakan penerima) melalui kanal normal Anda, lalu minta mereka mendaftarkannya. Mereka memanggil [`POST /v3/travel-rule/inbound/`](https://docs.didit.me/id/transaction-monitoring/travel-rule#pendaftaran-sunrise-setelah-deposit) dengan jaringan tempat deposit, `txid`, alamat dompet, jumlah, mata uang, dan data originator Anda.
Sertakan identitas VASP Anda, yaitu nama, LEI, dan Travel Address, sebagai `originating_vasp` dalam payload tersebut, sehingga transfer pelanggan Didit mencatat siapa yang mengirim deposit.
Data ini tetap berada pada transfer tersebut dan tidak pernah membuat atau mengubah [entri direktori](#masuk-ke-direktori-vasp-didit) Anda.
LEI harus berupa LEI 20 karakter yang valid, dan Travel Address harus valid. Jika tidak, pendaftaran akan ditolak.

## Masuk ke direktori VASP Didit

Didit memelihara direktori VASP yang dijadikan rujukan oleh perutean keluar pelanggan Didit.
Entri berasal dari sumber-sumber berikut:

* Registri interim MiCA ESMA untuk penyedia layanan aset kripto, dibaca setiap minggu: nama Anda, LEI, dan negara anggota asal jika Anda terdaftar di sana.
* Direktori publik TRISA, dibaca setiap minggu: siapa Anda, negara Anda, dan entri Anda di TRISA.
* Registri LEI global, yang mengisi LEI Anda, nama hukum lain, dan negara.
* Atribusi analitik blockchain, ketika dompet tujuan dipetakan ke layanan bursa atau kustodian Anda: Didit menambahkan atau mencocokkan entri Anda dan menyimpan nama hasil atribusi sebagai alias.
* Staf Didit, yang mengkurasi entri: pengenal perutean dan daftar jaringan yang telah mereka verifikasi, kontak kepatuhan, alias, serta merek beserta entitasnya.

Informasi yang dilaporkan pelanggan Didit tentang Anda, seperti `originating_vasp` pada pendaftaran sunrise atau Travel Address pada suatu transfer, hanya berlaku untuk transfer pelanggan tersebut dan tidak pernah mengubah entri Anda.
Permintaan informasi transfer yang Anda kirim ke pelanggan Didit juga tidak membuat atau memperbarui entri Anda.

Entri Anda akan merutekan transfer ke Anda ketika entri tersebut memuat endpoint `TRP` yang terverifikasi, daftar jaringan yang dapat digunakan pengirim, atau kontak kepatuhan untuk cadangan email.
Alamat kepatuhan di domain Anda sendiri yang menjawab permintaan melalui tautan respons akan menjadi kontak yang dapat digunakan oleh setiap pelanggan Didit.
Selama entri Anda belum memiliki rute, pelanggan Didit hanya dapat menjangkau Anda melalui kolom yang mereka teruskan pada setiap transfer: Travel Address Anda, pengenal jaringan Anda (`counterparty_gtr_vasp_code`, `counterparty_trust_membership_id`, `counterparty_verifyvasp_id`, atau `counterparty_sygna_vasp_code`), atau email kepatuhan Anda (`counterparty_vasp_email`).
Agar dapat dijangkau saat ini, bagikan Travel Address, pengenal jaringan, atau email kepatuhan Anda kepada pelanggan Didit yang bekerja dengan Anda.

## Daftar periksa untuk VASP pihak lawan

* **Anda sudah menjalankan TRP**: bagikan Travel Address dan LEI Anda kepada pelanggan Didit - transfer `BTC`, `ETH`, dan `USDC` mereka akan tiba sebagai permintaan TRP standar di endpoint Anda. Jawab dalam respons permintaan Anda: respons berikutnya memerlukan host TRP publik Didit, yang belum aktif.
* **Anda menggunakan GTR, TRUST, atau VerifyVASP**: bagikan pengenal jaringan Anda; transfer akan tiba melalui jaringan tersebut jika pelanggan Didit memiliki keanggotaan sendiri di sana. Didit membaca jawaban GTR atau VerifyVASP Anda dari jaringan, tetapi tidak membaca jawaban TRUST, sehingga Anda juga perlu mempublikasikan endpoint TRP ketika pertukaran melalui TRUST harus diselesaikan. [Jaringan Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule-networks.md) menjelaskan kapan hal itu berubah.
* **Anda menggunakan Sygna Bridge**: bagikan kode VASP Sygna Anda; ketika pelanggan Didit memiliki keanggotaan Sygna sendiri, jawaban izin Anda akan menyelesaikan atau menolak transfer setelah Didit membacanya melalui polling.
* **Anda belum memiliki kanal protokol**: berikan kepada pelanggan Didit email kepatuhan yang dipantau - Anda akan menerima tautan untuk mengambil permintaan dan dapat merespons dari halaman yang di-hosting tanpa integrasi apa pun.
* **Suatu transfer sudah diselesaikan**: kirimkan datanya kepada pelanggan Didit melalui [pendaftaran sunrise](#sunrise-transfer-yang-diselesaikan-sebelum-pertukaran).
* **Anda juga ingin mengirim ke VASP Didit**: minta Travel Address pihak lawan Anda dari pengaturan Travel Rule Didit mereka, lalu ikuti [POST /trp/inquiries](#post-/trp/inquiries//) setelah host TRP publik Didit aktif.

## Langkah berikutnya

> [card] [Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule.md)
>
> Produk untuk pelanggan: siklus hidup, pengaturan, jalur, dan API /v3/.

> [card] [Widget kepemilikan dompet](https://docs.didit.me/id/transaction-monitoring/wallet-ownership-widget.md)
>
> Cara bukti kepemilikan dari sisi penerima dikumpulkan ketika dompet bersifat swakelola.

> [card] [Pendaftaran sunrise](https://docs.didit.me/id/transaction-monitoring/travel-rule.md#pendaftaran-sunrise-setelah-deposit)
>
> Mendaftarkan data Travel Rule untuk deposit yang sudah diselesaikan secara on-chain.

> [card] [Webhook](https://docs.didit.me/id/integration/webhooks.md)
>
> Cara pelanggan Didit mengamati setiap perubahan status transfer di sisi mereka.


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