Direct API

QRIS

Satu kode, bisa di-scan semua e-wallet dan aplikasi bank di Indonesia.

QRIS adalah standar QR nasional, jadi satu kode diterima GoPay, OVO, DANA, ShopeePay, LinkAja, dan semua aplikasi bank — bukan Anda yang memilih e-wallet-nya, tapi pembeli. Konfirmasinya masuk beberapa detik setelah di-scan.

Langkah integrasi

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

1. Buat permintaan pembayaran

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": ["qris"]
  }'
{
  "id": "payreq_9b2f...",
  "status": "pending",
  "payment_method": "qris",
  "payment": {
    "type": "qr",
    "qr_string": "00020101021226670016COM.KASERA.WWW...6304A1B2"
  },
  "instructions": { "title": "Cara membayar dengan QRIS", "steps": ["..."] },
  "expires_at": "2026-08-27T13:00:00+07:00"
}

2. Tampilkan QR-nya

payment.qr_string adalah payload EMV mentah. Encode jadi gambar di browser — kami sengaja mengembalikan string, bukan gambar, supaya halaman Anda yang mengatur ukuran, tampilan, dan cache. Tampilkan blok instructions di bawahnya apa adanya; blok itu ditulis untuk pembeli, dalam bahasa Indonesia.

// Any QR library works — the payload is a plain string.
// npm install qrcode
import QRCode from "qrcode";

QRCode.toCanvas(document.getElementById("qr"), trx.payment.qr_string);

Kalau sesekali payment tidak ada, ambil ulang permintaan pembayarannya — isinya tidak pernah berupa placeholder.

3. Terima konfirmasi pembayaran

Webhook payment.paid yang memberi tahu Anda bahwa uangnya sudah masuk. Apa pun yang tampil di layar pembeli bukan bukti — yang jadi bukti hanya data di sistem kami.

4. Cek status

GET /v1/transactions/:id kalau Anda perlu kepastian — saat rekonsiliasi, atau pembeli bilang sudah bayar tapi webhook tidak datang. Bukan pengganti webhook.

QR tidak berlaku lagi setelah expires_at — scan setelah itu gagal di bank pembeli, bukan di kami. Sembunyikan QR-nya saat itu, dan buat permintaan pembayaran baru kalau pembeli masih mau bayar. Batas nominal dan masa berlaku ada di rate limit & batas.