Every time someone pays with Pix by scanning a QR code, their wallet is reading a message with multiple fields: who gets paid, how much, how to reconcile the payment, and operational metadata.
The QR is actually a text string visually encoded. When an app scans it, it gets something like this 👇
Each field starts with a 2-digit ID, followed by 2 digits indicating the length, and then the value. The app “parses” it from left to right and in milliseconds obtains all the information needed to process the payment.
Let’s see what each field means in a simplified example 👇
✅ ID 00 — Payload Format Indicator: always equals “01”. It’s the first byte any banking app reads. If it’s not there, the QR doesn’t exist.
✅ ID 01 — Point of Initiation Method: defines whether the QR is static (11) or dynamic (12). Static: the payer enters the amount. Dynamic: the amount is pre-filled and the code expires.
✅ ID 26 — Merchant Account Info: contains the alias that identifies the receiver’s account. It can be their CPF, CNPJ, email, phone number, or a random key generated by the bank or fintech. It replaces the account number. In dynamic mode, instead of the alias, a URL travels that the bank queries in real time to obtain the payment data.
✅ ID 52 — Merchant Category Code: the same MCC used in the card world. 0000 for merchants without a specific category. Important for regulatory reporting and risk analysis.
✅ ID 53 — Transaction Currency: always 986, the ISO 4217 code for the Brazilian Real. The EMV standard is multi-country and multi-currency by design.
✅ ID 54 — Transaction Amount: the amount as a string, without a symbol. In dynamic QR it is always pre-filled.
✅ ID 59 + 60 — Merchant Name & City: merchant data: name (max. 25 characters) and city (max. 15). This is what the user sees in their app before confirming the payment. It directly impacts conversion.
✅ ID 62 — Additional Data Field (txid): a unique identifier of up to 35 characters that links each QR to a specific transaction. Without this, reconciling thousands of Pix payments per day would be chaos.
✅ ID 63 — CRC Checksum: the last 4 characters of the string are a kind of mathematical signature that verifies the QR was not corrupted. Before processing the payment, the bank recalculates this signature and compares it with the one in the code. If they don’t match, the payment is rejected.
👉 Since 2023 we have processed millions of cross-border Pix transactions, both pay-ins and payouts. We generate and “parse” strings like this thousands of times per day.
If you’re thinking about integrating Pix, just a heads-up: the specification document alone is 125 pages (we’ll leave the link in case someone is interested). We already read it 😉 Let’s talk.