Visão Geral
A Dmetrics API fornece acesso programático aos dados de painéis OOH (Out of Home), incluindo informações de pontos, mapeamentos e métricas de audiência.
Base URL
https://dmetrics.freedomai.dev.br
Documentação Interativa
Autenticação
Todos os endpoints (exceto /health) requerem autenticação via Bearer Token.
Como Autenticar
Adicione o header Authorization com o prefixo Bearer seguido do seu token:
Authorization: Bearer seu_token_aqui
Tokens Disponíveis
| Token | Nome | Permissões | Descrição |
|---|---|---|---|
ooh_prod_2024 |
Token Produção | read, write, admin | Acesso completo a todos os recursos |
ooh_read_2024 |
Token Somente Leitura | read | Apenas consultas (GET) |
Exemplo de Requisição Autenticada
curl -X GET "https://dmetrics.freedomai.dev.br/pontos" \
-H "Authorization: Bearer ooh_prod_2024" \
-H "Content-Type: application/json"
Conexões e Infraestrutura
API REST
Banco de Dados (ClickHouse)
Tabelas do Banco
| Tabela/View | Colunas | Descrição |
|---|---|---|
lista_pontos |
28 | Cadastro principal de pontos OOH |
painel_mapeamento |
35 | Mapeamento entre painéis e pontos |
vw_painel_metricas |
39 | View com métricas consolidadas |
Endpoints
Sistema
Verifica se a API está funcionando. Não requer autenticação.
{
"status": "healthy",
"service": "OOH API",
"version": "2.0.0"
}
Lista Pontos
Lista todos os pontos OOH com paginação e filtros.
Parâmetros de Query
{
"total": 1619,
"page": 1,
"per_page": 50,
"data": [
{
"id": 56152,
"area": "PA",
"status": 1,
"promocao": "",
"titulo": "123CST",
"cidade": "Barcarena",
"endereco": "AV.FRANCISCO VINAGRE, ESQUINA COM LIDER",
"complemento": "9X3",
"bairro": "CENTRO",
"tipo": "Outdoor",
"slug": "123cst",
"imagem": "56152_nova.webp",
"valor": "",
"exibidor": "STAMPAS BRASIL COMUNICAÇÃO VISUAL",
"codigo_exibidor": "ST",
"observacao": "",
"link_mapa": "",
"lat": "",
"lng": "",
"iluminacao": "NÃO ILUMINADO",
"led_insercoes": "",
"led_resolucao": "",
"led_tempo": "",
"cobertura": "",
"frequencia": "",
"grp": "",
"criado_em": "29/01/25 11:54",
"codigo_unico": "PA56152"
}
]
}
Obtém um ponto específico pelo ID.
Parâmetros de Path
Obtém um ponto pelo código único (formato: UF + ID, ex: PA56152).
Parâmetros de Path
Lista todos os pontos de uma cidade específica.
Parâmetros
Busca pontos próximos a uma coordenada geográfica usando a fórmula de Haversine.
Parâmetros de Query
GET /pontos/geo/proximidade?lat=-23.5505&lng=-46.6333&raio_km=10
Painel Mapeamento
Lista todos os painéis mapeados com paginação e filtros.
Parâmetros de Query
Obtém um painel mapeado específico pelo ID.
Lista todos os painéis de uma UF específica.
Painel Métricas
Lista métricas dos painéis com dados de capturas, placas únicas, multiplicador de pessoas e média FIPE.
Parâmetros de Query
{
"qtd_capturas": 295, // Quantidade de capturas
"qtd_placas_unicas": 190, // Placas únicas identificadas
"multiplicador_pessoas": 325, // Estimativa de pessoas
"media_fipe": 11375.65, // Média da tabela FIPE
"versao": "v1" // Versão do cálculo
}
Obtém métricas de um ponto específico.
Resumo agregado das métricas por cidade, incluindo totais e médias.
{
"cidade": "São Paulo",
"total_pontos": 150,
"total_capturas": 45000,
"total_placas_unicas": 28000,
"media_fipe_cidade": 15230.50,
"media_multiplicador": 420.5
}
Resumo geral das métricas agrupado por todas as cidades.
Estatísticas
Contagem de pontos agrupados por tipo de painel.
[
{ "tipo": "Outdoor", "quantidade": 850 },
{ "tipo": "Painel LED", "quantidade": 320 },
{ "tipo": "Frontlight", "quantidade": 180 }
]
Contagem de pontos agrupados por cidade.
Contagem de pontos agrupados por exibidor.
Resumo geral do sistema com todos os contadores.
{
"total_pontos": 1619,
"total_paineis": 23,
"total_cidades": 365,
"total_exibidores": 315,
"total_tipos": 33
}
Busca
Busca geral por título, endereço, bairro ou cidade.
Parâmetros de Query
GET /busca?q=paulista&limit=10
Exemplos de Uso
cURL
# Listar pontos
curl -X GET "https://dmetrics.freedomai.dev.br/pontos?per_page=10" \
-H "Authorization: Bearer ooh_prod_2024"
# Buscar por cidade
curl -X GET "https://dmetrics.freedomai.dev.br/pontos?cidade=São Paulo" \
-H "Authorization: Bearer ooh_prod_2024"
# Buscar pontos próximos
curl -X GET "https://dmetrics.freedomai.dev.br/pontos/geo/proximidade?lat=-23.55&lng=-46.63&raio_km=5" \
-H "Authorization: Bearer ooh_prod_2024"
# Estatísticas gerais
curl -X GET "https://dmetrics.freedomai.dev.br/stats/resumo" \
-H "Authorization: Bearer ooh_prod_2024"
Python
import requests
BASE_URL = "https://dmetrics.freedomai.dev.br"
TOKEN = "ooh_prod_2024"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}
# Listar pontos
response = requests.get(f"{BASE_URL}/pontos", headers=headers)
pontos = response.json()
print(f"Total de pontos: {pontos['total']}")
# Buscar por cidade
params = {"cidade": "São Paulo", "per_page": 100}
response = requests.get(f"{BASE_URL}/pontos", headers=headers, params=params)
# Métricas de uma cidade
response = requests.get(f"{BASE_URL}/metricas/resumo/cidade/Olinda", headers=headers)
metricas = response.json()
print(f"Total capturas: {metricas['total_capturas']}")
JavaScript (Fetch)
const BASE_URL = "https://dmetrics.freedomai.dev.br";
const TOKEN = "ooh_prod_2024";
const headers = {
"Authorization": `Bearer ${TOKEN}`,
"Content-Type": "application/json"
};
// Listar pontos
async function listarPontos() {
const response = await fetch(`${BASE_URL}/pontos?per_page=10`, { headers });
const data = await response.json();
console.log(`Total: ${data.total}`);
return data;
}
// Buscar por proximidade
async function buscarProximos(lat, lng, raioKm = 5) {
const url = `${BASE_URL}/pontos/geo/proximidade?lat=${lat}&lng=${lng}&raio_km=${raioKm}`;
const response = await fetch(url, { headers });
return response.json();
}
// Estatísticas
async function getStats() {
const response = await fetch(`${BASE_URL}/stats/resumo`, { headers });
return response.json();
}
PHP
<?php
$baseUrl = "https://dmetrics.freedomai.dev.br";
$token = "ooh_prod_2024";
$headers = [
"Authorization: Bearer $token",
"Content-Type: application/json"
];
// Função para fazer requisições
function apiRequest($endpoint, $params = []) {
global $baseUrl, $headers;
$url = $baseUrl . $endpoint;
if (!empty($params)) {
$url .= '?' . http_build_query($params);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Listar pontos
$pontos = apiRequest("/pontos", ["per_page" => 10]);
echo "Total: " . $pontos['total'];
// Estatísticas
$stats = apiRequest("/stats/resumo");
print_r($stats);
?>
Códigos de Erro
| Código | Status | Descrição |
|---|---|---|
200 |
OK | Requisição bem-sucedida |
400 |
Bad Request | Parâmetros inválidos ou malformados |
401 |
Unauthorized | Token ausente ou inválido |
403 |
Forbidden | Token não possui permissão necessária |
404 |
Not Found | Recurso não encontrado |
422 |
Unprocessable Entity | Erro de validação dos dados |
500 |
Internal Server Error | Erro interno do servidor |
Formato de Erro
{
"detail": {
"error": "Token inválido",
"message": "O token fornecido não é válido ou expirou",
"code": "INVALID_TOKEN"
}
}