# UPI QR

> Source: https://docs.barcoder.ai/docs/standards/upi-qr
> research date 2026-05-28 · extracted at 2026-10-06
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [UPI Product Overview — NPCI](https://www.npci.org.in/what-we-do/upi/product-overview)
- [Unified Payments Interface — Wikipedia](https://en.wikipedia.org/wiki/Unified_Payments_Interface)
- [NPCI UPI Linking Specifications 1.6 (Nov 2017)](https://www.labnol.org/files/linking.pdf)

## Overview

**UPI** (Unified Payments Interface) is India's national real-time payment system, launched by the National Payments Corporation of India (NPCI) on **11 April 2016** <sup>[1][1], [2][2]</sup>. The **UPI QR code** is its merchant-presented QR profile: a [QR Code](https://docs.barcoder.ai/docs/standards/qr-code) encoding a `upi://pay?...` deep link rather than the EMVCo TLV format used by most other national QR standards <sup>[3][3], [4][4]</sup>. India also runs a parallel EMVCo-based standard, [Bharat QR](https://docs.barcoder.ai/docs/standards/bharat-qr), for card-network interoperability — but UPI QR is dominant: **658 million UPI QRs deployed vs 67 million Bharat QRs** <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>.

As of early 2026 UPI processes **~270 billion transactions per year** (228 B in calendar 2025; FY26-27 NPCI projection ~379 B) at a daily run-rate of **~730–743 million transactions** (Feb-Mar 2026) worth an **annual run-rate of ~USD 4.2 trillion** — comparable to global Visa volume <sup>[2][2]</sup>. UPI hit an all-time single-month high of **21.7 billion transactions in January 2026** and is forecast to reach **~90 % share of India's retail digital payments by FY26-27** (up from ~83 % today) <sup>[2][2], [India report](https://docs.barcoder.ai/docs/payments/IN)</sup>.

## History

UPI was officially launched on **11 April 2016**, inaugurated by RBI Governor Dr. Raghuram G. Rajan in Mumbai with 21 participating banks <sup>[2][2]</sup>. The launch followed nearly a decade of NPCI groundwork: NPCI had been operating the IMPS (Immediate Payment Service) since 2010, which provided the messaging foundation UPI extended with a VPA-based addressing layer <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>.

NPCI began allowing banks to upload UPI-enabled apps to Google Play on **25 August 2016** <sup>[2][2]</sup>. NPCI's own reference app, **BHIM** (Bharat Interface for Money), launched in December 2016 <sup>[2][2]</sup>. By February 2022 the network had grown from the initial 21 banks to **304 participating banks** <sup>[2][2]</sup>.

**Evolution timeline** <sup>[2][2], [3][3], [India report](https://docs.barcoder.ai/docs/payments/IN)</sup>:
- **2016 (April)** — UPI 1.0 launch with 21 banks.
- **2016 (August)** — UPI apps on Google Play.
- **2016 (September)** — [Bharat QR](https://docs.barcoder.ai/docs/standards/bharat-qr) launched in parallel as the EMVCo-compliant card-network-interoperable variant.
- **2018 (August)** — **UPI 2.0**: overdraft account linking, recurring AutoPay mandates, invoice attachment, **signed QR codes** for verified merchants.
- **2021 (February)** — PayNow ↔ UPI linkage with Singapore announced; live in February 2023.
- **2024+** — **UPI 3.0** features: voice payments, credit lines on UPI, vouchers, delegated payments.
- **2024 onwards** — international expansion to 25+ countries (Singapore, France at Eiffel Tower, UAE, Mauritius, Nepal, Sri Lanka, Qatar, Malaysia) <sup>[2][2], [India report](https://docs.barcoder.ai/docs/payments/IN)</sup>.

## Technical specification

UPI QR encodes the **`upi://pay`** deep-link URI inside a standard [QR Code](https://docs.barcoder.ai/docs/standards/qr-code) symbol <sup>[3][3], [7][7]</sup>. This is a URI scheme — when scanned, any UPI-compliant app on the device opens with the parameters pre-filled.

**`upi://pay` URI parameters** <sup>[7][7]</sup>:

| Parameter | Description | Required |
|---|---|---|
| `pa` | Payee Address (VPA, e.g. `user@bank`) | Yes |
| `pn` | Payee Name (URL-encoded) | Yes |
| `mc` | Merchant Category Code | For merchants |
| `tid` | Transaction ID | Optional |
| `tr` | Transaction Reference | Optional |
| `am` | Amount in INR | Optional (omit for user-entered) |
| `cu` | Currency code (always `INR`) | Recommended |
| `tn` | Transaction Note | Optional |
| `url` | Reference URL | Optional |
| `sign` | Cryptographic signature (UPI 2.0+) | For signed-merchant QRs |

**Sample static QR payload**:
```
upi://pay?pa=merchant@upi&pn=Sample%20Merchant&mc=5499&cu=INR&tn=Pay
```

**Signed QR (UPI 2.0)** uses **SHA256-with-RSA512**; the payee PSP signs the entire URI minus `&sign=` with its private key, allowing payer apps to verify the QR was issued by a known merchant — defends against tampered or fraudulent QR stickers <sup>[5][5]</sup>. As of March 2026, ~18 % of merchant QRs in India carry a valid UPI 2.0 signature, concentrated in large retail chains <sup>[2][2]</sup>.

**VPA (Virtual Payment Address)** structure:
```
<handle>@<bank>
Examples: john.doe@hdfc, 9876543210@ybl, 9876543210@paytm
```

The handle resolves through NPCI's central registry to the underlying IFSC + account, so VPAs are stable while underlying accounts can change <sup>[2][2]</sup>.

**Settlement** uses the underlying UPI rail (NPCI as switch operator) — settles in seconds, available 24/7/365 <sup>[1][1]</sup>.

## Use cases

UPI is the dominant digital payment rail in India by every measure. Use cases span essentially all retail and many B2B contexts:

- **Person-to-person transfers** — instant, free for both parties <sup>[India report](https://docs.barcoder.ai/docs/payments/IN), [2][2]</sup>.
- **Retail point of sale** — every kind of merchant from street vendors with a printed QR sticker to chain supermarkets with dynamic POS QRs. **62 % of UPI transactions are person-to-merchant (P2M)** <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>.
- **E-commerce checkout** — dynamic UPI QR generated server-side; customer pays in their preferred UPI app.
- **Bill payments** — utilities, mobile recharges, government collections.
- **Cash withdrawal at ATMs** — UPI-based cardless cash withdrawal supported at participating banks.
- **Cross-border** — outbound merchant payments work in 25+ countries via bilateral integrations; Singapore PayNow↔UPI is the most mature, allowing Indian users to pay Singapore merchants and vice versa using their home apps <sup>[India report](https://docs.barcoder.ai/docs/payments/IN), [2][2]</sup>.

Transaction limits (2025) <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>:
- Standard P2P: ₹100,000 per transaction
- Healthcare / education: ₹500,000
- UPI Lite (offline-capable wallet): ₹5,000 max wallet balance
- UPI P2M unverified: ₹2,000 (offline tap limit)

## Implementations

UPI QR's `upi://pay` URI is trivial to generate (URL-encoded query string + standard QR encoder), so most "UPI libraries" are thin wrappers around a generic QR library. The actual integration work happens at the *payments rail* layer (PSP onboarding with NPCI), not at the QR layer.

**Encoder libraries** (mostly URL-format helpers):
- **Rust** — [Pratyay360/upiqrcode][6] — 2★, 2025. Generates NPCI's UPI QR code + intent link <sup>[6][6]</sup>.
- **Python** — [sannibhkar/upi_qrcode_generator][8] — generates QR codes for UPI payments, with multi-app handling (PhonePe / Paytm / Google Pay / Amazon Pay) <sup>[8][8]</sup>.
- **PHP** — [NitinPrakash/UPI-QR-Generator][9] — PHP-based dynamic NPCI UPI compatible QR code generator <sup>[9][9]</sup>.
- **Web tool** — [upiqr.in][10] — hosted NPCI-compliant generator, no install <sup>[10][10]</sup>.

**Decoders:** any QR code scanner produces the URI; UPI app integration is via OS-level URI handlers (Android intent-filter for `upi://`, iOS Universal Links). Generic QR readers like [zxing/zxing][zx] handle the QR side.

**Production apps** (canonical implementations) <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>:
- **PhonePe** (Walmart-owned) — ~500 M users, dominant
- **Google Pay** (Tez originally) — ~150 M+ users
- **Paytm** — ~300 M users
- **BHIM** (NPCI's reference) — ~50 M users
- All major bank apps (HDFC, ICICI, SBI YONO, Axis, Kotak, etc.)

Library scarcity is structural: the QR is just a URI; the heavy lift is becoming an NPCI-authorised PSP. Most production deployments use NPCI member-bank APIs rather than open-source.

## Comparison

**vs. [Bharat QR](https://docs.barcoder.ai/docs/standards/bharat-qr) (India, parallel standard)** — Bharat QR is NPCI's **EMVCo-compliant** card-network-interoperable QR (works with RuPay, Visa, Mastercard, Amex). UPI QR is NPCI's **proprietary deep-link format**, UPI-only. Bharat QR has cross-network compatibility; UPI QR has network-effects scale. Deployment numbers tell the story: **658 M UPI QRs vs 67 M Bharat QRs** — UPI QR's bank-and-wallet ubiquity outweighs Bharat QR's card interoperability <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>. RBI has periodically suggested unifying to an EMVCo-based standard, but the market has voted with deployments.

**vs. [Pix](https://docs.barcoder.ai/docs/standards/pix) (Brazil)** — Both are central-bank-driven national instant-payment rails launched within four years of each other; both have crossed 100B+ annual transactions. UPI is larger in absolute volume (~250B vs Pix's ~63B 2024), reflecting India's population — but Pix is larger in per-capita terms. UPI uses a URI deep link; Pix uses EMVCo TLV. UPI charges nothing to merchants; Pix charges ~0.33 % to merchants [[pix-ref]].

**vs. [SGQR](https://docs.barcoder.ai/docs/standards/sgqr), [DuitNow QR](https://docs.barcoder.ai/docs/standards/duitnow-qr), [PromptPay QR](https://docs.barcoder.ai/docs/standards/promptpay-qr) (ASEAN EMVCo MPM standards)** — These three share EMVCo MPM as their wire format; UPI does not. When India connected UPI to Singapore PayNow (Feb 2023), the bridge had to translate between the upi:// deep link and SGQR's EMVCo TLV format on the SG side. The same bridge pattern applies for upcoming UPI ↔ DuitNow and UPI ↔ PromptPay links <sup>[India report](https://docs.barcoder.ai/docs/payments/IN), [Malaysia report](https://docs.barcoder.ai/docs/payments/MY)</sup>.

## Fun facts

UPI handles **~50 % of the world's digital transaction volume** <sup>[2][2]</sup>. In other words, a payment rail that was nine years old in 2025 processes more transactions than every other digital payment system on Earth combined.

UPI's daily transaction count (~640 million as of 2025) is comparable to **global Visa daily transaction volume (~639 million)** <sup>[2][2]</sup> — except UPI runs only in India.

The system was launched with **21 banks** in 2016. By February 2022 it had grown to **304 banks** <sup>[2][2]</sup>, and as of 2025 the participating-institution count is into the 600s including e-wallets, payment banks and PPI issuers.

In April 2025 the RBI **disabled international UPI QR transactions** as a temporary risk measure, then re-enabled bilateral country links one by one through 2025 <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup> — a reminder that even a mature national rail can pull cross-border interop on short notice.

**Free at scale** — UPI is free for both consumers and merchants for transactions under ₹2,000 (MDR-zero policy), funded by indirect subsidies and the fact that NPCI is a not-for-profit owned by member banks <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>. This zero-fee model is one of the structural reasons UPI dwarfs card-network volume in India.

## Status

**Active and dominant.** Most recent figures:
- **250 billion transactions / year (FY 2024-25)** <sup>[2][2]</sup>
- **USD 3.4 trillion annual value** <sup>[2][2]</sup>
- **640 million transactions / day** (vs Visa global ~639 M) <sup>[2][2]</sup>
- **83 % of Indian retail digital payments** <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>
- **658 million UPI QRs deployed** <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>
- **25+ countries with cross-border UPI acceptance** <sup>[2][2]</sup>

UPI 3.0 features (voice payments, credit-line-on-UPI, vouchers, delegated payments) are rolling out <sup>[2][2]</sup>. International expansion continues through bilateral central-bank agreements rather than via a global standards body — a deliberate sovereignty-preserving design choice by RBI and NPCI <sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>.

No deprecation or successor planned; UPI is positioned as core national digital-payment infrastructure for the foreseeable future.

## Sources

[1]: https://www.npci.org.in/what-we-do/upi/product-overview
[2]: https://en.wikipedia.org/wiki/Unified_Payments_Interface
[3]: https://qrcrack.com/blog/upi-qr-codes-india-npci-specification
[4]: https://www.bharatupi.com/the-role-of-npci-in-standardizing-upi-qr-codes/
[5]: https://www.labnol.org/files/linking.pdf
[6]: https://github.com/Pratyay360/upiqrcode
[7]: https://upipg.cit.org.in/en/developers
[8]: https://github.com/sannibhkar/upi_qrcode_generator
[9]: https://github.com/NitinPrakash/UPI-QR-Generator
[10]: https://upiqr.in/
[zx]: https://github.com/zxing/zxing
[in-cro]: https://docs.barcoder.ai/docs/payments/IN
[sg-cro]: https://docs.barcoder.ai/docs/payments/SG
[my-cro]: https://docs.barcoder.ai/docs/payments/MY
[pix-ref]: https://docs.barcoder.ai/source/standards/pix

1. [UPI Product Overview — NPCI][1]
2. [Unified Payments Interface — Wikipedia][2]
3. [UPI QR Codes in India: NPCI Specification Guide — QRCrack][3]
4. [The Role of NPCI in Standardizing UPI QR Codes — BharatUPI][4]
5. [NPCI UPI Linking Specifications 1.6][5]
6. [Pratyay360/upiqrcode — GitHub][6]
7. [UPI PG developer docs][7]
8. [sannibhkar/upi_qrcode_generator — GitHub][8]
9. [NitinPrakash/UPI-QR-Generator — GitHub][9]
10. [upiqr.in — hosted generator][10]
11. [IN-india.md]<sup>[India report](https://docs.barcoder.ai/docs/payments/IN)</sup>

## Deployments

Found in the following country reports (grep across `reports/countries/`):

- **BT** — [BT-bhutan.md](https://docs.barcoder.ai/docs/payments/BT)
- **IN** — [IN-india.md](https://docs.barcoder.ai/docs/payments/IN)
- **KE** — [KE-kenya.md](https://docs.barcoder.ai/docs/payments/KE)
