Direct API

Virtual Account

Nomor Virtual Account per transaksi yang ditransfer pembeli dari aplikasi banknya.

Pembeli dapat nomor, buka aplikasi banknya, lalu transfer ke nomor itu. Tanpa pindah aplikasi, tanpa QR — metode favorit orang Indonesia kalau nominalnya besar atau uangnya tidak ada di HP yang sedang dipakai. Semua bank pakai request yang sama; hanya kodenya yang berbeda.

Langkah integrasi

  1. Buat permintaan pembayaran.
  2. Tampilkan kode pembayaran dan instruksinya di halaman Anda.
  3. Terima konfirmasi pembayaran lewat webhook payment.paid.
  4. Cek status kalau perlu kepastian: GET /v1/transactions/:id.

Kode bank

KodeBank
va_bcaBCA
va_briBRI
va_bniBNI
va_mandiriMandiri
va_permataPermata
va_cimbCIMB Niaga
va_danamonDanamon
va_maybankMaybank

GET /v1/payment_methods mengembalikan bank yang bisa dipakai akun Anda. Ambil dari sana, jangan hard-code tabel ini — bank bisa diaktifkan atau dihentikan tanpa rilis di sisi Anda.

1. Buat permintaan pembayaran

Satu kode langsung ke bank itu. Kirim beberapa kode dan pembeli yang memilih; kalau payment_methods tidak dikirim, semua metode yang aktif di akun Anda ditawarkan. Virtual Account butuh 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, dengan tombol copy, sebutkan banknya dari payment.display_name, dan tampilkan blok instructions di bawahnya. Pembeli sering salah ketik nomor ini; tombol copy mengurangi sebagian besar komplain ke support.

3. Terima konfirmasi pembayaran

Webhook payment.paid terkirim saat transfernya masuk, yang bisa jauh setelah Anda membuat permintaan pembayarannya.

4. Cek status

GET /v1/transactions/:id — khusus VA, boleh di-polling dengan interval panjang, karena jeda antara create dan pembayaran bisa berjam-jam.

Perlu diketahui

Virtual Account
Masa berlakuAturan yang sama dengan semua metode: default 60 menit, maksimal 24 jam lewat expires_in_minutes
KonfirmasiSaat transfernya masuk, bukan saat Anda membuatnya
Bisa di-refundTidak — VA tidak bisa dibalik

VA bisa belum dibayar jauh lebih lama daripada QR. Jangan menahan stok atau kursi hanya berdasarkan pending, dan proses pesanan hanya dari webhook — pembeli yang transfer di jam terakhir itu normal, bukan anomali.