Pular para o conteúdo principal

Eventos de Recuperação de Carrinho Abandonado

Os seguintes eventos de webhook rastreiam o ciclo de vida da recuperação de carrinho abandonado:
EventoDescrição
abandoned_checkout.detectedUm checkout abandonado foi detectado. Enviado quando um pagamento é identificado como abandonado (falhou ou está incompleto) e o fluxo de trabalho de recuperação começa.
abandoned_checkout.recoveredO cliente completou o pagamento através do link de recuperação. O campo recovered_payment_id contém o ID do pagamento bem-sucedido.

Campos de Payload de Checkout Abandonado

payment_id
string
obrigatório
O pagamento original que foi abandonado. Use isso para procurar detalhes de produto, valor e moeda.
customer_id
string
obrigatório
O cliente que abandonou o checkout.
abandonment_reason
string
obrigatório
Por que o checkout foi abandonado. Um dos:
  • payment_failed — O cliente tentou o pagamento, mas ele falhou
  • checkout_incomplete — O cliente visitou o checkout, mas nunca tentou o pagamento
status
string
obrigatório
Estado atual do ciclo de vida dessa tentativa de recuperação. Um dos:
  • abandoned — Detectado, nenhum e-mail enviado ainda
  • recovering — Pelo menos um e-mail de recuperação enviado
  • recovered — Cliente completou o pagamento
  • exhausted — Todos os e-mails enviados ou checkout mais recente encontrado
  • opted_out — Cliente cancelou a inscrição
abandoned_at
string
obrigatório
Timestamp ISO 8601 de quando o checkout foi detectado como abandonado.
recovered_payment_id
string | null
O ID do pagamento da recuperação bem-sucedida. null até que o checkout seja recuperado.

Exemplo: Lidando com Webhooks ACR

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'abandoned_checkout.detected':
      console.log(`Checkout abandoned: ${event.data.payment_id}`);
      console.log(`Reason: ${event.data.abandonment_reason}`);
      // Track abandonment in your analytics
      await trackAbandonment(event.data);
      break;

    case 'abandoned_checkout.recovered':
      console.log(`Checkout recovered: ${event.data.payment_id}`);
      console.log(`Recovery payment: ${event.data.recovered_payment_id}`);
      // Grant access, update records
      await handleRecovery(event.data);
      break;
  }

  res.json({ received: true });
});

Eventos de Dunning

Os seguintes eventos de webhook rastreiam o ciclo de vida de subscription dunning:
EventoDescrição
dunning.startedUma tentativa de dunning foi criada para uma inscrição que entrou em on_hold ou foi cancelada pelo cliente.
dunning.recoveredO cliente atualizou seu método de pagamento e o pagamento resultante foi bem-sucedido. O campo payment_id contém o ID do pagamento bem-sucedido.

Campos de Payload de Tentativa de Dunning

subscription_id
string
obrigatório
A inscrição que acionou a tentativa de dunning.
customer_id
string
obrigatório
O cliente que possui a inscrição.
trigger_state
string
obrigatório
O estado da inscrição que acionou o dunning. Um dos:
  • on_hold — Inscrição pausada devido a falha de pagamento
  • cancelled — Cliente cancelou pelo portal do cliente
status
string
obrigatório
Estado atual do ciclo de vida dessa tentativa de dunning. Um dos:
  • recovering — E-mails de dunning estão sendo enviados
  • recovered — Cliente atualizou o método de pagamento e o pagamento foi bem-sucedido
  • exhausted — Todos os e-mails foram enviados ou o estado da inscrição mudou
created_at
string
obrigatório
Timestamp ISO 8601 de quando a tentativa de dunning foi criada.
payment_id
string | null
O ID do pagamento da recuperação bem-sucedida. null durante a recuperação.

Exemplo: Lidando com Webhooks de Dunning

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dunning.started':
      console.log(`Dunning started for subscription: ${event.data.subscription_id}`);
      console.log(`Trigger: ${event.data.trigger_state}`);
      // Track dunning in your system
      await trackDunning(event.data);
      break;

    case 'dunning.recovered':
      console.log(`Subscription recovered: ${event.data.subscription_id}`);
      console.log(`Recovery payment: ${event.data.payment_id}`);
      // Reactivate access, update records
      await handleDunningRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
Inscreva-se em ambos dunning.started e dunning.recovered para rastrear o ciclo de vida completo do dunning. Use dunning.started para pausar períodos de carência ou marcar inscrições em risco no seu sistema.

Abandoned Cart Recovery

Configure sequências de e-mail e incentivos de desconto para ACR.

Subscription Dunning

Configure as sequências de e-mail de dunning para inscrições expiradas.

Subscription Webhooks

Eventos relacionados ao ciclo de vida da inscrição, como subscription.on_hold e subscription.cancelled.

Esquema de Payload de Webhook

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
obrigatório
abandonment_reason
enum<string>
obrigatório
Opções disponíveis:
payment_failed,
checkout_incomplete
customer_id
string
obrigatório
payment_id
string
obrigatório
status
enum<string>
obrigatório
Opções disponíveis:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Last modified on April 20, 2026