Mulai
Test mode
Test integrasi Anda tanpa memindahkan uang sungguhan.
API key test membuat permintaan pembayaran yang tampilan dan perilakunya sama seperti yang asli — field sama, biaya sama, webhook sama — tapi tidak ada uang sungguhan yang berpindah.
Test key
Selain key live, Anda bisa punya satu test key, berawalan kp_test_. Rotasi dan cabut di Pengaturan → Developer, persis seperti key live — satu key aktif per mode. Dashboard menampilkan satu environment dalam satu waktu: pindah ke Sandbox untuk melihat test key, Live untuk key live. Dipakai di header yang sama:
Authorization: Bearer kp_test_...
Mode key menentukan mode semua yang dibuatnya. Tidak ada field yang perlu diisi atau dikonfigurasi — create dengan kp_test_ menghasilkan objek test; create dengan kp_live_ menghasilkan objek live. Setiap key hanya bisa melihat mode-nya sendiri: test key tidak akan pernah bisa retrieve atau list permintaan pembayaran live, dan sebaliknya.
Objek test
Setiap response /v1 dan setiap webhook membawa livemode — false untuk objek test, true untuk yang live. Halaman checkout pembayaran test menampilkan badge test yang jelas, dan yang diberikan ke pembeli sengaja dibuat dummy yang tidak bisa dipakai: QR yang ditolak semua e-wallet, dan nomor Virtual Account yang tidak bisa ditransfer. Memang begitu seharusnya — pembayaran test tidak boleh bisa dibayar sungguhan.
curl https://pay.kasera.id/v1/transactions \
-H "Authorization: Bearer kp_test_..." \
-H "Idempotency-Key: test-order-1234" \
-H "Content-Type: application/json" \
-d '{ "amount": 150000, "description": "Kaos komunitas" }'Mengatur hasil pembayaran
Pembayaran test tidak pernah terkonfirmasi sendiri — Anda yang menentukan hasilnya. Ambil token dari checkout_url di response create (bagian setelah /p/) lalu kirim hasil yang Anda mau:
curl -X POST https://pay.kasera.id/api/v1/checkout/{token}/simulate-payment \
-H "Content-Type: application/json" \
-d '{ "outcome": "succeeded" }'curl -X POST https://pay.kasera.id/api/v1/checkout/{token}/simulate-payment \
-H "Content-Type: application/json" \
-d '{ "outcome": "expired" }'Body kosong berarti succeeded. Nilai lain ditolak 422 invalid_outcome. Endpoint ini diotorisasi oleh token checkout itu sendiri — tanpa API key. Kalau dipanggil untuk pembayaran live, jawabannya 404, sama seperti token yang tidak ada.
return_url boleh http di Sandbox
Create di mode live mewajibkan return_url berskema https. Dengan test key, http juga diterima, sehingga toko yang masih berjalan di localhost bisa mengembangkan alur redirect secara utuh tanpa menyiapkan sertifikat lebih dulu. Contoh yang sah di Sandbox: http://localhost:3000/selesai. Di live, nilai yang sama ditolak 422 validation_failed.
Kelonggaran ini hanya berlaku untuk return_url pada create. Endpoint webhook dan URL lainnya tidak ikut berubah.
Webhook
Hasil succeeded memicu pengiriman payment.paid yang nyata dan ber-signature — ke endpoint test, dengan signing secret test. Endpoint live dan test terpisah dan diatur di mode dashboard masing-masing, jadi siapkan dulu endpoint test di mode Sandbox sebelum menunggu kiriman. Verifikasi signature-nya persis seperti event live.
Cek livemode sebelum memproses pesanan. Selain itu, event test sama persis dengan event live — dan memang itu tujuannya.
Yang tidak tersentuh test mode
Pembayaran test dikecualikan dari semua alur uang: pencairan, saldo Anda, laporan pendapatan, rekonsiliasi, dan jatah sebelum verifikasi — create test tidak memakai jatah itu dan tidak juga ditolak olehnya. Pembayaran test juga tidak pernah mengirim email atau push notification ke pembeli maupun merchant; hanya webhook developer yang terkirim.
Go live
Ganti kp_test_ dengan kp_live_. Tidak ada lagi yang berubah. Kedua mode tidak berbagi data pembayaran — termasuk idempotency key — jadi key yang dipakai integrasi Anda di test mode masih terhitung baru di mode live: request live pertama Anda membuat pembayaran live, bukan replay dari yang tes.