# UPI QR vs BharatQR

> A UPI QR code is a upi://pay deep link that only UPI apps read and only the UPI rail settles. BharatQR is an EMVCo tag-length-value code issued by your acquiring bank that routes card payments as well as UPI. Self-service generators, including UseQR, produce UPI codes.

Source: https://useqr.app/docs/payments/upi-qr-vs-bharatqr · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## Two codes that look identical

Both are black-and-white squares on Indian shop counters, and merchants routinely display
both without knowing which is which. Underneath they are different data structures on
different rails:

- **UPI QR** encodes a `upi://pay?pa=…` deep link — a URI. Any UPI app reads it; the money
  moves over UPI from the payer's bank account. Anyone with a VPA can
  [generate one](/upi) free, right now. Field by field, it is documented in the
  [UPI QR format](/docs/payments/upi-qr-code-format).
- **[BharatQR](/glossary/bharatqr)** encodes an [EMVCo](/glossary/emvco-qr)
  merchant-presented payload — a tag-length-value string like `000201…` that carries card
  acceptance identifiers for RuPay, Visa and Mastercard, and can embed a UPI VPA too. It is
  issued by your **acquiring bank or PSP** as part of a merchant relationship; you cannot
  meaningfully self-generate one. The deeper story is in
  [BharatQR explained](/docs/payments/bharatqr-explained).

Decode either with the [validator](/validate) and the difference is obvious in one glance:
one starts `upi://pay?`, the other `000201`.

## Side by side

| | UPI QR | BharatQR |
|---|---|---|
| Payload | `upi://pay` URI | EMVCo TLV (`000201…`) |
| Rails | UPI only | Cards (RuPay, Visa, Mastercard) + UPI |
| Who issues it | You — self-generated, free | Your acquiring bank / PSP |
| Requires merchant account | No | Yes |
| Read by | Every UPI app | Bank and card apps, plus UPI apps via the embedded VPA |
| Funding source | Payer's bank account | Card or bank account, payer's choice |
| Cost to receive | Free P2P; zero MDR P2M as of 2026 | Card MDR applies on card payments |
| Checksum | None | CRC16 |

## The interoperability detail that confuses everyone

A BharatQR code usually **contains** a UPI VPA among its tags, so UPI apps can pay a
BharatQR standee. The reverse is not true: a card app cannot pay a plain `upi://` code,
because there is nothing card-shaped inside it. That asymmetry is why the bank-issued
standee at a supermarket works with everything, while the self-printed cafe code works only
with UPI apps — which, for a cash-and-UPI business, is everything that matters.

This is also why "which one is better" is the wrong question. They coexist:

- **Only informal or small volume, UPI-only customers** → a self-generated UPI code costs
  nothing and settles free. The setup is covered in
  [UPI QR for a small shop](/docs/payments/upi-qr-for-a-small-shop).
- **Card customers matter** (higher tickets, corporate cards, tourists) → get a merchant
  account; the bank's BharatQR standee arrives with it.
- Many merchants display **both**: the bank's BharatQR plaque plus their own UPI codes on
  [per-table or per-counter prints](/bulk).

## Which one a generator makes

Every self-service QR generator — UseQR included — produces **UPI** codes, because the UPI
payload is an open, documented URI that needs nothing but your VPA. A site claiming to
generate "BharatQR" without an acquiring relationship is generating something that will not
route card payments; the card tags only mean something when a bank has provisioned the
merchant behind them. How the wider families relate — UPI, EMVCo, EPC — is mapped in
[QR payment standards compared](/docs/payments/qr-payment-standards-compared).

## FAQ

### Are UPI QR and BharatQR the same thing?
No. UPI QR is a upi://pay deep link on the UPI rail only. BharatQR is an EMVCo tag-length-value code, issued by an acquiring bank, that accepts card payments and usually embeds a UPI VPA as well.

### Can Google Pay or PhonePe scan a BharatQR code?
Generally yes — BharatQR codes usually embed a UPI VPA, so UPI apps pay them over UPI. A card app cannot pay a plain UPI code, though, because it contains no card data.

### Can I generate my own BharatQR code?
No, not usefully. The card acceptance identifiers inside BharatQR are provisioned by an acquiring bank against a merchant account. Without that relationship, only the UPI part could ever work — so generate a UPI code instead.

### Do shops need both codes?
Only if card acceptance matters. A UPI-only shop is fully served by one free self-generated code. Merchants with card customers display the bank's BharatQR alongside their own UPI codes.

## Try it

- https://useqr.app/upi
- https://useqr.app/validate
- https://useqr.app/bulk
