> ## Documentation Index
> Fetch the complete documentation index at: https://developer.pagou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Eventos de checkout

> Receba os carrinhos abandonados do checkout e rode o seu próprio fluxo de recuperação.

Os webhooks de checkout avisam quando um comprador saiu do checkout sem pagar, para que o seu CRM ou automação faça o contato. Cadastre um webhook com `type: "checkout"` para recebê-los.

## Exemplo de payload entregue

```json theme={null}
{
  "id": "9f2c4a3e8b1d4c6f9a0e7b2d5c8f1a3e6b9d2c5f8a1e4b7d0c3f6a9e2b5d8c1f",
  "event": "checkout",
  "api_version": "v2",
  "url": "https://crm.example.com/webhooks/pagou",
  "data": {
    "event_type": "checkout.abandoned",
    "id": "0b7c2c1e-1111-4a0e-9a49-9b0d1b2c3d4e",
    "abandoned_at": "2026-10-26T11:35:00.000Z",
    "customer": {
      "name": "Ana Souza",
      "email": "ana@example.com",
      "phone": "+5511999998888",
      "document": "12345678909"
    },
    "items": [
      { "title": "Curso online", "quantity": 1, "unit_price": 9700 },
      { "title": "Pacote bônus", "quantity": 2, "unit_price": 1990 }
    ],
    "amount": 13680,
    "currency": "BRL",
    "checkout_url": "https://pay.example.com/checkout/curso-online?utm_source=pagou&utm_medium=webhook&utm_campaign=cart_recovery",
    "utm": {
      "source": "instagram",
      "medium": "social",
      "campaign": "black-friday",
      "content": null,
      "term": null
    },
    "abandonment_reason": "declined_credit_card"
  }
}
```

## Campos

| Campo | Descrição |
| - | - |
| `data.id` | Id da sessão de checkout. Use para deduplicar: cada sessão gera no máximo um `checkout.abandoned`. |
| `data.abandoned_at` | Quando a sessão terminou sem pagamento (ISO 8601, UTC). |
| `data.customer` | O que o comprador digitou no checkout. Campo não preenchido vem `null`; e-mail ou telefone sempre está presente. |
| `data.items` | Itens do carrinho, com `unit_price` na menor unidade da moeda (centavos em BRL). |
| `data.amount` | Total do carrinho na menor unidade da moeda. |
| `data.checkout_url` | Link que reabre o mesmo checkout, no seu domínio próprio quando houver um ativo. Não carrega dado do comprador nem token de sessão. |
| `data.utm` | Parâmetros UTM com que o comprador chegou. |
| `data.abandonment_reason` | `declined_credit_card` quando a última tentativa foi um cartão recusado pelo emissor; `null` nos demais casos. |

## Quando é enviado

* Cerca de 30 minutos depois de a sessão terminar sem pagamento. A sessão expira após 30 minutos de inatividade, então o evento costuma chegar perto de uma hora depois da última ação do comprador.
* Só para compradores que deixaram e-mail ou telefone, que não pagaram esse checkout depois e que não têm pagamento ainda pendente (por exemplo, um Pix não pago).
* Compradores de regiões em que a sua loja pede consentimento de cookies só entram quando aceitaram.
* No máximo uma vez por sessão de checkout. A compra concluída depois continua chegando como `transaction.paid`.

## Eventos emitidos hoje

* `checkout.abandoned`

## Orientações de tratamento

* Deduplique por `data.id`; reentregas mantêm o mesmo `id` de topo.
* Use `checkout_url` como link de recuperação. A conversão por ele é atribuída ao carrinho abandonado nas métricas do seu painel.
* Trate `customer` como dado pessoal: guarde só para a recuperação e respeite pedidos de descadastro no seu CRM.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.