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

# Funil, ROI e desempenho de campanhas

> Como montar o funil de contatos, calcular ROI por campanha, achar a taxa de conversão histórica e contar mensagens enviadas

Estes indicadores cruzam três rotas pelo `campaignId`: o cadastro em [Campanhas](/crm-parceiro/campanhas), o funil de envio em [Estatísticas de campanha](/crm-parceiro/estatisticas-de-campanha) e as vendas atribuídas em [Conversões](/crm-parceiro/conversoes). Veja [Como as rotas se relacionam](/crm-parceiro/como-as-rotas-se-relacionam) para o mapa completo desses elos.

## Funil: contatos → engajados → compradores

**Pergunta:** quantos contatos avançam de "na base" para "engajado" até "comprador" no período?

```
contatos   = total de itens de GET /customers (base completa, não filtra por período)
engajados  = soma(read + opened + clicked) de GET /campaign-stats?from&to, de todas as campanhas
compradores = quantidade de customerId distintos em GET /conversions?from&to
```

<Warning>
  `contatos` vem de `/customers`, que não aceita `from`/`to` — é sempre a base inteira. Só `engajados` e `compradores` respeitam o período filtrado. Isso é esperado: o funil compara "toda a base" com "quem se moveu neste período".
</Warning>

## ROI de campanha

**Pergunta:** quanto de retorno cada real investido em campanha trouxe, no total ou por campanha?

```bash Requisição theme={null}
curl --request GET \
  --url 'https://public-api.repediu.com.br/v1/stores/{merchantId}/metrics/revenue-generated-per-campaign?from=2026-08-01&to=2026-08-31' \
  --header 'Authorization: Bearer <token>'

curl --request GET \
  --url 'https://public-api.repediu.com.br/v1/stores/{merchantId}/campaign-stats?from=2026-08-01&to=2026-08-31' \
  --header 'Authorization: Bearer <token>'
```

```
custoPorCampanha = soma(totalCost) de campaign-stats no período, agrupado por campaignId
receitaPorCampanha = value de metrics/revenue-generated-per-campaign, por campaignId
roi = receitaPorCampanha / custoPorCampanha
```

<Note>
  Quando `totalCost` vem zerado (canal sem custo cadastrado), calcule uma estimativa com `costPerSend` de [Campanhas](/crm-parceiro/campanhas) × `sent` de `campaign-stats`. Se nenhum dos dois existir, mostre "—" em vez de dividir por zero.
</Note>

## Conversão histórica por campanha

**Pergunta:** qual campanha converte melhor, olhando todo o histórico dela (não só este período)?

```bash Requisição theme={null}
curl --request GET \
  --url https://public-api.repediu.com.br/v1/stores/{merchantId}/metrics/campaign-conversion-rate \
  --header 'Authorization: Bearer <token>'
```

```json Resposta theme={null}
{
  "items": [
    { "campaignId": 12, "campaignName": "Volte a pedir!", "value": 4.19 }
  ]
}
```

<Warning>
  Esta métrica não aceita `from`/`to` — o percentual é sobre o histórico completo da campanha. Não misture esse número com o funil do mês: são janelas de tempo diferentes por design.
</Warning>

## Mensagens enviadas (total e por campanha)

**Pergunta:** quantas mensagens de campanha foram enviadas no período — no total e por campanha?

```bash Requisição theme={null}
curl --request GET \
  --url 'https://public-api.repediu.com.br/v1/stores/{merchantId}/metrics/total-send-message?from=2026-08-01&to=2026-08-31' \
  --header 'Authorization: Bearer <token>'
```

```json Resposta theme={null}
{ "value": 1250 }
```

Para o mesmo número quebrado por campanha, use [Mensagens por campanha](/metricas/mensagens-por-campanha) (`metrics/send-message-per-campaign`), que devolve `items: [{ campaignId, campaignName, value }]`.

<Tip>
  O mesmo total também pode ser obtido somando `sent` de todos os itens de `campaign-stats` no período — os dois caminhos são equivalentes. Prefira a métrica pronta quando não precisar do detalhe diário.
</Tip>
