O Pix copia e cola é o texto de um BR Code, o padrão de QR Code de pagamento adotado no Brasil. O texto é uma fila de campos, e cada campo tem três partes: um ID de 2 dígitos, o tamanho do valor em 2 dígitos e o valor. Dois campos guardam outros campos dentro: a conta Pix (ID 26) e os dados adicionais (ID 62). O último campo é sempre o CRC16 (ID 63), que confere se nada foi alterado. Para ver isso num código real, cole-o no decodificador de Pix copia e cola.
Como ler um campo: ID, tamanho e valor
O Manual BR Code do Banco Central (versão 2.0.1) define o conteúdo como uma sequência de objetos "ID, tamanho, valor", o formato conhecido como TLV. Veja três trechos:
| Trecho | ID | Tamanho | Valor |
|---|---|---|---|
000201 |
00 | 02 | 01 |
5303986 |
53 | 03 | 986 |
5913Fulano de Tal |
59 | 13 | Fulano de Tal |
O tamanho conta os caracteres do valor, inclusive espaços. Por isso, apagar o espaço de "Fulano de Tal" quebra o código: o campo diz 13 caracteres e passa a ter 12, e tudo o que vem depois sai do lugar.
Os campos, um a um
A tabela segue a estrutura comum do Manual BR Code, com os detalhes do Pix do Manual de Padrões para Iniciação do Pix (versão 2.10.0, de 19/08/2026).
| ID | Nome no padrão | Uso | Tamanho | O que guarda |
|---|---|---|---|---|
| 00 | Payload Format Indicator | Obrigatório | 02 | Versão do payload, fixa em 01 |
| 01 | Point of Initiation Method | Opcional | 02 | 12 indica que o código só pode ser pago uma vez |
| 26 a 51 | Merchant Account Information | Obrigatório | até 99 | A conta Pix, com subcampos (veja abaixo) |
| 52 | Merchant Category Code | Obrigatório | 04 | 0000 ou o código de categoria do recebedor |
| 53 | Transaction Currency | Obrigatório | 03 | 986, o real |
| 54 | Transaction Amount | Opcional | 01 a 13 | Valor com ponto decimal, como 1.00 ou 123.99 |
| 58 | Country Code | Obrigatório | 02 | BR |
| 59 | Merchant Name | Obrigatório | 01 a 25 | Nome do recebedor |
| 60 | Merchant City | Obrigatório | 01 a 15 | Cidade do recebedor |
| 61 | Postal Code | Opcional | 01 a 99 | CEP |
| 62 | Additional Data Field | Obrigatório | 05 a 29 | Dados adicionais; o subcampo 05 é o txid |
| 80 a 99 | Unreserved Templates | Opcional | até 99 | Espaço livre dos arranjos; no QR composto do Pix Automático, leva a URL da recorrência |
| 63 | CRC16 | Obrigatório | 04 | Verificação de todo o código |
Um detalhe do campo 59: o manual do Pix diz que o app do pagador mostra o nome registrado no DICT para a chave, e não o nome que está no código.
O campo 26: a conta Pix
A conta Pix pode ocupar qualquer ID de 26 a 51. O manual deixa claro que o ID em si não tem significado: quem identifica o arranjo é o primeiro subcampo, o GUI br.gov.bcb.pix, com 14 caracteres e sem diferença entre maiúsculas e minúsculas. Na prática, quase todo código usa o 26, mas um leitor bem feito procura o GUI.
Os outros subcampos mudam conforme o tipo de código:
| Subcampo | Nome | Tipo de código | Conteúdo |
|---|---|---|---|
| 00 | GUI | Todos | br.gov.bcb.pix |
| 01 | chave | Estático | A chave Pix, com até 77 caracteres |
| 02 | infoAdicional | Estático | Texto livre, que divide espaço com a chave |
| 03 | fss | Estático | ISPB do facilitador de saque; indica Pix Saque |
| 25 | URL | Dinâmico | Endereço do payload da cobrança, sem https://, com até 77 caracteres |
A chave segue o formato do DICT: e-mail como está, CPF com 11 dígitos, CNPJ com 14 caracteres, celular no formato +5561912345678 e chave aleatória com os hífens. A versão atual do manual já traz um exemplo de CNPJ alfanumérico, então não valide CNPJ como "só números".
O campo 62 e o txid
O subcampo 62-05 guarda o identificador da transação, o txid. No QR estático, ele tem até 25 caracteres, só letras sem acento e números, e o PSP de quem paga deve repassá-lo intacto, para o recebedor conciliar. Quando o código não usa txid, o valor é ***.
No QR dinâmico, o manual manda ignorar o valor (54) e o txid (62-05) do código. Valem os campos do payload JSON que a URL do subcampo 25 devolve.
O campo 63: CRC16
Os 4 últimos caracteres são o CRC16 em hexadecimal. O cálculo usa o polinômio 0x1021 com valor inicial 0xFFFF e cobre todo o texto anterior, incluindo o próprio 6304. O manual do Pix lembra que a ordem dos campos também muda o resultado. O algoritmo, com código testado, está em CRC16 do Pix.
Estático e dinâmico lado a lado
| Campo | QR estático | QR dinâmico |
|---|---|---|
| 01 | Opcional | No exemplo oficial, 12 |
| 26-01 chave | Obrigatória | Não vai no código |
| 26-25 URL | Não existe | Obrigatória |
| 54 valor | Opcional; se faltar, o pagador digita | Ignorado; vem do payload JSON |
| 62-05 txid | Até 25 caracteres ou *** |
Ignorado; vem do payload JSON |
A diferença de uso entre os dois, do ponto de vista de quem cobra, está em QR Code Pix dinâmico por API.
Exemplo estático decodificado
Este é o exemplo da seção 2.6.3 do Manual de Padrões para Iniciação do Pix, com chave aleatória e sem valor:
00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-4266554400005204000053039865802BR5913Fulano de Tal6008BRASILIA62070503***63041D3DSeparado campo a campo:
00 02 01 versão
26 58 conta Pix
00 14 br.gov.bcb.pix GUI
01 36 123e4567-e12b-12d1-a456-426655440000 chave aleatória
52 04 0000 categoria não informada
53 03 986 real
58 02 BR país
59 13 Fulano de Tal nome
60 08 BRASILIA cidade
62 07 dados adicionais
05 03 *** sem txid
63 04 1D3D CRC16Sem o campo 54, o app pede ao pagador que digite o valor.
Exemplo dinâmico decodificado
O exemplo da seção 2.7.2 do mesmo manual troca a chave pela URL e marca o código para uso único:
00 02 01
01 02 12 uso único
26 70
00 14 br.gov.bcb.pix
25 48 pix.example.com/8b3da2f39a4140d1a91abd93113bd441
52 04 0000
53 03 986
58 02 BR
59 13 Fulano de Tal
60 08 BRASILIA
62 07
05 03 ***
63 04 64E4O app de quem paga lê a URL, valida o domínio, busca o payload assinado por HTTPS e só então mostra valor e recebedor.
Como ler os campos no código
Para inspecionar um código no seu sistema, por exemplo num log de suporte, leia 4 caracteres de cabeçalho (ID e tamanho), depois o valor, e repita até o fim:
function lerCampos(texto) {
const campos = [];
for (let i = 0; i < texto.length; ) {
const id = texto.slice(i, i + 2);
const tamanho = Number(texto.slice(i + 2, i + 4));
const valor = texto.slice(i + 4, i + 4 + tamanho);
if (!/^\d{2}$/.test(id) || valor.length !== tamanho) {
throw new Error(`campo inválido na posição ${i}`);
}
campos.push({ id, tamanho, valor });
i += 4 + tamanho;
}
return campos;
}
// subcampos: chame de novo com o valor do 26 ou do 62
// lerCampos(lerCampos(codigo).find((c) => c.id === "26").valor)Num código cortado, a função falha na posição em que o tamanho deixa de bater. Esse é o sintoma mais comum de campo de texto com limite de caracteres.
Na integração com a xFlow
Você não monta nem desmonta o código. A API Pix da xFlow devolve o copia e cola pronto em pix.copyPaste, na criação da cobrança e na consulta por id. A documentação descreve o campo como um payload EMV no padrão BR Code, em que o campo 54 é o valor quando o QR é de valor fixo e o campo 26 traz a chave Pix, e pede que ele seja tratado como opaco. Conhecer a estrutura serve para depurar: um código cortado, uma quebra de linha no meio ou um valor diferente do pedido. O passo a passo de geração está em Pix copia e cola por API, e a referência dos campos na documentação da API.
Conteúdo informativo, atualizado em 25/10/2026. Não substitui orientação jurídica.
Perguntas frequentes
Qual a diferença entre o copia e cola estático e o dinâmico?
O estático traz a chave Pix no subcampo 01 da conta Pix e pode trazer o valor no campo 54. O dinâmico traz uma URL no subcampo 25, e o valor e o txid vêm do payload JSON que essa URL devolve. Os campos de valor e txid do próprio código são ignorados no dinâmico.
O que significam os três asteriscos no campo do txid?
No subcampo 62-05, o valor *** indica que o código não usa identificador de transação. Os exemplos oficiais do Banco Central usam *** no QR estático sem txid e no QR dinâmico.
O nome do campo 59 é o que aparece no app de quem paga?
Não. Segundo o Manual de Padrões para Iniciação do Pix, o app do pagador mostra o nome do recebedor registrado no DICT para a chave, e não o nome do campo 59.
Posso editar o copia e cola que a API devolve?
Não. Qualquer mudança invalida o CRC do campo 63 e o banco recusa o código. Na xFlow, o pix.copyPaste deve ser repassado ao pagador sem alterar nenhum caractere.