GET /api/analytics
Retorna dados consolidados dos últimos 30 dias para construir dashboards e relatórios customizados. Inclui estatísticas gerais, gráficos diários e por hora, top placas, distribuição por câmera e reconhecimentos recentes.
Autenticação
Inclua o header Authorization: Bearer <api-key> ou use cookie de sessão.
Requisição
GET /api/analytics
Headers
| Header | Obrigatório | Descrição |
|---|
Authorization | sim | Bearer pk_... (API key) ou cookie de sessão |
Exemplo
curl "https://api.placaflow.com.br/api/analytics" \
-H "Authorization: Bearer pk_a1b2c3d4e5f6g7h8i9j0..."
Resposta 200
{
"stats": {
"total30d": 1250,
"activeCameras": 3,
"activeApiKeys": 2,
"successRate": 96.5
},
"dailyChart": [
{ "date": "2026-02-20", "count": 42 },
{ "date": "2026-02-21", "count": 38 },
{ "date": "2026-02-22", "count": 55 },
{ "date": "2026-02-23", "count": 29 },
{ "date": "2026-02-24", "count": 61 },
{ "date": "2026-02-25", "count": 47 },
{ "date": "2026-02-26", "count": 33 },
{ "date": "2026-02-27", "count": 50 },
{ "date": "2026-02-28", "count": 44 },
{ "date": "2026-03-01", "count": 39 },
{ "date": "2026-03-02", "count": 52 },
{ "date": "2026-03-03", "count": 48 },
{ "date": "2026-03-04", "count": 36 },
{ "date": "2026-03-05", "count": 41 },
{ "date": "2026-03-06", "count": 57 },
{ "date": "2026-03-07", "count": 63 },
{ "date": "2026-03-08", "count": 28 },
{ "date": "2026-03-09", "count": 45 },
{ "date": "2026-03-10", "count": 51 },
{ "date": "2026-03-11", "count": 40 },
{ "date": "2026-03-12", "count": 37 },
{ "date": "2026-03-13", "count": 46 },
{ "date": "2026-03-14", "count": 32 },
{ "date": "2026-03-15", "count": 58 },
{ "date": "2026-03-16", "count": 43 },
{ "date": "2026-03-17", "count": 49 },
{ "date": "2026-03-18", "count": 35 },
{ "date": "2026-03-19", "count": 54 },
{ "date": "2026-03-20", "count": 60 },
{ "date": "2026-03-21", "count": 41 }
],
"hourlyChart": [
{ "hour": "00:00", "count": 5 },
{ "hour": "01:00", "count": 2 },
{ "hour": "02:00", "count": 1 },
{ "hour": "03:00", "count": 0 },
{ "hour": "04:00", "count": 1 },
{ "hour": "05:00", "count": 4 },
{ "hour": "06:00", "count": 18 },
{ "hour": "07:00", "count": 45 },
{ "hour": "08:00", "count": 82 },
{ "hour": "09:00", "count": 71 },
{ "hour": "10:00", "count": 56 },
{ "hour": "11:00", "count": 63 },
{ "hour": "12:00", "count": 88 },
{ "hour": "13:00", "count": 74 },
{ "hour": "14:00", "count": 59 },
{ "hour": "15:00", "count": 52 },
{ "hour": "16:00", "count": 67 },
{ "hour": "17:00", "count": 91 },
{ "hour": "18:00", "count": 85 },
{ "hour": "19:00", "count": 48 },
{ "hour": "20:00", "count": 31 },
{ "hour": "21:00", "count": 19 },
{ "hour": "22:00", "count": 12 },
{ "hour": "23:00", "count": 8 }
],
"topPlates": [
{ "plate": "ABC1D23", "count": 47 },
{ "plate": "XYZ9K87", "count": 31 },
{ "plate": "DEF4G56", "count": 28 },
{ "plate": "GHI7J89", "count": 24 },
{ "plate": "JKL2M34", "count": 21 },
{ "plate": "NOP5Q67", "count": 18 },
{ "plate": "RST8U90", "count": 15 },
{ "plate": "VWX1Y23", "count": 13 },
{ "plate": "ZAB4C56", "count": 11 },
{ "plate": "DEF7G89", "count": 9 }
],
"cameraChart": [
{ "name": "Entrada principal", "count": 850 },
{ "name": "Saída veículos", "count": 400 },
{ "name": "Estacionamento B", "count": 215 }
],
"recent": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"plate": "ABC1D23",
"cameraName": "Entrada principal",
"confidence": 0.96,
"timestamp": "2026-03-22T14:30:00.000Z"
},
{
"id": "661f9511-f30c-52e5-b827-557766551111",
"plate": "XYZ9K87",
"cameraName": "Saída veículos",
"confidence": 0.91,
"timestamp": "2026-03-22T14:28:00.000Z"
},
{
"id": "772a0622-a41d-63f6-c938-668877662222",
"plate": "DEF4G56",
"cameraName": "Entrada principal",
"confidence": 0.88,
"timestamp": "2026-03-22T14:25:00.000Z"
},
{
"id": "883b1733-b52e-74a7-da49-779988773333",
"plate": "GHI7J89",
"cameraName": "Estacionamento B",
"confidence": 0.94,
"timestamp": "2026-03-22T14:20:00.000Z"
},
{
"id": "994c2844-c63f-85b8-eb50-880099884444",
"plate": "JKL2M34",
"cameraName": "Entrada principal",
"confidence": 0.92,
"timestamp": "2026-03-22T14:15:00.000Z"
}
]
}
Campos da resposta
stats
| Campo | Tipo | Descrição |
|---|
total30d | number | Total de reconhecimentos nos últimos 30 dias |
activeCameras | number | Número de câmeras com enabled: true |
activeApiKeys | number | Número de chaves de API com enabled: true |
successRate | number | Porcentagem de reconhecimentos com confiança acima de 95% |
dailyChart
Array com 30 entradas (uma por dia dos últimos 30 dias).
| Campo | Tipo | Descrição |
|---|
date | string | Data no formato YYYY-MM-DD |
count | number | Total de reconhecimentos no dia |
hourlyChart
Array com 24 entradas (uma por hora). Dados agregados dos últimos 7 dias.
| Campo | Tipo | Descrição |
|---|
hour | string | Hora no formato HH:00 |
count | number | Total de reconhecimentos naquela hora (soma dos últimos 7 dias) |
topPlates
Array com as 10 placas mais frequentes nos últimos 30 dias, ordenadas por frequência.
| Campo | Tipo | Descrição |
|---|
plate | string | Texto da placa (uppercase) |
count | number | Total de detecções nos últimos 30 dias |
cameraChart
Array com reconhecimentos por câmera nos últimos 30 dias, ordenados por volume.
| Campo | Tipo | Descrição |
|---|
name | string | Nome da câmera |
count | number | Total de reconhecimentos pela câmera |
recent
Array com os últimos 5 reconhecimentos.
| Campo | Tipo | Descrição |
|---|
id | string | UUID do reconhecimento |
plate | string | Texto da placa (uppercase) |
cameraName | string | Nome da câmera |
confidence | number | Confiança (0-1) |
timestamp | string | Data/hora ISO 8601 |
Erros
| Código | Descrição |
|---|
| 401 | Não autenticado ou API key inválida |