QRIS
Dokumentasi API
Base: … πŸ“– Panduan← Dashboard

Dokumentasi API

API JSON untuk mengambil transaksi QRIS dan membuat QRIS dinamis dari sistem lain (server cabang, kasir, aplikasi). Butuh penjelasan santai non-teknis? Lihat Panduan.

Konsep singkat

1
Pusat menarik transaksi. Service ini login ke QRIS BCA lalu polling transaksi otomatis dan menyimpannya.
2
Cabang mengambil data. Sistem lain memanggil endpoint di bawah pakai API key. Key cabang di-scope ke outlet (mid)-nya sendiri; nomor kartu pembayar disamarkan.
3
Realtime. Tak perlu polling terus β€” pakai SSE (/api/stream) atau daftarkan webhook untuk didorong saat ada transaksi/invoice lunas.
4
QRIS dinamis. Cabang kirim nominal β†’ dapat QR + invoice. Pusat mengunci nominal unik (base + Rp1–100 acak) sehingga tiap pembayaran otomatis cocok ke invoice-nya (tidak tertukar, tidak double).

Autentikasi

Kirim header X-API-Key: <key> pada semua /api/* kecuali /api/health dan /api. Untuk SSE (EventSource tak bisa set header) pakai query ?api_key=<key>.

Indeks endpoint mesin: /api. Masukkan API key di kanan atas untuk mencoba langsung ("Try it").

Endpoint

Field transaksi

fieldcontohketerangan
date08 Agu 2026 11:26:14 WIBwaktu (WIB)
amount1255nominal (Rp)
payer_name / issuer_name**MA INDR**AN ***ILO / BANK MANDIRIpembayar (tersamar) & bank
reference_number / trace_number / approval_code608488910502 / 21157 / 851452identifier transaksi
mid / qris_nmid / tid001699394 / ID2022204392031 / A01id merchant / QR / terminal
cpan / mpan9360…391 / 9360…941PAN pembayar / merchant (tersamar utk cabang)
_ts1786188374000timestamp numerik β€” bisa dipakai lagi sebagai since

Contoh integrasi

Node.js β€” ambil transaksi cabang hari ini:

const r = await fetch(`${BASE}/api/transactions?mid=001699394&from=2026-08-08&to=2026-08-08`, {
  headers: { 'X-API-Key': process.env.QRIS_API_KEY }
});
const { transactions } = await r.json();

Verifikasi webhook (HMAC-SHA256):

const sig='sha256='+crypto.createHmac('sha256',SECRET).update(rawBody).digest('hex');
if(sig!==req.headers['x-signature']) return res.sendStatus(401);