Dashboards — referência do contrato
Esta página é a referência compacta da especificação de dashboards e das operações expostas pelo produto. Use-a quando precisar conferir nomes de campos, valores aceitos, padrões, limites ou códigos de erro.
Os guias de painéis [blocked] e de períodos e filtros [blocked] explicam como interpretar cada escolha.
Objeto de dashboard
| Campo | Tipo | Regra |
|---|---|---|
app_id | UUID | App proprietário. |
dashboard_id | UUID | Identificador do dashboard. |
name | texto | Obrigatório, sem ficar vazio após remover espaços, até 120 caracteres. |
description | texto ou null | Opcional, até 2.000 caracteres. |
status | enum | draft, active ou archived. |
spec_version | inteiro positivo | Versão da especificação persistida; atualmente 1. |
spec | objeto | Especificação declarativa descrita abaixo. |
version | inteiro positivo | Versão do registro usada no controle de concorrência. |
created_by, updated_by | texto ou null | Atores da criação e última atualização quando disponíveis. |
created_at, updated_at | data e hora | Instantes em ISO 8601. |
O plano compilado não faz parte do objeto público do dashboard.
Especificação do dashboard
Somente version e panels são aceitos nesse nível. O contrato da API não define mínimo nem máximo de painéis, embora o editor exija pelo menos um para salvar.
Especificação completa de um painel
O exemplo usa campos já apresentados no guia público de eventos. A configuração só será válida em um app se a combinação pix_recebido versão 1 e esses campos existirem no catálogo desse app.
Campos do painel
| Campo | Obrigatório | Regra |
|---|---|---|
version | Sim | Inteiro igual a 1. |
panel_id | Sim | UUID. |
event_name | Sim | De 1 a 100 caracteres; começa com letra e depois aceita letras, números, _ e -. |
event_version | Sim | Inteiro de 1 a 65.535. |
time | Sim | Período relativo ou absoluto, com no máximo 31 dias. |
max_buckets | Condicional | Inteiro de 1 a 1.500. Obrigatório com dimensão de tempo; proibido sem ela. |
metric | Sim | Operação e campo condicional. |
group_by | Não | Padrão []; até duas dimensões, no máximo uma de cada tipo. |
filters | Não | Padrão []; até 20 filtros. |
viz | Sim | line, bar, pie, stat ou table. |
sort | Não | Padrão { "by": "value", "direction": "desc" }. |
limit | Não | Inteiro de 1 a 1.000; padrão 100. |
metadata | Não | Metadados de apresentação. |
Campos adicionais não são aceitos, exceto dentro de metadata.
Referência de campo
source aceita properties ou context. path aceita de 1 a 64 letras, números ou _. O campo precisa existir no catálogo para o nome e a versão do evento selecionado.
Períodos
Relativo:
amount é inteiro positivo. unit aceita minute, hour, day ou week.
Absoluto:
from e to precisam ser datas e horas ISO 8601 válidas. from deve ser anterior a to.
Métrica
ou:
Operações: count, sum, avg, min, max, uniq, p50, p90, p95.
count proíbe field. Todas as outras operações exigem field. Operações numéricas exigem um campo numérico. uniq proíbe JSON.
Dimensões
Tempo:
Propriedade:
Uma dimensão de propriedade precisa estar marcada como agrupável no catálogo. A mesma dimensão não pode ser repetida.
Filtro
Com valor:
Sem valor:
Operadores: EQ, NEQ, IN, NIN, EXISTS, NOT_EXISTS, GT, GTE, LT, LTE, CONTAINS.
EXISTS e NOT_EXISTS proíbem value. Todos os outros exigem value. IN e NIN exigem uma lista homogênea, não vazia, com até 100 itens. Os demais exigem texto, número ou booleano escalar.
Ordenação
by aceita time, dimension ou value. time exige dimensão temporal; dimension exige dimensão de propriedade. direction aceita asc ou desc.
Metadados de apresentação
| Campo conhecido | Regra |
|---|---|
x | Inteiro maior ou igual a zero. |
y | Inteiro maior ou igual a zero. |
w | Inteiro positivo. A interface normaliza para 3 a 12 colunas. |
h | Inteiro positivo. A interface normaliza para no mínimo 3 linhas. |
value_format | Convenção da interface: automatic, integer, decimal, currency_brl, percentage ou duration_ms. Hoje é aplicada ao indicador. |
metadata aceita outras chaves para evolução da apresentação. Essas chaves são persistidas, mas não alteram o plano analítico. O contrato central valida x, y, w e h; value_format desconhecido volta a automatic na interface.
Operações disponíveis
Todas as operações trabalham no app atual e exigem a capacidade correspondente.
| Operação | Método e caminho relativo |
|---|---|
| Listar eventos do catálogo | GET /app/catalog/events |
| Listar propriedades de um evento | GET /app/catalog/events/:event_name/versions/:event_version/properties |
| Validar um dashboard sem salvar | POST /app/dashboards/validate |
| Compilar um painel sem expor a consulta interna | POST /app/dashboards/panels/compile |
| Consultar um painel ad hoc | POST /app/dashboards/panels/query |
| Consultar um painel salvo | POST /app/dashboards/:dashboard_id/panels/:panel_id/query |
| Consultar todos os painéis salvos | POST /app/dashboards/:dashboard_id/query |
| Criar | POST /app/dashboards |
| Listar | GET /app/dashboards |
| Obter | GET /app/dashboards/:dashboard_id |
| Atualizar | PUT /app/dashboards/:dashboard_id |
| Publicar | POST /app/dashboards/:dashboard_id/publish |
| Arquivar | DELETE /app/dashboards/:dashboard_id |
A base pública da API é /v1/dashboard. Atualizar, publicar e arquivar exigem a versão esperada no cabeçalho If-Match-Version.
Paginação e busca
| Recurso | Limite padrão | Limite máximo | Busca |
|---|---|---|---|
| Dashboards | 20 | 100 | Parte do nome, até 120 caracteres. |
| Eventos do catálogo | 20 | 20 | Prefixo do nome, até 100 caracteres; pode filtrar active ou disabled. |
| Propriedades | 100 | 100 | Parte do caminho, até 100 caracteres. |
As listas usam cursor opaco de até 2.048 caracteres e retornam next_cursor e total.
Requisição de consulta
Painel ad hoc:
Painel ou dashboard salvo:
timezone é obrigatório e aceita um nome IANA de até 100 caracteres. time_override é opcional.
Resultado de painel
| Campo | Tipo |
|---|---|
panel_id | UUID |
from, to | Data e hora ISO 8601 |
timezone | Texto com o fuso IANA usado |
effective_granularity_seconds | Inteiro positivo ou null |
bucket_count | Inteiro de zero até max_buckets |
rows | Lista de linhas agregadas, limitada a 1.000 |
data_quality | Objeto com total_rows e ignored_rows, ou null |
executed_at | Data e hora ISO 8601 |
Cada row exige value numérico. bucket é uma string opcional e dimension é uma string ou null opcional.
effective_granularity_seconds é null e bucket_count é 0 sem dimensão de tempo. data_quality é null para métricas não numéricas.
Na consulta conjunta, a resposta possui panels. Cada item contém panel_id, outcome: "ok" e result, ou outcome: "error" e error.code.
Códigos de erro de operação
| Código | Significado |
|---|---|
dashboard_not_found | Dashboard não existe, está arquivado ou pertence a outro app. |
dashboard_not_publishable | O estado atual não permite publicar. |
dashboard_name_conflict | Já existe rascunho ou dashboard ativo com o mesmo nome normalizado. |
dashboard_version_conflict | A versão esperada ficou desatualizada. |
invalid_dashboard_draft | A especificação falhou na validação. |
dashboard_catalog_unavailable | Catálogo temporariamente indisponível. |
dashboard_catalog_event_not_found | Evento solicitado não existe no catálogo. |
dashboard_panel_not_found | Painel não existe no dashboard. |
dashboard_query_invalid_timezone | Fuso não é um nome IANA válido. |
dashboard_query_limit_exceeded | A consulta ultrapassou um limite de execução. |
dashboard_query_saturated | A capacidade momentânea de consultas foi preenchida. |
dashboard_query_timeout | A consulta ultrapassou o tempo permitido. |
dashboard_query_unavailable | A engine analítica está temporariamente indisponível ou retornou resultado inválido. |
Códigos de validação da especificação
Erros de validação trazem code, path, message e, quando aplicável, reason. path aponta para o campo inválido; dentro do dashboard, começa com panels e o índice do painel.
| Grupo | Códigos possíveis |
|---|---|
| Estrutura | invalid_type, too_small, too_big, invalid_format, invalid_value, unrecognized_keys |
| Período e buckets | time_range_invalid, time_range_exceeds_31_days, max_buckets_required, max_buckets_time_dimension_required |
| Métrica | count_field_not_allowed, metric_field_required, numeric_metric_requires_number, uniq_json_not_allowed |
| Dimensões e visualização | duplicate_or_excess_dimension, duplicate_dimension, stat_group_by_not_allowed, pie_requires_property_dimension, line_requires_time_dimension, bar_requires_dimension |
| Ordenação | sort_time_dimension_required, sort_property_dimension_required |
| Filtros | filter_value_not_allowed, filter_value_required, filter_array_required, filter_array_too_large, filter_array_must_be_homogeneous, filter_scalar_required, duplicate_filter, filter_operator_type_mismatch, filter_value_type_mismatch |
| Catálogo | unknown_event, unknown_field, field_not_groupable |
Em field_not_groupable, reason pode ser high_cardinality, distinct_value_limit, unsupported_json ou unsupported_path.
Assuntos relacionados
- Dashboards — fundamentos, criação e ciclo de vida [blocked]
- Painéis, métricas, dimensões e visualizações [blocked]
- Períodos, filtros, ordenação e resultados [blocked]
