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 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 as abas Cartão, PIX e Boleto.
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:succeed_delayed@meusite.com como e-mail do
cliente. O QR code nasce com o pagamento em 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
succeed_immediately@meusite.com. Para manter o QR pendente sem uma
transição automática de teste, use pending@meusite.com.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

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
succeed_delayed@meusite.com; 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
expire_delayed@meusite.com para começar em pending e receber
checkout.session.async.payment.failed cerca de 3 minutos depois. Use
expire_immediately@meusite.com quando quiser que a confirmação já retorne
o payment_intent como canceled.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.

