Relatórios de vendas
Vendas com série temporal e comparação, desempenho de produtos, pedidos por status e receita por categoria do seller.
Os relatórios são mais completos que as análises e todos pedem uma janela de datas. Sempre restritos ao próprio seller. Exigem o privilégio de ajustes do seller; não dependem de módulo. Para baixar o mesmo dado em planilha, use Exportar CSV.
Relatório de vendas
Receita, pedidos e ticket médio do intervalo, uma série temporal agrupada por dia, semana ou mês, os produtos mais vendidos e, se pedir, a comparação com outro intervalo.
/api/v1/vendor/reports/salesSellerRelatório de vendas
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de consulta
fromstringobrigatórioYYYY-MM-DD.tostringobrigatórioYYYY-MM-DD. Janela de no máximo 366 dias.group_bystringpadrão: daydayweekmonthday. Em week e month a data do ponto é o primeiro dia do grupo (segunda-feira ou dia 1).compare_fromstringYYYY-MM-DD. Use junto com compare_to.compare_tostringYYYY-MM-DD.Exemplo de requisição
curl -X GET "$BASE_URL/api/v1/vendor/reports/sales?from=2026-10-09&to=2026-10-11&group_by=day" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"total_revenue": 58587,
"total_orders": 3,
"avg_order_value": 19529,
"completed_orders": 0,
"cancelled_orders": 3,
"time_series": [
{
"date": "2026-10-09",
"revenue": 13587,
"orders": 1,
"aov": 13587
},
{
"date": "2026-10-10",
"revenue": 45000,
"orders": 2,
"aov": 22500
}
],
"compare_revenue": 0,
"compare_orders": 0,
"compare_series": [],
"revenue_change": 0,
"order_change": 0,
"top_products": [
{
"product_id": "22fbd12a-1b6e-41ea-a84f-4d9cf06c8766",
"product_name": "Camisa do Flamengo Masculina I 26 Adidas",
"quantity": 2,
"revenue": 45000
}
],
"generated_at": "2026-10-11T21:02:58.955447846Z"
}Campos da resposta
total_revenueintegertotal_ordersintegeravg_order_valueintegercompleted_ordersintegercancelled_ordersintegertime_seriesobject[]date, revenue (centavos), orders e aov (ticket médio, centavos).compare_revenueinteger0 sem comparação.compare_ordersintegercompare_seriesobject[]time_series.revenue_changeinteger10000 = +100%, -2500 = -25%). 0 quando não há comparação ou ela é zero.order_changeintegertop_productsobject[]product_id, product_name, quantity, revenue (centavos).generated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | from/to ausentes, data inválida, início depois do fim ou janela maior que 1 ano. | {"error":"from and to query parameters are required (format: 2006-01-02)"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, a loja está em análise de cadastro ou falta o privilégio de ajustes (vendor_settings ou equivalente). | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings","vendor_manage_delivery_areas","vendor_manage_whatsapp","vendor_manage_documents","vendor_manage_kyc","vendor_view_plan","vendor_manage_application","vendor_manage_vacation"]} |
| 500 | Falha ao montar o relatório. | {"error":"failed to generate sales report","detail":"..."} |
Desempenho de produtos
Os produtos do seller que mais venderam no intervalo, ordenados pela receita. Não conta pedidos cancelados, reembolsados, recusados, estornados nem anulados.
/api/v1/vendor/reports/productsSellerDesempenho de produtos
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de consulta
fromstringobrigatórioYYYY-MM-DD.tostringobrigatórioYYYY-MM-DD. Janela de no máximo 366 dias.limitintegerpadrão: 20Exemplo de requisição
curl -X GET "$BASE_URL/api/v1/vendor/reports/products?from=2026-10-01&to=2026-10-11&limit=1" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"products": [
{
"product_id": "22fbd12a-1b6e-41ea-a84f-4d9cf06c8766",
"product_name": "Camisa do Flamengo Masculina I 26 Adidas",
"quantity": 2,
"revenue": 45000
}
]
}Campos da resposta
productsobject[]product_id (UUID), product_name, quantity (unidades) e revenue (centavos).Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | from/to ausentes, data inválida, início depois do fim ou janela maior que 1 ano. | {"error":"from and to query parameters are required (format: 2006-01-02)"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, a loja está em análise de cadastro ou falta o privilégio de ajustes (vendor_settings ou equivalente). | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings","vendor_manage_delivery_areas","vendor_manage_whatsapp","vendor_manage_documents","vendor_manage_kyc","vendor_view_plan","vendor_manage_application","vendor_manage_vacation"]} |
| 500 | Falha ao montar o relatório. | {"error":"failed to get product performance","detail":"..."} |
Pedidos por status e indicadores
Duas visões dos pedidos do seller na mesma resposta: a contagem por status e os indicadores do período. Aceita dois estilos de filtro: um período nomeado (period) ou uma janela explícita (from e to). Se você mandar from ou to, eles vencem period.
/api/v1/vendor/reports/ordersSellerPedidos por status e indicadores
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de consulta
periodstringpadrão: 30daystoday7days30days90daysallfrom/to forem enviados.fromstringYYYY-MM-DD. Exige to.tostringYYYY-MM-DD. Exige from.Exemplo de requisição
curl -X GET "$BASE_URL/api/v1/vendor/reports/orders?from=2026-10-01&to=2026-10-11" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"by_status": [
{
"status": "I",
"code": "cancelled",
"name": "Cancelado",
"type": "cancelled",
"count": 3
},
{
"status": "O",
"code": "pending",
"name": "Pendente",
"type": "initial",
"count": 2
}
],
"stats": {
"total_orders": 3,
"total_revenue": 58587,
"pending_orders": 2,
"completed_orders": 0,
"cancelled_orders": 3,
"avg_order_value": 19529,
"unique_customers": 3,
"period": "2026-10-01..2026-10-11",
"previous_total_orders": 1,
"previous_total_revenue": 321790,
"previous_avg_order_value": 321790,
"previous_unique_customers": 1,
"year_ago_total_orders": 383,
"year_ago_total_revenue": 23862110,
"year_ago_avg_order_value": 62303,
"year_ago_unique_customers": 362
}
}Campos da resposta
by_statusobject[]analytics/orders-by-status.statsobjectanalytics/stats. Com from/to, o campo period vem como AAAA-MM-DD..AAAA-MM-DD.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | period desconhecido (sem from/to), ou from/to inválidos: um só deles já aciona a validação das duas datas. | {"error":"invalid period; valid values: today, 7days, 30days, 90days, all"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, a loja está em análise de cadastro ou falta o privilégio de ajustes (vendor_settings ou equivalente). | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings","vendor_manage_delivery_areas","vendor_manage_whatsapp","vendor_manage_documents","vendor_manage_kyc","vendor_view_plan","vendor_manage_application","vendor_manage_vacation"]} |
| 500 | Falha ao montar o relatório. | {"error":"failed to get orders by status","detail":"..."} |
Receita por categoria
Quanto cada categoria do catálogo do seller vendeu no intervalo, mais a receita por dia das 5 categorias que mais venderam.
/api/v1/vendor/reports/revenue-by-categorySellerReceita por categoria
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de consulta
fromstringobrigatórioYYYY-MM-DD.tostringobrigatórioYYYY-MM-DD. Janela de no máximo 366 dias.group_bystringpadrão: daydayweekmonthtime_series. Valor desconhecido vale day.Exemplo de requisição
curl -X GET "$BASE_URL/api/v1/vendor/reports/revenue-by-category?from=2026-10-01&to=2026-10-11" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"categories": [
{
"category_id": "8fcaf422-1631-4282-b503-85cc57380649",
"category_name": "Camisetas",
"product_count": 1,
"products_sold": 2,
"revenue": 45000,
"avg_price": 22500,
"order_count": 2,
"percentage": 7814
}
],
"time_series": [
{
"date": "2026-10-10",
"categories": {
"Camisetas": 45000
}
}
],
"generated_at": "2026-10-11T21:02:59.045213299Z"
}Campos da resposta
categoriesobject[]Uma linha por categoria.
categories[].category_iduuidcategories[].category_namestringcategories[].product_countintegercategories[].products_soldintegercategories[].revenueintegercategories[].avg_priceintegercategories[].order_countintegercategories[].percentageinteger7814 = 78,14%).time_seriesobject[]date e categories, um mapa nome da categoria para receita em centavos (5 maiores).generated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | from/to ausentes, data inválida, início depois do fim ou janela maior que 1 ano. | {"error":"from and to query parameters are required (format: 2006-01-02)"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, a loja está em análise de cadastro ou falta o privilégio de ajustes (vendor_settings ou equivalente). | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings","vendor_manage_delivery_areas","vendor_manage_whatsapp","vendor_manage_documents","vendor_manage_kyc","vendor_view_plan","vendor_manage_application","vendor_manage_vacation"]} |
| 500 | Falha ao montar o relatório. | {"error":"failed to generate category report","detail":"..."} |