checkout.session representa uma única tentativa de compra. Ela nasce para uma cobrança específica — com seus itens, valores e configuração visual já resolvidos — e devolve uma url (a página hospedada onde o comprador paga) e um client_secret (lido pelo browser do comprador para abrir essa página). É a sessão que coleta os dados do comprador, apresenta os métodos de pagamento disponíveis e confirma a escolha dele.
Diferente de um payment link (URL pública reutilizável), a session é descartável: vale para uma compra, expira em 24h e não volta a open depois de confirmada. Ela também não é o livro-razão financeiro da cobrança — quem registra o resultado do pagamento são o payment_status, as invoices quando aplicável e os webhooks. A session surge quando você a cria pela API ou quando o comprador clica num payment link, e é atualizada conforme o comprador preenche o formulário e confirma o pagamento; para PIX e boleto, a compensação chega depois, de forma assíncrona.
Data Object
Este é o formato completo retornado emcreate, get, na confirmação e em
data.object dos webhooks checkout.session.*. O campo payment_data vem
null enquanto a sessão não foi confirmada e é preenchido conforme o método
escolhido após o confirm.
Identificador da checkout session.
Sempre
"checkout.session".Indica se o comprador pode inserir códigos de cupom na página hospedada.
Desconto aplicado, em centavos.
Soma dos
line_items, em centavos, antes de descontos e impostos.Impostos aplicados, em centavos.
Total cobrado, em centavos. Igual a subtotal − discount + tax.
Override visual cru desta sessão sobre a identidade da organização.
null
quando a sessão herda 100% da organização. Cada campo presente sobrescreve só
aquele campo; campo ausente vem null e herda. A mescla final é resolvida
pela página hospedada, nunca aqui.URL para onde a Chargefy redireciona se o comprador abandonar a sessão.
null
quando não informado.String opaca de 64 caracteres hex, sem prefixo. Usada pela página hospedada
para abrir a sessão sem precisar do token de API. Não é segredo de servidor —
é runtime do browser.
Data de criação em ISO 8601.
Moeda em ISO 4217 minúsculo, como
brl.Customer resolvido para a sessão. Vem
null no create — a Chargefy resolve o
customer só no confirm — e aparece preenchido a partir de
checkout.session.completed.CPF ou CNPJ do comprador, apenas dígitos. Mesmo padrão de
customer_email.Tipo do documento:
cpf, cnpj ou null.Email do comprador. Pré-preenchido se enviado no create; senão
null.
Atualizado quando o comprador preenche o formulário.Nome do comprador. Mesmo padrão de
customer_email.ID de um desconto pré-aplicado à sessão.
null quando não houver.Data de expiração em ISO 8601. 24h depois do
created_at.Quando
true e a sessão é mode=payment, o pagamento bem-sucedido
materializa uma invoice canônica. Sessões mode=subscription sempre
materializam invoice via a assinatura, independentemente desse campo.Itens cobrados na sessão, com produto, preço e recorrência já resolvidos.
true em produção; false em ambiente de teste.Objeto livre para correlacionar a sessão com o seu sistema. Ecoado em todos os
webhooks
checkout.session.*. Quando vazio, retorna {}.payment (compra única) ou subscription (recorrente). É derivado dos
line_items.Dados do pagamento expostos após o
confirm, conforme o método escolhido.
Vem null enquanto a sessão não foi confirmada.Em sessões
subscription, controla se o checkout coleta um método de
pagamento quando não há cobrança no momento. always coleta sempre;
if_required coleta apenas quando há valor devido agora.Opções por método de pagamento oferecidas na página hospedada.
Métodos disponíveis para o comprador na página hospedada, como
["credit_card", "pix", "boleto"]. Congelado no momento do create (snapshot
imutável) e mantido idêntico em toda leitura — consulta, confirmação e
webhooks da sessão refletem exatamente esse conjunto, mesmo que a política de
checkout da organização mude depois. Vem vazio quando a organização ainda não
concluiu o cadastro financeiro.unpaid, paid ou no_payment_required (total igual a zero). Para PIX e
boleto permanece unpaid até a compensação assíncrona.Indica se o endereço de cobrança é exigido no formulário. Boleto sempre exige.
Indica se o documento (CPF/CNPJ) do comprador é exigido no formulário. Boleto
sempre exige.
Indica se o telefone do comprador é exigido no formulário.
open (criada, aguardando o comprador), complete (comprador confirmou) ou
expired (24h sem confirmação — terminal).Tipo semântico do botão de finalização:
auto, pay, subscribe, book ou
donate. Controla a cópia do botão, que a página hospedada renderiza no
idioma do comprador. auto escolhe a cópia pelo tipo da sessão.Subscription criada por uma sessão
mode=subscription. Vem null antes da
confirmação ou em sessões mode=payment.URL para onde a Chargefy redireciona o comprador após o pagamento confirmado.
null quando não informado.Template explícito da sessão.
null significa que a página hospedada usa o
padrão da organização. Valores disponíveis: minimal e booking.URL da página hospedada da Chargefy. Redirecione o comprador para essa URL.
Operações
Test helpers
Em sandbox, você pode simular o resultado de umacheckout.session pelo ID da
sessão. A Chargefy localiza o payment_intent associado, aplica a ação nele e
retorna o objeto payment_intent completo atualizado.
Test helpers só aceitam chaves ch_test_...; chamadas em live mode retornam
erro testmode_required.
| Ação | Endpoint | Resultado |
|---|---|---|
| Succeed | POST /v1/test-helpers/checkout-sessions/{id}/succeed | Liquida o pagamento de teste, marca o intent como succeeded e emite os webhooks de sucesso. |
| Fail | POST /v1/test-helpers/checkout-sessions/{id}/fail | Marca a tentativa como falha, registra o erro público no intent e emite os webhooks de falha. |
| Expire | POST /v1/test-helpers/checkout-sessions/{id}/expire | Expira a sessão de teste, cancela o intent associado e emite os webhooks correspondentes. |
Webhooks
Mudanças nesse objeto disparam os seguintes eventos de webhook:checkout.session.createdcheckout.session.completedcheckout.session.expiredcheckout.session.async.payment.succeededcheckout.session.async.payment.failed
checkout.session completo em data.object; eventos que alteram a sessão também incluem data.previous_attributes com os valores anteriores dos campos alterados.
