AnyTool
Your files never leave your device. All processing happens locally in your browser.

How do I make a UPI QR code that opens a payment when scanned?

Open AnyTool UPI QR Code Generator, enter your UPI ID (VPA, like name@bank), the payee name, and optionally an amount and a note. A live QR code appears that encodes a standard upi://pay deep link, so scanning it with Google Pay, PhonePe, Paytm, BHIM or any UPI app opens a pre-filled payment to that VPA. Leave the amount blank for a static QR the payer fills in, or set it for a fixed-amount code; then download the QR as PNG or SVG, or print a Scan & Pay counter card. Everything runs in your browser, so your UPI details are never uploaded and no payment is processed here.

  • Builds the NPCI upi://pay link (pa, pn, am, cu=INR, tn) with every value percent-encoded
  • Works with Google Pay, PhonePe, Paytm, BHIM and bank UPI apps
  • No amount → static QR (payer enters amount); fixed amount → pre-filled code
  • Printable Scan & Pay counter card with payee name, UPI ID, amount and QR
  • 100% client-side — your UPI details are encoded locally and never uploaded

What is

UPI QR Code

A UPI QR code encodes a upi://pay deep link defined by the NPCI UPI Linking Specification — pa (payee VPA), pn (payee name), optional am (amount) and tn (note), and cu (currency, INR) — so that scanning it with any UPI app opens a pre-filled payment to that VPA. A static UPI QR omits the amount and is reused for every transaction (the payer types the amount), while a dynamic or fixed-amount QR carries the amount so the payer only confirms and enters their UPI PIN. The VPA is plain text inside the code, so anyone who scans it is prompted to pay whatever UPI ID is encoded.

Generators

Related terms

UPI ID / VPAupi://pay deep linkStatic vs dynamic QRBharatQR / NPCI

Frequently Asked Questions

A static UPI QR has no amount, so the payer types it in and the same code is reused forever. A dynamic or fixed-amount QR encodes the amount, so the payer just confirms and pays.

A static UPI QR code contains only your UPI ID (and payee name), so a customer scans it, types in any amount, and pays — the same code works for every transaction, which is ideal for a shop counter, tip jar or donation box. A fixed-amount (dynamic-style) QR additionally encodes the am parameter, so when the customer scans it the amount is pre-filled and they only confirm and enter their UPI PIN. In this tool, leaving the amount field blank produces a static code; setting an amount produces a fixed-amount code. Both encode the standard upi://pay deep link and work with every UPI app.

Yes. It encodes the standard NPCI upi://pay link, which Google Pay, PhonePe, Paytm, BHIM and bank UPI apps all recognise and open as a payment.

The tool builds the standard upi://pay deep link defined by the NPCI UPI Linking Specification — pa for the payee VPA, pn for the payee name, optional am and tn, and cu=INR — with each value percent-encoded. Because that format is the common UPI standard, scanning the QR with Google Pay, PhonePe, Paytm, BHIM or any bank UPI app opens a pre-filled payment screen. Always do one test scan with your own phone before printing the code at size, since you want to confirm the payee name and VPA appear correctly in your app.

This tool is 100% client-side, so your UPI details are never uploaded. It only builds the QR — it does not verify the VPA or process, collect or settle any payment.

Your UPI ID, payee name, amount and note are assembled into the upi://pay link and encoded into the QR entirely in your browser using a bundled library — there is no server call and no CDN, so nothing is uploaded or stored, and it works offline once cached. The tool does not contact any bank or NPCI, does not check whether the VPA is real or registered, and does not process, collect or settle money; the actual payment happens inside the payer’s UPI app. Because the QR is a payment instruction, double-check the VPA before printing or sharing — funds go to exactly the UPI ID you encode.

Enter your UPI ID and payee name, leave the amount blank, then use the printable card section to download a PNG or print a Scan & Pay card with the QR.

After entering your UPI ID and payee name (and leaving the amount blank for a reusable static code), scroll to the printable Scan & Pay card section. The tool draws a clean card on a local canvas with your payee name, UPI ID, the amount if you set one, and the QR with a “Scan with any UPI app” caption. Click Download card PNG to save it or Print card to send it to your printer at about 110mm wide. Place it at the counter and customers can scan and enter what they owe. Everything is rendered locally, so nothing is uploaded.

Detailed Explanation

Technical Details

The upi://pay Deep Link and Encoding

AnyTool UPI QR Code Generator assembles the standard UPI payment deep link defined by the NPCI UPI Linking Specification and encodes it into the QR, so scanning the code with any UPI app opens a pre-filled payment. The link is upi://pay? followed by query parameters: pa (the payee address or virtual payment address, e.g. name@bank), pn (the payee name), an optional am (amount, formatted to two decimals such as 250.00), cu (currency, always INR), and an optional tn (transaction note); a short tr (transaction reference) is added automatically when an amount is set so repeat scans of a fixed-amount code are distinguishable. Every value is percent-encoded with URLSearchParams and spaces are normalised to %20, which keeps the &/= separators and any special characters in the payee name or note safe. The VPA is validated against a handle@provider pattern before a QR is produced, but the tool builds the link purely as text — it never contacts a bank or NPCI.

  • Format: upi://pay?pa=<VPA>&pn=<name>&am=<amount>&cu=INR&tn=<note>
  • pa and pn are required; am and tn are optional; cu is always INR
  • Amount normalised to two decimals; a tr reference is added when amount is set
  • Every value percent-encoded; spaces normalised to %20
  • VPA validated as handle@provider before the QR is generated
Methodology

Static vs Fixed-Amount, Card and Output

Leaving the amount blank produces a static UPI QR — the same code is reused for every transaction and the payer types in any amount, which suits a shop counter, tip jar or donation box; setting an amount produces a fixed-amount (dynamic-style) code where the payer only confirms and enters their UPI PIN. Beyond the raw QR, the tool draws a printable “Scan & Pay” counter card on a local canvas: the payee name, the UPI ID, the amount when fixed (or an “enter any amount” hint when static), and the QR with a “Scan with Google Pay · PhonePe · Paytm · BHIM” caption, downloadable as a PNG or printable at about 110mm wide. The underlying QR is tunable for size (up to 1024px), quiet-zone margin, custom foreground and background hex colours, and one of four Reed–Solomon error-correction levels (L ~7%, M ~15%, Q ~25%, H ~30%), with an optional centre logo read locally that caps at about 22% of the code area and forces H-level correction. A live scannability hint checks contrast and logo size, and output can be saved as PNG, exported as resolution-independent SVG, copied to the clipboard, or copied as the raw upi://pay link text.

  • No amount → static QR (payer enters amount); amount set → fixed-amount QR
  • Printable Scan & Pay card: payee name + UPI ID + amount + QR
  • QR size up to 1024px, custom colours, EC levels L/M/Q/H
  • Optional centre logo capped ~22%, auto H correction
  • Outputs: QR PNG, vector SVG, card PNG, upi://pay link text, clipboard image
Privacy & Security

Privacy, Safety and Honest Limitations

All assembly and rendering happen in the browser with a bundled QR library and no server or CDN, so the UPI ID, payee name, amount and note never leave the device and the page works offline once cached. Because the QR is a payment instruction, the tool is candid about its limits: the VPA is stored as plain text inside the QR and the printed card, so anyone who scans it is prompted to pay whatever UPI ID is encoded — the payee should double-check the VPA before printing or sharing, since funds go to exactly the encoded ID, character for character. The tool does not verify that the VPA is real or registered, does not contact any bank or NPCI, and does not process, collect, verify or settle any payment; it only builds the link and draws the code, and the actual payment happens entirely inside the payer’s UPI app. It recommends a small test scan with the payee’s own phone before going live, keeping dark-on-light contrast and the quiet zone intact, and using H error correction with a logo.

  • Encoded locally — UPI details are never uploaded; works offline
  • The QR carries your VPA in plain text — verify it before printing or sharing
  • Does not verify the VPA or contact any bank/NPCI
  • Does not process, collect or settle payment — the payer’s UPI app does
  • Test-scan with your own UPI app before going live
UPI QR generation: in-browser (AnyTool) vs typical online generators
CapabilityAnyToolTypical online generators
ProcessingRuns in your browser, no CDNOften server-side / API
UPI detailsVPA, payee name never uploadedMay send UPI ID to a server
Link formatStandard NPCI upi://pay, percent-encodedVaries; some omit cu or mis-encode
Static / fixedBoth — blank amount or fixed amountOften fixed-amount only or paid
Printable cardBuilt-in Scan & Pay card, PNG + printOften paid or sign-up gated
Logo overlayLocal file, capped ~22%, auto H correctionOften paid or upload-based
OutputQR PNG + vector SVG + card PNG + link textPNG free; SVG often paid
Payment processingNone — only builds the QRSome are merchant aggregators that settle funds
Cost / signupFree, no signup, no watermarkOften watermarked or gated

AnyTool builds the upi://pay link and draws the card locally in the browser — your UPI details are never uploaded and no payment is processed.