AVEN
  • Começando
    • Início
    • Tokenização do Cartão
    • SDK de 3DS
    • Integre com IA
  • Formato dos Webhooks
    • Pagamento
    • Transferência
    • Carrinho Abandonado
  • Loja
    • Consultar Saldo
      GET
    • Consultar Informações
      GET
  • Pagamentos
    • Criar Pagamento
      POST
    • Buscar Pagamento
      GET
    • Estornar Pagamento
      POST
  • Transferência
    • Criar Transferência
      POST
    • Buscar Transferência
      GET
  • Checkout
    • Integração Shopify
    • Integração WooCommerce
  • Links de Pagamento
    • Criar Smart Link
      POST
    • Editar Smart Link
      PUT
AVEN2026

Webhook: Carrinho Abandonado

Esta página descreve o formato do webhook enviado pela plataforma quando um carrinho criado no checkout passa de 30 minutos sem nenhuma tentativa de pagamento registrada e o comprador já informou algum dado de contato.

Descrição

O webhook de carrinho abandonado é enviado quando um pedido criado no checkout passa de 30 minutos sem nenhuma tentativa de pagamento registrada e o comprador já preencheu os dados de contato no checkout. A contagem começa na criação do pedido, e o envio acontece a partir dos 30 minutos: a notificação costuma chegar alguns minutos depois, não no minuto exato.

As notificações são enviadas via requisições HTTP no método POST, utilizando o formato JSON.

O envio é cancelado quando o pedido passa a ter um pagamento registrado, qualquer que seja o status: Pix ou boleto gerados e não pagos já contam, e por isso não geram esta notificação. Uma tentativa que não chega a ser registrada, como cartão recusado ou erro do provedor, pode não cancelar o envio, então não conte com isso. O envio é normalmente único por pedido e não há ciclo de status para acompanhar, mas trate a notificação pelo id do pedido e ignore uma eventual repetição.

Padrão de Timezone

Todos os campos de data e hora enviados nos webhooks utilizam o padrão ISO 8601 no timezone UTC (UTC+00:00), garantindo consistência independentemente do fuso horário do integrador. Para evitar divergências causadas por horários locais ou horário de verão, recomenda-se manter os valores em UTC para armazenamento e processamento, realizando a conversão para o fuso horário local apenas no nível de apresentação ao usuário final.

Validação Opcional do Webhook

Para aumentar a segurança, os webhooks cadastrados diretamente no painel podem incluir uma assinatura enviada no header X-Signature: <assinatura-em-base64>, permitindo validar a autenticidade da notificação recebida. Essa assinatura é gerada pela plataforma utilizando HMAC com SHA-256 sobre o corpo do webhook, em formato JSON, usando um segredo compartilhado WEBHOOK_SECRET e codificada em Base64. O integrador pode reproduzir o mesmo cálculo em seu sistema utilizando o mesmo segredo e o payload recebido. Se a assinatura gerada for igual à enviada no header, o webhook é considerado legítimo e íntegro. Caso sejam diferentes, a requisição pode ter sido alterada ou não ter sido enviada pela plataforma.

A validação por assinatura é opcional, porém fortemente recomendada sempre que o webhook for configurado pelo painel, para garantir maior segurança na comunicação.

Endpoint de Notificação

O webhook é enviado para a URL cadastrada no painel para o tipo Carrinhos abandonados. Esse é o único jeito de receber este webhook: ele não usa notificationUrl, e todo envio leva a assinatura X-Signature.

O endpoint deve estar acessível publicamente e responder com HTTP 200 para confirmar o recebimento da notificação.

Formato do Payload

Abaixo está um exemplo do payload de um carrinho abandonado com todos os campos preenchidos.

NODE
{
  "id": "cm6p2a1b30001ls08d4f7h9kz",
  "amount": 42450,
  "discount": 6486,
  "currency": "BRL",
  "status": "PENDING",
  "installments": 1,
  "customer": {
    "fullName": "Maria Silva",
    "email": "maria.silva@example.test",
    "document": "12345678909",
    "phone": "+5511999999999"
  },
  "items": [
    {
      "name": "Tênis Runner",
      "quantity": 1,
      "price": 29990,
      "type": "PHYSICAL"
    },
    {
      "name": "Meia Esportiva",
      "quantity": 2,
      "price": 2490,
      "type": "PHYSICAL"
    },
    {
      "name": "E-book Guia de Corrida",
      "quantity": 1,
      "price": 4990,
      "type": "DIGITAL"
    }
  ],
  "coupons": [
    {
      "code": "VOLTA10",
      "type": "BY_ORDER",
      "percent": 1000,
      "fixed": null
    },
    {
      "code": "FRETEGRATIS",
      "type": "FREE_SHIPPING",
      "percent": null,
      "fixed": null
    }
  ],
  "shipping": {
    "fee": 2490,
    "type": "SEDEX",
    "address": {
      "zipCode": "01310-100",
      "country": "BR",
      "state": "SP",
      "city": "São Paulo",
      "neighborhood": "Bela Vista",
      "line1": "Avenida Paulista",
      "line2": "Apto 42",
      "streetNumber": "1000"
    }
  },
  "utms": {
    "utmSource": "instagram",
    "utmMedium": "stories",
    "utmCampaign": "black-friday",
    "utmContent": "video-tenis",
    "utmTerm": null,
    "src": "bio",
    "sck": null
  },
  "metadata": {
    "provider": "ExemploCheckout",
    "checkoutUrl": "https://checkout.example.test/link/tenis-runner",
    "memberProductUrl": "",
    "returnUrl": "",
    "shopUrl": "loja.example.test",
    "referrerLink": "https://www.instagram.com/"
  },
  "recoveryUrl": "https://checkout.example.test/recovery/eyJhbGciOiJIUzI1NiJ9.eyJvcmRlcklkIjoiY202cDJhMWIzMDAwMWxzMDhkNGY3aDlreiJ9",
  "createdAt": "2026-10-15T12:00:00.000Z",
  "updatedAt": "2026-10-15T12:08:00.000Z"
}

Campos do Payload

Todos os campos enviados no webhook. Os objetos e as listas abrem para mostrar os campos de dentro.

idstring

Identificador do pedido. Use para ignorar uma eventual repetição da notificação.

amountinteger

Soma dos produtos do carrinho (preço × quantidade) com o frete, em centavos, antes dos cupons.

discountinteger

Desconto dos cupons aplicados, em centavos. Inclui o valor do frete quando há cupom de frete grátis. O valor que o comprador pagaria é amount - discount.

currencystring

Moeda do pedido, como BRL.

statusstring

Status do pedido. Neste webhook vem PENDING, porque o pedido ainda não tem pagamento.

installmentsinteger

Número de parcelas. Sem pagamento, vem 1.

customerobject

Dados do comprador. Sempre vem, porque o webhook só é enviado depois que o comprador preencheu os dados de contato.

customer
fullNamestring

Nome completo.

emailstring

E-mail.

documentstring

CPF ou CNPJ, só com números. Pode vir nulo quando a loja não exige, como fora do Brasil.

phonestring

Telefone com DDI, como +5511999999999. Pode vir nulo.

itemsarray of objects

Itens do carrinho.

items
namestring

Nome do produto.

quantityinteger

Quantidade.

priceinteger

Valor unitário, em centavos.

typestring

Tipo do produto: DIGITAL ou PHYSICAL.

couponsarray of objects

Cupons aplicados ao pedido. Lista vazia quando nenhum cupom foi usado.

coupons
codestring

Código do cupom.

typestring

Tipo do cupom: BY_ORDER (desconto no pedido), BY_PRODUCT (desconto em produto), BXGY (compre X, leve Y) ou FREE_SHIPPING (frete grátis).

percentinteger

Desconto percentual, em centésimos: 1000 = 10%. Nulo quando o cupom não tem desconto percentual.

fixedinteger

Desconto fixo, em centavos. Nulo quando o cupom não tem desconto fixo.

shippingobject

Frete e endereço de entrega. Nulo quando o pedido não tem entrega, como em produto digital.

shipping
feeinteger

Valor do frete, em centavos. Vem 0 enquanto o comprador não escolheu o frete: quem indica isso é o type nulo.

typestring

Modalidade escolhida: PAC, SEDEX, MINI_ENVIOS, JADLOG, LOGGI, TOTAL_EXPRESS, IMILE ou JT_EXPRESS. Nulo enquanto o comprador não escolheu o frete.

addressobject

Endereço de entrega. Campo que o comprador ainda não preencheu vem nulo.

address
zipCodestring

CEP ou código postal.

countrystring

País, como BR.

statestring

Estado (UF).

citystring

Cidade.

neighborhoodstring

Bairro.

line1string

Logradouro.

line2string

Complemento.

streetNumberstring

Número.

utmsobject

Parâmetros de origem com que o comprador chegou ao checkout. O que não veio na URL vem nulo.

utms
utmSourcestring

Valor de utm_source.

utmMediumstring

Valor de utm_medium.

utmCampaignstring

Valor de utm_campaign.

utmContentstring

Valor de utm_content.

utmTermstring

Valor de utm_term.

srcstring

Valor de src.

sckstring

Valor de sck.

metadataobject

Dados de origem do pedido. Pode vir nulo.

metadata
providerstring

Origem do checkout que criou o pedido.

checkoutUrlstring

Página do checkout.

memberProductUrlstring

Página do produto na área de membros, quando houver.

returnUrlstring

Página para onde o comprador volta depois de pagar, quando houver.

shopUrlstring

Domínio da loja integrada, como Shopify ou WooCommerce. Só vem em pedido de loja integrada.

referrerLinkstring

De onde o comprador veio antes de chegar ao checkout.

recoveryUrlstring

Link de volta para o checkout com os itens já montados, para reengajar o comprador por e-mail, WhatsApp ou SMS. Pode vir nulo quando o pedido não tem link de recuperação.

createdAtstring

Data de criação do pedido, em ISO 8601 e UTC.

updatedAtstring

Data da última atualização do pedido, em ISO 8601 e UTC.

Nesta página
  • Descrição
  • Padrão de Timezone
  • Validação Opcional do Webhook
  • Endpoint de Notificação
  • Formato do Payload
  • Campos do Payload