Pular para o conteúdo
xFlow Payments

Blog

API Pix sandbox: como testar sem mover dinheiro

O sandbox da API Pix da xFlow funciona com chaves pk_test_ e sk_test_: mesmos endpoints, mesmas respostas com livemode: false, nenhum dinheiro real e um endpoint para simular o pagamento que dispara o webhook transaction.paid.

Atualizado em · Equipe xFlow Payments · 5 min de leitura

O sandbox da API Pix da xFlow é o modo de teste que você liga só trocando a credencial. Com uma chave pk_test_ e o segredo sk_test_, você chama os mesmos endpoints da API Pix, recebe as mesmas respostas com livemode: false e não move dinheiro real. Para fechar o ciclo, um endpoint próprio, POST /api/v1/test/charges/{id}/pay, simula o pagamento e dispara o webhook transaction.paid.

Como criar a chave de teste

No painel, vá em Chaves de API > Criar chave e escolha o ambiente "Teste". Você recebe a chave pública pk_test_... e o segredo sk_test_.... Como na produção, o segredo aparece uma única vez: guarde antes de fechar a tela.

Um detalhe ajuda quem está começando: a chave de teste pode ser criada antes da aprovação do cadastro. Você integra enquanto a conta está em análise e, quando ela for liberada, só troca a credencial.

A autenticação é a mesma da produção, HTTP Basic com a chave pública como usuário e o segredo como senha:

bash
curl https://app.xflowpayments.com/api/v1/balance -u "pk_test_...:sk_test_..."

O que muda entre teste e produção

Produção (pk_live_) Teste (pk_test_)
Endpoints /api/v1/... Os mesmos
Campo livemode true false
Provedor Pix É chamado Nenhum provedor é chamado
pix.copyPaste Código pagável Marcador não pagável
Saldo, dashboards e extrato Recebem as cobranças Nada aparece; GET /balance responde zeros
Pagamento Feito pelo pagador Simulado com POST /api/v1/test/charges/{id}/pay
Taxa calculada Taxas da sua conta Também as taxas reais da sua conta
Estorno Assíncrono, via provedor Conclui na hora
Split Disponível Retorna 400
Saque Disponível Retorna 403 test_mode_unsupported
Webhooks livemode: true livemode: false e payer: null
Idempotency-Key Funciona Funciona igual

O fluxo completo, do pedido ao estorno

1. Crie a cobrança de teste. A rota é a mesma da produção:

bash
curl -X POST https://app.xflowpayments.com/api/v1/charges \
  -u "pk_test_...:sk_test_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: teste-pedido-1" \
  -d '{"amountCents":1990,"customer":{"name":"Cliente","email":"c@ex.com","document":"00000000000"}}'

A resposta traz "livemode": false, "status": "pending" e o pix.copyPaste de teste. Não tente pagar esse código num app de banco: ele é só um marcador.

2. Simule o pagamento. Use o id que voltou na criação:

bash
curl -X POST https://app.xflowpayments.com/api/v1/test/charges/{id}/pay \
  -u "pk_test_...:sk_test_..."

A cobrança vira paid, a taxa é calculada com as taxas reais da sua conta e o webhook transaction.paid sai com livemode: false. É um bom momento para conferir se o seu sistema calcula o líquido igual à API.

3. Consulte a cobrança.

bash
curl https://app.xflowpayments.com/api/v1/charges/{id} \
  -u "pk_test_...:sk_test_..."

4. Teste o estorno. Em modo de teste, o estorno conclui na hora, sem provedor, e a cobrança passa a refunded:

bash
curl -X POST https://app.xflowpayments.com/api/v1/charges/{id}/refund \
  -u "pk_test_...:sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"reason":"Teste de estorno"}'

Em produção o estorno é assíncrono. Use o teste para validar o código de chamada e o tratamento da resposta, e leia em estorno Pix por API como tratar o 202 pending e os webhooks de produção.

Como testar os webhooks

Os endpoints de webhook podem ser cadastrados pelo painel, em Integrações > Webhooks, ou pela API, com chave de produção ou de teste. Quando você simula um pagamento, o evento chega na sua URL como chegaria em produção, com duas diferenças no data: livemode: false e payer: null.

A regra de ouro é filtrar por livemode antes de dar baixa num pedido real:

js
const { event, data } = JSON.parse(rawBody);
if (event === "transaction.paid" && !data.livemode) {
  console.log("Pagamento de teste:", data.id);
  return; // nunca libere um pedido real com evento de teste
}

Valide a assinatura x-webhook-signature também no teste. Assim, o mesmo código vai para produção sem surpresa. O passo a passo da validação está em webhook Pix, e um projeto completo em Node.js está em API Pix com Node.js.

O que não funciona em teste

  • Split. Enviar splits com chave de teste retorna 400. Valide a divisão em produção, com valores baixos. Veja as regras em split de pagamento.
  • Saque. POST /api/v1/transfers com chave de teste retorna 403 test_mode_unsupported. Leia a API de saque Pix antes de liberar saques em produção.
  • Saldo. GET /api/v1/balance responde zeros, com livemode: false.
  • Pagamento real. O copia e cola de teste não paga, e nenhum provedor é chamado.
  • Simular com chave de produção. O endpoint de simulação recusa chave pk_live_ com 403 test_mode_only.

Erros que vale provocar no sandbox

Um bom teste não cobre só o caminho feliz. No modo de teste você provoca os erros mais comuns e confere se o seu sistema reage bem:

Como provocar Resposta esperada
Enviar um segredo errado 401 unauthorized
Omitir customer.email no corpo 400 validation, com o campo details
Consultar um id que não existe 404 not_found
Repetir a Idempotency-Key com outro corpo 409 idempotency_conflict
Chamar a simulação com a chave de produção 403 test_mode_only
Pedir um saque com a chave de teste 403 test_mode_unsupported

Toda resposta de erro traz error, message e request_id. Confira se o seu código registra os três. O request_id é o dado que você informa ao suporte quando precisa de ajuda com uma chamada.

Teste a idempotência antes de ir ao ar

A Idempotency-Key funciona igual no modo de teste, então o sandbox é o lugar certo para provar que o seu retry não duplica cobrança. Faça duas chamadas com a mesma chave e o mesmo corpo: a segunda deve devolver a mesma cobrança. Depois, repita a chave com outro corpo: a resposta deve ser 409 idempotency_conflict. Entenda o conceito em idempotência em API de pagamento.

Checklist para ir para produção

  1. Gere a chave de produção (pk_live_ e sk_live_) e troque as variáveis de ambiente. Com a conta ainda em análise, a API de produção responde 403 account_inactive.
  2. Remova do código qualquer chamada a /api/v1/test/....
  3. Confirme que o seu handler de webhook ignora eventos com livemode: false.
  4. Revise o tratamento de 401, 409, 422, 429 e 502.
  5. Se usar allowlist de IP, inclua os IPs dos servidores de produção. Fora da lista, a resposta é 401, mesmo com a credencial correta.
  6. Guarde o request_id de cada chamada nos seus logs. Ele localiza a requisição em Integrações > Logs da API, com retenção de 30 dias.

Tudo o que você precisa para integrar, de chaves a guias por linguagem, está reunido em Desenvolvedores. A referência do modo de teste fica na documentação.

Perguntas frequentes

Preciso ter o cadastro aprovado para usar o sandbox?

Não. A chave de teste pode ser criada antes da aprovação do cadastro, então dá para integrar enquanto a conta está em análise.

Como simular um pagamento Pix no sandbox?

Crie a cobrança com a chave de teste e chame POST /api/v1/test/charges/{id}/pay, também com a chave de teste. A cobrança vira paid e o webhook transaction.paid é disparado com livemode: false.

Dá para testar saque e split no sandbox?

Não. Em teste, splits retornam 400 e saques retornam 403 test_mode_unsupported. O GET /balance responde zeros com livemode: false.

O que acontece se eu chamar o endpoint de simulação com a chave de produção?

A API recusa com 403 test_mode_only. O endpoint de simulação só aceita chave de teste, então não há risco de marcar como paga uma cobrança real.

Continue lendo

SoluçãoAPI PixA API Pix da xFlow Payments é uma API REST para criar cobranças Pix com QR Code e copia e cola, estornar, sacar e receber webhooks assinados. Uma única integração conecta a sua operação a 11 adquirentes, com roteamento por regras e retentativa automática.DesenvolvedoresA documentação da API de pagamentos Pix da xFlow é aberta e fica em app.xflowpayments.com/docs, com uma versão em texto para assistentes de IA no llms.txt. Esta página reúne o caminho para integrar: chaves, sandbox, webhooks, logs e guias técnicos.BlogWebhook Pix: eventos, assinatura HMAC e boas práticasWebhook Pix é o aviso que a API envia para a sua URL quando algo acontece com uma cobrança ou um saque, como o pagamento confirmado. Na xFlow, cada aviso é um POST JSON assinado com HMAC-SHA256, reenviado até 3 vezes até você responder 2xx.BlogIdempotência em API de pagamento: retry sem duplicarIdempotência é a garantia de que repetir a mesma requisição não repete o efeito. Na API da xFlow, você envia o header Idempotency-Key ao criar cobranças e saques: num retry com a mesma chave, a API devolve a mesma cobrança ou o mesmo saque, sem gerar outro Pix nem debitar o saldo de novo.BlogAPI Pix em Node.jsPara integrar a API Pix em Node.js, chame POST /api/v1/charges com fetch e Basic auth (pk_live_ como usuário, sk_live_ como senha), mostre o pix.qrCodeBase64 e o pix.copyPaste da resposta e confirme o pagamento pelo webhook transaction.paid, validando a assinatura HMAC-SHA256 do corpo cru. Antes da produção, teste com chaves pk_test_ e simule o pagamento.