Uma plataforma de checkout que oferece Pix precisa de três coisas da API: gerar o código no momento em que o comprador clica em pagar, saber com segurança quando ele pagou e não perder a venda se um provedor falhar. A API Pix da xFlow entrega as três numa integração REST: a cobrança volta pronta para a tela, a confirmação chega por webhook assinado e, por trás da mesma chamada, estão 11 adquirentes com roteamento por regras e retentativa automática.
O que o checkout exige do Pix
- Código pronto para a tela. O comprador não pode esperar a sua plataforma montar imagem de QR Code.
- Baixa automática. O pedido precisa mudar para pago sem ninguém conferir extrato.
- Venda que não para. Num lançamento ou numa campanha, um provedor instável vira carrinho perdido.
- Clique duplo e reenvio. Um botão clicado duas vezes não pode gerar dois Pix.
- Receita da plataforma. A sua taxa precisa sair de cada venda, sem conta a fazer no fim do mês.
Como a xFlow atende cada ponto
| Necessidade do checkout | Recurso da xFlow |
|---|---|
| QR Code e copia e cola na tela | pix.qrCodeBase64 (PNG em data-URL) e pix.copyPaste na resposta 201 |
| Baixa automática do pedido | Webhook transaction.paid assinado com HMAC-SHA256, reenviado até 3 vezes |
| Venda que não para | 11 adquirentes; se a escolhida não responder, a cobrança é gerada na próxima da cadeia |
| Escolha da adquirente | Roteamento por regras: valor, horário e dia da semana |
| Clique duplo no botão | Idempotency-Key devolve a mesma cobrança no retry |
| Taxa da plataforma | Split por porcentagem ou valor fixo entre contas da xFlow |
| Pedido no seu sistema | external_reference volta em toda resposta e em todo webhook da cobrança |
O fluxo do botão "Pagar com Pix"
- O comprador escolhe Pix e informa nome, e-mail e CPF ou CNPJ. Os três campos são obrigatórios na cobrança (
customer.name,customer.emailecustomer.document). - O servidor da plataforma chama
POST /api/v1/chargescom o valor em centavos, oexternal_referenceigual ao id do pedido e umaIdempotency-Keyligada ao pedido. - A regra de roteamento escolhe a adquirente. Se ela não responder, a retentativa automática gera a cobrança na próxima da cadeia.
- A tela mostra o QR Code e um botão para copiar o código.
- O comprador paga. A xFlow confere o pagamento na adquirente e envia
transaction.paid. - O servidor valida a assinatura, confere
livemodee o valor e libera o pedido. A tela do comprador, que consulta o seu servidor, muda para pago.
curl -X POST https://app.xflowpayments.com/api/v1/charges \
-u "pk_live_...:sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: checkout-pedido-98231" \
-d '{
"amountCents": 14990,
"customer": { "name": "Cliente", "email": "cliente@exemplo.com", "document": "00000000000" },
"description": "Pedido #98231",
"external_reference": "pedido-98231",
"splits": [
{ "recipient_id": "id-da-conta-do-lojista", "type": "PERCENTAGE", "percent": 90 }
]
}'O guia de webhook Pix traz o handler pronto para validar a assinatura.
Split: a taxa da plataforma na própria cobrança
No exemplo acima, a cobrança é criada na conta da plataforma e 90% do líquido vão para a conta do lojista. O que sobra fica com a plataforma. As regras do split de pagamento:
PERCENTAGEusapercent, uma porcentagem do líquido.FIXEDusaamount, em centavos.- A soma dos percentuais não passa de 100.
- O recebedor precisa ser uma conta ativa da xFlow, diferente da conta que cria a cobrança.
- Split inválido retorna
400. No ambiente de teste, split também retorna400.
O desenho com muitos lojistas (quem é titular de cada conta e como os lojistas entram na xFlow) é combinado com a equipe antes de começar.
Cuidados na tela de pagamento
- Cobrança expirada. A cobrança pode passar a
expired, e não existe webhook de expiração. Confira o status antes de mostrar um QR salvo e gere outra com umaIdempotency-Keynova. O passo a passo está em cobrança Pix expirada. - Limites de valor. Cada conta tem valor mínimo e máximo por cobrança. Fora da faixa, a resposta é
400 validatione nada é criado. - Falha geral. Se nenhuma adquirente gerar a cobrança, a resposta é
502 charge_failed. Mostre um botão de tentar de novo e repita com a mesmaIdempotency-Key. - Picos de acesso. O limite de requisições é por conta. Acompanhe
x-ratelimit-remaininge, no429, espere oretry-after. - Segredo no servidor. A chamada à API sai do seu back-end. O
sk_live_nunca vai para o navegador do comprador.
O que a API não faz hoje
A API trabalha com Pix: cobrança, estorno total e saque. Cartão e checkout hospedado ainda não estão disponíveis na API, então a tela de pagamento é da sua plataforma. O estorno é sempre do valor total, uma vez por cobrança, até 90 dias depois do pagamento.
Comece pelo ambiente de teste
Crie uma chave de teste em Desenvolvedores > Chaves de API, mesmo antes da aprovação do cadastro. Com ela, a cobrança não chama nenhuma adquirente e o copia e cola não é pagável. Simule o pagamento com POST /api/v1/test/charges/{id}/pay e receba o transaction.paid com livemode: false. O roteiro completo está em API Pix sandbox.
Perguntas frequentes
A xFlow tem um checkout pronto para a minha plataforma usar?
Não pela API. Hoje a API trabalha com Pix: a sua plataforma monta a tela de pagamento e usa a API para gerar a cobrança, mostrar o QR Code e receber a confirmação. Checkout hospedado e cartão ainda não estão disponíveis na API.
Como a plataforma de checkout recebe a própria taxa?
Com split na criação da cobrança. Você envia splits com o recipient_id de cada conta recebedora, por porcentagem do líquido ou por valor fixo em centavos. Quando o pagamento confirma, cada recebedor é creditado no saldo dele. As contas recebedoras precisam ser contas ativas da xFlow.
O que acontece se uma adquirente cair no meio de uma campanha?
Se a adquirente escolhida não responder, a xFlow tenta de novo e, se precisar, gera a cobrança na próxima adquirente da cadeia. O comprador recebe um único QR Code. Se nenhuma adquirente da cadeia gerar a cobrança, a API responde 502 charge_failed.
Preciso pedir o CPF do comprador no checkout?
Sim. Nome, e-mail e documento (CPF ou CNPJ, só dígitos) são obrigatórios para criar a cobrança. O formulário de pagamento precisa coletar os três antes de chamar a API.