Dokumentasi API

API QRISDinamis

Dua layanan dalam satu API key: konversi QRIS statis milikmu menjadi dinamis, dan terima pembayaran lewat QRIS kami. Butuh paket aktif (Rp 10.000 / 30 hari, unlimited).

Autentikasi & batas

Semua endpoint memakai header X-API-Key. Batas 120 permintaan per menit per API key. Base URL: https://qrisdinamis.com.

1. Konversi QRIS

POST /api/public/v1/qris

Mengubah QRIS statis milikmu menjadi QRIS dinamis bernominal.

NamaTipeKeterangan
qrisstringKode QRIS statis (payload EMVCo), wajib
amountnumberNominal dalam rupiah, wajib
fee.typenone | rupiah | percentJenis biaya layanan, opsional
fee.valuenumberBesar biaya layanan, opsional

Contoh request

curl -X POST https://qrisdinamis.com/api/public/v1/qris \
  -H "Content-Type: application/json" \
  -H "X-API-Key: qd_live_xxxxxxxx" \
  -d '{
    "qris": "00020101021126...",
    "amount": 25000,
    "fee": { "type": "rupiah", "value": 1000 }
  }'

Contoh respons

{
  "success": true,
  "payload": "00020101021226...",
  "merchant": { "name": "TOKO CONTOH", "city": "JAKARTA" },
  "amount": 25000,
  "qr_svg": "<svg ...>"
}
2. Terima pembayaran QRIS

POST /api/public/v1/charge

Membuat tagihan QRIS memakai QRIS kami, sehingga pembayaran benar-benar masuk ke saldo akunmu. Akun merchant harus sudah disetujui admin (verifikasi KTP + rekening) di halaman Terima Pembayaran.

NamaTipeKeterangan
amountnumberNominal Rp 1.000 – Rp 1.000.000, wajib
labelstringKeterangan / nomor order, opsional (maks 80 karakter)
minutesnumberMasa aktif QRIS, 5–1440 menit, default 30
feeBearercustomer | merchantPenanggung biaya 1,5%, default customer

Contoh request

curl -X POST https://qrisdinamis.com/api/public/v1/charge \
  -H "Content-Type: application/json" \
  -H "X-API-Key: qd_live_xxxxxxxx" \
  -d '{
    "amount": 100000,
    "label": "Order #1234",
    "minutes": 30,
    "feeBearer": "customer"
  }'

Contoh respons

{
  "success": true,
  "order_id": "MC1754112233456",
  "label": "Order #1234",
  "amount": 100000,
  "fee_amount": 1500,
  "fee_bearer": "customer",
  "total_amount": 101500,
  "net_amount": 100000,
  "status": "pending",
  "expires_at": "2026-08-02T07:05:00.000Z",
  "qr_string": "00020101021226...",
  "qr_svg": "<svg ...>"
}

Catatan: lewat API tidak ada batasan jumlah tagihan aktif. Setiap request selalu membuat tagihan baru dengan order_id unik, walaupun masih ada tagihan lain berstatus pending — cocok untuk banyak pembeli sekaligus. Simpan order_id tiap tagihan untuk pengecekan status. (Batas satu tagihan aktif hanya berlaku di dashboard web, bukan API.)

3. Cek status tagihan

GET /api/public/v1/charge?order_id=...

Status: pending, paid, expired, underpaid, atau failed. Field settled bernilai true setelah dana cair (H+1 / 24 jam) dan siap ditarik.

Contoh request

curl "https://qrisdinamis.com/api/public/v1/charge?order_id=MC1754112233456" \
  -H "X-API-Key: qd_live_xxxxxxxx"

Contoh respons

{
  "success": true,
  "order_id": "MC1754112233456",
  "status": "paid",
  "settled": false,
  "total_amount": 101500,
  "net_amount": 100000,
  "paid_at": "2026-08-02T06:41:20.000Z"
}

Biaya layanan terima pembayaran

  • • Biaya 1,5% dari nominal, hanya untuk transaksi sukses.
  • feeBearer: "customer" → pembeli membayar nominal + 1,5%, kamu menerima nominal penuh.
  • feeBearer: "merchant" → pembeli membayar nominal, kamu menerima nominal − 1,5%.
  • • Dana bisa ditarik ke rekeningmu 24 jam setelah pembayaran sukses.

Kode error

  • 400 — Body atau parameter tidak valid.
  • 401 — API key tidak valid atau tidak dikirim.
  • 402 — Paket API kedaluwarsa, perpanjang di dashboard.
  • 404 — Tagihan tidak ditemukan (cek status).
  • 422 — QRIS tidak valid, nominal melebihi batas, atau merchant belum disetujui.
  • 429 — Melebihi 120 permintaan per menit.