Skip to main content
QRIS (Quick Response Code Indonesian Standard) is Indonesia’s unified QR payment standard that lets customers pay using any compatible app — GoPay, OVO, Dana, ShopeePay, and mobile banking. Unlike Virtual Account or Payment Link, each QRIS code is generated for one specific transaction and expires after a single payment.

Instant generation

Generate a QR code in one API call with a fixed amount — display it immediately to the customer.

All major apps

Accepted by GoPay, OVO, Dana, ShopeePay, and all QRIS-compatible banking apps.

Real-time confirmation

Payment status updates instantly via the QRIS network — no polling delay.

Payment flow


Key difference: one QR = one transaction

Unlike Virtual Account or Payment Link, each QRIS code is valid for one payment only. Once paid — or once expired — the code cannot be reused. Generate a new QR code for every new transaction.

Cannot do

  • Reuse the same QR code for multiple payments
  • Accept partial payments
  • Change the amount after generation
  • Keep a QR code active indefinitely

Must do

  • Generate a new QR code for each transaction
  • Set the exact amount at creation time
  • Monitor payment status in real-time
  • Expire unused codes to prevent stale QRs

Transaction status

StatusDescription
openQR code generated, awaiting customer payment.
paidPayment confirmed by the QRIS network.
expiredQR code expired before payment was made.
settledFunds transferred to your account.
Only transactions with status open can be deleted. Paid or expired transactions cannot be removed.

Important notes

Each QRIS code is single-use. After a customer completes payment, the QR code is automatically invalidated and cannot accept another payment. Always generate a fresh QR for the next customer or transaction.
The payment amount is set at QR creation time and cannot be changed. The customer must pay the exact amount — QRIS does not support partial or over-payments.
You can set an optional expiry time when generating a QR code. After expiry, the code cannot be scanned or paid. Unset expiry means the code stays open indefinitely until paid or manually deleted.
Merchant Discount Rate (MDR) applies to all QRIS transactions. The fee percentage depends on your merchant category (MCC) and your agreement with Singapay. MDR details are visible in each transaction record.
QRIS settlements typically follow an H+1 to H+2 schedule depending on the payment provider. Settlement timestamps are tracked in each transaction record.
Transaction records are retained for 1 year. Data older than 1 year is archived and may not be accessible via the API.

Available endpoints

List QRIS Transactions

Paginated list of all QRIS transactions for an account with filter support.

Show QRIS Transaction

Retrieve a single transaction by its numeric ID.

Generate Dynamic QRIS

Create a new MPM dynamic QR code for a fixed-amount transaction.
All endpoints require authentication. See Authentication.