Skip to main content
O sandbox é a produção com dinheiro de mentira: os mesmos endpoints, os mesmos objetos, os mesmos webhooks. O que separa os dois mundos é só a API key usada na chamada:
  • ch_live_... cria e consulta dados de produção (livemode: true).
  • ch_test_... cria e consulta dados de teste (livemode: false).
Dados de teste não movimentam dinheiro e ficam isolados dos dados de produção, com uma exceção: as organizações e o plano de taxas delas são os mesmos nos dois modos (veja Plano de taxas no sandbox). Use chaves separadas para desenvolvimento, staging e produção.

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:
Trate esse 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 ambiente test. O token gerado começa com ch_test_ e já funciona com a conta recém-criada.
No dashboard, o menu Minha conta alterna entre os ambientes live e sandbox a qualquer momento. Contas que ainda não ativaram começam no sandbox por padrão — mas a troca é sempre livre.

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 com payment_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 a requires_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 mesmo count 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 R25,00eˊomıˊnimoporparcelaagindo:aquartaparcelasairiaporR 25,00 é o mínimo por parcela agindo: a quarta parcela sairia por 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 400 antes 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" com settled_at: null para 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 em customer_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.
Nos cenários delayed, a confirmação retorna o código Pix ou o boleto com o 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 quando livemode é 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 checkout unpaid.
Esses controles são uma conveniência visual para testes manuais. Para testes automatizados e integrações via API, use os e-mails determinísticos da tabela acima. Os dois caminhos usam o mesmo processamento e produzem os mesmos webhooks.

Webhooks em test mode

Eventos criados com ch_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

Este recurso só está disponível para Chargefy for Platforms.
O cadastro de organizações filhas roda ponta a ponta com ch_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 isso fee_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 objeto payout_account volta 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 com ch_test_... retornam 409 com code: "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 chave ch_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.