Padrões de tempo
Vendas por dia da semana, crescimento mês a mês e o mapa de calor por dia e hora.
Três rotas para descobrir quando a loja vende. sales-by-day soma pedidos e receita por dia da semana, monthly-growth traz a série mensal e heatmap cruza dia da semana com hora do dia. Dias e horas seguem o fuso da loja (America/Sao_Paulo). sales-by-day e heatmap aceitam from/to ou period; monthly-growth recebe o número de meses.
Por dia da semana
/api/v1/admin/analytics/sales-by-dayAdminVendas por dia da semana
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 (sales-by-day)
bash
curl "$BASE_URL/api/v1/admin/analytics/sales-by-day?period=90days" \
-H "Authorization: Bearer $TOKEN"Resposta (sales-by-day)
200Sete dias retornados
json
{
"days": [
{ "day_index": 0, "order_count": 1, "revenue_centavos": 5266 },
{ "day_index": 1, "order_count": 3, "revenue_centavos": 374956 },
{ "day_index": 2, "order_count": 1, "revenue_centavos": 53478 },
{ "day_index": 3, "order_count": 0, "revenue_centavos": 0 },
{ "day_index": 4, "order_count": 0, "revenue_centavos": 0 },
{ "day_index": 5, "order_count": 1, "revenue_centavos": 13587 },
{ "day_index": 6, "order_count": 2, "revenue_centavos": 45000 }
]
}Campos da resposta
daysarraySempre 7 itens, mesmo para dias sem pedidos.
days[].day_indexinteger01234560 domingo, 1 segunda, até 6 sábado.days[].order_countintegerPedidos nesse dia da semana.
days[].revenue_centavosintegerReceita, em centavos.
Erros (sales-by-day)
| 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 ..."} |
Crescimento mensal
/api/v1/admin/analytics/monthly-growthAdminPedidos e receita por mês
Parâmetros de consulta
monthsintegerpadrão: 6Quantos meses mostrar, contando o atual. Menor que 1 vale 6; maior que 36 vale 36.
Exemplo de requisição (monthly-growth)
bash
curl "$BASE_URL/api/v1/admin/analytics/monthly-growth?months=2" \
-H "Authorization: Bearer $TOKEN"Resposta (monthly-growth)
200Série retornada
json
{
"months": [
{ "year_month": "2026-09", "order_count": 391, "revenue_centavos": 27418842 },
{ "year_month": "2026-10", "order_count": 4, "revenue_centavos": 63853 }
]
}Campos da resposta
monthsarrayMeses em ordem cronológica.
months[].year_monthstringMês,
YYYY-MM.months[].order_countintegerPedidos no mês.
months[].revenue_centavosintegerReceita do mês, em centavos.
Erros (monthly-growth)
| Status | Quando | Corpo |
|---|---|---|
| 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 ..."} |
Mapa de calor
/api/v1/admin/analytics/heatmapAdminMapa de calor de vendas por dia e hora
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 (heatmap)
bash
curl "$BASE_URL/api/v1/admin/analytics/heatmap?period=30days" \
-H "Authorization: Bearer $TOKEN"Resposta (heatmap)
200Grade retornada
json
{
"cells": [
[
{ "order_count": 0, "revenue_centavos": 0 },
{ "order_count": 0, "revenue_centavos": 0 },
{ "order_count": 1, "revenue_centavos": 5266 }
]
]
}Campos da resposta
cellsarrayMatriz de 7 linhas (dia da semana,
0 domingo a 6 sábado) por 24 colunas (hora, 0 a 23). O exemplo corta a matriz para caber; a resposta real traz as 7 linhas de 24 itens.cells[][].order_countintegerPedidos nessa combinação de dia e hora.
cells[][].revenue_centavosintegerReceita, em centavos.
Erros (heatmap)
| 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 ..."} |