Skip to main content
A Chargefy emite um evento sempre que algo relevante acontece: uma cobrança foi aprovada, uma assinatura mudou, um cliente foi criado. O evento é o registro do fato de negócio. A entrega de webhook é só uma das formas de receber esse fato. Isso deixa a integração mais previsível: você escuta acontecimentos importantes para o seu produto, não o caminho técnico que gerou cada um deles.

Um fato, um evento

Um pagamento confirmado gera um único payment.intent.succeeded, mesmo que ele tenha vindo de checkout, link de pagamento ou API.

Zero ou mais entregas

O evento existe mesmo sem endpoint cadastrado. Se houver endpoints inscritos, cada um recebe sua própria entrega assinada.

Debug mais simples

No dashboard, você acompanha tentativas, status HTTP, resposta do endpoint e reenvia para um endpoint específico quando precisar.

Evento não é entrega

Pense em duas camadas:
CamadaO que significaOnde você usa
EventoAlgo aconteceu com um recurso (payment.intent.succeeded, subscription.updated).Para conciliar pedidos, liberar acesso, atualizar status e consultar histórico.
EntregaUma tentativa de enviar esse evento para um endpoint de webhook.Para debugar falha HTTP, ver retries, copiar resposta do endpoint e reenviar.
Um mesmo evento pode ter várias entregas, uma por endpoint. Também pode não ter nenhuma entrega se você ainda não cadastrou webhooks para aquele ambiente. O histórico do evento continua existindo para consulta pela API.
Na prática: use type para decidir o que fazer no seu sistema, use id para idempotência, e use as telas de Webhooks para investigar problemas de entrega.

O que você vê no dashboard

Na área de webhooks do dashboard, cada endpoint mostra atividade recente e cada entrega mostra o status da tentativa. Esse recorte ajuda a responder perguntas operacionais sem abrir logs:
  • o endpoint recebeu eventos nas últimas horas?
  • a última tentativa respondeu 2xx, 4xx, 5xx ou timeout?
  • qual foi o corpo de resposta retornado pelo seu servidor?
  • para qual endpoint um evento deve ser reenviado?
O evento continua sendo o mesmo. O que muda entre endpoints são as entregas.
O endpoint deve responder 2xx para confirmar recebimento. Respostas fora de 2xx, timeout ou erro de conexão entram como falha de entrega e podem passar por retry.

Qual evento devo escutar?

Escolha eventos pelo resultado de negócio que você precisa sincronizar.
Quero saber quando…Escute
Um pagamento foi confirmadopayment.intent.succeeded
Uma cobrança individual foi capturadacharge.succeeded
Uma assinatura mudou de estadosubscription.updated
Uma fatura de assinatura foi pagainvoice.paid
Um cliente foi criado ou editadocustomer.created, customer.updated
Uma organização conectada mudouorganization.updated

Como o type é nomeado

O type segue o padrão namespace.action, separado por pontos — nunca por underscore. O namespace identifica o recurso; a ação identifica o que mudou.
payment.intent.succeeded
└────┬─────┘ └───┬───┘
  recurso      ação
RegraDetalhe
SeparadorSempre . (ponto). Nunca _ dentro do type.
NamespaceO recurso, no singular (customer, subscription, payment.intent).
AçãoO verbo no passado (created, updated, succeeded, canceled).
SubestadosFluxos assíncronos usam mais segmentos (checkout.session.async.payment.succeeded).
O type é estável: novos eventos podem ser adicionados, mas um type já publicado não é renomeado. Trate type desconhecido como ignorável — assim sua integração não quebra quando o catálogo cresce.

Anatomia do envelope

Todo evento chega no mesmo envelope. O payload do recurso fica sempre em data.object e segue o mesmo objeto público retornado pela API.
{
  "id": "evt_123",
  "object": "event",
  "created_at": "2026-05-16T14:09:27Z",
  "data": {
    "object": {
      "id": "pi_123",
      "object": "payment_intent",
      "status": "succeeded"
    }
  },
  "livemode": true,
  "organization": "org_123",
  "request": {
    "id": "req_123"
  },
  "type": "payment.intent.succeeded"
}
CampoTipoDescrição
idstringID único do evento; é o mesmo valor do header webhook-id.
objectstringSempre event.
created_atstringData/hora ISO 8601 do evento.
data.objectobjectObjeto público completo no estado atual.
data.previous_attributesobjectSó em eventos .updated (e ações que alteram estado). Veja abaixo.
livemodebooleantrue para eventos do modo live; false para modo de teste.
organizationstringOrganização que originou o evento. Em fan-out para plataforma, é a organização conectada filha.
request.idstringRequest (req_*) que originou o evento, quando disponível.
typestringTipo do evento no formato namespace.action.

Eventos .updated carregam previous_attributes

Quando um recurso muda, o evento <recurso>.updated traz data.previous_attributes com apenas os campos que mudaram e seus valores anteriores. O data.object continua sendo o estado atual completo.
{
  "data": {
    "object": {
      "id": "cus_123",
      "object": "customer",
      "email": "novo@email.com"
    },
    "previous_attributes": {
      "email": "antigo@email.com"
    }
  },
  "type": "customer.updated"
}
A resposta direta de um update via API não traz diff — retorna só o objeto atualizado. Quem precisa saber o que mudou lê previous_attributes no webhook .updated. Eventos .created e ações de transição (.succeeded, .canceled) não trazem previous_attributes.

Catálogo de eventos

Os eventos abaixo são agrupados por recurso. Cada nome leva ao schema completo do payload na referência da API.

Customers

EventoQuando dispara
customer.createdUm cliente é criado.
customer.updatedUm campo do cliente muda (traz previous_attributes).
customer.deletedUm cliente é removido.

Products

EventoQuando dispara
product.createdUm produto é criado.
product.updatedUm campo do produto muda, inclusive is_active=false ao arquivar (traz previous_attributes).

Prices

EventoQuando dispara
price.createdUm preço é criado e atrelado a um produto.
price.updatedUm campo editável do preço muda, inclusive is_active=false ao arquivar (traz previous_attributes).

Payment Intents

A família payment.intent.* cobre todo mode=payment one-shot — cartão, PIX e boleto. Métodos assíncronos (PIX e boleto) ficam pendentes até o pagamento ser confirmado; aí emitem payment.intent.succeeded. Boletos não pagos até expires_at viram payment.intent.canceled com cancellation_reason: "abandoned" automaticamente.
EventoQuando dispara
payment.intent.createdUma intenção de pagamento é aberta.
payment.intent.updatedA intenção muda de estado ou tem campos atualizados (traz previous_attributes).
payment.intent.succeededO pagamento é confirmado.
payment.intent.failedA tentativa de pagamento falha.
payment.intent.canceledA intenção é cancelada ou expira sem pagamento.

Charges

EventoQuando dispara
charge.succeededUma cobrança individual é capturada com sucesso.
charge.failedUma cobrança individual é recusada.
charge.updatedUm campo da cobrança muda (traz previous_attributes).
charge.refundedUma cobrança recebe um refund parcial ou total.

Disputes

EventoQuando dispara
charge.dispute.createdUma contestação é criada para uma cobrança.
charge.dispute.updatedA contestação muda de estado ou evidência.
charge.dispute.closedA contestação recebe uma decisão final como won ou lost.

Refunds

EventoQuando dispara
refund.createdUm refund é criado.
refund.failedUm refund chega ao estado failed.
refund.updatedUm refund muda de estado (traz previous_attributes).

Receivables

EventoQuando dispara
receivable.createdUm receivable é gerado para uma venda confirmada.
receivable.paidUm receivable é liquidado (traz previous_attributes).
receivable.canceledUm receivable é cancelado antes da liquidação (traz previous_attributes).
receivable.refundedUm receivable é revertido por estorno (traz previous_attributes).

Payment Methods

EventoQuando dispara
payment.method.createdUm meio de pagamento é criado.
payment.method.updatedUm campo do meio de pagamento muda (traz previous_attributes).
payment.method.attachedUm meio de pagamento é vinculado a um cliente.
payment.method.detachedUm meio de pagamento é desvinculado de um cliente.

Setup Intents

Um setup intent guarda um meio de pagamento para uso futuro, sem cobrar agora.
EventoQuando dispara
setup.intent.createdUma intenção de cadastro de meio de pagamento é aberta.
setup.intent.succeededO meio de pagamento é validado e guardado com sucesso.
setup.intent.failedA validação do meio de pagamento falha.
setup.intent.canceledA intenção de cadastro é cancelada.

Checkout Sessions

EventoQuando dispara
checkout.session.createdUma sessão de checkout é aberta.
checkout.session.completedO comprador conclui o checkout.
checkout.session.async.payment.succeededO pagamento assíncrono (PIX/boleto) da sessão é confirmado.
checkout.session.async.payment.failedO pagamento assíncrono da sessão falha.
checkout.session.expiredA sessão expira sem conclusão.
EventoQuando dispara
payment.link.createdUm link de pagamento é criado.
payment.link.updatedUm campo do link muda, inclusive is_active=false ao desativar (traz previous_attributes).

Invoices

Invoices representam cobranças de assinatura por padrão. Compras avulsas só geram invoice quando a sessão foi criada com invoice_creation=true — caso contrário, escute payment.intent.succeeded. Trials emitem invoice.paid para a invoice de R$ 0 que registra o período.
EventoQuando dispara
invoice.createdUma invoice é criada e fica pronta para cobrança.
invoice.paidA invoice é paga.
invoice.payment.failedUma tentativa de cobrança da invoice falha.
invoice.voidedA invoice é anulada (void).

Subscriptions

EventoQuando dispara
subscription.createdUma assinatura é criada.
subscription.updatedUm campo da assinatura muda (traz previous_attributes).
subscription.canceledA assinatura é cancelada.
subscription.pausedA assinatura é pausada.
subscription.resumedA assinatura volta da pausa.
subscription.trial.will.endO trial está perto de terminar.
subscription.pending.update.appliedUma pending update é aplicada.
subscription.pending.update.expiredUma pending update expira.

Organizations

Eventos do contexto de plataforma: a organização conectada que origina o evento vai em organization.
EventoQuando dispara
organization.createdUma organização conectada é criada.
organization.updatedUm campo da organização conectada muda (traz previous_attributes).

Organization Reviews

EventoQuando dispara
organization.review.requiredUma organização conectada precisa confirmar ou atualizar dados cadastrais.
organization.review.submittedO formulário hospedado de atualização cadastral é enviado para análise.

Onboarding Sessions

EventoQuando dispara
onboarding.session.submittedA onboarding session de uma organização conectada é enviada para análise.

Próximos passos

Entrega e assinatura

Retries, headers e como verificar a assinatura Standard Webhooks.

Objeto event

Veja o shape completo de um payload de evento.