How QRIS Works – Complete Guide
Everything about Indonesia's national QR payment standard: NMID, merchant types, EMV payload, cross-border payments and getting started.
What is QRIS?
QRIS — Quick Response Code Indonesian Standard — is Indonesia's national QR payment standard, developed by Bank Indonesia (BI) together with the Indonesian Payment System Association (ASPI). Officially launched on August 17, 2019 (Indonesia's Independence Day) and made mandatory for all payment providers on January 1, 2020, QRIS is built on the international EMV Merchant Presented Mode (MPM) specification — the same technical foundation used by PromptPay in Thailand and PayNow in Singapore.
Before QRIS, Indonesian merchants had to display multiple QR code stickers at their counters — one for each payment app. A GoPay user couldn't scan an OVO QR code, and a Dana user couldn't pay at a LinkAja merchant. QRIS solved this fragmentation by creating a single, unified QR standard that all Indonesian payment apps must support.
Today, Indonesia has over 30 million QRIS merchants — from street food stalls (warung) and motorbike taxi drivers to government offices and shopping malls — making it one of the world's largest QR payment networks by merchant count. More than 100 million Indonesians actively use QRIS-enabled payment apps.
The QRIS Application Identifier (AID) is ID.CO.QRIS.WWW, embedded in EMV tag ID 26 of the QR payload. The transaction currency is always Indonesian Rupiah (IDR, code 360). Every transaction is routed through BI-FAST, Bank Indonesia's national fast payment infrastructure, enabling real-time, 24/7 settlement.
The QRIS Revolution: One Code for All Apps
The transformation QRIS brought to Indonesian commerce cannot be overstated. Before January 2020, a street vendor accepting digital payments would need to maintain separate registrations with GoPay, OVO, Dana, LinkAja, and ShopeePay — and display five different QR stickers. QRIS replaced all of this with a single code.
| Aspect | Before QRIS | After QRIS |
|---|---|---|
| QR codes needed | 5+ (GoPay, OVO, Dana, LinkAja…) | 1 (QRIS) |
| Counter space | Multiple stickers cluttering desk | One clean QRIS sticker |
| App compatibility | Each code only for one app | Any QRIS-enabled app |
| Merchant setup | Register with each wallet separately | One Bank Indonesia registration |
| Settlement | Fragmented across app wallets | Unified via BI-FAST |
The Bank Indonesia mandate was clear: from January 1, 2020, any payment provider operating in Indonesia must adopt QRIS. Non-compliant providers faced the risk of losing their operating licenses. The result was immediate and sweeping — within months, Indonesia's entire digital payment landscape unified under a single QR standard.
How QRIS Works – Step by Step
- 1
Merchant displays their QRIS code
Static QRIS codes are printed on stickers and displayed at the checkout counter. For e-commerce or specific invoices, dynamic codes with a preset amount are generated per transaction.
- 2
Customer opens any QRIS-enabled app
GoPay, OVO, Dana, LinkAja, ShopeePay, BCA Mobile, Mandiri Livin', BRI Mobile, or any of the 50+ participating apps work identically. All are fully interoperable.
- 3
Customer scans the QRIS QR code
The app activates the camera scanner. The QRIS code can be scanned from a printed sticker, a phone screen, a PDF, or any other surface.
- 4
Payment details appear automatically
The merchant name, NMID, and amount (if embedded) are parsed from the EMV payload. For static QR codes, the customer enters the payment amount manually.
- 5
Customer enters PIN or uses biometrics
Authentication is required to authorize the payment. The PIN never leaves the device and is never transmitted to the merchant or stored in the QR code.
- 6
Transaction processes via BI-FAST
Bank Indonesia's national switching infrastructure routes and settles the payment in real time — 24 hours a day, 365 days a year, including public holidays.
- 7
Both parties receive confirmation
The payer receives a success notification with a transaction reference. The merchant receives an instant credit notification. Settlement to the merchant account is real-time.
QRIS Merchant Categories
Bank Indonesia classifies all QRIS merchants into four tiers based on annual revenue. The category is encoded in the QRIS payload as the Merchant Criteria field and directly determines the MDR (Merchant Discount Rate) charged on each received payment. Government institutions and education facilities pay 0% MDR.
| Category | English | Criteria Code | Annual Revenue | MDR | Examples |
|---|---|---|---|---|---|
| Usaha Mikro | Micro | A | < Rp 300 million / year | 0.3% | Street vendors, warungs, food stalls |
| Usaha Kecil | Small | A | Rp 300M – 2.5B / year | 0.7% | Local shops, small restaurants, service providers |
| Usaha Menengah | Medium | B | Rp 2.5B – 50B / year | 0.7% | Regional chains, mid-sized businesses |
| Usaha Besar | Large | C | > Rp 50 billion / year | 0.7% | Shopping malls, major retailers, corporations |
The QRIS EMV Payload Structure
A QRIS QR code encodes a sequence of TLV (Tag-Length-Value) fields as a plain ASCII string. Each field starts with a two-digit tag ID, followed by a two-digit length value, followed by the data content. The payload is defined by the EMV Merchant Presented Mode specification and extended with QRIS-specific fields by Bank Indonesia.
Here is a minimal static QRIS payload example (static = no preset amount):
000201 010211 2660 0016ID.CO.QRIS.WWW 0117ID1234567890123 52040000 5303360 5802ID 5915Warung Pak Budi 6006Jakarta 63041A2B
The spaces and line breaks above are for readability only — the actual payload is a single continuous string. The final tag 63 contains the CRC16-CCITT checksum of the entire payload (including the literal text "6304"), expressed as a 4-character uppercase hex string.
| Tag ID | Field Name | Example Value | Required | Description |
|---|---|---|---|---|
| 00 | Payload Format Indicator | 01 | Required | Always "01" – EMV Merchant Presented Mode |
| 01 | Point of Initiation Method | 11 or 12 | Required | 11 = static (no preset amount), 12 = dynamic (amount embedded) |
| 26 | Merchant Account – QRIS | ID.CO.QRIS.WWW + NMID | Required | Application Identifier + National Merchant ID |
| 52 | Merchant Category Code | 0000 | Required | ISO 18245 MCC – business category of merchant |
| 53 | Transaction Currency | 360 | Required | ISO 4217 numeric code for Indonesian Rupiah (IDR) |
| 54 | Transaction Amount | 50000 | Optional | Present only in dynamic QR codes; absent in static codes |
| 58 | Country Code | ID | Required | ISO 3166-1 alpha-2 – Indonesia |
| 59 | Merchant Name | Warung Pak Budi | Required | Name displayed on payer's screen, max 25 characters |
| 60 | Merchant City | Jakarta | Required | City of merchant location |
| 62 | Additional Data Field | terminal / reference | Optional | Optional terminal ID, reference ID, or customer label |
| 63 | CRC | 4-digit hex | Required | CRC16-CCITT checksum of the entire payload including "6304" |
Tag ID 26 is the heart of QRIS. It contains two sub-tags: the Application Identifier (AID) ID.CO.QRIS.WWW (sub-tag 00) and the merchant's National Merchant ID / NMID (sub-tag 01). The AID is what tells any QRIS-enabled app that this is an Indonesian QRIS payment, not a Thai PromptPay or Malaysian DuitNow code — all of which use the same EMV MPM format but different AIDs in their respective tag 26 blocks.
QRIS Cross-Border Payments
Bank Indonesia has been actively expanding QRIS beyond Indonesia's borders through bilateral QR payment linkages with ASEAN neighbors and beyond. Under these linkages, tourists from connected countries can pay at Indonesian QRIS merchants using their home country's payment apps — no cash or currency exchange required.
Conversely, Indonesian tourists in connected countries can pay at PromptPay, DuitNow, or PayNow merchants using their QRIS-enabled Indonesian banking or e-wallet apps. The exchange rate conversion happens automatically at the time of transaction.
Thailand
PromptPay
Since 2021
Malaysia
DuitNow
Since 2022
Singapore
PayNow
Since 2022
Philippines
QR Ph
Since 2023
Vietnam
VietQR
Since 2023
India
UPI
Since 2023
Japan
JCB / local
Since 2024
The ASEAN cross-border QR payment initiative is part of a broader G20-aligned effort to interlink national fast payment systems globally. Indonesia's QRIS is one of the most connected systems in the region, reflecting Bank Indonesia's active participation in bilateral payment agreements.
Supported Apps & Banks
All QRIS-enabled apps are fully interoperable. A customer with GoPay can scan the same QRIS code as a customer with BCA Mobile — the routing and settlement happen transparently through Bank Indonesia's infrastructure. As of 2025, over 50 payment service providers participate in the QRIS ecosystem:
Beyond consumer e-wallets, every major Indonesian state bank (BCA, Mandiri, BRI, BNI) and private bank (CIMB Niaga, Permata, Danamon, Maybank Indonesia, OCBC Indonesia) has integrated QRIS into their mobile banking apps. Even newer digital banks like Jenius, Allo Bank, and Bank Jago support QRIS natively.
QRIS for Merchants – Getting Started
Registering as a QRIS merchant is straightforward. You do not register directly with Bank Indonesia — instead, you apply through any Bank Indonesia-licensed Payment Service Provider (PJSP). Common routes:
- 📱
Via your bank app
Most major Indonesian banks (BCA, Mandiri, BRI, BNI, CIMB) offer merchant QRIS registration directly through their business banking apps or branch offices.
- 💚
Via GoPay / Gojek
GoTo Financial (GoPay) offers a streamlined merchant registration for small businesses, with the QRIS sticker delivered to your address.
- 🟣
Via OVO
OVO Business registration gives you a QRIS merchant code compatible with all QRIS apps, not just OVO users.
- 🔵
Via Dana
Dana for Merchants (Merchant Dana) offers QRIS registration with a merchant dashboard for tracking transactions.
Upon successful registration, you receive a National Merchant ID (NMID) — a unique identifier assigned by Bank Indonesia — and a printed QRIS sticker with your QR code. The NMID is encoded in your QRIS payload and is required for Bank Indonesia compliance. Display your QRIS sticker prominently at the point of sale, alongside the mandatory QRIS logo.
For developers and businesses who need to generate QRIS QR codes programmatically — for e-commerce checkouts, invoices, or POS integration — qrpayhub.com provides a free browser-based QRIS generator. A REST API for server-side generation is planned as part of the upcoming API plan.
Ready to generate your QRIS QR Code?
Free, instant, works with GoPay, OVO, Dana, LinkAja, ShopeePay and all QRIS apps.
Open QRIS Generator →