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

# PURCHASE_APPROVED

> Disparado quando o pagamento é confirmado e o pedido é aprovado.

Corresponde ao evento interno `order.paid`. É o evento mais importante para liberar acesso ao produto ou serviço.

## Quando é disparado

* Pagamento via cartão de crédito aprovado pela operadora
* Pagamento PIX confirmado
* Pagamento via boleto compensado

## Payload

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "order_id": 123,
  "creation_date": 1736524800000,
  "event": "PURCHASE_APPROVED",
  "version": "2.0.0",
  "data": {
    "purchase": {
      "transaction": "abc123-uuid-do-pedido",
      "status": "APPROVED",
      "order_date": 1736524700000,
      "approved_date": 1736524800000,
      "refund_date": null,
      "full_price": {
        "value": 297.00,
        "currency_value": "BRL"
      },
      "price": {
        "value": 197.00,
        "currency_value": "BRL"
      },
      "payment": {
        "type": "CREDIT_CARD",
        "installments_number": 3
      },
      "fees": {
        "value": 13.45,
        "currency_value": "BRL"
      },
      "net_amount": {
        "value": 183.55,
        "currency_value": "BRL"
      },
      "gateway_transaction_id": "172691451499",
      "offer": {
        "code": "abc12345",
        "name": "Oferta Principal"
      },
      "order_bump": {
        "is_order_bump": false,
        "parent_purchase_transaction": null
      },
      "tracking": {
        "source": "google",
        "utm_source": "google",
        "utm_medium": "cpc",
        "utm_campaign": "black-friday",
        "utm_content": null,
        "utm_term": null,
        "src": null,
        "sck": null
      }
    },
    "product": {
      "id": 1,
      "name": "Curso de Marketing Digital"
    },
    "buyer": {
      "name": "João Silva",
      "first_name": "João",
      "last_name": "Silva",
      "email": "joao@exemplo.com",
      "checkout_phone": "+5511999990000",
      "document": "123.456.789-00",
      "document_type": "CPF"
    },
    "order_bumps": []
  }
}
```

## Campos-chave

| Campo                             | Valor neste evento                                                                                             |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `purchase.status`                 | `APPROVED`                                                                                                     |
| `purchase.approved_date`          | Timestamp (ms) de confirmação do pagamento                                                                     |
| `purchase.refund_date`            | `null`                                                                                                         |
| `purchase.fees.value`             | Taxas cobradas na venda (R\$) — total da compra, incluindo order bumps                                         |
| `purchase.net_amount.value`       | Valor líquido recebido (R\$) — `null` até o gateway informar (chega no reenvio/reprocessamento)                |
| `purchase.gateway_transaction_id` | ID da cobrança no gateway de pagamento (ex.: payment id do Mercado Pago) — `null` se ainda não houver cobrança |

<Tip>
  Use `purchase.transaction` como chave de idempotência. Se você já processou este UUID, ignore o evento e responda `200`.
</Tip>

<Note>
  Venda com **order bumps** gera um único evento: o total fica em `purchase.price` e os produtos extras em `data.order_bumps`. **Upsell** aceito chega como outro `PURCHASE_APPROVED`, com `transaction` próprio. Veja [Vendas com order bump e upsell](/integrations/webhook#vendas-com-order-bump-e-upsell).
</Note>
