PIX

PIX is Brazil's instant-payment scheme, operated by the Banco Central do Brasil (BACEN). The BR Code QR format is an EMVCo MPM subset with Merchant Account Information (tag 26) carrying a PIX key — which can be a CPF, CNPJ, email, phone number, or random EVP. PIX settled its first trillion reais in under two years from launch (2020 → 2022) and is now the dominant retail payment rail in Brazil.

Canonical spec: Banco Central do Brasil — PIX documentation. Core resolution: BACEN Resolution 103/2021 — Manual de Padrões para Iniciação do Pix.
Parent spec: EMVCo MPM v1.1. PIX reserves merchant-account tag 26; everything else inherits from EMVCo.
Encoding: TLV (Tag-Length-Value) with 2-digit tags, 2-digit lengths, CRC16-CCITT trailer.

BR Code structure — tag 26 (PIX Merchant Account Information)

The PIX-specific content lives in tag 26. It's itself a nested TLV structure with these sub-tags:

Sub-tagNameLengthNotes
00GUI — Global Unique Identifier14Fixed value br.gov.bcb.pix. Identifies the scheme as PIX.
01PIX keyvariableCPF (11 digits), CNPJ (14 digits), email, phone (+55DDPHONE), or EVP (UUID-like random key).
02Additional infovariable, ≤72Free-text payer message. Displayed to the payer in their banking app.
25URL — dynamic PIXvariableUsed only for dynamic PIX: the payer's app fetches the full payload from this URL at scan time (amount, due date, expiration, discount/fine). Static PIX omits tag 25 entirely.

PIX key types

Key typeFormatValidation
CPF (individual tax ID)11 digits, no punctuation in QR payloadMod-11 checksum on last 2 digits. Mask 123.456.789-09 → raw 12345678909.
CNPJ (corporate tax ID)14 digits, no punctuationTwo mod-11 checksums. Mask 12.345.678/0001-95 → raw 12345678000195.
EmailRFC 5321 compliant, max 77 charsLowercased by BACEN on registration; QR payload must match the registered case.
PhoneE.164 with +55 country code, max 14 charsFormat: +55DDNNNNNNNNN where DD is the 2-digit area code. No spaces, no dashes.
EVP (random key)UUID v4 format, 36 charsGenerated server-side by the payer's bank during registration. Preferred for merchants who don't want to expose CPF/CNPJ/email/phone.

Static vs dynamic PIX

Canonical test vector — static PIX with CPF key and fixed amount

CPF 12345678909, merchant LOJA TESTE in SAO PAULO, fixed amount R$10.00, no transaction reference:

00020126360014br.gov.bcb.pix0114123456789095204000053039865406010.005802BR5910LOJA TESTE6009SAO PAULO62070503***6304XXXX
TagValueMeaning
0001Payload format indicator (always 01)
0111Static point of initiation
2636 bytes of nested TLVPIX Merchant Account Information
├─ 00br.gov.bcb.pixGUI
├─ 0112345678909CPF key (11 digits)
520000MCC — unknown / personal
53986ISO 4217 currency code for BRL
5410.00Fixed transaction amount
58BRCountry code
59LOJA TESTEMerchant name (max 25 chars per EMVCo)
60SAO PAULOMerchant city (max 15 chars)
627 bytes nestedAdditional data template
├─ 05***Reference label (placeholder when no ref)
63XXXXCRC16-CCITT over everything before (recompute at encode time)

Common pitfalls

Banking-app compatibility

Every licensed PIX participant (bank or payment institution) supports BR Code in their consumer app. Notable implementations:

AppStaticDynamicNotes
Itaú, Bradesco, Santander, BB, CaixaYesYesTop-5 banks. Full PIX support including Cobrança, agendado, and devolução.
NubankYesYesMost popular neobank in Brazil. Clean PIX UX.
Inter, C6 Bank, PicPayYesYesFull PIX support.
Mercado PagoYesYesPayment institution; PIX is one of several payment rails in the same app.
Generic iOS/Android cameraNoNoNative camera apps don't parse BR Code as a payment intent. User must open their banking app first.

See also

Spec references verified 2026-04-19. BACEN Resolution 103/2021, EMVCo MPM v1.1, PIX Manual de Padrões v2.0.