OpenQR

Payments

Payment QR codes compared: PIX, EPC and UPI

By OpenQR · updated 20 October 2026

Three payment QR standards are open enough that anyone can generate a working code with nothing but the recipient's account details: PIX's BR Code in Brazil, the EPC's GiroCode across the eurozone, and UPI in India. The rest of the world's big names — Alipay, WeChat Pay, SWIFT gpi — are closed ecosystems whose codes cannot be generated by a third party at all. This guide compares all of them and explains the one structural rule that governs every payment QR code: static payloads are data, dynamic payloads are regulated products.

9 min read · Updated 20 October 2026

Three printed payment cards, each carrying a QR code, fanned out on a pale desk beside coins from three currencies.

The three open standards at a glance

PIX (BR Code)EPC (GiroCode)UPI
MarketBrazilEurozone (SEPA)India
OperatorBanco Central do BrasilEuropean Payments CouncilNPCI
Payload formatEMV TLV fields + CRC16Ten fixed text linesupi://pay URI
Payee identifierPIX key (CPF, CNPJ, email, phone, UUID)IBAN + nameUPI ID (name@bank)
Amount in codeOptional, BRLOptional, EUROptional, INR
Reference fieldtxid, alphanumeric ≤25ISO 11649 RF reference or free texttn note, ~50 chars
SettlementInstant, 24/7SEPA transfer, up to 1 business dayInstant, 24/7
Checksum on payloadCRC16 requiredNone (IBAN's own mod-97)None (URI syntax)
Code expiryNever (static)Never (static)Never (static)
Payer needsAny Brazilian bank appEuropean bank app with EPC scanAny UPI app

The formats differ more than the table shows. PIX inherited the EMV structure from card-network QR standards, so every field is tagged, length-prefixed and protected by a CRC16 checksum — a damaged code fails closed. EPC chose radical simplicity: ten lines of text any developer can emit, with correctness resting on the IBAN's built-in checksum. UPI skipped structure entirely and encoded a deep link, which made every UPI app a universal scanner from day one at the cost of having no payload integrity check at all.

Static codes are data; dynamic codes are regulated products

Every payment QR code is one of two kinds, and the difference is legal, not technical. A static code contains payment details: account identifiers, maybe an amount. It is a very small sign that says pay here, and anyone can make one — a generator, a bank app, a text editor in principle. A dynamic code is created per transaction by a payment institution: it encodes a URL that resolves to a one-time payment claim, can change the amount at the moment of sale, expires after use, and reports confirmation back to the till. Minting that claim means moving money on someone's behalf, which is licensed activity in every jurisdiction covered here.

That is why no third-party generator — ours or any other — offers dynamic Alipay, dynamic PIX or per-bill UPI codes. A site advertising one is either routing through your own merchant account or selling something that cannot work. What a static code gives up in return is real: no per-transaction amounts, no automatic confirmation, no scan counts. Sellers reconcile the old-fashioned way, by watching the bank app.

The closed ecosystems

SystemWhy not
AlipayCodes are minted by Alipay for merchant accounts; the payload is not a public standard
WeChat PaySame model: platform-issued codes tied to a merchant ID
SWIFT gpiInterbank rail, not a consumer scanning format; no static payload exists
Cash App / VenmoUS person-to-person apps with their own QR handling, no open payload spec

The pattern across all of them: where a payment platform owns both ends of the scan, it keeps the code format private. Open standards appear where a central bank or industry body forces interoperability — Brazil's Central Bank, the EPC, India's NPCI. If your market has none, the honest options are a link-in-bio page from a PSP or waiting for the regulator.

Choosing for your market

  • Selling in Brazil: a static PIX code with an open amount, printed beside the copia e cola string
  • Invoicing in the eurozone: an EPC code with a fixed amount and an RF creditor reference for automatic reconciliation
  • Selling in India: a static UPI sticker, or one code per fixed menu price
  • Serving several markets: one code per market on the same flyer — they do not interfere

A payment QR code never proves a sale

Static codes report nothing back. A customer showing you a payment screen has paid — or has shown you a screenshot. Verification belongs to the payment institution's dynamic product, or to watching your own bank statement.

OpenQR ships free generators for all three open standards, each building the payload in your browser: PIX (BR Code), EPC / GiroCode and UPI, collected in the payment QR codes section. For depth on each: PIX explained, EPC/GiroCode explained and UPI explained. The static-versus-dynamic trade-off in general QR use is covered in static vs dynamic QR codes.

Match the standard to the payer's market: PIX for Brazil, EPC/GiroCode for the eurozone, UPI for India. Codes from other markets scan but cannot be paid without a local account.

Related reading