Skip to main content

Evento payment.intent.canceled

Disparado quando um payment_intent chega ao estado canceled. data.object usa o mesmo shape de GET /v1/payment-intents/:id, agora com status: "canceled", canceled_at preenchido e cancellation_reason quando houver motivo registrado. Use este evento para encerrar a tentativa no seu sistema, atualizar a operação de negócio relacionada e impedir novas tentativas de captura naquele intent.
O cancelamento é uma transição de estado. Quando o payload traz data.previous_attributes, use esse diff para auditoria; o estado final continua sendo o objeto completo em data.object.

Quando acontece

Um código PIX ou boleto que vence sem pagamento não emite este evento: a expiração encerra apenas aquela tentativa e o intent volta a requires_payment_method, comunicado por payment.intent.updated. Cancelamento é sempre uma decisão — sua, do checkout que expirou ou de uma fatura anulada.

Como processar

  • Registre o id do evento (evt_*) para processar o webhook de forma idempotente.
  • Atualize o pagamento local usando data.object.id (pi_*) e status: "canceled".
  • Trate o cancelamento como estado final para este intent: não libere pedido e não tente capturar depois.
  • Use cancellation_reason para auditoria, suporte e mensagens internas.
  • Use data.previous_attributes para saber quais campos mudaram sem perder o estado final em data.object.
  • Use metadata, customer e invoice para localizar o pedido ou fatura correspondente.

Campos importantes

Status possíveis

Neste evento, data.object.status é canceled. O status anterior, quando incluído, aparece em data.previous_attributes.status. Motivos possíveis de data.object.cancellation_reason, quando preenchido. Informados por você na chamada de cancelamento: Gerados pela Chargefy, apenas leitura:
Cada motivo afirma exatamente uma coisa, e você pode confiar nisso. expired significa que um prazo acabou — não é preciso cruzar com o histórico do seu sistema para descobrir o que houve. E abandoned só chega até você se você o enviou: a Chargefy nunca escreve esse valor.

O que a expiração de um código não emite

A expiração automática de um PIX ou boleto pendente não passa por este evento: | payment.intent.canceled | Não. Cancelamento fica reservado a decisões: cancelamento direto, expiração da sessão de checkout ou fatura anulada. | Essa é a sequência lógica do lifecycle. A entrega HTTP ainda pode ser duplicada ou chegar fora de ordem; aplique as regras de entrega de webhooks.

Exemplo: sessão de checkout expirada com PIX pendente

Páginas relacionadas

Cancelar Payment Intent

Estados canceláveis e motivos aceitos pela API.

Objeto Payment Intent

Semântica completa de cancelamento, status e expiração.

Encerrar uma tentativa

Idempotência, tentativa ativa e proteção contra eventos antigos.

Entrega e ordem

Duplicação, retries e eventos fora de ordem.