ch_live_...cria e consulta dados de produção (livemode: true).ch_test_...cria e consulta dados de teste (livemode: false).
Disponível desde o primeiro minuto
O sandbox funciona de ponta a ponta antes mesmo da ativação da conta. Enquanto o cadastro está em análise, você já cria produtos, payment links, checkout sessions e payment intents de teste, paga com os cartões e e-mails determinísticos desta página e recebe os webhooks correspondentes — a integração inteira pode ficar pronta em paralelo à aprovação. A ativação só é exigida para receber pagamento real. Antes dela, o ambiente live aceita criar recursos normalmente (clientes, links, sessões), e o comprador consegue navegar o checkout até o fim — mas a confirmação do pagamento é recusada com um erro estável, sem cobrar nada:code como “conta ainda em ativação”: ele aparece ao confirmar uma
checkout session hospedada e no
confirm do payment intent, sempre com
status 409, e desaparece quando a ativação é aprovada.
Criar uma chave de teste
No dashboard, abra Developers → Chaves de API, clique em Nova chave e selecione o ambientetest. O token gerado começa com ch_test_ e já
funciona com a conta recém-criada.
Simular cartões
Em checkouts hospedados, no Chargefy.js, na página de pagamento de fatura e nos formulários de atualização de cartão, use estes números em test mode. Use qualquer CVC de três dígitos e uma validade futura. Cartão desconhecido em test mode aprova por padrão.Sucesso e status
Na charge aprovada,
payment_error é null. Nos dois casos processing,
ainda não há desfecho — não trate a ausência de erro como
aprovação; aguarde o webhook.
Cartões salvos e reutilização
Os cartões abaixo aprovam a cobrança feita no checkout hospedado, inclusive a primeira cobrança de uma assinatura, que já guarda o cartão. O resultado especial aparece quando o cartão salvo é cobrado de novo fora do checkout: a renovação da assinatura, a oferta seguinte de um funil, o pagamento de fatura com cartão salvo e o confirm de um payment intent compayment_method salvo.
Use esses números para validar uma compra aprovada seguida de contingência ou
processamento assíncrono no reúso. Em live mode, eles são tratados como números
comuns e não escolhem o resultado do pagamento.
Falhas simuladas via cartão
Uma recusa encerra a tentativa, não o intent: o Payment Intent volta arequires_payment_method com o motivo em last_payment_error, e o mesmo
intent aceita uma nova confirmação — use estes cartões para testar o fluxo de
recusa seguida de retentativa. Pela API, o confirm recusado responde 402 com
o mesmo code e o intent dentro de error.payment_intent.
O sandbox também oferece cartões para erros que, em produção, podem nascer em
outras etapas — como captura, tokenização ou reembolso. Nesses casos, o cartão
serve para testar o contrato público, a mensagem e a saída segura da interface;
ele não pretende reproduzir a etapa operacional que originou o erro real.
O código Chargefy estável fica em payment_error.code, com a orientação em
payment_error.advice_code. No sandbox não há rede por trás da recusa:
payment_error.network_decline_code e payment_error.network_advice_code vêm
sempre null.
Em todos os cenários abaixo, a tentativa falha e o Payment Intent volta para
requires_payment_method.
issuer_declined — recusa do emissor
Todos estes cartões retornam payment_error.category: "issuer_declined".
invalid — dados ou método inválidos
Todos estes cartões retornam payment_error.category: "invalid".
blocked — cartão ou transação bloqueada
Todos estes cartões retornam payment_error.category: "blocked".
processing_error — falha de processamento
Todos estes cartões retornam payment_error.category: "processing_error".
Parcelamento no sandbox
Test mode parcela exatamente como produção. O teto, os juros e a decomposição do valor são calculados pela Chargefy antes de a cobrança sair, então o resultado não depende do ambiente: o mesmocount sobre o mesmo valor devolve
o mesmo total em ch_test_... e em ch_live_....
Não há cartão de parcelamento nem nada para ligar. Qualquer cartão de sucesso
desta página aceita de 1 a 12 parcelas, e os cartões de recusa recusam
independentemente do número escolhido. O contrato completo — onde enviar
installments, o que cada campo significa e como exibir as parcelas — está em
Checkout white-label.
O teto de parcelas
O máximo ofertável é o menor entre três limites:
O terceiro limite é o que costuma surpreender: ele desce o teto conforme o
valor da venda, sem nenhuma configuração envolvida.
A regra vale igual nos dois ambientes, e um teto de organização mais baixo
sempre prevalece: com o teto em 6, uma venda de R$ 200,00 continua em 6x.
Conferir as parcelas antes de cobrar
POST /v1/payment-previews funciona com chave de teste e devolve as mesmas
opções da produção, com livemode: false. É o jeito de ver o teto efetivo de
um valor sem tentar uma cobrança:
max_count: 3 numa venda de R 6,50.
Quem paga os juros
interest_payer vale no sandbox como em produção, nas duas formas. Com
buyer, o juro entra no total do comprador. Com organization, o comprador
parcela o valor à vista e o mesmo juro é descontado do líquido da organização —
e essa dedução é calculada e gravada no sandbox também, então a cobrança de
teste já mostra o líquido correto de uma venda parcelada com juros por conta da
loja.
O que o sandbox não simula
Duas coisas do parcelamento ficam de fora, e é melhor saber antes de procurá-las:- Não existe cenário de falha específico de parcelamento. Nenhum cartão
desta página força uma recusa por número de parcelas. Pedir mais parcelas do
que a venda permite não chega a virar cobrança: a validação devolve
400antes disso, com a mesma mensagem nos dois ambientes. - Nenhuma parcela liquida. A venda parcelada gera os lançamentos de
transaction — um por parcela, com bruto,
taxas e líquido —, mas em test mode eles ficam em
status: "pending"comsettled_at: nullpara sempre. Conciliação de repasse e data efetiva de liquidação só podem ser testadas em produção.
Erros
Simular Pix e boleto
Em test mode, o e-mail do cliente determina o resultado de Pix e boleto. Use o mesmo valor emcustomer_email no Checkout ou no customer associado ao
payment_intent.
O local-part precisa ser exatamente um dos valores acima; o domínio pode ser
qualquer domínio válido. Em live mode esses endereços são tratados como e-mails
comuns e não alteram o pagamento.
Sempre que o checkout coletar documento — inclusive em Pix e boleto — o
CPF/CNPJ precisa ter dígitos verificadores válidos também no sandbox. Você
pode usar o CPF fictício
529.982.247-25; use o e-mail para escolher o
resultado financeiro.payment_intent em requires_action. A transição posterior passa pelo mesmo
processamento financeiro e emite os mesmos webhooks de um pagamento real.
Controles no checkout hospedado
O checkout hospedado exibe uma barra amarela no topo quandolivemode é
false. Depois que um Pix ou boleto entra em requires_action, a própria barra
mostra dois controles:
- Simular pagamento entrega o evento de sucesso e leva o checkout a
payment_status: "paid". - Simular expiração entrega o evento de expiração do código — o intent
volta a
requires_payment_method— e mantém o checkoutunpaid.
Webhooks em test mode
Eventos criados comch_test_... carregam livemode: false e são entregues
apenas para endpoints de webhook criados no ambiente de teste — endpoints e
secrets são separados por ambiente.
Crie pelo menos um endpoint em test antes de validar a integração: os
pagamentos simulados desta página emitem exatamente os mesmos eventos dos
pagamentos reais.
Ativação de organizações no sandbox
O cadastro de organizações filhas roda ponta a ponta comch_test_..., com
desfecho determinístico escolhido pelo CPF/CNPJ da organização: aprovado,
reprovado com correção, reprovado sem autoatendimento ou em análise. A tabela
está em Ativar organização por API e vale para
os dois caminhos de cadastro, o hospedado e o por API.
Plano de taxas no sandbox
A organização filha e o plano de taxas dela são os mesmos em teste e em produção, e o plano define o preço das vendas reais. Por issofee_plan em criar e
atualizar organização só é aceito com
ch_live_.... Com ch_test_..., omita o campo: enviá-lo, mesmo null ou
"default", retorna 400 com code: "livemode_mismatch".
Contas para saques no sandbox
Há dois caminhos, com comportamentos diferentes:- Dentro da ativação (hospedada ou por API): a conta para saques é exigida
e simulada normalmente com
ch_test_.... O objetopayout_accountvolta preenchido na organização — ele prova o contrato e o fluxo, mas nenhuma conta bancária real é validada e nenhum repasse acontece. - Recurso independente (
/v1/payout-accounts): criar, listar e desconectar contas fora da ativação ainda não é simulado. Requisições comch_test_...retornam409comcode: "sandbox_unsupported"; use esse recurso apenas em produção.
Ir para produção
Sandbox e produção usam o mesmo código — só a chave muda. Dados de teste não migram: recrie produto, preço e link com a chavech_live_... quando a conta
estiver ativa. O passo a passo completo, incluindo webhooks e checklist final,
está em Testar no sandbox e no
Checklist de go-live.
