UPI QR vs EMVCo QR: How They Differ
UPI QR and EMVCo MPM QR can both sit on an Indian merchant counter and still be different products. One is a UPI payment address in a URI. The other is a TLV payload wallets parse with EMVCo rules. Generating the wrong one is a common go-live failure.
Two grammars, one camera
A phone camera does not care which payment scheme you intended. The wallet that opens the scan does. A UPI-only app may ignore a TLV string. An EMVCo-oriented wallet may ignore a upi://pay URI. Some Indian super-apps parse both; many do not.
What EMVCo MPM puts on the wire
MPM is a concatenation of TLV objects. Mandatory identity lives in Tags 00, 01, 52, 53, 58, 59, 60 plus at least one Merchant Account Information template and Tag 63 CRC. Amount is Tag 54 when present. Currency is ISO 4217 numeric. That grammar is what national schemes such as PromptPay and SGQR extend — they are not UPI intent strings.
What a typical UPI QR carries
UPI QR usually encodes a Virtual Payment Address (VPA), payee name, and optional amount or transaction note in a UPI intent URI. The consumer app resolves the VPA through NPCI rails. There is no Tag 63 CRC on that URI. Copying a UPI string into an EMVCo decoder will look like garbage TLV.
Bharat QR and dual presentation
India also uses Bharat QR / EMVCo-compatible merchant-presented formats so non-UPI wallets can still pay. Acquirers sometimes print a combined sign or two codes. If you only generate UPI intent, you exclude those wallets. If you only generate MPM with a non-UPI GUID, you exclude UPI-only apps.
How to choose
India-only UPI micro-merchant with a printed sticker: follow the format your PSP documents, usually UPI QR. Multi-scheme or cross-border readiness: emit MPM with the local MAI template your acquirer assigned, plus CRC. If the PSP gives you both, test both with the actual apps — do not assume interoperability from the word QR.
Testing checklist
Generate the candidate payload in the EMV studio or from the PSP. Decode it here: if you expected MPM and see no Tag 00, you have a URI, not TLV. Scan with PhonePe/GPay/Paytm as relevant and with one non-UPI wallet if you claim Bharat QR. Confirm amount entry behavior matches static vs dynamic.
Affiliation
UPI is operated in India by NPCI. EMVCo publishes MPM globally. EMV QR Hub is independent of both. Use primary sources on npci.org.in and emvco.com when you certify production.
Intent URI shape (illustrative)
A UPI QR often starts with upi://pay?pa=… rather than 000201. If Decode tries to parse that as TLV it will fail fast. That failure is correct — it is the wrong grammar.
Acquirer kits
Indian PSPs sometimes give you a Bharat QR MPM string and a UPI intent. Generate both if they said both. Test both. Do not merge them into one TLV by hand.
How to choose what to print
If your customers are primarily in-app UPI collect, the intent QR may be enough. If you need wallets that speak MPM / Bharat QR, you need an MPM envelope with the GUID the acquirer registered. Tourists and inbound wallets may speak neither; have a card presentment. Choosing based on which acronym ranks on Google is how shops print a code half their apps cannot read.
Testing checklist: decode the MPM string here (CRC, Tag 53 numeric, Tag 01, MAI). Open the UPI URI in a UPI app (pa, pn, am as applicable). Confirm they do not point at different merchants. Affiliation: EMV QR Hub is not NPCI, not a PSP, and not EMVCo. Specs: emvco.com for MPM; NPCI/PSP docs for UPI.
Support script for dual-QR counters
Ask which app the customer opened. UPI collect apps want the intent QR. MPM/Bharat wallets want the TLV QR. If they scanned the wrong symbol, switching apps beats “fixing” TLV. Train staff to point at the correct code rather than reprinting both onto one sticker.
Documentation for cashiers
Two QR codes need two labels on the standee: “UPI apps” and “Other wallets” (or whatever your acquirer prescribes). Unlabeled dual QR is how customers scan the wrong grammar and support blames “the QR is broken.”
