Evento checkout.session.expired
Disparado quando uma checkout session deixa de estar em status: "open" por
expiração — ao chegar no prazo, ou quando você chama
POST /v1/checkout-sessions/:id/expire.
A sessão expirada não pode mais ser confirmada pelo comprador; crie uma nova
session quando quiser oferecer outra tentativa de checkout.
O prazo é definido por data.object.expires_at, sempre 24h depois de
created_at. Sessões que já estão complete ou expired não disparam este
evento novamente.
A sessão é dona do ciclo de vida do
payment_intent dela. Se ainda havia uma
tentativa de pagamento em andamento, ela é encerrada junto e você recebe
também payment.intent.canceled
com cancellation_reason: "expired". Os dois eventos descrevem a mesma
decisão — trate-os de forma idempotente para não encerrar o pedido duas vezes.Este evento representa abandono da sessão antes do
confirm. Ele é diferente
de uma falha de pagamento assíncrono: PIX ou boleto já confirmados pelo
comprador usam checkout.session.async.payment.failed quando não forem pagos.Quando acontece
Como processar
- Registre o
iddo evento (evt_*) para processar o webhook de forma idempotente. - Marque o pedido ou carrinho como abandonado, não como pagamento recusado.
- Libere reserva de estoque, bloqueio de agenda ou qualquer hold temporário associado à sessão.
- Ofereça uma nova tentativa com uma nova checkout session ou por um payment link existente.
- Não tente reutilizar o
client_secretou aurlda sessão expirada.
Campos importantes
Status da sessão
Exemplo de payload
data.object é o DTO completo de PublicCheckoutSession.
