UPI

UPI (Unified Payments Interface) is India's instant-payment rail, operated by the National Payments Corporation of India (NPCI). Two QR formats coexist: the plain upi://pay URI scheme (simple, works in every UPI app) and the NPCI BR Code — an EMVCo MPM subset with Merchant Account Information (tag 26) carrying the VPA. UPI processed 11+ billion transactions per month by 2024; every Indian banking and payment app supports it.

Canonical spec: NPCI UPI Product Overview and NPCI OC 97 — Standardization of UPI QR Code Format.
URI scheme: upi://pay?pa=VPA&pn=NAME&am=AMT&cu=INR — the simplest UPI QR format. Works in every UPI-enabled app.
Parent spec: EMVCo MPM v1.1. UPI reserves merchant-account tag 26 in BR Code format.
Regulator: Reserve Bank of India (RBI) — issues UPI circulars; NPCI is the operator.

Two QR formats

upi:// URI scheme — parameters

ParamNameRequiredNotes
paPayee address (VPA)YesFormat: user@handle. Example: alice@oksbi, merchant@paytm.
pnPayee nameYesURL-encoded. Shown to payer for confirmation.
amAmountNoDecimal string: 10.00. Omit for static "enter amount" QRs.
cuCurrencyNoAlways INR. UPI is INR-only by regulation.
tnTransaction noteNoFree-text memo shown to payer, max 50 chars.
trTransaction referenceNoMerchant-provided ID for reconciliation.
mcMerchant Category CodeNo4-digit ISO 18245 MCC. Required for merchant accounts, optional for P2P.
tidTerminal IDNoPOS terminal identifier.
urlInvoice/product URLNoDeep-link the payer can open after payment to fetch receipt.

NPCI BR Code — tag 26 structure

When a unified QR uses BR Code format instead of plain upi://, the UPI-specific payload lives in tag 26 as a nested TLV:

Sub-tagNameLengthNotes
00GUI — Global Unique IdentifiervariableFixed value upi.npci.org. Identifies the scheme as UPI.
01VPAvariableThe virtual payment address. Example: merchant@oksbi.
02Merchant codevariableNPCI-assigned merchant identifier for acquirer reconciliation.

VPA format rules

Canonical test vector — upi:// URI scheme

VPA merchant@oksbi, name TEST MERCHANT, fixed amount ₹10.00, with reference INV-2026-0001:

upi://pay?pa=merchant@oksbi&pn=TEST%20MERCHANT&am=10.00&cu=INR&tn=Invoice%20INV-2026-0001&tr=INV-2026-0001

Minimal "enter amount" static sticker:

upi://pay?pa=merchant@oksbi&pn=TEST%20MERCHANT&cu=INR

Common pitfalls

UPI-app compatibility

Appupi:// URINPCI BR CodeNotes
Google Pay (Tez)YesYesLargest UPI app by volume.
PhonePeYesYesFull UPI + BR Code support.
PaytmYesYesFull UPI + their own Paytm wallet fallback.
Amazon PayYesYesVia Axis Bank (@apl handle).
BHIMYesYesNPCI's reference implementation. Safe baseline for testing.
Every major bank app (SBI YONO, ICICI iMobile, HDFC PayZapp, Axis Mobile)YesYesAll UPI-enrolled banks ship UPI support in their consumer app.
Generic iOS/Android cameraPartialNoNative cameras parse the upi:// scheme and offer "Open in UPI app" on newer devices, but don't render BR Code TLV directly.

See also

Spec references verified 2026-04-19. NPCI UPI Product Overview (2024), NPCI OC 97 — UPI QR Standardization, EMVCo MPM v1.1.