Sumber kebenaran untuk data ini adalah
serialize_catalog() di layanan verifikasi, yang disajikan secara langsung di GET /v1/sandbox/scenarios/. Salinan yang diuji agar tidak menyimpang dibuat di docs/sandbox/SANDBOX_REFERENCE.md di repo service-didit-verification melalui pipenv run python scripts/generate_sandbox_reference.py. Halaman ini mencerminkan referensi tersebut. Jika ada yang tampak usang, selalu percayai endpoint katalog langsung. Endpoint katalog memerlukan autentikasi: kirimkan kunci API Anda (x-api-key) seperti pada panggilan lainnya, atau token sesi jika Anda membacanya dari dalam sesi yang sedang berjalan.Model lingkungan
Sandbox adalah mode per aplikasi (ApplicationDetail.mode == SANDBOX), gagasan yang sama dengan mode pengujian Stripe. Selama sesi berjalan di bawah aplikasi sandbox:
- Setiap penyedia eksternal (OCR, AML, Pencocokan Wajah, liveness, NFC, telepon, email, IP, POA, Validasi Database, document AI) di-simulasikan; tidak ada pihak ketiga yang dipanggil.
- Liveness berjalan persis seperti di lingkungan produksi. Alur kerja liveness aktif menjalankan pengambilan aktif yang sesungguhnya di sandbox, baik dalam alur yang di-hosting maupun melalui handoff web dari SDK native, sehingga Anda dapat menguji pengalaman yang akan didapatkan pengguna Anda. Hanya hasil liveness yang disimulasikan, oleh skenario atau nilai khusus, dan laporan mencatat metode yang dikonfigurasi dalam alur kerja Anda.
- Domain kustom hanya untuk produksi. Aplikasi sandbox tidak dapat menambahkan domain kustom; sesi sandbox selalu berjalan di domain verifikasi yang di-hosting bawaan.
- Sesi tidak pernah ditagih dan pemeriksaan saldo dilewati.
- Kuota per aplikasi sebesar 500 pembuatan sesi / 24 jam diberlakukan.
- Webhook membawa
"environment": "sandbox"(sesi produksi membawa"environment": "live"). - Alur yang di-hosting menampilkan lingkungan sesi agar UI dapat memperingatkan pengguna untuk tidak mengunggah PII asli.
- Hasil tidak pernah bergantung pada piksel: data yang diekstrak dan status berasal dari skenario atau nilai khusus. Media yang diambil (dokumen, swafoto, video, file POA) benar-benar disimpan, sama seperti sesi produksi.
Pemantauan Transaksi di sandbox
Sandbox berbentuk sesi: sandbox meniru penyedia yang dipanggil oleh sesi verifikasi. Pemantauan Transaksi tidak memiliki penyedia untuk ditiru, jadi aplikasi sandbox menggunakan jalur lain: transaksi disimpan, tetapi tidak ada proses yang memutuskan, menyaring, memberi notifikasi, atau menagih atas transaksi tersebut. Transaksi yang dibuat pada aplikasi sandbox disimpan dan dikembalikan seperti biasa, dan tidak ada hal berikut yang terjadi padanya:- Tidak ada evaluasi aturan.
rule_runskosong, apa pun mode aturan Anda. AturanACTIVEpada aplikasi sandbox tidak pernah terpicu, sehingga transaksi tetapAPPROVEDdengan skor0dan tidak ada alert atau kasus yang dibuka. - Tidak ada skrining AML / dompet.
provider_resultskosong, bahkan untuk transaksi kripto pada aplikasi yang pemantauannya diaktifkan. - Tidak ada webhook. Baik
transaction.createdmaupuntransaction.status.updatedtidak dikirim untuk transaksi sandbox. - Tidak ada penagihan. Sebuah event penggunaan dicatat dengan harga
0.0000, dan saldo Anda tidak berubah.
environment ("live" atau "sandbox"), sehingga rule_runs yang kosong tidak pernah membingungkan: "sandbox" berarti aturan tidak dievaluasi, bukan berarti tidak ada yang cocok. Business Console menyampaikan hal yang sama pada kartu Risk & decision transaksi, alih-alih hanya menampilkan “No rules evaluated”.
Travel Rule adalah satu-satunya pengecualian dari “tidak ada yang berjalan”. Pada aplikasi dengan Travel Rule diaktifkan, transaksi sandbox
travelRule tetap menjalankan mesin pertukaran: catatan transfer dibuat dan mengalami perubahan status.
Yang tidak pernah dilakukan sandbox adalah berkomunikasi dengan pihak di luar Didit.
Satu-satunya pihak lawan adalah Didit Test VASP, yang sudah tersedia di dalam platform: tidak ada pesan kepatuhan yang sampai ke VASP pihak lawan yang sungguhan melalui jalur mana pun (TRP, keanggotaan jaringan yang Anda hubungkan, email, atau INTERNAL), pemeriksaan atribusi VASP pihak lawan dilewati, dan pembatalan tidak mengirim apa pun ke pihak lawan.
Webhook travel_rule.status.updated tetap dikirim, dengan penanda "environment": "sandbox".Keluar - transaksi travelRule yang Anda kirim.
Pemeriksaan threshold_amount berjalan lebih dulu, dan di sandbox pemeriksaan ini hanya berlaku jika Anda mengirim transaction_details.amount_in_default_currency, karena sandbox tidak mengonversi mata uang. Tanpa kolom tersebut, setiap transfer sandbox dihitung di atas ambang batas.
Transfer yang tidak dijawab kedaluwarsa setelah confirmation_timeout_hours, dan timeout_outcome Anda kemudian berlaku untuk transaksi tersebut.
Di atas ambang batas, pemeriksaan dompet swakelola berlaku seperti biasa: transfer ke dompet swakelola yang dideklarasikan masuk ke UNCONFIRMED_OWNERSHIP tanpa ada yang dikirim, dan Anda dapat menyelesaikannya di sandbox melalui widget verifikasi kepemilikan dompet, atau melalui konfirmasi kepemilikan ketika dompet tujuan sudah ada di buku alamat dompet Anda.
Transfer lain di atas ambang batas diteruskan ke Didit Test VASP melalui jalur TEST_VASP, yang menjawabnya di dalam Didit dengan skenario yang Anda pilih berdasarkan alamat dompet atau nama penerima: transfer selesai, ditolak, tidak cocok, menjadi COUNTERPARTY_VASP_NOT_REACHABLE, kedaluwarsa (timeout_outcome Anda kemudian berlaku untuk transaksi), atau menunggu kepemilikan dompet.
Lihat Uji Travel Rule di sandbox untuk setiap skenario.Masuk - POST /v3/travel-rule/inbound/. Pendaftaran tidak pernah dikirim melalui jalur mana pun, jadi tidak ada yang disimulasikan di dalamnya: sandbox mencocokkan setoran dengan buku alamat dompet Anda dan menyelesaikannya secara sinkron, persis seperti pada live. Hasilnya selalu hasil nyata, bukan AWAITING_COUNTERPARTY: ON_HOLD (tidak ada kecocokan di buku alamat), UNCONFIRMED_OWNERSHIP (entri yang cocok belum terverifikasi kepemilikannya), COUNTERPARTY_MISMATCHED_DATA (nama penerima tidak sesuai dengan pemilik dompet), atau COMPLETED lalu FINISHED (cocok dengan entri yang sudah terverifikasi).
Untuk menerima transfer dari Didit Test VASP, gunakan Pemicu Transfer Masuk Test VASP dengan salah satu dompet di buku alamat Anda sendiri.Skenario Test VASP Travel Rule
travel_rule.scenarios pada katalog mencantumkan skenario keluar ini. Atur nama penerima di bawah pada transaksi travelRule keluar setelah mengaktifkan Travel Rule pada aplikasi sandbox Anda. Pemeriksaan ambang batas dan dompet swakelola yang dideklarasikan, yang dijelaskan di atas, berjalan lebih dulu.
Anda juga dapat memilih skenario dengan alamat dompet penerima sebagai ganti nama (alamat dompet yang diutamakan jika keduanya diisi), dan transfer yang tidak menyebutkan keduanya akan selesai sebagai
accept. Uji Travel Rule di sandbox mencantumkan dompet setiap skenario beserta hasil persisnya.
Pemicu Test VASP masuk hanya menerima accept dan name_mismatch pada kolom scenario-nya.
Cara menguji aturan sebelum diterapkan di produksi. Gunakan
Backtest: fitur ini memutar ulang
aturan terhadap riwayat transaksi Anda yang sebenarnya dan melaporkan
evaluated /
matched / affected_entities tanpa mengubah status transaksi mana pun. Kombinasikan
dengan mode TEST pada aplikasi produksi: aturan TEST dievaluasi pada setiap transaksi live baru dan mencatat apa yang akan dicocokkannya, tanpa mengubah skor atau status, lalu beralih ke ACTIVE setelah selektivitasnya dirasa tepat.Cara beralih antara live dan sandbox
Live dan sandbox adalah aplikasi terpisah, sehingga trafik pengujian dan data produksi tidak pernah tercampur. Setiap aplikasi memilikimode berupa live atau sandbox:
- Gunakan kunci API dari aplikasi mode sandbox untuk mendapatkan sesi tiruan yang tidak ditagih dan dapat disimulasikan.
- Gunakan kunci API dari aplikasi mode live untuk verifikasi sungguhan.
sandbox_scenario (pada pembuatan sesi dan pada API AML mandiri) serta endpoint simulasi hanya diterima pada aplikasi sandbox. Keduanya ditolak pada aplikasi live.
Sandbox dalam alur verifikasi yang di-hosting
Sesi yang dibuat di bawah aplikasi sandbox menampilkan UI tambahan dalam alur verifikasi yang di-hosting (url yang dikembalikan oleh POST /v3/session/):
- Banner sandbox di dalam kartu. Setiap layar menampilkan banner di dalam kartu - “Hanya data uji - tidak ada panggilan nyata”. Dengan demikian, selalu jelas bahwa sesi tidak pernah memanggil penyedia sungguhan dan tidak pernah menyentuh saldo Anda. Media yang ditangkap disimpan seperti sesi lainnya, jadi gunakan dokumen contoh dan data uji, bukan dokumen identitas asli atau informasi pribadi.
- Pemilih skenario sebelum alur. Sebelum pengambilan dimulai, pemilih di dalam kartu memandu pengguna memilih hasil uji: pilih hasil, lalu pilih pemicu untuk hasil tersebut. Konfirmasi memanggil
POST /v3/session/{session_id}/sandbox/arm/(lihat Mengaktifkan (atau mengaktifkan ulang) sesi sebelum alur dimulai di bawah), lalu melanjutkan ke alur dengan nilai khusus dari skenario tersebut sudah diterapkan. - Strip dokumen contoh. Satu baris dokumen contoh sandbox (hingga 3) berada tepat di bawah komponen pengunggahan dan pengambilan dokumen. Ketuk salah satu untuk menggunakannya sebagai pengganti unggahan asli.
Scenarios
Setiap skenario adalah kumpulan nilai khusus yang diberi nama. Teruskan slug-nya sebagaisandbox_scenario saat membuat sesi (atau ke endpoint simulasi) untuk mereproduksi hasilnya.
Skenario
review_* ada agar Anda dapat menguji UX peninjauan manual (antrean peninjauan di konsol, webhook In Review, dan tindakan persetujuan/penolakan oleh peninjau) tanpa memerlukan input yang menghasilkan penolakan. Dua skenario kyb_* di atas mengatur expected_details.registration_number alih-alih expected_details.first_name: keduanya hanya berlaku untuk sesi Verifikasi Bisnis (KYB).
Nilai magic
Nilai magic adalah input spesifik yang membuat satu fitur tiruan menghasilkan risiko tertentu. Atur kolom input ke nilai magic (langsung, atau melalui skenario) untuk memicunya.Pencarian non-dokumen dan dompet identitas
Aplikasi sandbox dapat mengaktifkan setiap dompet identitas dalam katalog negara, termasuk dompet yang tidak tersedia di aplikasi produksi. Skenario defaultapprove mensimulasikan identitas yang terverifikasi tanpa masuk ke dompet eksternal.
Hasilnya disimpan dalam sesi dan mengikuti langkah berikutnya yang normal dari alur kerja.
Sandbox tidak memvalidasi kredensial dompet yang sebenarnya dan tidak menagih percobaan yang disimulasikan.
Permintaan pencarian tetap memvalidasi kolom yang dimasukkan dan menggunakan batas percobaan yang dikonfigurasi, yang secara default adalah satu.
Gunakan skenario berikut untuk menguji aturan coba lagi dan fallback:
Kegagalan dompet mengikuti pengaturan negara untuk beralih ke pengambilan dokumen atau menolak.
Percobaan pencarian yang selesai dicatat secara terpisah, sehingga dua percobaan yang diizinkan menghasilkan dua hasil sebelum fallback.
Semua penggunaan sandbox tetap gratis.
Pemeriksaan rekening Bank Verification
Langkah Verifikasi Bank sandbox menawarkan kedua metode di setiap negara, sesuai urutan yang ditetapkan langkah tersebut, pada layanan simulasi tanpa bank dan tanpa biaya. Dengan urutan default, pengguna memulai dengan masuk ke akun bank dan memilih Masukkan detail rekening Anda untuk menjalankan pemeriksaan rekening; aturbank_method_order ke ["account_lookup", "open_banking"] untuk memulai dari pemeriksaan rekening.
Empat karakter terakhir nomor rekening yang diketik menentukan jawabannya; lihat Uji di sandbox untuk setiap akhiran dan rekening yang valid untuk setiap format.
API pemeriksaan rekening merespons kunci sandbox dengan akhiran yang sama.
Dokumen sampel
Alur yang di-hosting menyediakan tiga dokumen sampel, masing-masing untuk satu jenis dokumen:
Ketuk sampel pada bilah sampel untuk menggunakannya sebagai ganti pengambilan asli. Data yang diekstrak dan hasil sesi selalu berasal dari skenario atau nilai khusus yang dipilih, sehingga sampel apa pun dapat digunakan dengan skenario apa pun.
Identitas sampel: menguji expected_details
Setiap dokumen sandbox dibuat secara palsu dari satu identitas tetap.
Nilai yang diekstrak sama di setiap sesi dan tidak pernah diturunkan dari tanggal saat ini, sehingga Anda dapat mengisi awal expected_details dengan nilai tersebut dan memeriksa penanganan perbandingan kolom serta peringatan secara menyeluruh.
Kirimkan nilai di bawah ini dan pemeriksaan perbandingan akan lolos; kirimkan nilai lain dan peringatan *_MISMATCH_WITH_PROVIDED yang sesuai akan muncul dengan sengaja.
Tanggal berikut sama untuk setiap dokumen sampel:
Identitas lainnya bergantung pada dokumen yang Anda gunakan:
first_name dan last_name adalah pengecualian: sandbox menyalin nama yang Anda kirim di expected_details ke dokumen yang dibuat, sehingga pencocokan nama lolos dengan nama apa pun.
Gunakan nilai khusus SANDBOX_OCR_FULL_NAME_MISMATCH_WITH_PROVIDED untuk menguji ketidakcocokan nama, dan SANDBOX_OCR_DOB_MISMATCH_WITH_PROVIDED untuk ketidakcocokan tanggal lahir.
Jika alur kerja Anda membatasi
documents_allowed ke negara atau jenis dokumen yang tidak mencakup ePassport Brasil, sandbox akan membuat dokumen palsu dari negara yang diizinkan pertama, sehingga nationality, id_country, dan nama dokumen mengikuti negara tersebut. Tanggal di atas tetap sama.Yang tidak dimiliki dokumen palsu
Dokumen palsu adalah templat generik untuk negara dan jenis dokumen yang diizinkan, sehingga kolom yang hanya disediakan oleh dokumen asli yang diterbitkan negara tetap kosong. Yang paling penting untuk perutean adalah wilayah / negara bagian AS (kyc.region): lisensi mengemudi atau kartu identitas AS palsu tidak memiliki negara bagian, sehingga kondisi cabang seperti Region equals IL tidak akan pernah cocok di sandbox. Jika tidak ada cabang lain yang cocok, alur akan mengambil cabang cadangan node tersebut (cabang tanpa kondisi). Ini bukan peninjauan atau kegagalan cabang; kondisinya memang tidak memiliki data untuk dibaca. Kolom yang hilang juga membuat not equals dan not in gagal; lihat cara kondisi cabang membaca data sesi untuk perbedaan antara kolom yang hilang dan string kosong.
Untuk menguji alur yang bergantung pada negara bagian di sandbox, tentukan keputusan dari nilai yang Anda kendalikan pada sesi, bukan dari dokumen:
- Kirim negara bagian di
metadatasaat Anda membuat sesi (misalnya"metadata": {"credential_state": "IL"}) dan buat cabang berdasarkanmetadata.credential_state. Metadata dievaluasi di sandbox persis seperti di produksi. - Pertahankan kondisi
kyc.regionyang berasal dari dokumen untuk lalu lintas produksi jika Anda juga membutuhkan dokumen untuk membuktikan negara bagian; dalam mode produksi, wilayah dibaca dari dokumen asli.
metadata dan expected_details, node tindakan, serta node status benar-benar dijalankan. Sandbox tidak pernah memaksa sesi masuk ke peninjauan dengan sendirinya. Sesi sandbox hanya berstatus Dalam peninjauan ketika alur kerja mengarahkannya ke sana (skenario review_*, nilai khusus yang dipetakan ke tindakan peninjauan, atau node status dalam grafik).
Kode OTP dan opt-in email
- OTP telepon: pemeriksaan telepon di sandbox menerima kode apa pun dengan format yang benar (4-8 digit; termasuk
123456). Input dengan format yang salah tetap mengembalikan400. - OTP email: pemeriksaan email di sandbox menerima kode apa pun dengan format yang benar (termasuk
123456). Input dengan format yang salah tetap mengembalikan400.
Mengendalikan hasil: skenario, nilai ajaib, pengaktifan, dan endpoint simulasi
Ada lima cara untuk mengendalikan hasil sandbox.1. sandbox_scenario saat membuat sesi
Atur slug skenario saat membuat sesi (POST /v3/session/). Alur pembuatan sesi akan memperluas nilai ajaib yang terikat pada skenario ke dalam kolom input sesi, sehingga penyedia tiruan menghasilkan hasil yang dimaksud melalui alur kerja nyata.
2. Nilai ajaib yang diketik secara manual
Atur sendiri kolom input (misalnyaexpected_details.first_name = "SANDBOX_OCR_DOCUMENT_EXPIRED", atau user_email = "sandbox+aml_hit@didit.test"). Lihat tabel nilai ajaib di atas untuk daftar lengkapnya.
3. Aktifkan (atau aktifkan ulang) sesi sebelum alur dimulai
Atur atau ganti skenario yang diaktifkan pada sesi yang sudah ada, selama sesi belum melewatiNot Started. Ini adalah endpoint yang dipanggil oleh pemilih skenario sebelum alur, dan Anda juga dapat memanggilnya sendiri untuk membuat pemilih kustom atau kerangka pengujian:
- Lakukan autentikasi dengan
Session-Tokenmilik sesi itu sendiri (dikembalikan sebagaisession_tokensaat pembuatan sesi), bukan kunci API aplikasi Anda: endpoint ini ditujukan untuk sisi klien. - Mengembalikan
400untuk slug skenario yang tidak dikenal, dan400setelah sesi melewatiNot Started("Scenario can only be armed before the verification starts."). - Mengembalikan
404ketikaSession-Tokenmilik aplikasi produksi (bukan sandbox), atau tidak cocok dengansession_iddi path. - Mengaktifkan ulang menggantikan skenario sebelumnya. Hanya nilai ajaib yang ditulis skenario sebelumnya yang dihapus, dan apa pun yang sudah diketik pengguna secara manual (email, nama depan, dll.) tetap tidak berubah. Contoh: aktifkan
decline_phone_high_risk, lalu aktifkanapprove. Nomor telepon kembali menjadi tidak diatur, tetapi email yang dimasukkan pelanggan tetap ada setelah kedua panggilan.
4. Endpoint simulasi
Paksa status terminal setelah kejadian:- Konsol / kunci API (memerlukan hak istimewa
write:sessions; kunci API dengan cakupan terbatas memerlukan akses tulis ke sesi):POST /v3/session/{session_id}/simulate/ - Alur yang di-hosting (header
Session-Token):POST /v3/session/{session_id}/sandbox/simulate/
404, begitu juga Session-Token yang tidak cocok dengan session_id di path.
Setiap kolom dalam body bersifat opsional, tetapi setidaknya salah satu dari new_status, scenario, atau risk wajib diisi:
send_webhooks: true mengirim persis webhook yang dikirim oleh perubahan status sungguhan: status.updated, ditambah event user.status.updated dan user.data.updated (atau business.status.updated dan business.data.updated untuk sesi bisnis) yang disebabkan oleh perubahan itu, ke tujuan yang berlangganan event tersebut.
Dengan send_webhooks: false, status tetap berubah, tetapi tidak ada webhook yang dicatat atau dikirim.
Pemulihan webhook yang terlewat tidak pernah mengirim ulang keputusan tersebut, dan konsol tetap diperbarui secara langsung.
Perubahan status berikutnya pada sesi akan mengirim webhook seperti biasa.
statusadalah status yang diatur oleh simulasi, danprevious_statusadalah status yang dimiliki sesi sebelumnya.scenariomengembalikan slug Anda danriskadalah kasus risiko yang diterapkan; masing-masing bernilainulljika tidak ada.send_webhooksmengembalikan nilai yang diterapkan.- Mengembalikan
400untuk skenario atau risiko yang tidak dikenal, ketikanew_statustidak dapat ditentukan, untuknew_statusapa pun selain nilai yang tercantum di atas, dan ketika sesi sudah memiliki status yang diminta (["The new status is the same as the current status."]).
5. sandbox_scenario pada API AML mandiri
Skrining AML di sisi backend tidak memiliki pengguna akhir dan tidak ada sesi yang dapat diaktifkan, sehingga slug ditempatkan pada permintaan skrining itu sendiri (POST /v3/aml/):
decline_aml_hitmengembalikan satu hit dengan format produksi dan menetapkan skrining sebagaiDeclined;review_aml_possible_matchmenetapkannya sebagaiIn Review. Skenario yang tidak mengaktifkan hasil AML apa pun membuat skrining tetap bersih.- Dengan
save_api_request: true(default), skrining disimpan persis seperti pada kunci API produksi, sehinggarequest_idyang dikembalikan dapat digunakan padaGET /v3/session/{request_id}/decision/danGET /v3/session/{request_id}/generate-pdf/. - Mengembalikan
400untuk slug skenario yang tidak dikenal, dan400ketika kunci API milik aplikasi produksi.
Di mana sandbox_scenario muncul
Slug skenario yang diaktifkan (null jika tidak ada skenario yang diaktifkan) dikembalikan pada beberapa bagian dan sengaja dihilangkan dari bagian lainnya:
Jika integrasi Anda perlu bercabang berdasarkan skenario yang diaktifkan di sisi server, baca dari envelope webhook atau salah satu endpoint keputusan (
v1 atau v3).
Penggunaan dan penagihan
Penggunaan sandbox dicatat, tetapi tidak pernah ditagih:- Setiap panggilan tiruan tetap mencatat event penggunaan (
is_sandbox: true, dengan harga0.0000) sehingga volume sandbox terlihat untuk keperluan debugging. Namun, event ini tidak pernah ditambahkan ke total penggunaan Anda, tidak pernah dikurangkan dari saldo, dan tidak pernah muncul di faktur. - Saldo, isi saldo, dan tampilan penggunaan produksi di Business Console secara default menyaring penggunaan sandbox. Endpoint penggunaan isi saldo menerima parameter
environment(live, yang merupakan default, atausandbox) sehingga volume sandbox dapat diperiksa secara terpisah, selalu tanpa biaya dan tanpa mengonsumsi paket gratis. - Verifikasi Email dan Verifikasi Telepon ditagih per permintaan, bukan per hasil sesi, dan sandbox tidak dapat sepenuhnya meniru hal ini di lapisan webhook. Pemeriksaan email dan telepon di sandbox tetap mencatat event penggunaan per permintaan dengan harga
0.0000, sama seperti fitur tiruan lainnya. Ini adalah perbedaan yang diketahui dan diterima terhadap perilaku penagihan lingkungan produksi, bukan bug. - Struktur respons Validasi Database di sandbox sengaja berbeda dari struktur respons per penyedia di lingkungan produksi, karena tidak ada penyedia sungguhan yang dapat ditiru. Perlakukan payload Validasi Database di sandbox sebagai pengganti untuk hasilnya (status dan kode peringatan), bukan pratinjau respons penyedia di lingkungan produksi yang identik byte demi byte.