Skip to main content
Encerra imediatamente uma sessão de checkout aberta, sem esperar o expires_at. O comprador que abrir o link depois disso vê um checkout expirado. Este também é o caminho para encerrar a tentativa de pagamento por trás da sessão. A sessão é a dona do ciclo de vida do payment_intent dela: expirar a sessão cancela o intent com cancellation_reason: "expired", do mesmo jeito que acontece quando o prazo termina sozinho.
Enquanto a sessão está aberta o intent fica aberto de propósito — é isso que permite ao comprador voltar ao link, trocar de meio de pagamento ou pedir um novo código PIX dentro do prazo da sessão. Só quando a sessão termina é que a tentativa termina.

Parâmetros de caminho

string
required
ID da checkout session (cs_*).
Não há corpo. A API key da própria organização atua diretamente; a API key de plataforma exige o header Organization: <id> apontando para uma organização conectada ativa.

Quais sessões podem ser expiradas

Os valores abaixo são de checkout_session.status, que tem três valores possíveis. Só o primeiro aceita a chamada.

Efeito no payment intent

A partir daqui, status é o do payment intent — outro objeto, outra lista de valores. Não confunda com a tabela acima. O intent da sessão é cancelado em quatro dos oito valores possíveis. Nos outros quatro nada acontece, e cada exclusão é intencional: Se havia um PIX ou boleto emitido e ainda pendente sob esse intent, a cobrança também é encerrada como failed — o comprovante já não podia ser pago.

Resposta

200 OK com o objeto checkout.session completo — mesmo shape de GET /v1/checkout-sessions/:id — agora com status: "expired".

Erros

Webhooks gerados

Os dois eventos descrevem a mesma decisão. Trate-os de forma idempotente para não encerrar o pedido duas vezes no seu sistema.

Objeto da sessão

Campos, estados e relação com o pagamento.

Cancelar um pagamento

Quando o cancelamento vai pelo lado do intent.