Skip to main content
Uma 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.
O termo 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:
Use checkout session quando o comprador precisa passar por uma experiência completa de pagamento hospedada: venda única, checkout de assinatura, PIX ou boleto com instruções, ou cobrança de cartão com parcelamento. Se você precisa de um link público reutilizável, use Payment Links.

Data Object

Este é o formato completo retornado em create, 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 o payment_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 com cancellation_reason: "expired".
  • Por isso não se cancela esse intent direto: POST /v1/payment-intents/:id/cancel responde 409 e 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, preencha customer_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: O payload sempre carrega o objeto 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.