Direct API
Virtual Account
Nomor rekening per transaksi yang dituju pembeli dari aplikasi banknya.
Pembeli mendapat sebuah nomor, membuka aplikasi banknya, lalu mentransfer ke nomor itu. Tanpa berpindah aplikasi, tanpa QR — metode yang dipilih orang Indonesia saat nominalnya besar atau uangnya tidak ada di ponsel itu. Semua bank memakai panggilan yang sama; hanya kodenya yang berbeda.
Langkah integrasi
- Buat permintaan pembayarannya.
- Tampilkan kode pembayaran dan instruksinya di halaman Anda.
- Terima konfirmasi pembayaran — webhook payment.paid.
- Cek status saat Anda perlu kepastian: GET /v1/transactions/:id.
Kode bank
| Kode | Bank |
|---|---|
va_bca | BCA |
va_bri | BRI |
va_bni | BNI |
va_mandiri | Mandiri |
va_permata | Permata |
va_cimb | CIMB Niaga |
va_danamon | Danamon |
va_maybank | Maybank |
GET /v1/payment_methods mengembalikan bank yang bisa dipakai akun Anda. Baca dari sana, jangan tulis tabel ini permanen di kode — sebuah bank bisa diaktifkan atau dihentikan tanpa rilis di sisi Anda.
1. Buat permintaan pembayaran
Satu kode langsung menuju bank itu. Kirim beberapa dan pembeli yang memilih; kosongkan payment_methods dan semua metode yang aktif di akun Anda ditawarkan. Virtual Account membutuhkan nama pembayar: kirim customer.name, atau create-nya ditolak 422 customer_required.
curl https://pay.kasera.id/v1/transactions \
-H "Authorization: Bearer kp_live_..." \
-H "Idempotency-Key: order-1234" \
-H "Content-Type: application/json" \
-d '{
"amount": 150000,
"external_id": "ORD-1234",
"payment_methods": ["va_mandiri"],
"customer": { "name": "Budi" }
}'{
"id": "payreq_9b2f...",
"status": "pending",
"payment_method": "va_mandiri",
"payment": {
"type": "payment_code",
"payment_code": "8890812345678901",
"bank": "Mandiri",
"display_name": "Mandiri Virtual Account"
},
"instructions": { "title": "Cara membayar via Mandiri Virtual Account", "steps": ["..."] },
"expires_at": "2026-08-28T12:00:00+07:00"
}2. Tampilkan kode pembayarannya
Tampilkan payment.payment_code sebagai teks besar yang bisa diseleksi beserta tombol salin, sebutkan banknya dari payment.display_name, dan cetak blok instructions di bawahnya. Pembeli sering salah ketik nomor ini; tombol salin menghapus sebagian besar tiket dukungan.
3. Terima konfirmasi pembayaran
Webhook payment.paid menyala saat transfernya masuk, yang bisa jauh setelah Anda membuat permintaannya.
4. Cek status
GET /v1/transactions/:id — khusus VA, layak dipoll dengan jadwal jarang, karena jeda antara create dan pembayaran terhitung dalam jam.
Perlu diketahui
| Virtual Account | |
|---|---|
| Kedaluwarsa | Aturan yang sama dengan semua metode: default 60 menit, maksimal 24 jam lewat expires_in_minutes |
| Konfirmasi | Saat transfernya masuk, bukan saat Anda membuatnya |
| Bisa direfund | Tidak — VA tidak bisa dibalik |
VA menganggur jauh lebih lama daripada QR. Jangan menahan stok atau kursi hanya berdasarkan pending, dan penuhi pesanan hanya pada webhook — pembeli yang mentransfer di jam terakhir itu normal, bukan anomali.