Skip to content

UPI QR Code & Intent Deep-Link Format Specification

This specification details the structure, schema, and URI parameters used by Dynamic UPI and the upiqrcode WebAssembly engine to generate standard-compliant Unified Payments Interface (UPI) payment QR codes and deep links.

The upiqrcode engine processes the following input parameters:

  • payeeVPA — The receiver’s Virtual Payment Address (e.g. merchant@upi).
  • payeeName — The verified entity or personal name registered with the receiving bank.
  • amount — Transaction amount in decimal representation (e.g. 150.00). Optional.
  • currency — Three-letter ISO currency code. Defaults to INR.
  • transactionNote — Payment reference or description displayed in the payer’s mobile app. Optional.
  • transactionId — Unique transaction reference identifier generated by the merchant or app. Optional.

The generated deep-link conforms to the National Payments Corporation of India (NPCI) UPI linking standard:

upi://pay?pa=payeeVPA&pn=payeeName&am=amount&cu=currency&tn=transactionNote
Parameter Key Description Status Example
Payee VPA pa Payee Virtual Payment Address / UPI ID Required merchant@upi
Payee Name pn Receiver’s registered name Required Acme Store
Amount am Transaction amount in INR Optional 299.00
Currency cu Currency code (default: INR) Optional INR
Note tn Transaction description or invoice ID Optional Order #1042
Ref ID tr Transaction reference ID for reconciliation Optional TXN12345678
  1. Camera / App Scanning: When a user scans the QR code with any UPI app (Google Pay, PhonePe, Paytm, BHIM, CRED), the app parses the embedded upi://pay URI.
  2. Pre-Filled Checkout: The app automatically pre-fills the payee VPA, payee name, amount, and note fields.
  3. Payer Confirmation: The user confirms the transaction using their secure UPI MPIN.