Sessão de checkout expirada
A sessão foi encerrada sem pagamento. Uma sessão nasce com uma hora de
validade e é encerrada quando esse prazo vence. O merchant também encerra
uma sessão antes da hora com
POST /api/v1/checkout/sessions/{id}/expire.
Serve para recuperar carrinho abandonado: a fatura em invoice continua
aberta, e um novo checkout pode ser gerado para ela.
expires_at é sempre o prazo que a sessão publicou, e encerrar a sessão
não o altera. Uma sessão encerrada antes da hora carrega status
expired com um expires_at no futuro.
data.object é a sessão, no mesmo formato de
GET /api/v1/checkout/sessions/{id}.
Headers
O ID do evento, o mesmo evt_ que vem no corpo em id. É a sua chave de
idempotência: receber o mesmo webhook-id duas vezes significa a mesma
coisa que recebê-lo uma vez.
^evt_[0-9a-z]{26}$"evt_01h455vb4pex5vsknk084sn02e"
Timestamp Unix em segundos do instante do envio. Ele entra no conteúdo assinado, então recuse entregas com mais de 5 minutos de diferença do seu relógio: é o que impede que uma requisição capturada seja reenviada depois.
1741541400
Uma ou mais assinaturas, separadas por espaço, cada uma no formato
v1,<base64>.
A assinatura é um HMAC-SHA256 sobre {webhook-id}.{webhook-timestamp}.{corpo},
codificado em base64. A chave são os bytes do segredo do endpoint depois do
prefixo, decodificados de base64 — o segredo é publicado como
whsec_<base64> e fica visível no painel, em Configurações → Webhooks.
Compare com secure_compare, nunca com ==.
Durante as 24 horas seguintes a uma rotação de segredo o cabeçalho traz duas assinaturas, uma por segredo. Aceite a entrega se qualquer uma delas conferir, e você troca o segredo sem perder evento nenhum.
"v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4="
Body
Tipo do objeto. Sempre 'event'.
event "event"
O que aconteceu.
- invoice.created: Fatura criada.
- invoice.paid: Fatura paga.
- invoice.uncollectible: Fatura dada como incobrável.
- invoice.voided: Fatura cancelada.
- payment_intent.created: Tentativa de cobrança criada.
- payment_intent.failed: Tentativa de cobrança falhou.
- payment_intent.attempts_exhausted: Sem novas tentativas de cobrança.
- payment_intent.refund_requested: Estorno solicitado.
- payment_intent.refunded: Estorno concluído.
- checkout_session.completed: Sessão de checkout concluída.
- checkout_session.expired: Sessão de checkout expirada.
- subscription.created: Assinatura criada.
- subscription.activated: Assinatura ativada pelo primeiro pagamento.
- subscription.overdue: Assinatura entrou em atraso.
- subscription.suspended: Assinatura suspensa após falhas de pagamento.
- subscription.reactivated: Assinatura voltou para a cobrança.
- subscription.canceled: Assinatura cancelada.
- subscription.period_started: Novo ciclo de cobrança iniciado.
checkout_session.expired "invoice.paid"
Indica ambiente de produção (true) ou sandbox (false).
true
O recurso a que o evento se refere, no mesmo formato em que
GET /api/v1/<recurso>/{id} o devolve. Recursos relacionados aparecem
como IDs, não aninhados.
Response
Responda 2xx assim que guardar o evento. Qualquer outra resposta, e um tempo acima de 15 segundos, conta como falha e entra na escada de novas tentativas.

