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

  1. Buat permintaan pembayarannya.
  2. Tampilkan kode pembayaran dan instruksinya di halaman Anda.
  3. Terima konfirmasi pembayaran — webhook payment.paid.
  4. Cek status saat Anda 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. 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
KedaluwarsaAturan yang sama dengan semua metode: default 60 menit, maksimal 24 jam lewat expires_in_minutes
KonfirmasiSaat transfernya masuk, bukan saat Anda membuatnya
Bisa direfundTidak — 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.