What is inside a UPI QR
A UPI QR carries a URI of the form upi://pay?pa=…&pn=…, where pa is the payee address (the VPA, such as name@bank), pn is the payee name shown to the payer, and optional parameters can carry an amount (am), a currency (cu) and a transaction note (tn).
Because the phone treats it as a link rather than as a payment blob, scanning opens whichever UPI app the user has installed and prefills the payment. This is the structural reason UPI feels different from the EMVCo schemes, and why the same code works across Google Pay, PhonePe, Paytm, BHIM and bank apps without anything being registered per-app.
Getting an official code
Every UPI app shows a personal receiving QR under “Receive” or “My QR”, free and instantly. That is the right code for splitting bills and paying individuals.
Merchants register as a business with a UPI app or through their bank, which issues a merchant QR — usually as a printed standee — that settles to a current account, displays a verified trading name to payers, and supports the transaction volumes and reporting a business needs. Running trade through a personal VPA causes problems with limits and with reconciliation.
Can you generate one yourself?
For simple person-to-person payments, yes in principle: the URI format is documented, so encoding upi://pay?pa=yourvpa@bank&pn=Your%20Name as a plain URL QR will open a UPI app correctly.
For business use, do not. A typo in the VPA produces a code that silently sends money to whoever owns the address you mistyped, with no error and no recourse. A bank-issued merchant code is verified, shows your registered trading name so payers can confirm they are paying the right business, and removes that entire class of error. If you do encode one yourself, scan and test it with a small real payment before it goes anywhere near a print run.
Static and dynamic in practice
A static UPI QR carries no amount and the payer enters it. A dynamic one includes the amount and often a transaction reference, generated per bill, which removes typing errors and makes reconciliation automatic.
For a shop with any volume, dynamic codes from a merchant app or a billing integration are worth the setup. For a stall, a market trader or a service provider issuing occasional invoices, a static code plus a spoken amount is entirely normal and works.
Verifying before you pay
The payee name your app shows before confirming comes from the code and from the resolved VPA. Read it. QR sticker replacement — pasting one code over another — is the common fraud across every QR payment market, and the displayed name is the check that catches it.
For merchants, inspect the standee periodically and prefer fixed mountings to loose cards. A swapped sticker can operate for a full day before anyone notices the money is missing.
Need a general-purpose code instead? Use the free QR code generator — it runs entirely in your browser.