checkout.session representa uma única tentativa de compra. Ela nasce
com seus itens e valores e devolve uma url para a página hospedada e um
client_secret para o browser do comprador. A apresentação e a política de
coleta não são armazenadas neste objeto: o checkout usa a configuração atual da
organização.
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 — o Payment Intent registra o estado da cobrança, e payment_status projeta esse resultado na session. 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.
Regenerar PIX ou boleto na mesma session mantém a compra e o Payment Intent,
mas cria outra Charge para a nova tentativa. Se a nova Charge pagar,
payment_status muda para paid e não volta para unpaid quando a tentativa
antiga expirar ou falhar depois.session representa o contexto transacional da página hospedada:
itens, total, comprador e URLs de retorno. Você cria a sessão no servidor,
recebe uma url como a abaixo e redireciona o comprador:
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. marketing_attribution contém o primeiro contexto
de aquisição capturado para a sessão e permanece null até existir uma captura.
string
Identificador da checkout session.
string
Sempre
"checkout.session".boolean
Se a página hospedada desta sessão mostra o campo de código de desconto.
Snapshot do payment link de origem ou do valor enviado no create. Padrão:
false.integer
Desconto aplicado, em centavos.
integer
Soma dos
line_items, em centavos, antes de descontos e impostos.integer
Impostos aplicados, em centavos.
integer
Total cobrado, em centavos. Igual a subtotal − discount + tax.
string | null
URL para onde a Chargefy redireciona se o comprador abandonar a sessão.
null
quando não informado.string | null
Referência do integrador anexada no create da sessão ou pela URL do payment
link (
?client_reference_id=…). null quando não informada. Ecoada nos
webhooks checkout.session.* para conciliação.string
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.
string
Data de criação em ISO 8601.
string
Moeda em ISO 4217 minúsculo, como
brl.string | null
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.string | null
CPF ou CNPJ do comprador, apenas dígitos. Mesmo padrão de
customer_email.string | null
Tipo do documento. Vem
null quando não informado.string | null
Email do comprador. Pré-preenchido se enviado no create; senão
null.
Atualizado quando o comprador preenche o formulário.string | null
Nome do comprador. Mesmo padrão de
customer_email.string | null
ID de um desconto pré-aplicado à sessão.
null quando não houver.string
Data de expiração em ISO 8601. 24h depois do
created_at.boolean
true quando o comprador cobre a taxa da organização: o total é acrescido do
repasse para que a organização receba líquido o valor da venda. Herdado do
payment link quando a sessão nasce de um clique; enviável diretamente no
create. Veja Repassar a tarifa de venda ao
comprador.boolean
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.array
Itens cobrados na sessão, com produto, preço e recorrência já resolvidos.
boolean
true em produção; false em ambiente de teste.object | null
Primeiro contexto de aquisição capturado para a sessão. Retorna
null quando
nenhum dado foi enviado na criação e a página hospedada ainda não registrou a
origem. Depois da primeira captura, o objeto é imutável para aquela sessão.object
Objeto livre para correlacionar a sessão com o seu sistema. Ecoado em todos os
webhooks
checkout.session.*. Quando vazio, retorna {}.string
Modo da sessão. É derivado dos
line_items.object | null
Dados do pagamento expostos após o
confirm, conforme o método escolhido.
Vem null enquanto a sessão não foi confirmada.string
Em sessões
subscription, controla se o checkout coleta um método de
pagamento quando não há cobrança no momento.string
Estado do pagamento da sessão. Para PIX e boleto permanece
unpaid até a
compensação assíncrona.string
Estado atual da sessão.
A sessão é dona do ciclo de vida do payment intent
A sessão e opayment_intent dela são uma única tentativa de compra: a sessão é
o que o comprador usa, e o intent existe para servi-la. Quem encerra a tentativa,
portanto, é a sessão.
- Enquanto a sessão está
open, o intent fica aberto. É isso que permite ao comprador voltar ao link, trocar de meio de pagamento ou pedir um novo código PIX dentro do prazo. - Quando a sessão vira
expired, o intent em andamento é cancelado comcancellation_reason: "expired". - Por isso não se cancela esse intent direto:
POST /v1/payment-intents/:id/cancel
responde
409e indica qual sessão expirar. A única exceção érequires_capture, em que existe valor autorizado no cartão para liberar.
string
Tipo semântico do botão de finalização. Controla a cópia do botão, que a
página hospedada renderiza no idioma do comprador.
string | null
Subscription criada por uma sessão
mode=subscription. Vem null antes da
confirmação ou em sessões mode=payment.string | null
URL para onde a Chargefy redireciona o comprador após a conclusão do checkout.
O placeholder
{CHECKOUT_SESSION_ID}, quando presente, é substituído pelo ID
da sessão. null quando não informado.string
URL da página hospedada da Chargefy. Redirecione o comprador para essa URL.
Aceita o parâmetro opcional
?locale= (pt-BR ou en-US; atalhos pt e
en) para definir o idioma da página; valor inválido é ignorado.Operações
Testar em sandbox
Para PIX e boleto, preenchacustomer_email com um dos e-mails de teste do
sandbox. Cenários delayed começam com
payment_status: "unpaid" e emitem o webhook assíncrono correspondente quando
o resultado muda.
Eventos
Mudanças nesse objeto disparam os seguintes eventos: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.
