Métricas de clientes
Taxa de recompra, valor de vida (LTV), tempo entre pedidos e segmentação RFM.
Quatro indicadores clássicos de retenção, todos calculados sobre os clientes que compraram na janela escolhida. Todos usam o mesmo formato de período: from e to (datas) ou o atalho period. Sem nenhum dos dois, vale os últimos 30 dias. Só entram pedidos que contam como venda (sem cancelados, reembolsados, falhos, chargeback ou anulados) e só pedidos pai.
Taxa de recompra
/api/v1/admin/analytics/repurchaseAdminClientes novos e recorrentes na janela
Parâmetros de consulta
fromstringPrimeiro dia,
YYYY-MM-DD. Só vale se to também vier; tem precedência sobre period.tostringÚltimo dia,
YYYY-MM-DD (o dia inteiro entra). Intervalo máximo de 2 anos.periodstringpadrão: 30daystoday7days30days90daysthis_monthlast_monththis_yearAtalho de janela quando
from/to não são enviados.Exemplo de requisição (repurchase)
bash
curl "$BASE_URL/api/v1/admin/analytics/repurchase?period=90days" \
-H "Authorization: Bearer $TOKEN"Resposta (repurchase)
200Taxa retornada
json
{
"total_customers": 4,
"new_customers": 2,
"repeat_customers": 2,
"new_pct": 50,
"repeat_pct": 50
}Campos da resposta
total_customersintegerClientes com pelo menos um pedido na janela.
new_customersintegerClientes com exatamente 1 pedido na janela.
repeat_customersintegerClientes com 2 ou mais pedidos na janela.
new_pctnumbernew_customers em porcentagem de 0 a 100.repeat_pctnumberrepeat_customers em porcentagem de 0 a 100.Erros (repurchase)
| Status | Quando | Corpo |
|---|---|---|
| 400 | period desconhecido. | {"error":"invalid period; valid: today, 7days, 30days, 90days, this_month, last_month, this_year"} |
| 400 | from/to mal formatados, from depois de to, ou mais de 2 anos. | {"error":"date range must not exceed 2 years"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"view_reports"} |
| 403 | O módulo está desligado na loja. | {"error":"module_disabled","module":"analytics"} |
| 500 | Falha ao consultar os dados. | {"error":"failed to ..."} |
Valor de vida (LTV)
/api/v1/admin/analytics/ltvAdminValor de vida médio dos clientes ativos
Parâmetros de consulta
fromstringPrimeiro dia,
YYYY-MM-DD. Só vale se to também vier; tem precedência sobre period.tostringÚltimo dia,
YYYY-MM-DD (o dia inteiro entra). Intervalo máximo de 2 anos.periodstringpadrão: 30daystoday7days30days90daysthis_monthlast_monththis_yearAtalho de janela quando
from/to não são enviados.Exemplo de requisição (ltv)
bash
curl "$BASE_URL/api/v1/admin/analytics/ltv?period=90days" \
-H "Authorization: Bearer $TOKEN"Resposta (ltv)
200LTV retornado
json
{
"avg_ltv_centavos": 123072,
"customer_count": 4
}Campos da resposta
avg_ltv_centavosintegerGasto médio de todos os tempos, em centavos, dos clientes que compraram na janela.
customer_countintegerQuantos clientes entraram na média.
Erros (ltv)
| Status | Quando | Corpo |
|---|---|---|
| 400 | period desconhecido. | {"error":"invalid period; valid: today, 7days, 30days, 90days, this_month, last_month, this_year"} |
| 400 | from/to mal formatados, from depois de to, ou mais de 2 anos. | {"error":"date range must not exceed 2 years"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"view_reports"} |
| 403 | O módulo está desligado na loja. | {"error":"module_disabled","module":"analytics"} |
| 500 | Falha ao consultar os dados. | {"error":"failed to ..."} |
Tempo entre pedidos
/api/v1/admin/analytics/time-betweenAdminTempo médio entre pedidos do mesmo cliente
Parâmetros de consulta
fromstringPrimeiro dia,
YYYY-MM-DD. Só vale se to também vier; tem precedência sobre period.tostringÚltimo dia,
YYYY-MM-DD (o dia inteiro entra). Intervalo máximo de 2 anos.periodstringpadrão: 30daystoday7days30days90daysthis_monthlast_monththis_yearAtalho de janela quando
from/to não são enviados.Exemplo de requisição (time-between)
bash
curl "$BASE_URL/api/v1/admin/analytics/time-between?period=90days" \
-H "Authorization: Bearer $TOKEN"Resposta (time-between)
200Tempo retornado
json
{
"avg_days": 0.3033554136082176,
"sample_count": 4
}Campos da resposta
avg_daysnumberIntervalo médio, em dias (com decimais), entre pedidos consecutivos do mesmo cliente dentro da janela.
0 se ninguém comprou duas vezes.sample_countintegerQuantos intervalos entre pedidos entraram na média.
Erros (time-between)
| Status | Quando | Corpo |
|---|---|---|
| 400 | period desconhecido. | {"error":"invalid period; valid: today, 7days, 30days, 90days, this_month, last_month, this_year"} |
| 400 | from/to mal formatados, from depois de to, ou mais de 2 anos. | {"error":"date range must not exceed 2 years"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"view_reports"} |
| 403 | O módulo está desligado na loja. | {"error":"module_disabled","module":"analytics"} |
| 500 | Falha ao consultar os dados. | {"error":"failed to ..."} |
Segmentação RFM
/api/v1/admin/analytics/rfmAdminSegmentação RFM dos clientes
Parâmetros de consulta
fromstringPrimeiro dia,
YYYY-MM-DD. Só vale se to também vier; tem precedência sobre period.tostringÚltimo dia,
YYYY-MM-DD (o dia inteiro entra). Intervalo máximo de 2 anos.periodstringpadrão: 30daystoday7days30days90daysthis_monthlast_monththis_yearAtalho de janela quando
from/to não são enviados.Exemplo de requisição (rfm)
bash
curl "$BASE_URL/api/v1/admin/analytics/rfm?period=90days" \
-H "Authorization: Bearer $TOKEN"Resposta (rfm)
200Segmentos retornados
json
{
"champions": 0,
"loyal": 1,
"at_risk": 1,
"lost": 1,
"champions_pct": 0,
"loyal_pct": 25,
"at_risk_pct": 25,
"lost_pct": 25
}Campos da resposta
championsintegerRecência, frequência e valor todos nos 40% melhores (nota 4 ou 5 nos três).
loyalintegerRecência e frequência com nota 3 ou mais, fora do grupo dos campeões.
at_riskintegerCompravam com frequência (nota 3 ou mais) mas não voltam há tempo (recência 1 ou 2).
lostintegerPouca frequência e pouca recência (notas 1 ou 2 nas duas).
champions_pctnumberchampions em porcentagem dos clientes ativos, 0 a 100.loyal_pctnumberloyal em porcentagem.at_risk_pctnumberat_risk em porcentagem.lost_pctnumberlost em porcentagem.Erros (rfm)
| Status | Quando | Corpo |
|---|---|---|
| 400 | period desconhecido. | {"error":"invalid period; valid: today, 7days, 30days, 90days, this_month, last_month, this_year"} |
| 400 | from/to mal formatados, from depois de to, ou mais de 2 anos. | {"error":"date range must not exceed 2 years"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"view_reports"} |
| 403 | O módulo está desligado na loja. | {"error":"module_disabled","module":"analytics"} |
| 500 | Falha ao consultar os dados. | {"error":"failed to ..."} |