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?

QRISQuick 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.

AspectBefore QRISAfter QRIS
QR codes needed5+ (GoPay, OVO, Dana, LinkAja…)1 (QRIS)
Counter spaceMultiple stickers cluttering deskOne clean QRIS sticker
App compatibilityEach code only for one appAny QRIS-enabled app
Merchant setupRegister with each wallet separatelyOne Bank Indonesia registration
SettlementFragmented across app walletsUnified 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. 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. 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. 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. 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. 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. 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. 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.

CategoryEnglishCriteria CodeAnnual RevenueMDRExamples
Usaha MikroMicroA< Rp 300 million / year0.3%Street vendors, warungs, food stalls
Usaha KecilSmallARp 300M – 2.5B / year0.7%Local shops, small restaurants, service providers
Usaha MenengahMediumBRp 2.5B – 50B / year0.7%Regional chains, mid-sized businesses
Usaha BesarLargeC> Rp 50 billion / year0.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 IDField NameExample ValueRequiredDescription
00Payload Format Indicator01RequiredAlways "01" – EMV Merchant Presented Mode
01Point of Initiation Method11 or 12Required11 = static (no preset amount), 12 = dynamic (amount embedded)
26Merchant Account – QRISID.CO.QRIS.WWW + NMIDRequiredApplication Identifier + National Merchant ID
52Merchant Category Code0000RequiredISO 18245 MCC – business category of merchant
53Transaction Currency360RequiredISO 4217 numeric code for Indonesian Rupiah (IDR)
54Transaction Amount50000OptionalPresent only in dynamic QR codes; absent in static codes
58Country CodeIDRequiredISO 3166-1 alpha-2 – Indonesia
59Merchant NameWarung Pak BudiRequiredName displayed on payer's screen, max 25 characters
60Merchant CityJakartaRequiredCity of merchant location
62Additional Data Fieldterminal / referenceOptionalOptional terminal ID, reference ID, or customer label
63CRC4-digit hexRequiredCRC16-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:

GoPayOVODanaLinkAjaShopeePayBCA MobileMandiriBRIBNICIMB NiagaPermataJeniusAllo Bank50+ more

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 →