ch_test_... ficam separados de produção e retornam livemode: false.
Duas coisas tornam o sandbox o caminho mais seguro para validar a integração: isolamento financeiro, porque nenhuma transação movimenta dinheiro real, e resultados determinísticos, porque e-mails de teste controlam sucesso, expiração ou permanência em payment_data.status: "pending" para Pix e boleto.
As peças e o papel de cada uma
Ative o sandbox no dashboard
Abra o menu da sua conta
Clique em Alternar para Sandbox

O item 'Alternar para Sandbox' fica dentro do menu Minha conta, no rodapé da barra lateral.
Confirme pelo banner amarelo

Banner fixo no topo do dashboard enquanto o ambiente de sandbox está ativo.
Crie uma chave de teste
O toggle acima muda o dashboard; para chamar a API você precisa de uma chavech_test_.... No dashboard, abra Developers → Chaves de API, clique em Nova chave e selecione o ambiente test. Detalhes em API keys.
Antes de testar pagamentos
Você precisa de duas coisas prontas — as duas saem de Aceitar seu primeiro pagamento:- Uma página de pagamento (a
urlde um payment link ou de uma checkout session), com cartão, Pix e boleto habilitados. - Um receiver de webhook tratando
checkout.session.completed,checkout.session.async.payment.succeededecheckout.session.async.payment.failed.
Teste cada método de pagamento
Cartão: confirmação na hora (síncrona)
url do seu link, preencha os dados e pague com o cartão de teste
4242 4242 4242 4242 (qualquer CVC de 3 dígitos, qualquer validade futura):
Formulário de cartão na página de pagamento hospedada, com Cartão, Pix e Boleto para escolher.
checkout.session.completed já pago:payment_status: "paid" — pode entregar. Repare que não existe um segundo
evento aqui: com cartão, um único checkout.session.completed já basta.Pix: confirmação por evento (assíncrona)

Pix gerado na página hospedada: QR code, instruções e o código copia-e-cola.
checkout.session.completed com:[email protected] como e-mail do
cliente. O QR code nasce com payment_data.status: "pending" e, após cerca de 3
minutos, chega o checkout.session.async.payment.succeeded com
payment_status: "paid" e payment_data.payment_method: "pix" — o sinal
para entregar.Para testar a resposta imediata sem esperar, use
[email protected]. Para manter o QR pendente sem uma
transição automática de teste, use [email protected].No checkout hospedado em sandbox, a barra amarela do topo também oferece
Simular pagamento e Simular expiração depois que o QR ou boleto é
criado. Use os botões para testes manuais rápidos; use os e-mails acima em
testes automatizados.Boleto: mesmo fluxo, prazo maior
529.982.247-25):
Boleto gerado na página hospedada: código de barras, linha digitável e link para o PDF.
checkout.session.completed chega unpaid, e a confirmação vem depois
por checkout.session.async.payment.succeeded. Use o mesmo
[email protected]; a diferença em produção é o relógio, pois a
compensação de um boleto pago leva normalmente 1–2 dias úteis. CPF/CNPJ e
endereço continuam obrigatórios e precisam ser válidos. Detalhes do método
em Boleto.Simule expiração
[email protected] para começar com payment_data.status: "pending" e receber
checkout.session.async.payment.failed cerca de 3 minutos depois. Use
[email protected] quando quiser que o código já nasça
vencido: a confirmação devolve o payment_intent em
requires_payment_method, pronto para outro código no mesmo objeto.Esses resultados percorrem o mesmo processamento financeiro e os mesmos
webhooks do ambiente live; o e-mail só escolhe o evento que o processador
de teste vai produzir.Síncrono vs. assíncrono, lado a lado
Ir para produção
Sandbox e produção usam o mesmo código — só o ambiente muda:- Confirme a ativação da organização. O sandbox funciona sem ela, mas o
ambiente live recusa a confirmação de pagamento (
organization_not_activated) atéactivation_statuschegar aactive. Revise também os dados do negócio e a conta para saques — veja KYC. - Saia do sandbox no mesmo menu (Minha conta → Sair do sandbox) e
crie uma chave live (
ch_live_...). Dados de teste não migram: recrie produto, preço e link com a chave live. - Cadastre o endpoint de webhook no ambiente live. Endpoints e secrets são separados por ambiente.

