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

# Vendas

> Várias por lead, data da compra e idempotência de webhook.

## Um lead pode ter várias vendas

Recompra é uma **chamada nova**, não uma atualização da anterior. Cada venda tem
seu valor, sua data e seu produto.

O lead expõe o consolidado:

```json theme={null}
"sales": { "total": 246.40, "count": 2 }
```

O painel soma `total`; o funil conta o **lead** uma vez, não uma por venda.

## `sold_at` é a data da compra

Não a data em que você está lançando. Essa distinção parece burocrática até a
primeira vez que ela morde: uma venda de 31/07 lançada em 06/08 com a data errada
aparece na semana seguinte, e o ROAS de duas semanas fica errado ao mesmo tempo.

<Warning>
  **O offset é obrigatório.** Sem fuso a API responde `422`. Ver
  [Primeiros passos](/primeiros-passos) para o porquê.
</Warning>

## Idempotência: `external_source` + `external_id`

Se a venda vem de uma plataforma, mande o id da transação de lá:

```json theme={null}
{ "external_source": "hotmart", "external_id": "HP2346486658" }
```

O par é único por empresa. O reenvio devolve **`200` com `duplicate: true`** em vez
de criar outra venda.

Isso é o que torna seguro:

* reprocessar um webhook que falhou no meio
* rodar de novo um script de importação
* a plataforma reenviar o mesmo postback (todas reenviam)

<Warning>
  **Sem `external_id` não há idempotência.** Duas chamadas iguais viram duas vendas
  e a receita dobra. Se a venda tem um id na origem, mande sempre — inclusive em
  importação de histórico, senão o dia em que você ligar o webhook a base duplica.
</Warning>

## Remover

`DELETE /v1/sales/{id}` apaga a venda. **O lead não volta de etapa**: ele pode ter
outras vendas, e mesmo sem nenhuma, escolher a etapa anterior seria inventar
histórico. Mova o lead explicitamente se quiser desfazer o ganho.

## Produtos

`product_id` é opcional e precisa existir no catálogo da empresa
(**Configurações → Funil → Produtos**). Um `product_id` de outra empresa responde
`404`, nunca `403`.
