> ## Documentation Index
> Fetch the complete documentation index at: https://docs.singapay.id/llms.txt
> Use this file to discover all available pages before exploring further.

# QRIS

Let customers pay by scanning a QR code with any banking or e-wallet app in Indonesia. One QR code, every app — that's the power of the national QRIS standard.

***

## What is QRIS?

QRIS (Quick Response Code Indonesian Standard) is a unified QR payment standard regulated by Bank Indonesia. Any QRIS-certified app can scan and pay any QRIS code — meaning a QR generated by SingaPay works for customers using BCA Mobile, Mandiri, GoPay, OVO, DANA, ShopeePay, and dozens of others, with no extra configuration on your end.

SingaPay generates **MPM Dynamic QRIS** — Merchant Presented Mode, Dynamic. Each QR code is generated fresh per transaction and encodes the exact payment amount, eliminating any risk of customer input errors.

***

## Transaction limits

| Parameter           | Value                                              |
| ------------------- | -------------------------------------------------- |
| Minimum transaction | Rp 1,000                                           |
| Maximum transaction | Rp 10,000,000 (per Bank Indonesia QRIS regulation) |
| Settlement          | T+1 Business Days                                  |
| QR type             | MPM Dynamic                                        |
| Currency            | IDR                                                |

***

## Why use QRIS?

✓ Works with every QRIS-certified app — one code covers every customer regardless of bank or wallet.

✓ Payment amount is fixed inside the QR — no manual entry, no room for mistakes.

✓ Real-time payment confirmation the moment the customer's app confirms.

✓ Flexible display: in-person screens, printed receipts, invoices, or in-app.

***

## How it works

<Steps>
  <Step title="Generate a QR code">
    Your system calls the SingaPay API with the transaction amount. A raw `qr_string` is returned.
  </Step>

  <Step title="Render and display">
    Convert the `qr_string` into a scannable image using any standard QR library and display it to your customer.
  </Step>

  <Step title="Customer scans and confirms">
    The customer opens their preferred app, scans the QR, reviews the amount, and confirms payment in a few seconds.
  </Step>

  <Step title="Payment confirmed, QR consumed">
    SingaPay confirms the payment, credits your balance, fires a webhook, and marks the QR as used. It cannot be reused.
  </Step>
</Steps>

***

<Warning>
  Each dynamic QRIS code is **single-use**. Once a customer pays or the code expires, it becomes invalid. Always generate a new `qr_string` for each transaction.
</Warning>

***

<Card title="Credit Card" icon="credit-card" href="#24-credit-card">
  Accept Visa, Mastercard, and American Express payments.
</Card>

***
