Skip to content
BeryX
Developer guide

Reference

BeryX API

Every endpoint an API token can call, generated from OpenAPI contract 1.78.0. Base URL: https://api.praxis.lbostuff.tech

Endpoint descriptions come straight from the source and are written in Portuguese.

openapi.json

health

Estado do serviço — sem autenticação.

GET/api/v1/healthPublic

Health Check

Liveness — responde sem autenticação.

Responses

GET/api/v1/versionPublic

Get Version

Versão do produto, commit a servir (build_sha, 7 hex) e versão desta API — responde sem autenticação.

Responses

  • 200Successful ResponseVersionOut
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/health/readyPublic

Readiness

Readiness: BD obrigatória; mensageria só reportada — a API continua utilizável sem broker (os endpoints assíncronos devolvem 503 próprios).

Responses

  • 200Successful Responseobject

datasets

Tabelas monitorizadas: score, contrato, linhagem, veredito de CI.

GET/api/v1/datasetsToken

List Datasets

Catálogo de datasets com o score mais recente. Pesquisa com q, pagina com limit/offset; o total vem no header X-Total-Count.

Parameters

NameInTypeDescription
connection_idquerystring | null
qquerystring | nullPesquisa em schema/tabela/nome
sortquery"name" | "usage"= "name"name (schema/tabela) ou usage (queries/dia, mais usados primeiro)
includequerystring | nullExtras separados por vírgula: `trust` (trust score da página)
limitqueryinteger= 500itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseDatasetOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/findToken

Find Datasets Route

Pesquisa composta no catálogo: todos os filtros dados em conjunto (camada medallion, domínio, PII, score mínimo, classe de uso). Até 40 datasets, só nomes de colunas PII. É a tool find_datasets do assistente e do MCP.

Parameters

NameInTypeDescription
queryquerystring | nulltexto em schema/tabela/termo
layerquerystring | nullbronze | silver | gold
domainquerystring | nullid ou nome do domínio
has_piiqueryboolean | nullsó com (true) ou sem (false) PII
min_scorequerynumber | null
usage_classquerystring | nullhot | active | cold | dead

Responses

  • 200Successful ResponseGraphFindOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}Token

Get Dataset

Detalhe do dataset: colunas, último profiling por coluna, histórico de score, issues abertos e sugestões.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetDetailOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/auto-monitorsToken

Get Dataset Auto Monitors

Estado dos monitores automáticos (freshness/volume/schema) do dataset.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseAutoMonitorsOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/incremental-profilingToken

Get Dataset Incremental Profiling

Perfil incremental: flag, coluna temporal e como correu o último perfil.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseIncrementalProfilingOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/tuningToken

Get Dataset Tuning

Cartão #157: limiares das anomalias afinados pelo feedback (degrau, contagens, o que o próximo «ignorar» faz) e reajustes de regras à espera de aprovação.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetTuningOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/freshnessToken

Get Dataset Freshness

Coluna que mede a frescura (fixada ou escolhida em cada scan), o timestamp mais recente do último perfil em UTC, o fuso assumido e a regra que a mede.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseFreshnessOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/data-countryToken

Get Dataset Data Country

País dos dados do dataset (cartão #513): o próprio, o efetivo (dataset → conexão → workspace) e de onde vem.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDataCountryOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/label-qualityToken

Get Dataset Label Quality

Qualidade de rótulos: extra disponível?, configuração, porta PII e último resultado.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseLabelQualityOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/parsingToken

Get Dataset Parsing

Campos compostos do último perfil (cartão #386): tipo, locale, componentes, cobertura e máscaras do que não se decompõe. Só leitura; a proposta de normalização é a sugestão parse_standardize:<coluna> do scan.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetParsingOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/sensitivityToken

Get Dataset Sensitivity

Classificação de sensibilidade coluna a coluna (public/internal/confidential/pii), com a origem (auto/manual), autor+data, sugestões herdadas por linhagem e rasto.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetSensitivityOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contractToken

Get Dataset Contract

Contrato de dados ODCS do estado atual do dataset.

Versiona-o no repositório e valida-o em CI com scripts/validate_contract.py. source=active devolve o contrato ACEITE pelo produtor dos dados — 404 enquanto nenhuma proposta foi aceite.

Parameters

NameInTypeDescription
dataset_id*pathstring
sourcequery"observed" | "active"= "observed"

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contract.dbt.ymlToken

Get Dataset Dbt Contract

Contrato como schema.yml de dbt com contract: {enforced: true}.

O ODCS é a fonte de verdade; este ficheiro é um artefacto gerado — mantém uma só definição e evita que os dois esquemas divirjam.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/lineageToken

Get Dataset Lineage

Linhagem direta do dataset: upstream (fontes) e downstream (impacto).

exposures (cartão #107): consumidores dbt (dashboards/apps) — nós-folha que dependem deste dataset, diretamente (direct) ou via datasets a jusante.

ADR 0011 §2.4: um vizinho invisível para quem pede é «Dataset restrito» (restricted: true), sem nome, id, coluna de ligação nem mapa de colunas.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetLineageOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/lineage/traverseToken

Traverse Dataset Lineage

Linhagem até hops saltos: datasets upstream/downstream com o caminho no sentido do fluxo («A → B → C»), arestas com a origem e o mapa de colunas, e os exposures a jusante (só nomes). Até 40 datasets e 60 arestas (truncated). Um dataset invisível para quem pede é «Dataset restrito». É a tool get_lineage do assistente e do MCP.

Parameters

NameInTypeDescription
dataset_id*pathstring
directionquery"upstream" | "downstream" | "both"= "both"
hopsqueryinteger= 1saltos a partir do dataset

Responses

  • 200Successful ResponseLineageTraverseOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/lineage/impactToken

Dataset Lineage Impact

O que parte se o dataset (ou a column) mudar: datasets a jusante, exposures, destinos fora do warehouse e, com a coluna, as colunas a jusante que derivam dela. A mesma análise do impacto de um issue. É a tool impact_of do assistente e do MCP.

Parameters

NameInTypeDescription
dataset_id*pathstring
columnquerystring | nullcoluna (opcional)

Responses

  • 200Successful ResponseLineageImpactOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/lineage/pathToken

Dataset Lineage Path

Caminho mais curto (até 6 saltos) do dataset até target_id, no sentido do fluxo; sem caminho nesse sentido, procura no inverso (direction). Um destino invisível para quem pede responde 404. É a tool path_between do assistente e do MCP.

Parameters

NameInTypeDescription
dataset_id*pathstring
target_id*querystringid do dataset de destino

Responses

  • 200Successful ResponseLineagePathOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/schema-changesToken

Get Dataset Schema Changes

Timeline de schema do dataset: add/drop/tipo por scan, com renomeações sugeridas, impacto a jusante e efeito no contrato ODCS. O impacto a jusante invisível para quem pede é «Dataset restrito» (ADR 0011).

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseSchemaChangeOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/pipeline-healthToken

Get Dataset Pipeline Health

Saúde dos pipelines Fivetran/Airbyte que escrevem este dataset (cartão #268): último sync, falhado/atrasado, latência origem→destino, reconciliação de contagens e syncs recentes. Sem integração → status: not_monitored. A origem invisível para quem pede é «Dataset restrito».

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetPipelineHealthOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/ai-readinessToken

Get Dataset Ai Readiness

Prontidão do dataset para IA: score global, prontidão por caso de uso (RAG/treino/agente/BI) com bloqueadores, PII e recomendações.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetAiReadinessOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/trustToken

Get Dataset Trust

Trust score composto e explicável (cartão #142): score 0–100, grade A–E, componentes com evidência e ação para subir, bloqueadores. Zero LLM.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseTrustOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/trust-decisionToken

Get Dataset Trust Decision

Decisão de confiança para consumir o dataset numa finalidade (cartão #150): trusted | caution | untrusted | unknown, com razões, required_actions, sinais, ttl_seconds (também em Cache-Control: max-age) e valid_until. Zero LLM. Via token dvk_ fica no trilho de auditoria (#151). Ver docs/TRUST_API.md.

Parameters

NameInTypeDescription
dataset_id*pathstring
purposequerystring= "agente"agente | rag | treino | bi (ml = treino)

Responses

  • 200Successful ResponseTrustDecisionOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/trust-factsToken

Get Dataset Trust Facts

Factos de confiança do dataset num só envelope estável (cartão #153): veredito com política, score e tendência 7d, contrato, política, sensibilidade, AI-readiness por caso de uso, freshness vs alvo, ownership, linhagem, issues e links. Só metadados; minimal nunca traz nomes de colunas. ETag = hash dos factos (sem as_of); If-None-Match → 304. Só leitura, zero LLM, tokens dvk_* incluídos. Ver docs/TRUST_API.md.

Parameters

NameInTypeDescription
dataset_id*pathstring
detailquerystring= "minimal"minimal (só contagens) | full (com nomes)

Responses

  • 200Successful ResponseDatasetTrustFactsOut
  • 304Nada mudou desde o ETag enviado em If-None-Match.
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contextToken

Get Dataset Context

Contexto unificado do dataset (cartão #146): identidade, schema+sensibilidade, qualidade+verdict, contrato, lineage, AI-readiness, trust, KB+README, uso e frescura numa só leitura. Sem LLM, sem amostras, owners/exposures só por nome.

Parameters

NameInTypeDescription
dataset_id*pathstring
sectionsquerystring | nullSecções separadas por vírgulas (identity, schema, quality, contract, lineage, readiness, trust, knowledge, usage, freshness).

Responses

  • 200Successful ResponseDatasetContextOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/calendarToken

Get Dataset Calendar

Heatmap-calendário do dataset: score médio, issues abertas e scans falhados por dia (cache 1h).

Parameters

NameInTypeDescription
dataset_id*pathstring
daysqueryinteger= 90

Responses

  • 200Successful ResponseQualityCalendarOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/dimensionsToken

Get Dataset Dimensions

Scorecard por dimensão de qualidade (DAMA/ISO 8000) do último scan: score 0–100 por dimensão (percentagem de checks aprovados), n.º de checks e issues abertos. Uma dimensão sem checks vem measured=false e score=null («não medido»), nunca 100. Inclui o histórico por scan (últimos 30).

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetDimensionsOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/score/explainToken

Explain Dataset Score

«Porque mudou o score?» (cartão #318): Δscore entre dois scans decomposto por dimensão (peso·Δdimensão) e, dentro de cada uma, pelos drivers — colunas cujos nulos mudaram, regras que passaram a falhar ou voltaram a passar, drift, frescura, duplicados. Σ drivers + unexplained_points = delta. Por omissão compara os dois últimos scans concluídos; 422 sem dois scans com score.

Parameters

NameInTypeDescription
dataset_id*pathstring
fromquerystring | null
toquerystring | null

Responses

  • 200Successful ResponseScoreExplanationOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/syntheticToken

Export Synthetic Rows

Dados sintéticos gerados a partir do último perfil (SYNTH v1).

«Gémeo estatístico sem cópia»: só o perfil persistido (quantis, histogramas, segmentos, regras, sensibilidade) — nenhuma linha da fonte. Determinístico por (perfil, rows, seed). CSV em streaming até synthetic_max_rows; json devolve {manifest, rows} até synthetic_json_max_rows, com o scorecard em manifest.evaluation. Antes de enviar, as linhas passam pela avaliação utilidade × privacidade: com privacy_verdict = fail (uma amostra, um extremo sensível ou PII real no output) a resposta é 409 com o motivo e nenhuma linha sai. Fica registado um evento de auditoria (também na recusa).

Parameters

NameInTypeDescription
dataset_id*pathstring
rowsqueryinteger= 1000
seedqueryinteger= 42
formatquery"csv" | "json"= "csv"

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/synthetic/evaluationToken

Get Synthetic Evaluation

Scorecard utilidade × privacidade dos dados sintéticos de (rows, seed).

Avalia as mesmas linhas que GET /synthetic com o mesmo par enviaria. Utilidade (0–100) contra o perfil: nulos, quantis p05–p95 normalizados pelo IQR, distância de variação total aos histogramas e às quotas categóricas, correlações dos pares. Privacidade contra as amostras do perfil, os extremos min/max e as linhas de exemplo dos clusters de duplicados: sample_leak, extreme_leak, pii_leak e o k_min do output sobre os quase-identificadores. Veredito fail com qualquer leak (o export recusa-o com 409), warn com k_min < 5, senão pass. Só taxas, deltas e nomes de colunas — nunca valores. Não fica registado nenhum evento (não exporta nada).

Parameters

NameInTypeDescription
dataset_id*pathstring
rowsqueryinteger= 1000
seedqueryinteger= 42

Responses

  • 200Successful ResponseSyntheticEvaluationOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/remediation.sqlToken

Get Dataset Remediation

Script consolidado das sugestões aceites.

O DataVault nunca executa escrita nas fontes: o script é para o cliente rever e aplicar (staging primeiro). include_proposed=true junta também as sugestões ainda não aceites; language=pyspark exporta a versão PySpark (pipelines Spark/Databricks) em vez de SQL.

Parameters

NameInTypeDescription
dataset_id*pathstring
include_proposedqueryboolean= false
languagequerystring= "sql"

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/rules.dbt.ymlToken

Export Rules As Dbt

Regras do dataset como testes dbt (schema.yml) — «propõe, tu aplicas no teu repo».

O mesmo ficheiro de GET /datasets/{id}/rules/export?format=dbt. Uma regra referential (cartão #164) sai como relationships com to: ref('<tabela>'); a tabela vem do catálogo de quem exporta — um dataset de referência invisível (ADR 0011) não dá nome, e a regra fica em nota.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/rules.dbt-tests.zipToken

Export Sql Rules As Dbt Tests

Regras expression/custom_sql ativas como testes singulares do dbt (cartão #265).

ZIP com tests/*.sql (SELECT das linhas violadoras no dialeto da fonte, com ref() no lugar da tabela) e um README com o que ficou de fora e porquê. O texto das regras vai em blocos Jinja raw: o dbt não executa Jinja escrito numa regra.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/verdictToken

Dataset Verdict

Veredito compacto para o gate de CI: pass | warn | fail.

fail = alguma regra CRÍTICA falhou no último scan OU o contrato ODCS ficou inválido (campo removido por uma mudança de schema por resolver); warn = só warnings, tipo lógico divergente ou mudança que quebra a montante; pass = tudo verde. Sem scan ainda: verdict "unknown" (o gate decide).

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetVerdictOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
POST/api/v1/datasets/{dataset_id}/diff/{other_id}Token

Dataset Diff

Data-diff por chave (RECON v2): base dataset_id ↔ candidato other_id.

Read-only nas duas fontes e nada persistido. Guardas de custo: linhas por lado (diff_max_rows, amostragem determinística acima disso), colunas comparadas, tempo total (504) e runs por workspace (429). Devolve contagens, % só-base/só-candidato/alteradas, divergência e checksum por coluna e o veredito pass | warn | fail para o gate de CI.

Parameters

NameInTypeDescription
dataset_id*pathstring
other_id*pathstring

Responses

  • 200Successful ResponseDataDiffOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
POST/api/v1/trust-decisionsToken

Post Trust Decisions

Decisões de confiança de até 50 datasets numa finalidade (cartão #150).

Um id fora do workspace — ou invisível para quem pede (ADR 0011) — dá 404 ao pedido inteiro. decision é a pior do lote e ttl_seconds o menor. Só leitura; via token dvk_ regista UM evento de auditoria agregado (#151).

Responses

  • 200Successful ResponseTrustDecisionBatchOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/readmeToken

Get Dataset Readme

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetReadmeOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/readme.mdToken

Export Dataset Readme

Export .md da versão publicada (com rotulagem e carimbo de aprovação).

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

contracts

Contratos ODCS acordados com o produtor da fonte: versões numeradas, diff entre versões e propostas em revisão.

GET/api/v1/datasets/{dataset_id}/contract/versionsToken

List Contract Versions

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseContractVersionSummaryOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contract/versions/{number}Token

Get Contract Version

Parameters

NameInTypeDescription
dataset_id*pathstring
number*pathinteger

Responses

  • 200Successful ResponseContractVersionDetailOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contract/diffToken

Diff Contract Versions

Diff secção a secção entre duas versões (from omitido => nenhuma).

Parameters

NameInTypeDescription
dataset_id*pathstring
to*queryinteger
fromqueryinteger | null

Responses

  • 200Successful ResponseContractVersionDiffOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contract/proposalsToken

List Contract Proposals

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseContractProposalSummaryOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/contract/proposals/{proposal_id}Token

Get Contract Proposal

Proposta com secções, estado, fios e diff face ao contrato ativo; o link de revisão só vem para administradores.

Parameters

NameInTypeDescription
dataset_id*pathstring
proposal_id*pathstring

Responses

  • 200Successful ResponseContractProposalOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

catalog

Vista agregada do catálogo.

GET/api/v1/catalog/treemapToken

Get Catalog Treemap

Hierarquia conexão → schema → dataset com área = métrica e cor = score.

Parameters

NameInTypeDescription
metricqueryTreemapMetric= "volume"Área: volume|cost|columns

Responses

  • 200Successful ResponseCatalogTreemapOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/catalog/metadata-qualityToken

Get Metadata Quality

Qualidade do catálogo e dos metadados do workspace (cartão #270): % de checks cumpridos (owner, descrição, classificação, domínio, contrato, regras, descrição atualizada, owner ativo, datasets sem uso com owner, docs das colunas coerentes) — os não aplicáveis ficam fora do denominador —, por dimensão, por check e por domínio; problemas com sugestões (README gerado, import do catálogo externo), meta, tendência diária e cobertura do catálogo externo. Os 50 piores datasets vêm em datasets; o CSV leva todos. Só leitura, zero LLM, número fixo de queries.

Responses

  • 200Successful ResponseMetadataQualityOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/catalog/metadata-quality.csvToken

Get Metadata Quality Csv

Export CSV para um pack de governação/procurement do cliente: por dataset (estado de cada check e códigos dos problemas) ou o resumo com meta e cobertura por check. Só metadados — nomes, contagens e códigos.

Parameters

NameInTypeDescription
levelquery"datasets" | "summary"= "datasets"datasets (uma linha por dataset) | summary (workspace e domínios)

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/suggestionsToken

List Domain Suggestions

Domínio sugerido para os datasets sem domínio, pela maioria das ligações de linhagem (de qualquer tipo, uma por par de datasets) a datasets já curados: um domínio com pelo menos metade das ligações e sem empate. Os empates vêm em ambiguous, com os candidatos. Cada sugestão traz os votos, o total de ligações, até 3 colunas via, os tipos de aresta, inferred_only e a signature da evidência. Admins veem todas; quem gere domínios só as desses domínios; os outros levam 403. Um vizinho invisível conta no total e vem como «Dataset restrito». Só leitura, zero LLM.

Responses

  • 200Successful ResponseDomainSuggestionsOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domainsToken

List Domains

Responses

  • 200Successful ResponseDomainOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}Token

Get Domain

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseDomainDetailOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/sloToken

Get Domain Slo

SLO do data product: a forma de /dashboard/slo restrita aos datasets do domínio e avaliada contra o SLA declarado, com o breakdown por subtipo.

Parameters

NameInTypeDescription
domain_id*pathstring
monthsqueryinteger= 6

Responses

  • 200Successful ResponseDomainSloReportOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/slo.csvToken

Get Domain Slo Csv

Export CSV do SLO do domínio: uma linha por dataset-dia, com os motivos.

Parameters

NameInTypeDescription
domain_id*pathstring
monthsqueryinteger= 6

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/readinessToken

Get Domain Readiness

Readiness do data product para um caso de uso (cartão #152): ready | ready_with_warnings | not_ready, bloqueadores e avisos com code estável, detalhe por dataset e valid_until (próximo scan agendado). Zero LLM, só leitura (tokens dvk_* incluídos). Ver docs/CI_QUALITY_GATE.md.

Parameters

NameInTypeDescription
domain_id*pathstring
use_casequerystring= "bi"rag | ml | agente | bi (treino = ml)

Responses

  • 200Successful ResponseDomainReadinessOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/verdictToken

Get Domain Verdict

Veredito do data product para o gate de CI (cartão #148): pass | warn | fail | unknown, agregado dos vereditos dos seus datasets — fail se algum falha, warn se algum avisa, unknown se nenhum tem veredito (sem datasets ou sem scans), pass caso contrário. Traz as contagens por veredito e o veredito de cada dataset (o mesmo de GET /datasets/{dataset_id}/verdict), por nome. with_policy=false deixa de fora a política de dados. Só leitura (tokens dvk_* incluídos). Ver docs/CI_QUALITY_GATE.md.

Parameters

NameInTypeDescription
domain_id*pathstring
with_policyqueryboolean= trueconta as violações da política de dados (como o gate de CI)

Responses

  • 200Successful ResponseDomainVerdictOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/contractToken

Get Domain Contract

Contratos ODCS do data product (cartão #148): um bundle YAML com um documento por dataset do domínio, separados por --- e ordenados pelo nome do dataset. Cada contrato leva domain e dataProduct (o nome do domínio), tenant (o workspace) e team com o owner do domínio, só pelo nome. Sem datasets, o bundle vem vazio. Só leitura (tokens dvk_* incluídos).

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/conformanceToken

Get Domain Conformance

Conformidade do data product (cartão #154): por dataset, se tem owner, contrato aceite, README aprovado, classificação revista, regra de freshness, alvo e cumprimento de SLO, AI-readiness e política sem violações. Checks não aplicáveis não penalizam; conformance_pct é None sem datasets. Gaps por impacto e até 5 próximas ações. Só leitura, zero LLM, número fixo de queries.

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseDomainConformanceOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/metadata-qualityToken

Get Domain Metadata Quality

Qualidade dos metadados do domínio (cartão #270): os checks de completude, atualidade e coerência de cada dataset do domínio, problemas com sugestões, meta do domínio e tendência diária. Só leitura, zero LLM, número fixo de queries.

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseMetadataQualityOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/trust-factsToken

Get Domain Trust Facts

Factos de confiança do data product (cartão #153): agregado (decisões, vereditos, médias, issues, sensibilidade) e os factos de cada dataset. ETag + If-None-Match → 304. Só leitura, tokens dvk_* incluídos.

Parameters

NameInTypeDescription
domain_id*pathstring
detailquerystring= "minimal"minimal (só contagens) | full (com nomes)

Responses

  • 200Successful ResponseDomainTrustFactsOut
  • 304Nada mudou desde o ETag enviado em If-None-Match.
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/data-policyToken

Get Domain Data Policy

Política de dados do domínio (parcial) e a efetiva que os datasets herdam.

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseDomainDataPolicyOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/versionsToken

List Domain Versions

Versões publicadas do data product, a mais recente primeiro: versão (MAJOR.MINOR), bump (major quebra o consumidor, minor é compatível), resumo legível e contagens. Vazia até à 1.ª publicação. Só leitura.

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseDomainVersionOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/versions/{from_version}/diff/{to_version}Token

Diff Domain Versions

Mudanças entre duas versões do data product, com o bump que implicam. from_version aceita uma versão ou latest (a última publicada; sem nenhuma, compara com nada); to_version aceita uma versão ou current (o estado atual tal como seria publicado). Só a última versão (latest ou pelo nome) até current pré-visualiza a publicação e traz next_version; de uma versão mais antiga, next_version é null. Cada mudança tem impact (major | minor). 404 para uma versão que não existe; 422 para latest no destino ou current na origem. Só leitura.

Parameters

NameInTypeDescription
domain_id*pathstring
from_version*pathstring
to_version*pathstring

Responses

  • 200Successful ResponseDomainVersionDiffOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/consumersToken

List Domain Consumers

Quem depende do data product: utilizadores e consumidores externos registados (source=manual) e os sistemas de IA e exposures dbt que usam os seus datasets (source=derived). by_kind conta os quatro tipos (user, ai_system, dbt_exposure, external) e summary é a frase de impacto («3 sistemas de IA e 2 dashboards dependem deste produto»), null sem consumidores. Um consumidor com channel_id recebe o aviso de uma violação crítica do SLA. Só leitura.

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseDomainConsumersOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/domains/{domain_id}/grantsToken

List Domain Grants

As equipas com acesso ao domínio — visível a todo o workspace (§2.4: é o que permite pedir acesso a quem não o tem).

Parameters

NameInTypeDescription
domain_id*pathstring

Responses

  • 200Successful ResponseDomainGrantOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

scans

Execuções de profiling e regras.

POST/api/v1/scansToken

Create Scan

Responses

  • 202Successful ResponseScanOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/scansToken

List Scans

Scans mais recentes, opcionalmente filtrados por conexão.

Parameters

NameInTypeDescription
connection_idquerystring | null
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseScanOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/scans/{scan_id}Token

Get Scan

Estado e resultado de um scan.

Parameters

NameInTypeDescription
scan_id*pathstring

Responses

  • 200Successful ResponseScanOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/scans/{scan_id}/liveToken

Get Scan Live

Fotografia do teatro do scan — fallback por polling quando o SSE /events/scans/{id}/stream não está disponível. Mesmo formato.

Parameters

NameInTypeDescription
scan_id*pathstring

Responses

  • 200Successful ResponseScanLiveOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

issues

Problemas de qualidade detetados.

GET/api/v1/issuesToken

List Issues

Issues com filtros por severidade, tipo, estado, dataset e responsável.

Parameters

NameInTypeDescription
severityquerySeverity | null
typequeryIssueType | null
statusqueryIssueStatus | null
dataset_idquerystring | null
domain_idquerystring | nullid de domínio ou 'mine' (domínios de que sou owner/membro)
assigneequerystring | nullid de utilizador, 'me' ou 'none' (sem dono)
assignee_teamquerystring | nullid de equipa, 'mine' (das minhas equipas) ou 'none' (sem equipa)
include_snoozedqueryboolean= falseincluir issues adiados (snoozed_until no futuro)
open_onquerystring (date) | nullsó issues abertos nesse dia (YYYY-MM-DD, UTC) — calendário
issue_idquerystring | nullum issue concreto (links «ver problema», cartão #114)
dimensionquerystring | nulldimensão de qualidade (ex.: completeness, validity) — pelo mapa tipo/subtipo → dimensão
slaquerystring | null'breached' = só os que passaram o alvo do SLA de resolução (sla_breached_at)
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseIssueOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/issues/boardToken

Issues Board

Contadores estado × responsável e estado × equipa para o board de atividades, só sobre os datasets visíveis (ADR 0011 §2.4).

Parameters

NameInTypeDescription
include_snoozedqueryboolean= false
dataset_idquerystring | null
domain_idquerystring | null
assignee_teamquerystring | nullid de equipa, 'mine' (das minhas equipas) ou 'none' (sem equipa)

Responses

  • 200Successful ResponseIssueBoardOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/issues/sla-reportToken

Issues Sla Report

Relatório mensal de stewardship: abertos, fechados e fora do SLA de resolução, MTTA/MTTR (mediana e p90, em horas de relógio do SLA: por resolver e sem os adiamentos) e ageing das abertas, por domínio, equipa ou severidade. Só sobre os datasets visíveis para quem pede.

Parameters

NameInTypeDescription
periodquerystring | nullmês AAAA-MM (UTC), ex.: 2026-09; omissão = o mês atual
group_byquery"domain" | "team" | "severity"= "domain"

Responses

  • 200Successful ResponseSlaReportOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/issues/{issue_id}/eventsToken

List Issue Events

Rasto do issue (quem mudou estado/responsável/prazo, quando, de→para).

Parameters

NameInTypeDescription
issue_id*pathstring

Responses

  • 200Successful ResponseIssueEventOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/issues/{issue_id}/explanationToken

Explain Anomaly

Cartão de explicação de uma anomalia: métrica com a janela marcada, dimensão culpada (drill-down), upstream do lineage e diagnóstico IA. Um upstream invisível para quem pede é «Dataset restrito» (ADR 0011 §2.4).

Parameters

NameInTypeDescription
issue_id*pathstring

Responses

  • 200Successful ResponseAnomalyExplanationOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/issues/{issue_id}/impactToken

Get Issue Impact

Impacto da issue (cartão #107): datasets a jusante pela linhagem e os consumidores dbt (exposures) que parte — «este nulo parte o dashboard de Receita». Os datasets a jusante invisíveis para quem pede são «Dataset restrito», sem nome nem id (ADR 0011 §2.4): o impacto continua honesto.

Parameters

NameInTypeDescription
issue_id*pathstring

Responses

  • 200Successful ResponseIssueImpactOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

incidents

Issues relacionadas agrupadas via linhagem.

GET/api/v1/incidentsToken

List Incidents

Incidentes ativos, do mais recente para o mais antigo — só os cuja raiz é visível para quem pede (ADR 0011 §2.4).

Responses

  • 200Successful ResponseIncidentOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/incidents/{incident_id}Token

Get Incident

Incidente com as issues agrupadas e o dataset raiz.

Parameters

NameInTypeDescription
incident_id*pathstring

Responses

  • 200Successful ResponseIncidentOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

tickets

Tickets externos (Jira, Linear e outros) ligados a issues, incidentes, sugestões, propostas de contrato e classificações de colunas.

GET/api/v1/ticketsToken

List Tickets

Tickets externos ligados a uma entidade — issue, incidente (inc-…), sugestão, proposta de contrato ou classificação de coluna —, do mais antigo para o mais recente. O estado não é sincronizado com a ferramenta de tickets: um ticket criado pelo DataVault nasce open; um ligado à mão fica unknown.

Parameters

NameInTypeDescription
entity_type*queryTicketEntityType
entity_id*querystring

Responses

  • 200Successful ResponseExternalTicketOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/tickets/integrations/{integration_id}/targetsToken

List Integration Targets

Projetos e tipos de issue (Jira) ou equipas (Linear) onde a integração pode criar tickets, lidos agora do fornecedor — para escolher o destino no cartão do assistente. Só leitura (GET no Jira; query GraphQL no Linear), pelo caminho anti-SSRF. 404 integração de outro workspace, 402 plano, 502 o fornecedor falhou.

Parameters

NameInTypeDescription
integration_id*pathstring

Responses

  • 200Successful ResponseTicketTargetsOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

signals

Sinais de anomalia por confirmar.

GET/api/v1/signalsToken

List Signals

Sinais de anomalia (monitores automáticos) por confirmar ou descartados.

Parameters

NameInTypeDescription
statusquerystring | null
dataset_idquerystring | null
limitqueryinteger= 100itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseSignalOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

suggestions

Sugestões de melhoria (heurísticas e IA).

GET/api/v1/suggestionsToken

List Suggestions

Sugestões de melhoria com filtros por dataset, estado e categoria. Pagina com limit/offset; o total filtrado vem no header X-Total-Count.

Parameters

NameInTypeDescription
dataset_idquerystring | null
statusquerySuggestionStatus | null
categoryquerySuggestionCategory | null
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseSuggestionOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/suggestions/{suggestion_id}/eventsToken

List Suggestion Events

Trilho de auditoria da sugestão: quem mudou o quê, quando e porquê.

Parameters

NameInTypeDescription
suggestion_id*pathstring

Responses

  • 200Successful Responseobject[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/suggestions/{suggestion_id}/pull-requestsToken

List Suggestion Pull Requests

Parameters

NameInTypeDescription
suggestion_id*pathstring

Responses

  • 200Successful Responseobject[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

rules

Regras de qualidade ativas.

GET/api/v1/rulesToken

List Rules

Regras de qualidade, opcionalmente de um dataset. Pagina com limit/offset; o total filtrado vem no header X-Total-Count.

Parameters

NameInTypeDescription
dataset_idquerystring | null
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseRuleOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/rules/{rule_id}/failing-rows.sqlToken

Get Failing Rows Sql

Query que lista as linhas que falham a regra, para correres no teu warehouse.

Só texto: o DataVault não a executa nem guarda linhas. Os nomes de tabela e de coluna saem citados no dialeto e o limite é o LIMIT (ou TOP) dele. Os avisos (aproximações, LIKE em vez de regex) vão em comentários no topo.

Sem tradução por linha a resposta é 204, com o motivo em X-DataVault-Reason: not_row_level (contagem de linhas), stream_rule, no_dataset, no_sql_source (a fonte não tem SQL: indica dialect), no_column, no_timestamp_column, regex_untranslatable, reference_too_large (lista acima de 500 valores), registry_reference, referential_other_connection, invalid_params, sql_untranslatable ou external_source (a regra accuracy confirma cada valor numa fonte autoritativa). Com um token dvk_, o pedido fica no trilho de auditoria como leitura (failing_rows_sql_read).

Parameters

NameInTypeDescription
rule_id*pathstring
dialectquerystring | nullpostgres | mysql | mssql | bigquery | snowflake | databricks | sqlite. Por omissão, o da fonte do dataset.
limitqueryinteger= 100Máximo de linhas que a query devolve.

Responses

  • 200A query, em texto, no dialeto de X-DataVault-Dialect.stringtext/plain
  • 204A regra não tem tradução por linha: o motivo vem no cabeçalho X-DataVault-Reason.
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/rules/exportToken

Export Dataset Rules

Regras ativas do dataset como ficheiro do formato pedido — «são os teus testes».

No SodaCL e no GX só sai o que o POST /rules/import lê de volta como a mesma regra (mesma tabela, coluna, tipo e parâmetros; uma tolerância a zero é a regra sem tolerância); o resto fica em unsupported, com o motivo, no cabeçalho do ficheiro e nos headers X-Rules-*. A severidade não segue no SodaCL nem no GX: o import aplica a do pedido. format=dbt é o mesmo ficheiro de GET /datasets/{id}/rules.dbt.yml. Sem LLM e sem tocar na fonte.

Parameters

NameInTypeDescription
dataset_id*pathstring
formatquery"dbt" | "sodacl" | "gx"= "dbt"dbt (schema.yml) | sodacl (checks YAML) | gx (suite JSON do Great Expectations 1.x)

Responses

  • 200O ficheiro, como anexo.stringtext/yaml
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/rules/exportToken

Export Workspace Rules

Regras ativas dos datasets que quem pede vê, num só ficheiro SodaCL.

Uma secção checks for <tabela> por dataset (schema.tabela quando duas tabelas têm o mesmo nome). O que não volta igual pelo POST /rules/import fica em unsupported, no cabeçalho do ficheiro e nos headers X-Rules-*.

Parameters

NameInTypeDescription
formatquerystring= "sodacl"Só sodacl: as suites GX e os schema.yml do dbt são por dataset.

Responses

  • 200O ficheiro, como anexo.stringtext/yaml
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

rule-packs

Packs de regras curados por indústria: pré-visualizar e propor ao dataset.

GET/api/v1/rule-packsToken

List Rule Packs

Responses

  • 200Successful ResponseRulePackSummary[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/rule-packs/{pack_id}Token

Get Rule Pack

Parameters

NameInTypeDescription
pack_id*pathstring

Responses

  • 200Successful ResponseRulePackOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/rule-packs/{pack_id}/previewToken

Preview Rule Pack

O que aplicar o pack criaria neste dataset — sem escrever nada.

Parameters

NameInTypeDescription
pack_id*pathstring
dataset_id*querystring

Responses

  • 200Successful ResponseRulePackPreview
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

duplicates

Clusters de registos duplicados.

GET/api/v1/duplicatesToken

List Duplicate Clusters

Clusters de registos duplicados detetados nos scans, com filtros por dataset e estado. Pagina com limit/offset; o total filtrado vem no header X-Total-Count.

Parameters

NameInTypeDescription
dataset_idquerystring | null
statusquerystring | null
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseDuplicateClusterOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

lineage

Linhagem entre datasets e o fluxo de qualidade por camada (Sankey).

GET/api/v1/lineage/sankeyToken

Get Lineage Sankey

Sankey de qualidade: nós por camada medallion (score + volume) e ligações da linhagem com largura = volume estimado e cor = faixa do score de origem.

Parameters

NameInTypeDescription
connection_idquerystring | nullLimitar a uma conexão

Responses

  • 200Successful ResponseLineageSankeyOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/lineage/dbt-metrics/driftToken

Get Metric Drift

Métricas dbt definidas 2× (ou mais) com fórmulas, filtros, janelas ou modelos diferentes entre projetos/pastas, com as variantes e as diferenças.

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

synthetic

Pack de dados sintéticos com várias tabelas e FKs coerentes, gerado a partir dos perfis guardados, para dev/test e fixtures de CI (permitido a tokens; nenhuma linha real).

POST/api/v1/synthetic-packsToken

Create Synthetic Pack

Pack de dados sintéticos com várias tabelas coerentes, para dev/test e fixtures de CI.

Seleciona exatamente um de connection_id, domain_id ou dataset_ids (até max_tables, no máximo 20). Cada tabela é gerada a partir do último perfil, como em GET /datasets/{dataset_id}/synthetic, e as colunas ligadas pela linhagem (cliente_id → clientes) só levam chaves que existem na tabela de origem, com a mesma taxa de nulos. Nenhuma linha da fonte é lida.

format=zip devolve um CSV por tabela, schema.sql (tabelas, chaves e FKs) e manifest.json (estratégias por coluna, FKs, avisos, seed e o aviso «dados sintéticos — não contém dados reais»); format=sqlite devolve um ficheiro SQLite com as mesmas tabelas e o manifesto na tabela _datavault_manifest. O mesmo pedido sobre os mesmos perfis dá os mesmos bytes. Antes de escrever o ficheiro, as linhas de cada tabela passam pela avaliação utilidade × privacidade de GET /datasets/{dataset_id}/synthetic, com o scorecard de cada tabela no evaluation do manifesto. Com privacy_verdict = fail numa tabela a resposta é 409 (code = synthetic_privacy_fail, com a key e os params de cada tabela recusada em tables) e não sai nenhum ficheiro. Síncrono e com orçamento de tempo: excedido, responde 422 sem ficheiro. Cada workspace tem um limite de pedidos por janela (429 com Retry-After). Fica registado um evento de auditoria (também na recusa).

Responses

  • 200O pack: ZIP (CSVs + schema.sql + manifest.json) ou ficheiro SQLite.application/zip
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

knowledge

Base de conhecimento: relatórios, RCAs e decisões.

GET/api/v1/knowledgeToken

List Knowledge

Pesquisa na base de conhecimento (relatórios, RCAs, notas e decisões) com filtros por tipo, dataset ou issue.

Parameters

NameInTypeDescription
qquerystring | nullpesquisa de texto (FTS)
kindqueryKnowledgeKind | null
dataset_idquerystring | null
issue_idquerystring | null
include_outdatedqueryboolean= true
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseKnowledgeEntryOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/knowledge/graphToken

Knowledge Graph View

Grafo do património do workspace: {nodes, edges, stats}.

Nós: fontes, domínios, datasets, exposures, métricas, regras, termos do glossário, problemas, sinais e entradas de conhecimento. Arestas: linhagem (feeds, com lineage_kind), pertença a domínio, consumo por exposures, métricas, termos (means, com as colunas) e as relações de qualidade. Sem focus, o grafo completo com teto de 1500 nós; com focus=dataset:<id>, a vizinhança a hops saltos (1 a 3) com teto de 400 nós. kinds limita os tipos de nó. stats.by_kind e stats.by_edge_kind contam o que veio.

Parameters

NameInTypeDescription
focusquerystring | nullvizinhança de um dataset: `dataset:<id>`
hopsqueryinteger= 2saltos a partir do foco (só com `focus`)
kindsquerystring | nulltipos de nó separados por vírgulas (ex.: `dataset,domain`)

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/knowledge/{entry_id}Token

Get Knowledge Entry

Uma entrada da base de conhecimento.

Parameters

NameInTypeDescription
entry_id*pathstring

Responses

  • 200Successful ResponseKnowledgeEntryOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

reports

Relatórios IA gerados (Markdown e HTML) e o percurso de cada geração.

GET/api/v1/reportsToken

List Reports

Relatórios IA do workspace, mais recentes primeiro. Pagina com limit/offset; o total vem no header X-Total-Count.

Parameters

NameInTypeDescription
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseReportOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/reports/{report_id}/export.pdfToken

Export Report Pdf

PDF do mesmo documento do export HTML — render server-side via weasyprint (extra pdf). Sem o extra: 501 com a dica de instalação.

Parameters

NameInTypeDescription
report_id*pathstring

Responses

  • 200Successful Response
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/reports/{report_id}/exportToken

Export Report

HTML autónomo (download) — para partilhar por email ou imprimir.

Parameters

NameInTypeDescription
report_id*pathstring

Responses

  • 200Successful Responsestringtext/html
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/reports/{report_id}/traceToken

Get Report Trace

Percurso de uma geração como grafo (nós e arestas): o que correu em cada passo, quanto tempo levou e se houve alternativa (ex.: modelo de texto sem IA). lang=pt|en.

Parameters

NameInTypeDescription
report_id*pathstring
langquerystring= "pt"

Responses

  • 200Successful ResponseReportTraceOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/reports/{report_id}Token

Get Report

Estado e conteúdo Markdown de um relatório IA.

Parameters

NameInTypeDescription
report_id*pathstring

Responses

  • 200Successful ResponseReportOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/reports/{report_id}/public-shareToken

Get Report Public Share

Estado do link público (qualquer membro — o link é para ser enviado).

Parameters

NameInTypeDescription
report_id*pathstring

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

routines

Catálogo dos passos do pipeline de relatórios: o que entra, o que sai, o que se configura.

GET/api/v1/routines/blocksToken

List Routine Blocks

Catálogo versionado dos passos do pipeline de relatórios, com o que é configurável hoje e os selos de cada passo. lang=pt|en.

Parameters

NameInTypeDescription
langquerystring= "pt"

Responses

  • 200Successful ResponseRoutineCatalogOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

dashboard

Métricas por persona.

GET/api/v1/dashboard/engineeringToken

Dashboard Engineering

Métricas para engenharia de dados: scans, falhas, tendência.

Responses

  • 200Successful ResponseEngineeringDashboardOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/managementToken

Dashboard Management

Métricas para gestão: issues abertas/resolvidas, adoção.

Responses

  • 200Successful ResponseManagementDashboardOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/executiveToken

Dashboard Executive

Score global, risco e exposição estimada em €/mês.

Responses

  • 200Successful ResponseExecutiveDashboardOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/calendarToken

Dashboard Calendar

Heatmap-calendário do workspace: score médio, issues abertas e scans falhados por dia (cache 1h).

Parameters

NameInTypeDescription
daysqueryinteger= 90

Responses

  • 200Successful ResponseQualityCalendarOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/sloToken

Dashboard Slo

SLO de dados: attainment mensal e por dataset das slaProperties de latência do contrato ODCS face à idade observada nos perfis, e violações com os issues de freshness desse dia.

Parameters

NameInTypeDescription
monthsqueryinteger= 6

Responses

  • 200Successful ResponseSloReportOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/slo.csvToken

Dashboard Slo Csv

Export CSV do SLO: uma linha por dataset-dia medido.

Parameters

NameInTypeDescription
monthsqueryinteger= 6

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/dimensionsToken

Dashboard Dimensions

Scorecard por dimensão de qualidade (DAMA/ISO 8000) do workspace e de cada domínio: média do último score de cada dataset, só com os datasets medidos nessa dimensão (datasets_measured de datasets_total), checks e issues abertos. score=null = nenhum dataset medido, nunca 100.

Responses

  • 200Successful ResponseDashboardDimensionsOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/dimensions.csvToken

Dashboard Dimensions Csv

Export CSV do scorecard: uma linha por dataset × dimensão (último scan). Só metadados — nomes, scores e contagens; nunca amostras nem valores observados.

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/piiToken

Dashboard Pii

Mapa de PII do workspace: datasets × tipos de dado pessoal, origem da deteção (amostras do perfil, nome da coluna ou AI-readiness) e cobertura por regras ativas. Só metadados — nunca os valores das amostras.

Responses

  • 200Successful ResponsePiiMapOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/pii.csvToken

Dashboard Pii Csv

Export CSV do mapa de PII para o DPO: uma linha por coluna com PII.

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/dashboard/finopsToken

Dashboard Finops

Visão FinOps: custos estimados por dataset + recomendações.

Responses

  • 200Successful ResponseFinopsOverviewOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

governance

Eficácia do programa de governação: KPIs de cobertura, resolução, SLA, adoção, scores por dimensão, incidentes e uso, com metas, semáforo e tendência mensal.

GET/api/v1/governanceToken

Get Governance

Eficácia do programa de governação do workspace: cobertura (owner, documentação, classificação, contratos, regras), cycle time e MTTR dos críticos, cumprimento do SLO/SLA e dos prazos, adoção de sugestões e de regras «nunca mais», score por dimensão, incidentes críticos e uso — cada KPI com meta (workspace → organização → omissão), semáforo, variação e tendência mensal; a matriz por domínio e as metas. Só leitura, zero LLM.

Parameters

NameInTypeDescription
monthsqueryinteger= 6Meses de calendário (UTC) na tendência; o corrente conta até agora.

Responses

  • 200Successful ResponseGovernanceOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/governance/scorecard.csvToken

Get Governance Scorecard Csv

Scorecard executivo em CSV: uma linha por KPI (valor, meta e origem, estado, folga, variação e um valor por mês) e uma por domínio × KPI. Só códigos, números e nomes de domínios; células protegidas contra fórmulas.

Parameters

NameInTypeDescription
monthsqueryinteger= 6Meses de calendário (UTC) na tendência; o corrente conta até agora.

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/governance/evidence.mdToken

Get Governance Evidence

Evidência do programa de governação em Markdown, para o pack de procurement ou due diligence do cliente: resumo do semáforo, KPIs com meta e tendência, domínios e o método. Só agregados — sem nomes de datasets, colunas, amostras nem pessoas.

Parameters

NameInTypeDescription
monthsqueryinteger= 6Meses de calendário (UTC) na tendência; o corrente conta até agora.

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/governance/domains/{domain_id}Token

Get Domain Governance

Drill-down de um domínio: os mesmos KPIs sobre os datasets do domínio (sem os utilizadores ativos, que são do workspace), com o SLA declarado como meta do SLO e a tendência mensal do domínio.

Parameters

NameInTypeDescription
domain_id*pathstring
monthsqueryinteger= 6Meses de calendário (UTC) na tendência; o corrente conta até agora.

Responses

  • 200Successful ResponseGovernanceOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

bi

Feeds tabulares estáveis para Excel e Power BI: scores, issues, SLO, custos e atividade em JSON ou CSV, paginados, com ETag. Guia do Power Query em POWER_BI.md.

GET/api/v1/biToken

List Feeds

Catálogo dos feeds: nome, colunas (nome e tipo), janela por omissão e o código Power Query pronto a colar.

O Power Query pode ler isto para validar o esquema antes de atualizar.

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/bi/{feed}Token

Get Feed

Uma página de um feed tabular com colunas fixas e versionadas.

JSON: {feed, schema_version, columns, total, limit, offset, next_offset, rows}. CSV: cabeçalho + linhas, separador ,, decimais com ponto; o total e a próxima página vêm em X-Total-Count e X-Next-Offset. Ordem estável — paginar com offset nunca repete nem salta linhas. Só metadados e métricas; nunca amostras de dados.

Parameters

NameInTypeDescription
feed*pathBiFeed
sincequerystring (date) | nullPrimeiro dia incluído (YYYY-MM-DD, UTC). Omissão: 90 dias em scores/slo/activity.
untilquerystring (date) | nullÚltimo dia incluído (YYYY-MM-DD, UTC).
domain_idquerystring | nullSó datasets deste domínio.
dataset_idquerystring | nullSó este dataset.
statusqueryIssueStatus | nullSó no feed issues.
limitqueryinteger= 5000
offsetqueryinteger= 0
formatquery"json" | "csv"= "json"
bomqueryboolean= falseCSV com BOM UTF-8 (acentos no Excel).

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

compliance

Dossiê do AI Act (plano Business) e dossiê regulatório dos elementos de dados críticos (BCBS 239, Solvência II): controlos, resultados, lacunas e linhagem.

GET/api/v1/workspace/data-policyToken

Read Data Policy

Política do workspace; com dataset_id, a EFETIVA desse dataset (fundida com a dos seus domínios, cartão #147) e a origem de cada regra/campo.

Parameters

NameInTypeDescription
dataset_idquerystring | null

Responses

  • 200Successful ResponseDataPolicyStatusOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/compliance/clausesToken

List Clauses

Alíneas do art. 10.º com o texto da obrigação — base dos formulários.

Responses

  • 200Successful Responseobject[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/compliance/ai-systemsToken

List Ai Systems

Sistemas de IA registados para o dossiê do AI Act.

Responses

  • 200Successful ResponseAiSystemListItemOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/compliance/ai-systems/{system_id}Token

Get Ai System

Detalhe de um sistema de IA registado.

Parameters

NameInTypeDescription
system_id*pathstring

Responses

  • 200Successful ResponseAiSystemDetailOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/compliance/ai-systems/{system_id}/art10Token

Get Art10 Pack

Dossiê de evidência do art. 10.º: alínea a alínea, com lacunas explícitas.

Parameters

NameInTypeDescription
system_id*pathstring

Responses

  • 200Successful ResponseArt10PackOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/compliance/ai-systems/{system_id}/art10.mdToken

Get Art10 Markdown

Dossiê do art. 10.º em Markdown, pronto a anexar.

Parameters

NameInTypeDescription
system_id*pathstring

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Limite do plano do workspace (plan_limit); plan e limit dizem qual.PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/cdeToken

List Cdes

Elementos de dados críticos do workspace, por regulação e dataset. Só de datasets que quem pede vê; o total vem no header X-Total-Count.

Parameters

NameInTypeDescription
regulationqueryCdeRegulation | nullbcbs239 | solvency2 | custom; omitida = todas as regulações.
dataset_idquerystring | null
limitqueryinteger= 100itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseCdeOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/cde/dossierToken

Get Dossier

Dossiê regulatório calculado na hora: por regulação e requisito (princípio do BCBS 239, número do art. 19.º do Reg. Delegado 2015/35), cada elemento crítico com os controlos por dimensão, o último resultado, os problemas abertos, o SLA, a linhagem a um salto, o owner e o contrato ODCS, e as lacunas. Determinístico, sem LLM; nenhum estado afirma conformidade.

Parameters

NameInTypeDescription
regulationqueryCdeRegulation | nullbcbs239 | solvency2 | custom; omitida = todas as regulações.
domain_idquerystring | nullSó os elementos de datasets deste domínio.

Responses

  • 200Successful ResponseDossierOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/cde/dossier.mdToken

Get Dossier Markdown

O dossiê em Markdown (o mesmo texto do relatório gravado por POST /cde/dossier).

Parameters

NameInTypeDescription
regulationqueryCdeRegulation | nullbcbs239 | solvency2 | custom; omitida = todas as regulações.
domain_idquerystring | nullSó os elementos de datasets deste domínio.

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/cde/dossier.csvToken

Get Dossier Csv

O dossiê em CSV: uma linha por elemento × requisito × dimensão, com o estado, as regras, o último resultado, os problemas abertos e as lacunas. Células protegidas contra fórmulas.

Parameters

NameInTypeDescription
regulationqueryCdeRegulation | nullbcbs239 | solvency2 | custom; omitida = todas as regulações.
domain_idquerystring | nullSó os elementos de datasets deste domínio.

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

connections

Fontes ligadas (sem credenciais).

GET/api/v1/connectionsToken

List Connections

Fontes ligadas ao workspace. Nunca inclui credenciais.

Responses

  • 200Successful ResponseConnectionOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/presetsToken

List Public Presets

Galeria de fontes públicas de exemplo — reais, vivas, sem conta.

Responses

  • 200Successful Responseobject[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/typesToken

List Connector Types

Tipos do registo com metadados e o estado do driver (find_spec — nada é importado).

O wizard desativa os tipos sem driver em vez de deixar criar e falhar no teste.

Responses

  • 200Successful ResponseConnectorTypeOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/demo/packsToken

List Demo Packs

Seed packs por indústria: ERP, e-commerce, fintech PT, saúde.

Cada pack traz os problemas plantados e a história de cada um — o guião da demo comercial — e o pack de regras da galeria com que emparelha.

Responses

  • 200Successful ResponseDemoPackOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/{connection_id}Token

Get Connection

Detalhe de uma fonte, sem credenciais.

Parameters

NameInTypeDescription
connection_id*pathstring

Responses

  • 200Successful ResponseConnectionOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/{connection_id}/query-logToken

List Source Query Log

«O que o DataVault executou na tua base»: statements normalizados (sem valores), com execuções, duração, linhas e endpoint (primário/réplica).

Parameters

NameInTypeDescription
connection_id*pathstring
scan_idquerystring | null
operationquery"scan" | "discover" | "test" | null
daysqueryinteger | null
limitqueryinteger= 100itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseSourceQueryLogOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/{connection_id}/query-log/exportToken

Export Source Query Log

O mesmo relatório para entregar ao DBA, em CSV ou JSON (download).

Parameters

NameInTypeDescription
connection_id*pathstring
formatquery"csv" | "json"= "csv"
scan_idquerystring | null
operationquery"scan" | "discover" | "test" | null
daysqueryinteger | null

Responses

  • 200Successful Responseany
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/connections/{connection_id}/engineeringToken

Get Engineering

Estado da varredura de engenharia: opt-in, última varredura e issues abertos.

Parameters

NameInTypeDescription
connection_id*pathstring

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

reconcile

Reconciliação de contagens de linhas entre dois datasets (origem ↔ destino), a partir dos perfis.

GET/api/v1/reconcileToken

Reconcile

Contagem A (origem), contagem B (destino), delta absoluto e % e estado ok | warn | fail. 404 se algum dataset não for deste workspace (ou não for visível para quem pede — ADR 0011); 422 se algum ainda não tiver contagem num perfil.

Parameters

NameInTypeDescription
source*querystringDataset de origem
target*querystringDataset de destino
tolerance_pctquerynumber= 0|delta %| até aqui → ok
fail_pctquerynumber | null|delta %| acima disto → fail (omissão: 2 × tolerância)

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

rag-gate

Gate de qualidade para pipelines RAG: veredito por documento antes de indexar (escrita permitida a tokens).

POST/api/v1/rag-gateToken

Avaliar um lote de documentos antes de os indexar (gate RAG)

Veredito por documento — aceitar, rever ou rejeitar — com as flags que o justificam (dados pessoais por tipo, duplicado exato/aproximado do corpus ou do lote, idioma inesperado, boilerplate, texto curto, codificação partida, documento desatualizado) e um score 0–100.

O conteúdo nunca é guardado: só o hash SHA-256 e um sketch de hashes dos documentos aceites (fora de dry-run, com dataset_id), para que o próximo lote detete o que já foi indexado. Autentica com o token de API dvk_*.

Responses

  • 200Successful ResponseRagGateResponse
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 402Quota mensal de documentos do gate esgotada (limit: rag_gate_documents_per_month).PlanLimitErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404dataset_id não pertence ao workspace.ErrorResponse
  • 413O lote excede 2 000 000 caracteres.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Rate limit do gate atingido (header Retry-After).

record-validation

Validação síncrona de registos contra as regras do dataset: veredito por registo e do lote, sem guardar nada (permitida a tokens).

POST/api/v1/datasets/{dataset_id}/validateToken

Validar registos contra as regras do dataset (nada é guardado)

Aplica as regras ativas do dataset a cada registo e devolve, por registo, se passou e que regras falharam (com o código do motivo); por regra, quantos registos passaram, falharam ou não se aplicam; e o veredito do lote.

Ao nível do registo: not_null, pattern, range, required_fields, valid_identifier (dígito de controlo de NIF, NISS, IBAN…) e in_reference_set. As regras do dataset inteiro (unique, freshness, row_count_min…), as de SQL na fonte e as entre datasets ficam not_applicable. Os registos não são guardados nem enviados a um LLM, e a fonte do dataset não é lida. Autentica com o token de API dvk_*.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseRecordValidationResponse
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O dataset não existe ou não é do workspace do token.ErrorResponse
  • 413Mais de 5000 registos ou corpo acima de 2 MB.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Rate limit da validação atingido (header Retry-After).

consumers

Agentes e aplicações que registam o que consomem e a decisão de confiança que viram (registo permitido a tokens; só ids e rótulos).

POST/api/v1/trust/consumptionsToken

Registar o que um agente consumiu e a decisão de confiança que viu

Regista o consumidor (agente, aplicação, pipeline ou notebook — criado no 1.º registo, identificado pelo nome e tipo) e um consumo por dataset, com a finalidade e a decisão de confiança vista (decision_seen; omitida = a decisão atual da Trust API). Com consumer.run_ref, repetir o registo do mesmo run não cria consumos novos (replayed). Só ids e rótulos: campos desconhecidos dão 422.

O nome do consumidor só aceita letras, algarismos, espaços e _ . : / -.

Um consumo em untrusted gera o evento consumer_untrusted_read e um aviso aos canais de notificação, sem abrir problema. Os canais recebem no máximo um aviso por hora por consumidor e dataset, e 20 avisos por hora no workspace inteiro; o sino recebe todos os eventos. Autentica com o token de API dvk_*.

Responses

  • 201Successful ResponseConsumptionBatchOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404Um dataset_id não pertence ao workspace (o pedido inteiro falha).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Rate limit do registo atingido (header Retry-After).
GET/api/v1/consumersToken

List Consumers

Consumidores do workspace (agentes, aplicações, pipelines, notebooks) com os consumos a 7 e 30 dias, os consumos dos últimos 7 dias por decisão e o último consumo — mais recentes primeiro. Só contam consumos de datasets que quem pede vê; um consumidor só de datasets restritos não aparece. X-Total-Count = total.

Parameters

NameInTypeDescription
limitqueryinteger= 100itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseConsumerUsageOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/datasets/{dataset_id}/consumersToken

Get Dataset Consumers

Consumidores registados que leram este dataset nos últimos 30 dias, com os consumos a 7 e 30 dias e a última decisão de confiança vista neste dataset.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseDatasetConsumersOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

ide

Qualidade inline no editor (extensão VS Code): resumo por tabela referenciada num ficheiro SQL/dbt e perfil por coluna — só metadados.

GET/api/v1/ide/resolveToken

Resolve

Resumo de qualidade por tabela referenciada: score, issues abertos, versão do contrato ativo, colunas PII e violações da política de dados. Só metadados.

Parameters

NameInTypeDescription
ref*querystring[]Tabelas referenciadas (`schema.tabela` ou `tabela`)
default_schemaquerystring | nullSchema a preferir quando a referência não o indica
connection_idquerystring | nullRestringe a uma conexão

Responses

  • 200Successful ResponseIdeResolveOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/ide/datasets/{dataset_id}/columnsToken

Dataset Columns

Perfil por coluna para o hover: tipo, nulos %, distintos e classificação.

Parameters

NameInTypeDescription
dataset_id*pathstring

Responses

  • 200Successful ResponseIdeDatasetColumnsOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 404O recurso não existe ou pertence a outro workspace (a resposta é a mesma).ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/ide/agent-configToken

Agent Config

Config MCP pronta a colar por agente de código (Claude Code, Claude Desktop, Cursor, VS Code, Codex) e snippets de regras. Nunca contém o token: traz o placeholder token_placeholder, que a UI substitui no browser.

Parameters

NameInTypeDescription
toolquery"claude-code" | "claude-desktop" | "cursor" | "vscode" | "codex" | nullFerramenta; omitido => todas

Responses

  • 200Successful Responseobject
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

orchestrators

Runs de orquestradores (Airflow, dbt Cloud) guardados como contexto do diagnóstico de causa-raiz; o pacote beryx-airflow reporta-os com um token.

POST/api/v1/integrations/dbt/run-resultsToken

Push Dbt Run Results

Resultados de um dbt test/dbt build corrido no pipeline do cliente.

Corpo: {"run_results": <target/run_results.json>, "manifest": <target/manifest.json>} (e connection_id opcional). Cada teste casa com o dataset (schema + alias) e com a regra — pelo rule_id em config.meta.beryx do export rules.dbt.yml (ou em config.meta.datavault, até 2027-05-31), senão pela coluna e tipo de teste. Com regra, o resultado conta para GET /datasets/{dataset_id}/verdict; sem regra equivalente (testes singulares, relationships) abre ou resolve um issue rule_violation com subtype dbt_test. Reenviar o mesmo invocation_id não grava nada outra vez (status duplicate). Só metadados de execução: schema fechado (chaves desconhecidas, campos com linhas como failed_rows ou failures que não seja uma contagem → 422). Só casa com os datasets em que quem envia pode escrever (domínios restritos): os outros ficam como no_dataset, iguais a um dataset que não existe. Aceita tokens de API.

Responses

  • 200Successful ResponseDbtRunResultsProcessedOut | DbtRunResultsDuplicateOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
GET/api/v1/orchestrator-runsToken

List Orchestrator Runs

Runs de orquestradores (dbt Cloud, Airflow) mais recentes primeiro — o mesmo contexto que o diagnóstico de causa-raiz usa. Só metadados do run.

Parameters

NameInTypeDescription
connection_idquerystring | null
sourcequeryOrchestratorSource | null
statusqueryOrchestratorRunStatus | null
limitqueryinteger= 50itens por página (1–500)
offsetqueryinteger= 0itens a saltar; o total vem em X-Total-Count

Responses

  • 200Successful ResponseOrchestratorRunOut[]
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object
POST/api/v1/orchestrator-runsToken

Report Orchestrator Run

Regista (ou atualiza, pelo external_run_id) o run de uma DAG/task Airflow. Aceita tokens de API — é o que os callbacks do beryx-airflow chamam.

Responses

  • 201Successful ResponseOrchestratorRunOut
  • 401Token em falta (auth_required), inválido, expirado ou revogado (token_invalid).ErrorResponse
  • 403Método de escrita com um token só de leitura (token_read_only), workspace suspenso (workspace_suspended), quota da organização esgotada (org_quota, com plan e limit) ou acesso negado pela política do workspace.ErrorResponse
  • 422Parâmetros ou corpo inválidos (validation_error): detail lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em detail, na língua do pedido, e o seu code quando o texto está no catálogo (senão null).ValidationErrorResponse
  • 429Limite de pedidos atingido (rate_limited) ou, num pedido de scan, fila de scans do workspace cheia (scan_queue_full).object

Schemas

The objects returned by the API. Fields marked * are always present.

AiReadinessComponentsOut

Pontuação 0–100 de cada componente do score global.

qualidade*
number
estabilidade*
number
privacidade*
number
atualidade*
number

AiReadinessDimensionsOut

As componentes, o volume e, com a qualidade dos rótulos medida, rotulos.

qualidade*
number
estabilidade*
number
privacidade*
number
atualidade*
number
volume*
number
rotulos
number | null

AiReadinessLabelQualityOut

Último resultado válido da qualidade dos rótulos (só contagens).

pct_suspect*
integer | number | null
n_sample*
integer | null
n_suspect*
integer | null
computed_at*
string | null
scan_id*
string | null
pct_suspect_ci95*
integer | number[] | null

AiReadinessUseCaseOut

Prontidão para um caso de uso; um blocker chumba o veredito.

use_case*
"rag" | "ml" | "agente" | "bi"
label*
string
descricao*
string
score*
number
verdict*
"pronto" | "com_reservas" | "nao_pronto"
blocker*
string | null
weights*
object

AiSystemDatasetLinkOut

Conjunto de dados afeto ao sistema, com o papel.

link_id*
string
dataset_id*
string
name*
string
role*
string
note*
string | null
row_count*
integer | null

AiSystemDetailOut

id*
string
name*
string
intended_purpose*
string | null
risk_class*
string
annex_iii_area*
string | null
actor_role*
string
deployment_context*
string | null
declarations*
objectDeclaração por alínea do art. 10.º.
owner*
string | null
created_at*
string (date-time)
updated_at*
string (date-time)

AiSystemListItemOut

id*
string
name*
string
intended_purpose*
string | null
risk_class*
string
annex_iii_area*
string | null
actor_role*
string
deployment_context*
string | null
declarations*
objectDeclaração por alínea do art. 10.º.
owner*
string | null
created_at*
string (date-time)
updated_at*
string (date-time)
dataset_count*
integerConjuntos de dados afetos ao sistema.

AnomalyBaselineOut

Baseline que o detetor usou (ANOMTEMP v1): global ou o mesmo dia da semana.

kind*
string
weekday
integer | null
weekday_label
string | null
points
integer | null

AnomalyDrilldownOut

metric
string | null
column
string | null
dimension*
string
segment
string | null
share*
number
dominant*
boolean
total_delta*
number
dimensions_analyzed
string[]
baseline_points
integer

AnomalyExplanationOut

Cartão de explicação de uma anomalia (cartão #111).

issue_id*
string
metric*
string
metric_label*
string
column
string | null
unit
string
observed
number | null
observed_display
string | null
expected
number | null
expected_display
string | null
z_score
number | null
z_threshold
number | null
tuned_threshold
number | null
tuned_threshold_label
string | null
p_value
number | null
confidence
string | null
baseline
AnomalyBaselineOut | null
band
AnomalyBandOut | null
window
AnomalyWindowOut | null
chart_svg
string | null
drilldown
AnomalyDrilldownOut | null
external_upstream
ExternalLineageNodeOut[]
diagnosis
AnomalyDiagnosisRef | null

AnomalyPointOut

scan_id*
string
at
string (date-time) | null
value*
number
in_window
boolean

AnomalySegmentOut

segment*
string
label*
string
observed*
number
expected*
number
delta*
number
share*
number

AnomalyTuningEntryOut

Degrau de uma métrica×coluna afinado pelo feedback (cartão #157).

subtype*
string
level*
integer
threshold*
number
silenced*
boolean
ignored_count*
integer
resolved_count*
integer
last_changed_at
string | null
legacy
boolean
next_on_ignore*
object

AnomalyUpstreamOut

dataset_id*
string
name*
string
via_column
string | null
kind
string | null
last_scan_at
string (date-time) | null
score
number | null
last_schema_change_at
string (date-time) | null
last_schema_change_severity
string | null
last_data_change_at
string (date-time) | null
last_change_at
string (date-time) | null
open_issues
integer
suspect
boolean
restricted
boolean

AnomalyWindowOut

start_at
string (date-time) | null
end_at
string (date-time) | null
scans*
integer

Art10BiasSignalOut

Dimensão onde o exame de enviesamento é obrigatório.

dataset*
string
column*
string
dimension*
string
finding*
string
severity*
stringinfo | atencao

Art10ClauseOut

Avaliação de uma alínea do art. 10.º.

ref*
string
title*
string
requirement*
string
source*
stringobservado | declarado | misto
status*
stringcoberto | parcial | em_falta | nao_aplicavel
evidence*
string[]
gaps*
string[]
declaration*
string | null

Art10DatasetOut

Factos observados de um conjunto afeto ao sistema.

dataset_id*
string
name*
string
role*
string
row_count*
integer | null
column_count*
integer
score*
number | null
dimensions*
object | null
last_profiled_at*
string (date-time) | null
source*
string | nullTipo de conector da fonte.
connection*
string | null
layer*
string | null
pii_columns*
string[]

Art10SummaryOut

datasets*
integer
roles*
object
avg_score*
number | null
open_issues*
integer
critical_issues*
integer
active_rules*
integer
prepared_operations*
integer
pii_datasets*
integer
coverage_pct*
integer
counts*
objectAlíneas por estado.

Art10SystemOut

id*
string
name*
string
intended_purpose*
string | null
risk_class*
string
annex_iii_area*
string | null
actor_role*
string
deployment_context*
string | null
owner*
string | null

AutoMonitorOut

Estado de um monitor automático: active | learning | unavailable.

monitor*
string
label*
string
state*
string
detail*
string
threshold
object | null

AutoMonitorsOut

Monitores automáticos do dataset. enabled = conexão E dataset.

enabled*
boolean
dataset_enabled*
boolean
connection_enabled*
boolean
snapshots
integer
last_checked_at
string (date-time) | null
monitors
AutoMonitorOut[]

BiFeed

Values: "scores" · "issues" · "slo" · "finops" · "activity" · "datasets" · "chargeback"

CalendarDayOut

date*
string
weekday*
integer
score
number | null
scans
integer
failed_scans
integer
open_issues
integer
new_issues
integer
level
integer

CalendarSummaryOut

days_with_score
integer
avg_score
number | null
failed_scans
integer
max_open_issues
integer
weekday_avg_score
number | null[]

CdeOut

id*
string
dataset_id*
string
dataset_name*
string
column_name
string | null
regulation*
string
reference
string | null
owner_user_id
string | null
owner_name
string | null
rationale
string | null
created_at*
string (date-time)

CdeRegulation

Regulação de um elemento de dados crítico (cartão #392).

O mapa regulação → dimensões vive em domain/compliance/regulatory_dossier.py. Sem DORA nem IFRS 17: o pack DORA (#233) é sobre o DataVault como terceiro TIC e não define dimensões de qualidade; o resto cabe em custom + reference.

Values: "bcbs239" · "solvency2" · "custom"

ColumnOut

Coluna do dataset (a partir de columns_json).

name*
string
data_type
string
nullable
boolean
primary_key
boolean
partition
boolean
clustering
boolean

ColumnSensitivityOut

column*
string
data_type
string | null
in_schema
boolean
level
string | null
source
string | null
pii_type
string | null
pii_type_label
string | null
updated_by
string | null
updated_by_name
string | null
updated_at
string (date-time) | null
suggestion
SensitivitySuggestionOut | null

ConformanceCheckOut

code*
string
label*
string
status*
"passed" | "failed" | "not_applicable"
applicable*
boolean
passed*
boolean
severity*
string
detail*
string
link*
string
endpoint*
string

ConformanceGapOut

code*
string
label*
string
severity*
string
failed*
integer
datasets*
string[]
action*
string
link*
string
endpoint*
string

ConnectionOut

Conexão sem credenciais — config/config_encrypted nunca são expostos.

id*
string
workspace_id*
string
name*
string
connector_type*
string
status*
string
last_error
string | null
last_checked_at
string (date-time) | null
scan_frequency
string
scan_hour
integer
scan_timezone
string
scan_weekday
integer | null
scan_day_of_month
integer | null
next_scan_at
string (date-time) | null
auto_monitors_enabled
boolean
blackout_timezone
string
blackout_windows
object[]
max_concurrent_queries
integer | null
max_sample_rows
integer | null
source_timezone
string
environment
string
data_country
string | nullPaís dos dados desta fonte (ISO 3166-1 alfa-2, cartão #513); null = o do workspace. Decide como se leem telefones sem indicativo e códigos postais.
blackout_active
object | null
blackout_upcoming
object[]
tls_mode
string | null
tls_verified
boolean | null
created_at*
string (date-time)

ConnectorTypeOut

Um tipo do registo: metadados de catálogo e disponibilidade NESTA instalação.

A Ajuda e o wizard leem daqui a lista de conectores (cartão #321) — nunca de uma lista escrita à mão que diverge do `CONNECTOR_REGISTRY`.

type*
string
label*
string
group*
"database" | "warehouse" | "files" | "business_apps" | "streaming" | "documents" | "collaboration"
docs_anchor
string | null
available*
boolean
missing_extra
string | null
stub
boolean
unavailable_modes
object

ConsumerUsageOut

Consumidor com os consumos a 7 e 30 dias e o último (decisão incluída).

id*
string
name*
string
kind*
"agent" | "application" | "pipeline" | "notebook"
kind_label*
string
framework
string | null
owner
string | null
first_seen_at*
string (date-time)
last_seen_at*
string (date-time)
consumptions_7d*
integer
consumptions_30d*
integer
datasets_30d*
integer
decisions_7d*
objectConsumos dos últimos 7 dias por decisão (trusted, caution, untrusted, unknown).
last_decision
"trusted" | "caution" | "untrusted" | "unknown" | null
last_purpose
string | null
last_consumed_at
string (date-time) | null

ConsumptionBatchIn

Body de POST /trust/consumptions (cartão #166): só ids e rótulos — campos desconhecidos (conteúdo, queries, parâmetros) são recusados com 422.

dataset_ids*
string[]
purpose
stringagente | rag | treino | bi (ml = treino).
decision_seen
"trusted" | "caution" | "untrusted" | "unknown" | nullDecisão de confiança que o consumidor viu. Omitida: a da Trust API no momento do registo.
trust_as_of
string (date-time) | null`as_of` da decisão vista (com `decision_seen`).

ConsumptionOut

id*
string
dataset_id*
string
purpose*
string
decision*
"trusted" | "caution" | "untrusted" | "unknown"
trust_as_of
string (date-time) | null
run_ref
string | null
created_at*
string (date-time)
replayed*
booleanJá existia (mesmo run_ref): nada foi gravado de novo.

ContextColumnOut

Coluna com a sua sensibilidade.

name*
string
data_type*
string
nullable*
boolean
description*
string | null
sensitivity*
string | null
pii_type*
string | null

ContextComplianceOut

Conformidade com o contrato.

status*
string | null
problems*
string[]
problem_count*
integer

ContextExposureOut

Consumidor a jusante, só por nome.

name*
string
type*
string
maturity*
string | null

ContextFailedRuleOut

Regra que falhou no último scan.

rule_type*
string
column*
string | null
severity*
string

ContextFreshnessOut

Frescura. Sem metadados nem perfil: available false e reason.

available*
boolean
reason
string | null
last_modified_at
string | null
last_profiled_at
string | null

ContextIdentityOut

Identidade do dataset.

available*
boolean
id*
string
name*
string
schema*
string | null
table*
string
connector_type*
string | null
layer*
string | null
description*
string | null
row_count*
integer | null
domain*
GraphDomainOut | null
other_domains*
string[]
owners*
string[]Nomes dos owners (nunca o email).

ContextKnowledgeEntryOut

Entrada da base de conhecimento.

kind*
string
title*
string
body*
string
recorded_at*
string
ai_generated*
boolean

ContextLineageNodeOut

Vizinho direto na linhagem.

dataset_id*
string
name*
string
kind*
string | null
restricted
booleanSó presente (true) num dataset a que quem pede não tem acesso.

ContextOpenIssuesOut

Issues abertos por severidade e por tipo.

total*
integer
by_severity*
object
by_type*
object

ContextReadinessOut

Prontidão para IA. Sem scan: available false e reason.

available*
boolean
reason
string | null
overall
number | null
verdict
string | null
blockers
string[]
pii_columns
string[]

ContextReadmeOut

README publicado (excerto).

published_version*
integer
published_at*
string | null
ai_generated*
boolean
excerpt*
string

ContextSchemaOut

Schema e sensibilidade. Sem schema recolhido: available false e reason.

available*
boolean
reason
string | null
column_count
integer | null
pii_columns
integer | null

ContextTrustOut

Trust score. Sem score: available false e reason.

available*
boolean
reason
string | null
score
integer | null
grade
string | null
blocked
boolean | null
blockers
string[]

ContextUsageOut

Uso pelas queries da fonte. Sem query logs: available false e reason.

available*
boolean
reason
string | null
class
string | nullhot, active, cold ou dead.
queries_30d
integer | null
last_query_day
string | null

ContextUseCaseOut

Prontidão para um caso de uso de IA.

use_case*
string
label*
string
score*
number
verdict*
string
blocker*
string | null

ContractChangeOut

Uma secção acrescentada, alterada ou retirada entre duas versões.

section*
string
kind*
"column" | "table_quality" | "sla"
title*
string
column*
string | null
change*
"added" | "changed" | "removed"

ContractProposalOut

Proposta de contrato com secções, fios e diff face ao contrato ativo.

id*
string
status*
stringopen | accepted | withdrawn | expired
producer_label*
string
message*
string | null
created_at*
string (date-time)
expires_at*
string (date-time) | null
accepted_at*
string (date-time) | null
withdrawn_at*
string (date-time) | null
last_producer_activity_at*
string (date-time) | null
versions*
integer[]
active_version*
integer | null
baseline_version*
integer | null
removed_sections*
ContractChangeOut[]
pending_sections*
integer
can_accept*
boolean
yaml*
string
url*
string | nullLink de revisão do produtor: só para administradores e com a proposta aberta.

ContractProposalSectionOut

Secção da versão em revisão, com o estado, a mudança e o fio.

key*
string`schema.<coluna>`, `quality` ou `sla`.
kind*
"column" | "table_quality" | "sla"
title*
string
column*
string | null
content*
anyO excerto ODCS da secção (objeto da coluna ou lista).
hash*
stringSHA-256 do conteúdo da secção.
state*
"pending" | "accepted" | "changes_requested"
change*
"added" | "changed" | "removed" | "unchanged"
change_fields*
ContractFieldChangeOut[]

ContractProposalSummaryOut

Proposta de contrato na lista do dataset: estado e datas, sem secções nem link.

id*
string
status*
stringopen | accepted | withdrawn | expired
producer_label*
string
created_at*
string (date-time)
expires_at*
string (date-time) | null
accepted_at*
string (date-time) | null
withdrawn_at*
string (date-time) | null
last_producer_activity_at*
string (date-time) | null

ContractReviewEntryOut

Comentário ou decisão num fio de secção.

id*
string
author_kind*
stringproducer | member
author_label*
string
decision*
stringcomment | accept | request_changes
body*
string | null
created_at*
string (date-time)
version*
integer | nullNúmero da versão em que foi escrito.
applies_to_current*
booleanSe foi escrito sobre o conteúdo atual da secção.

ContractSectionOut

Secção revisível do contrato: uma por coluna, a qualidade da tabela e os SLA.

key*
string`schema.<coluna>`, `quality` ou `sla`.
kind*
"column" | "table_quality" | "sla"
title*
string
column*
string | null
content*
anyO excerto ODCS da secção (objeto da coluna ou lista).
hash*
stringSHA-256 do conteúdo da secção.

ContractStatusFindingOut

Problema do contrato em forma estruturada, por code: field_removed, type_diverged, upstream_changed, active_column_missing, active_type_diverged, active_required_nullable, active_column_extra, active_check_unenforced. Cada código traz só as chaves que lhe dizem respeito.

code*
string
column
string | null
rename_to
string | null
before
string | null
after
string | null
rule_type
string | null
check
string | null
dataset_id
string | null
dataset
string | null

ContractUpstreamChangeOut

Mudança de schema que quebra num dataset diretamente a montante.

dataset_id*
string
name*
string
issue_id*
string
summary*
string | null

ContractVersionDetailOut

A versão com o documento ODCS, o YAML e as secções.

id*
string
number*
integer
status*
stringproposed | active | superseded
origin*
stringobserved (gerada do observado) | revision (editada pela equipa)
note*
string | null
proposal_id*
string | null
created_at*
string (date-time)
activated_at*
string (date-time) | null
accepted_by_label*
string | nullNome de quem aceitou, do lado do produtor.
content*
objectO documento ODCS desta versão.
yaml*
string

ContractVersionSummaryOut

Uma versão do contrato ODCS do dataset, sem o documento.

id*
string
number*
integer
status*
stringproposed | active | superseded
origin*
stringobserved (gerada do observado) | revision (editada pela equipa)
note*
string | null
proposal_id*
string | null
created_at*
string (date-time)
activated_at*
string (date-time) | null
accepted_by_label*
string | nullNome de quem aceitou, do lado do produtor.

CriticalAlertItem

id*
string
title*
string
dataset_name
string | null
severity*
string
impact_eur_month
number | null
created_at*
string (date-time)

DataConsumerIn

Quem consome: o nome identifica-o no workspace, com o tipo (cartão #166).

name*
stringNome do consumidor (ex.: `faturas-copilot`). Com o `kind`, identifica-o no workspace. Só letras (de qualquer língua), algarismos, espaços e `_ . : / -`: o nome aparece nas mensagens de Slack e Teams, por isso marcação (`<`, `>`, `|`, `[`, `]`, `(`, `)`, `*`, `~`, `@`, `&`, a crase) dá 422.
kind*
"agent" | "application" | "pipeline" | "notebook"
framework
string | nullFramework do agente (ex.: `langchain`).
owner
string | nullEquipa ou pessoa responsável (rótulo livre).
run_ref
string | nullReferência do run/pedido do agente. Com ela, o registo é idempotente por (consumidor, dataset, run_ref): repetir não cria consumos novos.

DataConsumerOut

id*
string
name*
string
kind*
"agent" | "application" | "pipeline" | "notebook"
kind_label*
string
framework
string | null
owner
string | null
first_seen_at*
string (date-time)
last_seen_at*
string (date-time)

DataCountryOut

País dos dados de um dataset (cartão #513): o próprio, o efetivo e de onde vem.

country*
string | nullO do dataset (ISO 3166-1 alfa-2); null = herdado.
effective*
stringO que os scans usam: dataset → conexão → workspace.
source*
"dataset" | "connection" | "workspace"

DataDiffChecksumOut

Checksum de uma coluna nos dois lados.

method*
"pushdown" | "sample"
left*
integer
right*
integer
match*
boolean

DataDiffCountsOut

Contagens de linhas da base e do candidato.

left*
integer
right*
integer
delta*
integer
delta_pct*
number

DataDiffExamplesOut

Exemplos de chaves (só a chave, nunca valores de outras colunas).

only_left*
boolean | integer | number | string[][]
only_right*
boolean | integer | number | string[][]
changed*
boolean | integer | number | string[][]

DataDiffIn

Body de POST /datasets/{id}/diff/{other} (RECON v2). Percentagens em 0–100.

key_columns
string[] | nullChave de junção. Sem ela, a chave primária declarada na fonte da base, se o candidato tiver as mesmas colunas (cartão #347); `key_source` no relatório diz qual.
columns
string[] | null
warn_pct
number
fail_pct
number
column_threshold_pct
number
max_rows
integer | null
checksums
boolean

DataDiffRowsOut

Linhas só de um lado, alteradas e chaves duplicadas ou nulas.

only_left*
integer
only_right*
integer
matched*
integer
changed*
integer
only_left_pct*
number
only_right_pct*
number
changed_pct*
number
rows_changed_pct*
number
duplicate_keys_left*
integer
duplicate_keys_right*
integer
null_keys_left*
integer
null_keys_right*
integer

DataDiffSamplingOut

Amostragem usada para caber nos limites de linhas.

method*
"exact" | "sample_modulus" | "key_range"
modulus*
integer | null
estimated*
boolean
compared_rows*
integer
window_upper_key*
boolean | integer | number | string[] | null
rows_read
DataDiffRowsReadOut | nullAusente com method=exact.

DataDiffSchemaOut

Colunas que só existem num dos lados.

only_left*
string[]
only_right*
string[]

DataDiffThresholdsOut

Limiares aplicados, em percentagem.

warn_pct*
number
fail_pct*
number
column_threshold_pct*
number

DataPolicy

O JSON da política. Regras ausentes = desligadas (valores por omissão).

Os campos seguem a ordem de RULE_KEYS (o export GitOps é byte-a-byte estável); regras novas entram no fim.

pii_gold_requires_mask
PiiGoldRule
confidential_requires_owner
ConfidentialOwnerRule
export_blocked_with_pii
ExportPiiRule
require_owner
RequireOwnerRule
require_active_contract
RequireActiveContractRule
require_readme
RequireReadmeRule
require_freshness_rule
RequireFreshnessRule
require_classification_review
ClassificationReviewRule
min_score
MinScoreRule
min_ai_readiness
MinAiReadinessRule
no_real_pii_outside_prod
RealPiiOutsideProdRule
allow_domain_relax
boolean

DataPolicyRuleStatusOut

Uma regra da política, com o rótulo, a ajuda e a origem de cada campo.

key*
string
label*
string
enabled*
boolean
severity*
"warning" | "critical"
layers*
string[] | nullCamadas medallion; nulo = todas.
help*
string
params_schema*
objectJSON Schema dos parâmetros da regra.
source*
stringQuem impôs a regra: `workspace` ou `domain:<nome>`.
sources*
objectOrigem de cada campo da regra.

DatasetAiReadinessOut

Prontidão do dataset para IA: score global, componentes, PII provável, quase-identificadores, recomendações e prontidão por caso de uso.

overall*
number
verdict*
"pronto" | "com_reservas" | "nao_pronto" | "sem_dados"
label_quality*
AiReadinessLabelQualityOut | null
weights*
object
quasi_identifiers*
AiReadinessQuasiIdentifierOut[]
recommendations*
string[]

DatasetDetailOut

Detalhe: colunas, último profiling por coluna, histórico de score, issues abertos e sugestões (proposed+accepted) do dataset.

id*
string
connection_id*
string
schema_name
string | null
table_name*
string
name*
string
row_count
integer | null
size_bytes
integer | null
last_profiled_at
string (date-time) | null
created_at*
string (date-time)
auto_monitors_enabled
boolean
incremental_profiling
boolean
kind
"table" | "view" | "materialized_view" | "external" | "unknown"Tipo do objeto na fonte (cartão #347). `view` e `external` perfilam em `basic` sobre as primeiras linhas, salvo profundidade própria `standard` ou `deep` do dataset.
cost_guarded
booleanOs scans perfilam este dataset em `basic` sobre as primeiras linhas e sem contar valores distintos: `kind` é `view` ou `external` e o dataset não tem profundidade própria `standard` ou `deep` (cartão #347).
latest_score
number | null
layer
string | null
description
string | null
column_descriptions
object | null
docs_source
string | null
usage
DatasetUsageOut | null
readme_published_at
string (date-time) | null
trust
TrustOut | null
data_country
string | nullPaís dos dados próprio do dataset (ISO 3166-1 alfa-2, cartão #513); null = o da conexão ou, sem ele, o do workspace (o efetivo vem em `country` no detalhe).
suggestions_status
"pending" | "ready" | "failed" | "limited" | nullSugestões IA do último scan, geradas depois dele: `pending` (a gerar), `ready`, `failed` (ficam as heurísticas) ou `limited` (acima do teto de datasets com IA por scan — ficam as heurísticas). Null: nada a gerar (IA desligada ou sugestões IA reutilizadas do scan anterior).
columns
ColumnOut[]
score_history
ScorePointOut[]
open_issues
IssueOut[]
suggestions
SuggestionOut[]
auto_monitors
AutoMonitorsOut | null
incremental_profiling_status
IncrementalProfilingOut | null
freshness
FreshnessOut | null
country
DataCountryOut | null
connector_type
string | null
access_role
string | null

DatasetOut

id*
string
connection_id*
string
schema_name
string | null
table_name*
string
name*
string
row_count
integer | null
size_bytes
integer | null
last_profiled_at
string (date-time) | null
created_at*
string (date-time)
auto_monitors_enabled
boolean
incremental_profiling
boolean
kind
"table" | "view" | "materialized_view" | "external" | "unknown"Tipo do objeto na fonte (cartão #347). `view` e `external` perfilam em `basic` sobre as primeiras linhas, salvo profundidade própria `standard` ou `deep` do dataset.
cost_guarded
booleanOs scans perfilam este dataset em `basic` sobre as primeiras linhas e sem contar valores distintos: `kind` é `view` ou `external` e o dataset não tem profundidade própria `standard` ou `deep` (cartão #347).
latest_score
number | null
layer
string | null
description
string | null
column_descriptions
object | null
docs_source
string | null
usage
DatasetUsageOut | null
readme_published_at
string (date-time) | null
trust
TrustOut | null
data_country
string | nullPaís dos dados próprio do dataset (ISO 3166-1 alfa-2, cartão #513); null = o da conexão ou, sem ele, o do workspace (o efetivo vem em `country` no detalhe).
suggestions_status
"pending" | "ready" | "failed" | "limited" | nullSugestões IA do último scan, geradas depois dele: `pending` (a gerar), `ready`, `failed` (ficam as heurísticas) ou `limited` (acima do teto de datasets com IA por scan — ficam as heurísticas). Null: nada a gerar (IA desligada ou sugestões IA reutilizadas do scan anterior).

DatasetReadmeOut

dataset_id*
string
status*
string
draft_md
string | null
draft_mode
string | null
draft_disclaimer
string | null
draft_edited
boolean
ai_generated
booleanO rascunho foi gerado por IA (false no modo offline).
ai_model
string | nullModelo que gerou o rascunho.
generated_at
string (date-time) | null
requested_at
string (date-time) | null
edited_at
string (date-time) | null
edited_by
string | null
error
string | null
published_md
string | null
published_mode
string | null
published_disclaimer
string | null
published_at
string (date-time) | null
published_ai_generated
booleanA versão publicada foi gerada por IA — continua marcada depois de aprovada.
published_ai_model
string | nullModelo que gerou a versão publicada.
published_by
string | null
published_version
integer
has_unpublished_changes
boolean
can_approve
boolean
owners
string[]

DatasetTrustFactsOut

Factos de confiança do dataset num só envelope estável (só metadados). Com detail=minimal não vêm nomes de colunas nem texto livre.

schema_version*
integer
dataset_id*
string
dataset_name*
string
detail*
"minimal" | "full"
as_of*
string
last_scan_at*
string | null

DatasetUsageOut

Uso real segundo os query logs da plataforma.

tier*
string
queries_per_day*
number
queries_30d*
integer
queries_window*
integer
window_days*
integer
last_query_day
string (date-time) | null
suggested_depth*
string
suggested_frequency*
string
source*
string
collected_at*
string (date-time)

DatasetVerdictOut

Veredito do dataset para o gate de CI: fail com uma regra crítica falhada, o contrato inválido ou uma violação crítica da política; warn só com avisos; unknown sem scan. policy só vem quando a política é avaliada.

verdict*
"pass" | "warn" | "fail" | "unknown"
score*
number | null
scan_id*
string | null
policy
PolicyResultOut | null

DbtMatchCountsOut

rule_id*
integerTestes casados pelo `rule_id` em `meta.beryx` (ou `meta.datavault`).
signature*
integerTestes casados pela coluna e pelo tipo de teste.

DbtRunResultsDuplicateOut

O mesmo invocation_id já tinha sido recebido: nada foi gravado outra vez.

status*
string
invocation_id*
string
run_id*
string
schema_version*
integer
detail*
string

DbtTestCountsOut

executed*
integer
passed*
integer
failed*
integer
warned*
integer
errored*
integer
skipped*
integer

DbtTestResultItemOut

O que aconteceu a um teste do run_results.json.

unique_id*
string
test*
string
status*
string
failures*
integer | null
dataset_id*
string | null
rule_id*
string | null
matched_by*
string | nullrule_id | signature
outcome*
stringrule_result | dbt_test_issue | no_dataset | skipped

DecisionCountsOut

Datasets por decisão de confiança.

trusted*
integer
caution*
integer
unknown*
integer
untrusted*
integer

DemoPackOut

Seed pack por indústria (SEEDPACKS #127) — o seletor da demo.

id*
string
name*
string
industry*
string
tagline*
string
rule_pack_id*
string | null
rule_pack_name*
string | null
tables*
string[]
planted*
DemoPlantedOut[]

DemoPlantedOut

table*
string
column*
string | null
title*
string
story*
string

DimensionCheckOut

Um check que contou para a dimensão — só metadados, nunca valores observados.

source*
"rule" | "monitor"
ref*
string
column
string | null
passed*
boolean

DimensionEstimateOut

Dimensão do score calculada sobre uma amostra, não sobre a tabela inteira (cartão #294).

estimated
boolean
sample_size*
integerLinhas analisadas: as da amostra lida pelo scan.
duplicate_rows
integer | nullLinhas redundantes encontradas na amostra (unicidade).
sample_method
string | nullComo a amostra foi escolhida (cartão #317): system | bernoulli (TABLESAMPLE/SAMPLE nativo), hash (hash da chave primária), stride (uma em cada k linhas de um ficheiro), head (as primeiras linhas) ou full. None em scores anteriores ao cartão.
ci95
number[] | nullIntervalo de confiança a 95% da dimensão, na mesma escala 0–100 (Wilson sobre a taxa de duplicados da amostra, com correção de população finita; cartão #350). None em scores anteriores ao cartão.

DomainChangeOut

Uma mudança entre duas versões do data product (formato do diff de contratos): impact major quebra o consumidor, minor é compatível.

section*
string
kind*
string
title*
string
column
string | null
change*
string
impact*
string
dataset_id
string | null

DomainConsumerOut

id*
string
kind*
"user" | "ai_system" | "dbt_exposure" | "external"
ref_id*
string | null
name*
string
channel_id*
string | null
source*
"manual" | "derived"
created_at*
string (date-time)

DomainConsumersOut

GET /domains/{id}/consumers: a lista por tipo, as contagens e a frase de impacto.

domain_id*
string
total*
integer
by_kind*
object
summary*
string | null
consumers*
DomainConsumerOut[]

DomainDataPolicyOut

A parcial da política de um domínio e a efetiva que os seus datasets herdam.

domain_id*
string
domain_name*
string
policy*
objectSó os campos que o domínio fixa, por regra; vazio = herda tudo do workspace.
allow_domain_relax*
booleanSe o workspace deixa um domínio afrouxar as suas regras.

DomainDetailOut

id*
string
name*
string
description
string | null
owner_user_id
string | null
owner_name
string | null
dataset_ids*
string[]
member_ids*
string[]
score
number | null
score_delta_7d
number | null
open_issues*
DomainIssueCounts
open_issues_total*
integer
is_mine
boolean
can_manage
boolean
sla
DomainSla | null
attainment_current_month_pct
number | null
conformance_pct
number | null
restricted
boolean
access_role
string
can_read
boolean
status
string
version
string
published_at
string (date-time) | null
created_at*
string (date-time)
updated_at*
string (date-time)
datasets*
DomainDatasetOut[]
members*
DomainMemberOut[]

DomainDimensionOut

id*
string
score
number | null
datasets_measured*
integer
datasets_total*
integer
checks*
integer
passed*
integer
open_issues*
integer

DomainGrantOut

team_id*
string
team_name*
string
role*
string
granted_by*
string | null
created_at*
string (date-time)
updated_at*
string (date-time)

DomainOut

id*
string
name*
string
description
string | null
owner_user_id
string | null
owner_name
string | null
dataset_ids*
string[]
member_ids*
string[]
score
number | null
score_delta_7d
number | null
open_issues*
DomainIssueCounts
open_issues_total*
integer
is_mine
boolean
can_manage
boolean
sla
DomainSla | null
attainment_current_month_pct
number | null
conformance_pct
number | null
restricted
boolean
access_role
string
can_read
boolean
status
string
version
string
published_at
string (date-time) | null
created_at*
string (date-time)
updated_at*
string (date-time)

DomainReadinessDatasetOut

Readiness de um dataset do data product; open_slo_breaches é null sem SLA.

dataset_id*
string
dataset_name*
string
status*
"ready" | "ready_with_warnings" | "not_ready"
last_scan_at*
string | null
verdict*
"pass" | "warn" | "fail" | "unknown"
open_critical_issues*
integer
open_slo_breaches*
integer | null
next_scan_at*
string | null
blockers*
string[]
warnings*
string[]

DomainReadinessOut

Readiness do data product para um caso de uso: not_ready com algum bloqueador, ready_with_warnings só com avisos. valid_until é o próximo scan agendado (null sem agenda); sla é null sem SLA declarado.

domain_id*
string | null
domain_name*
string | null
use_case*
"rag" | "ml" | "agente" | "bi"
status*
"ready" | "ready_with_warnings" | "not_ready"
checked_at*
string
valid_until*
string | null

DomainSla

SLA declarado do data product (cartão #141). Gamas validadas no service.

- freshness_hours: alvo de frescura dos datasets sem regra própria (com regra, vale o mais exigente); - min_score: 0–100 — dia com score abaixo conta como violado; - attainment_objective_pct: 50–100 (omissão 95); - verdict_required: dia com veredito fail conta como violado.

freshness_hours
number | null
min_score
number | null
attainment_objective_pct
number
verdict_required
boolean

DomainSloViolationOut

date*
string
dataset_id*
string
dataset_name*
string
target_hours
number | null
observed_hours
number | null
issue_count
integer
score
number | null
verdict
string | null
reasons
string[]

DomainSuggestionCountsOut

without_domain*
integer
with_lineage*
integerDatasets sem domínio com pelo menos uma ligação de linhagem.
suggested*
integer
ambiguous*
integer

DomainSuggestionNeighbourOut

Um vizinho de linhagem; um invisível a quem pede vem como «Dataset restrito», com um id opaco (restrito-N) e restricted: true (ADR 0011 §2.4).

dataset_id*
string
name*
string
restricted*
boolean
voted*
boolean

DomainVerdictOut

Veredito do data product: o pior dos seus datasets (unknown se nenhum tem veredito), as contagens e o veredito de cada dataset, por nome.

domain_id*
string
domain_name*
string
verdict*
"pass" | "warn" | "fail" | "unknown"
with_policy*
boolean

DomainVersionDiffOut

Diff entre duas versões; to_version=current é o estado atual tal como seria publicado. next_version (a versão que a publicação gravaria) só vem quando a origem é a última versão; nos outros casos é null.

domain_id*
string
from_version
string | null
to_version*
string
next_version
string | null
bump
string | null
summary*
string
changes*
DomainChangeOut[]

DomainVersionOut

Versão publicada do data product (cartão #168).

id*
string
version*
string
bump*
string
change_summary*
string
changes_count*
integer
breaking_changes*
integer
datasets*
integer
created_by
string | null
created_at*
string (date-time)

DossierIssueOut

issue_id*
string
type*
string
subtype
string | null
severity*
string
opened_at*
string (date-time)

DossierLineageOut

upstream*
string[]
downstream*
string[]
hidden_upstream*
integer
hidden_downstream*
integer

DossierRequirementOut

code*
string
title*
string
dimensions*
string[]
human_assessment*
boolean
cdes_by_status*
object

DossierRuleOut

rule_id*
string
rule_type*
string
columns*
string[]
severity*
string
last_passed
boolean | null
last_run_at
string (date-time) | null

DossierSlaOut

domain_name*
string
objective_pct*
number
attainment_pct
number | null

DossierSummaryOut

cdes*
integer
required_checks*
integer
covered_checks*
integer
coverage_pct
number | null
cdes_without_gaps*
integer
gaps*
integer
failing_dimensions*
integer

DuplicateClusterOut

id*
string
scan_id*
string
dataset_id*
string
dataset_name
string | null
columns
string[]
confidence*
number
row_count*
integer
sample
object[] | null
status*
string
created_at*
string (date-time)
confidence_band*
string
reference_precision*
number | null

ErrorResponse

Corpo de todas as respostas de erro da API.

detail*
string | ValidationItem[] | objectO motivo, legível; na validação (422), a lista dos campos recusados.
code
string | nullCódigo estável do erro quando existe (ex.: `auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`); senão `null`. Decide por este campo, não pelo texto de `detail`.
request_id*
stringO mesmo valor do header `X-Request-ID`: o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Cita-o ao suporte.

ExternalCatalogConnectionOut

connection_id*
string
connection_name*
string
catalog*
string
enabled*
boolean
import_on_sync*
boolean
last_import_at
string (date-time) | null
tables_read*
integer
glossary_terms*
integer
changes*
integer

ExternalJobOut

Job OpenLineage do cliente que liga um nó externo (cartão #130).

namespace*
string
name*
string
source
string | null
last_event_type
string | null
last_event_label
string | null
last_event_at
string | null
failed
boolean

ExternalLineageNodeOut

Nó fora dos nossos datasets visto no OpenLineage do cliente (S3, Kafka...).

node_id*
string
namespace*
string
name*
string
label*
string
depth*
integer
from_dataset_id*
string
kind
string
failed
boolean
last_seen_at
string | null

ExternalTicketOut

Ticket num sistema externo ligado a uma entidade do DataVault (cartão #374).

status não é sincronizado com o vendor: um ticket criado pelo DataVault nasce open; um ligado à mão (ou anterior a esta versão) fica unknown.

id*
string
entity_type*
string
entity_id*
string
integration_id
string | null
provider*
string
external_key*
string
url*
string
status*
string
created_by
string | null
created_at*
string (date-time)
last_synced_at
string (date-time) | null
last_status_at
string (date-time) | null

FailureParamsOut

O que a regra pedia (nunca o valor do registo).

fields*
string[]`missing_fields`: os campos obrigatórios em falta.
kind*
string | null`invalid_*`: o tipo de identificador (nif, iban…).
reference*
string | null`not_in_reference`: a lista de referência.
min*
number | null`range`: o mínimo da regra.
max*
number | null`range`: o máximo da regra.

FinopsDatasetOut

dataset_id*
string
name*
string
size_bytes*
integer
row_count
integer | null
storage_eur_month*
number
quality_waste_eur_month*
number
total_eur_month*
number
latest_score
number | null

FinopsTotalsOut

storage_eur_month*
number
quality_waste_eur_month*
number
total_eur_month*
number
potential_savings_eur_month*
number

FreshnessOut

Coluna que mede a frescura do dataset e como foi lida no último perfil.

column
string | null
candidates
string[]
used_column
string | null
detected_column
string | null
source
string | null
latest_timestamp
string | null
timezone
string | null
source_timezone
string
future_columns
string[]
configured_missing
boolean
profiled_at
string | null
rule_id
string | null
rule_column
string | null
rule_max_age_hours
number | null

GateCorpusOut

compared*
integerImpressões digitais do corpus consideradas.
truncated*
booleanA comparação aproximada usou só as 5000 mais recentes (os exatos veem o corpus todo).
expected_languages*
string[]

GateDocumentIn

Um documento do lote: texto já extraído + metadata opcional.

id*
stringIdentificador do documento no pipeline (caminho, URL, chave). Único no lote.
text*
stringTexto extraído do documento (máx. 100000 caracteres).
metadata
objectMetadata livre (nunca persistida). `modified_at` (ISO 8601) ativa a flag `desatualizado`.

GateFlagOut

code*
"vazio" | "pii" | "duplicado_exato" | "duplicado_aproximado" | "idioma_inesperado" | "boilerplate" | "curto" | "codificacao" | "desatualizado"
severity*
"rejeitar" | "rever" | "info"
message*
string
details
objectContexto da flag: `types` (pii), `origem`/`ref`/`similarity` (duplicados), `detected`/`expected` (idioma), `reasons` (boilerplate).

GatePolicyIn

O que o pipeline tolera. Omitido = os limiares da análise de corpus.

expected_languages
"pt" | "en" | "es" | "fr"[] | nullIdiomas esperados. Omitido e com `dataset_id`: os idiomas dominantes do último scan do corpus. Sem nenhum dos dois, a flag `idioma_inesperado` não se aplica.
allowed_pii
"email" | "NIF" | "IBAN" | "telefone" | "cartao_pagamento"[]Tipos de dados pessoais tolerados (a flag `pii` passa a `info`).
pii_action
"rejeitar" | "rever"Severidade da flag `pii` para tipos não tolerados.
min_chars
integerAbaixo disto a flag `curto` (rever).
stale_after_days
integer | nullIdade (por `metadata.modified_at`) a partir da qual o documento é `desatualizado`. `null` desliga.

GateQuotaOut

remaining_this_month*
integer | nullDocumentos que ainda cabem no plano; `null` = ilimitado.

GateResultOut

id*
string
verdict*
"aceitar" | "rever" | "rejeitar"`rejeitar` se alguma flag rejeita; `rever` se alguma pede revisão; senão `aceitar`.
score*
number0–100: 100 menos a penalização das flags.
flags*
GateFlagOut[]
content_hash*
string | nullSHA-256 do texto normalizado (espaços colapsados) — o que o gate compara.
chars*
integer
language*
string | null

GateSummaryOut

total*
integer
aceitar*
integer
rever*
integer
rejeitar*
integer

GovernanceCellOut

value
number | null
target
number | null
status*
"on_target" | "at_risk" | "off_target" | "no_data" | "no_target"

GovernanceGroupOut

code*
"coverage" | "resolution" | "sla" | "adoption" | "quality" | "incidents" | "usage"
label*
string

GovernanceKpiOut

code*
stringCódigo estável do KPI (ex.: `ownership_pct`, `score_validity`).
group*
"coverage" | "resolution" | "sla" | "adoption" | "quality" | "incidents" | "usage"
unit*
"pct" | "hours" | "count" | "score"
direction*
"higher" | "lower"
history*
"derived" | "snapshot"`derived` reconstituído dos carimbos; `snapshot` do fecho mensal.
label*
string
definition*
string
dimension
string | null
value
number | nullNone = nada medido.
sample*
integerO que sustenta o valor: datasets, problemas, decisões ou dataset-dias.
window*
"last_30d" | "now"
previous
number | null
previous_key
string | null`prior_30d` (fluxo) ou o mês (YYYY-MM) do fecho anterior.
delta
number | null
target
number | null
target_source*
"workspace" | "organization" | "domain_sla" | "default" | "none"
status*
"on_target" | "at_risk" | "off_target" | "no_data" | "no_target"
gap
number | nullFolga (+) ou falta (−) face à meta, na unidade.

GovernanceOut

Painel de eficácia do programa de governação (cartão #274): KPIs com meta, semáforo, variação e tendência mensal; no workspace, a matriz por domínio e as metas (workspace → organização → omissão).

scope*
"workspace" | "domain"
scope_id*
string
scope_name*
string
as_of*
string (date-time)
months*
integer
window_days*
integer
datasets_total*
integer
trend_available*
boolean
snapshots_since
string | nullPrimeiro mês com fecho mensal (cobertura e uso).
organization_id
string | null
sla
object | null

GovernancePeriodOut

period_key*
string
start*
string (date-time)
end*
string (date-time)
partial*
boolean

GovernanceSummaryOut

on_target*
integer
at_risk*
integer
off_target*
integer
no_data*
integer
no_target*
integer
judged*
integerKPIs com valor e meta.
on_target_pct
number | null

GovernanceTargetRowOut

code*
string
workspace
number | null
organization
number | null
default
number | null
effective
number | null
source*
"workspace" | "organization" | "domain_sla" | "default" | "none"

GovernanceTrendPointOut

period_key*
stringMês UTC (YYYY-MM).
value
number | null
partial*
booleanMês corrente: medido até agora.

GraphDatasetOut

Dataset de partida de uma consulta ao grafo.

id*
string
name*
string
layer*
string | nullCamada medallion (bronze, silver, gold) ou null.

GraphEdgeOut

Ligação entre dois datasets, com as origens e o mapa de colunas.

from*
stringNome do dataset a montante.
to*
stringNome do dataset a jusante.
kinds*
string[]Origens da ligação, a mais forte primeiro.
via_columns*
string[]Colunas de ligação (vazio com um dataset restrito).
columns*
string[]Mapa de colunas «a → b» (vazio com um dataset restrito).

GraphExposureOut

Consumidor a jusante, só por nome: exposure dbt ou consumidor registado.

name*
string
type*
string
maturity*
string | null
depth*
integer
via_dataset*
stringDataset por onde o impacto chega ao consumidor.
node
string | nullSó presente num consumidor registado.
consumptions_7d
integer | nullSó presente num consumidor registado.
last_decision
string | nullSó presente num consumidor registado.

GraphFindFiltersOut

Filtros aplicados; só os que foram dados.

query
string | null
layer
string | null
domain
GraphDomainOut | null
has_pii
boolean | null
min_score
number | null
usage_class
string | null

GraphFoundDatasetOut

Dataset que cumpre todos os filtros.

id*
string
name*
string
layer*
string | null
score*
number | null
usage_class*
string | null
pii_columns*
string[]Nomes das colunas com dados pessoais.

GraphImpactedColumnOut

Coluna a jusante que deriva da coluna pedida.

dataset*
string
column*
string | null
from*
stringColuna de onde deriva («dataset.coluna»).
transform*
string | null
depth*
integer

GraphImpactedDatasetOut

Dataset a jusante afetado por uma mudança.

id*
stringId do dataset; num dataset restrito, um id opaco.
name*
string
layer*
string | null
restricted
booleanSó presente (true) num dataset a que quem pede não tem acesso.
depth*
integer
kind*
stringOrigem da ligação por onde o impacto chega.
via_column*
string | null

GraphNeighbourOut

Dataset a montante ou a jusante, até ao número de saltos pedido.

id*
stringId do dataset; num dataset restrito, um id opaco.
name*
string
layer*
string | null
restricted
booleanSó presente (true) num dataset a que quem pede não tem acesso.
depth*
integerSaltos a partir do dataset de partida.
path*
stringCaminho no sentido do fluxo dos dados («A → B → C»).

HealthOut

status*
string
env*
string
version*
string
build_sha*
string
api_version*
stringVersão da API pública (changelog de developers), com semver próprio.

IdeColumnProfileOut

Perfil de uma coluna para o hover, sem valores.

name*
string
data_type*
string
null_pct*
number | null
distinct_count*
integer | null
classification*
string | nullNível de sensibilidade; nulo = sem classificação.
pii*
boolean
profiled*
booleanSe o último perfil trouxe métricas desta coluna.

IdeDatasetSummaryOut

Resumo de qualidade de uma tabela referenciada no código. Só metadados.

id*
string
name*
string
schema_name*
string | null
table_name*
string
connection_name*
string
layer*
string | nullCamada medallion detetada pelo nome.
score*
number | null
trust_score*
integer | null
trust_grade*
string | null
open_issues*
integer
open_issues_by_severity*
object
contract_version*
integer | nullNúmero do contrato ativo; nulo = sem contrato.
has_pii*
boolean
pii_columns*
string[]
policy_status*
"off" | "pass" | "warn" | "fail"
policy_violations*
PolicyViolationOut[]

ImpactedDatasetOut

dataset_id*
string
name*
string
depth*
integer
via_column
string | null
kind*
string
restricted
boolean

ImpactedExposureOut

Consumidor afetado — nó-folha da linhagem: exposure dbt (cartão #107) ou consumidor registado pela Trust API (cartão #166, node: consumer).

id*
string
node
"exposure" | "consumer"
unique_id*
string
name*
string
label
string | null
display_name*
string
type*
string
type_label*
string
maturity
string | null
owner_name
string | null
owner_email
string | null
url
string | null
description
string | null
depth*
integer
direct*
boolean
via_dataset_id*
string
via_dataset_name*
string
path*
string[]
framework
string | null
consumptions_7d
integer | null
last_decision
string | null
last_consumed_at
string (date-time) | null

ImpactNodeOut

Nó da árvore de impacto (pré-ordem; depth para indentar).

dataset_id*
string
name*
string
parent_id
string | null
depth*
integer
issue_count*
integer
impact
"column" | "table" | null
via_columns
string[]

IncidentIssueOut

id*
string
dataset_id*
string
dataset_name*
string
title*
string
type*
string
severity*
string
status*
string
created_at*
string (date-time)

IncidentOut

Incidente derivado: sem tabela própria, estado vem das issues agrupadas.

id*
string
title*
string
root_dataset_id*
string
root_dataset_name*
string
root_issue_id*
string
started_at*
string (date-time)
last_seen_at*
string (date-time)
status*
string
severity*
string
issue_count*
integer
dataset_count*
integer
impact_tree*
ImpactNodeOut[]
impact_summary
string | null
diagnosis_report_id
string | null
diagnosis_status
string | null
impact_scope
"column" | "table" | "none"
impact_columns
string[]
impact_note
string | null
downstream_count
integer
downstream_column_count
integer
exposures_count
integer

IncrementalProfilingOut

Perfil incremental do dataset: configuração, limiares e último estado.

enabled*
boolean
supported*
boolean
column
string | null
detected_column
string | null
candidates
string[]
min_rows*
integer
full_every*
integer

IncrementalStateOut

Como foi feito o último perfil: mode full|incremental e porquê (reason).

mode*
string
reason*
string
column
string | null
watermark
string | null
since
string | null
window_rows
integer | null
runs_since_full
integer
baseline
boolean
estimated_distinct
string[]
missing_sketches
string[]
profiled_at
string | null

IssueBoardCellOut

status*
string
assignee_id
string | null
assignee_name
string | null
count*
integer

IssueEventOut

Um passo do rasto de um issue (Atividades v1).

id*
string
field*
string
from_value
string | null
to_value
string | null
from_label
string | null
to_label
string | null
actor_id
string | null
actor_name
string | null
note
string | null
created_at*
string (date-time)

IssueOut

id*
string
workspace_id*
string
dataset_id
string | null
dataset_name
string | null
scan_id
string | null
type*
string
subtype
string | null
severity*
string
title*
string
description
string
impact
object | null
status*
string
assignee_id
string | null
assignee_name
string | null
assignee_team_id
string | null
assignee_team_name
string | null
due_date
string (date-time) | null
snoozed_until
string (date-time) | null
resolution_reason
string | null
sla_breached_at
string (date-time) | nullQuando o issue passou o alvo do SLA de resolução da sua severidade (null = dentro do SLA ou sem alvo). Fica depois de resolver.
external_ticket_url
string | nullDepreciado desde a API 1.36.0 — usa `tickets`. URL do primeiro ticket externo ligado ao issue; deixa de vir numa major, não antes de 2027-04-05.
created_at*
string (date-time)
updated_at*
string (date-time)
resolved_at
string (date-time) | null
regression_suggestion
object | null
dimension*
string | nullDimensão de qualidade do issue pelo mapa determinístico (cartão #264).

IssueSeverityCountsOut

Issues abertos ou reconhecidos por severidade, e o total.

critical*
integer
warning*
integer
info*
integer
total*
integer

IssueStatus

Values: "open" · "acknowledged" · "resolved" · "ignored"

IssueType

Values: "rule_violation" · "duplicates" · "schema_drift" · "schema_change" · "anomaly" · "auto_monitor" · "document" · "reported" · "engineering" · "cost_anomaly" · "label_quality" · "unused_dataset" · "dbt_divergence" · "metric_drift" · "policy_violation" · "slo_breach" · "matching" · "pipeline_sync" · "bi_refresh"

KnowledgeEntryOut

id*
string
kind*
string
title*
string
body*
string
dataset_id
string | null
issue_id
string | null
source_ref
string | null
tags
string[]
created_by*
string
outdated*
boolean
created_at*
string (date-time)
updated_at*
string (date-time)
ai_generated
boolean
disclaimer
string | null

KnowledgeKind

Tipo de entrada da base de conhecimento.

Values: "report" · "rca" · "resolution" · "decision" · "note"

LabelQualityOut

Estado da qualidade de rótulos de um dataset.

available*
boolean
install_hint
string | null
label_column
string | null
feature_columns
string[]
pii_columns
string[]
pii_confirmed
boolean
pii_confirmed_at
string | null
pii_confirmed_by
string | null
max_features*
integer
last_result
object | null

LineageColumnMapOut

Ligação coluna a coluna numa aresta de linhagem.

upstream_column*
string
downstream_column*
string
transform*
string
confidence*
string
expression*
string | null

LineageConsumerLeafOut

Consumidor registado (agente, aplicação, pipeline) que leu o dataset.

id*
string
node*
string
unique_id*
string
name*
string
label*
string | null
display_name*
string
type*
string
type_label*
string
maturity*
string | null
owner_name*
string | null
owner_email*
string | null
url*
string | null
description*
string | null
framework*
string | null
consumptions_7d*
integer
last_decision*
string | null
last_consumed_at*
string | null
depth*
integer
direct*
boolean
via_dataset_id*
string
via_dataset_name*
string
path*
string[]

LineageExposureLeafOut

Exposure dbt (dashboard, app, notebook) que depende do dataset.

id*
string
node*
string
unique_id*
string
name*
string
label*
string | null
display_name*
string
type*
string
type_label*
string
maturity*
string | null
owner_name*
string | null
owner_email*
string | null
url*
string | null
description*
string | null
depth*
integer
direct*
boolean
via_dataset_id*
string
via_dataset_name*
string
path*
string[]

LineageImpactOut

O que parte se o dataset (ou uma coluna dele) mudar.

column*
string | null
exposures*
GraphExposureOut[]
external*
string[]Destinos fora do warehouse, vistos no OpenLineage.
summary*
string | null
truncated*
boolean
max_depth*
integer
exposure_max_depth*
integer
column_lineage
boolean | nullSó presente quando se pede uma coluna.
columns
GraphImpactedColumnOut[]Só presente quando se pede uma coluna.

LineageNeighbourOut

Vizinho direto na linhagem (fonte ou dependente).

edge_id*
string
dataset_id*
stringId do dataset; num dataset restrito, um id opaco.
name*
string
via_column*
string | null
kind*
string
restricted
booleanSó presente (true) num dataset a que quem pede não tem acesso.

MetadataCheckCountOut

code*
string
label*
string
dimension*
"completeness" | "timeliness" | "consistency"
passed*
integer
failed*
integer
not_applicable*
integer
coverage_pct
number | null% dos datasets aplicáveis que cumprem (None sem aplicáveis).

MetadataCheckOut

code*
string
label*
string
dimension*
"completeness" | "timeliness" | "consistency"
status*
"passed" | "failed" | "not_applicable"
applicable*
boolean
passed*
boolean
severity*
string
detail*
string
issue_code
string | null
link*
string
endpoint*
string

MetadataDimensionOut

code*
"completeness" | "timeliness" | "consistency"
label*
string
pct
number | null
met*
integer
applicable*
integer

MetadataQualityOut

Qualidade do catálogo e dos metadados (cartão #270): completude, atualidade e coerência por dataset, com checks não aplicáveis fora do denominador, problemas com sugestões, meta, tendência diária e o catálogo externo.

scope*
"workspace" | "domain"
scope_id*
string
scope_name*
string
as_of*
string (date-time)
pct
number | null
met*
integer
applicable*
integer
datasets_total*
integer
datasets_truncated*
boolean
external_catalog*
ExternalCatalogOut
trend_available*
boolean

MetadataSuggestionOut

channel*
"readme" | "catalog_import" | "manual" | "lineage"
action*
string
datasets*
integer
link*
string
endpoint*
string

MetadataTargetOut

target_pct
number | null
reached
boolean | null
gap_pp
number | nullPontos percentuais em falta até à meta.

OrchestratorRunIn

Run reportado por um orquestrador (v1: Airflow, via beryx-airflow).

source
string
external_run_id*
string
status*
"running" | "success" | "error" | "cancelled"
connection_id
string | null
job_id
string | null
job_name
string | null
project_name
string | null
environment_name
string | null
status_message
string | null
started_at
string (date-time) | null
finished_at
string (date-time) | null

OrchestratorRunOut

Run de um orquestrador (dbt Cloud, dbt Core, Airflow…): só metadados.

id*
string
source*
string
external_run_id*
string
job_id*
string | null
job_name*
string | null
project_id*
string | null
project_name*
string | null
environment_name*
string | null
status*
string
status_message*
string | null
connection_id*
string | null
scan_id*
string | null
started_at*
string (date-time) | null
finished_at*
string (date-time) | null
created_at*
string (date-time)

OrchestratorSource

Values: "dbt_cloud" · "airflow" · "fivetran" · "airbyte" · "dbt_core"

PackRuleOut

key*
string
title*
string
rule_type*
string
severity*
string
params*
object
columns*
string[]
rationale*
string
examples_valid
string[]
examples_invalid
string[]

ParseColumnOut

Campo composto de uma coluna (cartão #386): componentes e cobertura na amostra.

Sem valores da amostra: os exemplos que não se decompõem vêm como máscaras (dígito → 9, letra → A).

column*
string
kind*
string
locale*
string
samples*
integer
parsed*
integer
success_rate*
number
confidence*
number
hinted*
boolean
components*
object
failing_masks*
string[]
suggestion_signature*
string

PiiColumnOut

column*
string
pii_type*
string
pii_type_label*
string
special_category
boolean
source*
string
evidence*
string
sample_matches
integer | null
sample_size
integer | null
covered
boolean
rule_types
string[]
quasi_identifier
string | null
generalization
string | null

PiiDatasetOut

dataset_id*
string
dataset_name*
string
connection_name*
string
connector_type*
string
last_profiled_at
string (date-time) | null
pii_column_count
integer
covered_column_count
integer
special_category
boolean
types
object
columns
PiiColumnOut[]
quasi_identifier_count
integer
k_min_estimate
integer | null

PiiSummaryOut

datasets_total
integer
datasets_profiled
integer
datasets_with_pii
integer
pii_columns
integer
special_category_columns
integer
covered_columns
integer
coverage_pct
number | null
by_type
object
quasi_identifier_columns
integer
min_k
integer

PiiTypeOut

key*
string
label*
string
special_category
boolean

PipelineEndpointOut

Uma ponta do pipeline: tabela e quando foi atualizada (e há quanto tempo).

table*
string
updated_at
string (date-time) | null
age_s
integer | null

PipelineHealthItemOut

provider*
string
provider_label*
string
integration_id*
string
integration_name*
string
pipeline_id*
string
pipeline_name*
string
status*
"ok" | "failed" | "delayed" | "paused" | "unknown"
detail
string | null
last_success_at
string (date-time) | null
last_failure_at
string (date-time) | null
last_run_message
string | null
expected_interval_s
integer | null
delay_threshold_s
integer | null
rows_synced
integer | null
pipeline_rows_synced
integer | null
lag_s
integer | null
recon
PipelineReconOut | null
schema_change
PipelineSchemaChangeOut | null
synced_at
string (date-time) | null

PipelineReconOut

RECON #16 entre os perfis mais recentes da origem e do destino.

source_count*
integer
target_count*
integer
delta*
integer
delta_pct
number | null
tolerance_pct*
number
fail_pct*
number
status*
"ok" | "warn" | "fail"
method*
string
source_profiled_at
string | null
target_profiled_at
string | null
comparable*
boolean
note
string | null

PipelineRunOut

id*
string
source*
string
external_run_id*
string
job_id
string | null
job_name
string | null
project_id
string | null
project_name
string | null
environment_name
string | null
status*
string
status_message
string | null
connection_id
string | null
scan_id
string | null
started_at
string (date-time) | null
finished_at
string (date-time) | null
created_at
string (date-time) | null

PipelineSchemaChangeOut

Tabelas que entraram/saíram do pipeline num sync (as listas são cortadas).

detected_at*
string
added*
string[]
removed*
string[]
added_total*
integer
removed_total*
integer

PipelineSourceOut

table
string | null
updated_at
string (date-time) | null
age_s
integer | null
dataset_id
string | null
name
string | null
restricted
boolean

PlanLimitErrorResponse

Corpo do 402: o limite do plano que o pedido atingiu.

detail*
string | ValidationItem[] | objectO motivo, legível; na validação (422), a lista dos campos recusados.
code
string | nullCódigo estável do erro quando existe (ex.: `auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`); senão `null`. Decide por este campo, não pelo texto de `detail`.
request_id*
stringO mesmo valor do header `X-Request-ID`: o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Cita-o ao suporte.
plan*
stringO plano atual do workspace (ex.: `free`, `pro`).
limit*
stringO limite atingido: uma funcionalidade (ex.: `compliance`) ou uma quota (ex.: `rag_gate_documents_per_month`).

PolicyViolationOut

Violação de uma regra da política de dados. Depois de source vêm os pormenores da regra, só os que ela usa.

rule*
string
label*
string
severity*
"warning" | "critical"
columns*
string[]
message*
string
source*
stringQuem impôs a regra: `workspace` ou `domain:<nome>`.
layer
string | null
min_level
string | null
export
string | null
readme_status
string | null
max_age_days
integer | null
oldest_days
integer | null
use_case
string | null
score
number | null
threshold
number | null
verdict
string | null
environment
string | null
identifier_kinds
string[] | null
min_valid_pct
number | null

PreviewItemOut

rule_key*
string
title*
string
rule_type*
string
severity*
string
column*
string | null
params*
object
status*
string

ProfileDepth

Profundidade do profiling (por scan, com teto por plano).

Values: "basic" · "standard" · "deep"

RagGateRequest

documents*
GateDocumentIn[]Lote a avaliar (1–100 documentos, ≤ 2 000 000 caracteres no total).
dataset_id
string | nullCorpus contra o qual detetar duplicados (um dataset do workspace — p.ex. o corpus documental de um bucket). Sem ele, só se deteta duplicação dentro do lote.
dry_run
booleanAvalia sem registar nada no corpus. Conta para a quota mensal do plano.

ReadinessFindingOut

Bloqueador ou aviso com code estável; sem dataset quando é do data product.

code*
string
dataset_id*
string | null
dataset_name*
string | null
message*
string

RecordFailureOut

rule_id*
string
rule_type*
string
column*
string | null
severity*
string`critical`, `warning` ou `info`, como na regra.
code*
"null_value" | "missing_fields" | "pattern_mismatch" | "not_numeric" | "below_min" | "above_max" | "invalid_shape" | "invalid_check_digit" | "not_in_reference"Motivo estável da falha.
message*
stringO motivo em pt-PT, composto a partir de `code` e `params`.

RecordValidationRequest

records*
object[]Registos a validar: objetos JSON com as colunas do dataset no topo (1–5000 registos, corpo ≤ 2 MB; acima, 413). Nunca são guardados.
rule_ids
string[] | nullSó estas regras do dataset (ativas). Omitido: todas as regras ativas. Um id que não seja de uma regra ativa do dataset dá 422.

RecordValidationResponse

dataset_id*
string
verdict*
"pass" | "warn" | "fail" | "unknown"Do lote, como o veredito do gate de CI: `fail` se uma regra crítica passa da tolerância, `warn` se só outras passam, `unknown` se nenhuma regra avaliou registos.
rules*
RuleValidationOut[]Uma entrada por regra, pela ordem das regras.
results*
RecordResultOut[]Um resultado por registo, pela ordem do lote.

ReportOut

id*
string
workspace_id*
string
dataset_id
string | null
issue_id
string | null
domain_id
string | null
persona*
string
report_type*
string
status*
string
content_md
string | null
language
string | nullLíngua do texto de content_md (pt, en ou es); null nos relatórios anteriores, escritos em pt.
model
string | null
tokens_used
integer | null
error
string | null
correlation_id*
string
created_at*
string (date-time)
completed_at
string (date-time) | null
ai_generated
booleanConteúdo gerado por um modelo de IA; false no modo offline.
ai_model
string | nullModelo que gerou o conteúdo.
generated_at
string (date-time) | nullQuando o conteúdo foi gerado (UTC); null sem IA.

ReportTraceNodeOut

id*
string
title*
string
description*
string
status*
string
summary*
string
started_at
string | null
ended_at
string | null
duration_ms
integer | null
meta*
object
badges*
string[]
configurable*
RoutineConfigOut[]

RuleLastResultOut

Último resultado de uma regra num scan (cartão #164).

status*
"passed" | "failed" | "not_evaluated"`not_evaluated`: a regra correu mas não se conseguiu verificar (por exemplo, uma `referential` com a referência noutra ligação acima de 200 000 chaves); não abre issue nem conta no score.
scan_id*
string
evaluated_at*
string (date-time)
observed
string | null
threshold
string | null
reason
string | nullPorque não foi avaliada (só com `status=not_evaluated`); sem valores dos dados.

RuleOut

id*
string
workspace_id*
string
dataset_id
string | null
column_name
string | null
rule_type*
string
params
object
severity*
string
enabled*
boolean
created_at*
string (date-time)
last_result
RuleLastResultOut | null

RulePackOut

id*
string
version*
string
name*
string
industry*
string
tagline*
string
rule_count*
integer
rule_types*
object
rationale_md*
string
rules*
PackRuleOut[]

RulePackSummary

id*
string
version*
string
name*
string
industry*
string
tagline*
string
rule_count*
integer
rule_types*
object

RuleRetuneOut

Reajuste/recalibração de regra à espera de aprovação (#157 retune, #156 tuning).

suggestion_id*
string
kind*
string
title*
string
rule_id
string | null
rule_type
string | null
column_name
string | null
previous_params
object | null
params
object | null
created_at
string (date-time) | null

RuleValidationOut

rule_id*
string
rule_type*
string
column*
string | null
severity*
string
not_applicable_code*
"dataset_level" | "evaluated_at_source" | "cross_dataset" | "invalid_rule" | "reference_list_missing" | "regex_timeout" | nullPreenchido quando a regra não se avalia em nenhum registo: regra do dataset inteiro, avaliada por SQL na fonte, entre datasets, inválida, lista do registo em falta ou regex acima do tempo.
passed*
integer
failed*
integer
not_applicable*
integerRegistos em que a regra não se aplica (p.ex. valor nulo).
failed_pct*
number | null% de falhas nos registos avaliados; `null` sem nenhum.
threshold_pct*
numberTolerância da regra (`max_null_pct`/`max_violation_pct`).
within_threshold*
boolean | null`failed_pct` ≤ `threshold_pct`; `null` se a regra não avaliou nenhum registo.

SankeyColumnOut

index*
integer
layer*
"bronze" | "silver" | "gold"
label*
string
datasets*
integer
inferred*
integer
avg_score*
number | null
volume*
integer | null
at_risk*
integer

SankeyLinkOut

id*
string
edge_ids*
string[]
source*
string
target*
string
kinds*
string[]
via_columns*
string[]
volume*
integer | null
score*
number | null
band*
"good" | "warn" | "bad" | "unknown"
lateral*
boolean

SankeyNodeOut

id*
string
name*
string
layer*
"bronze" | "silver" | "gold"
layer_inferred*
boolean
column*
integer
score*
number | null
band*
"good" | "warn" | "bad" | "unknown"
volume*
integer | null
worst_upstream_score*
number | null
worst_upstream_id*
string | null
inherited_band*
"good" | "warn" | "bad" | "unknown"
upstream_count*
integer
downstream_count*
integer

SankeyWarningOut

type*
"cycle" | "against_flow"
upstream_id*
string
downstream_id*
string
message*
string

ScanCreate

connection_id*
string
dataset_ids
string[] | null
profile_depth
ProfileDepth | null
override_blackout
boolean
override_reason
string | null
resample
booleanCartão #317: ler uma amostra de linhas nova neste scan (outra semente). Por omissão cada dataset usa sempre a mesma amostra, para os resultados não oscilarem entre scans sem os dados mudarem.

ScanLiveOut

Teatro do scan: estado do scan + fotografia de progresso.

Mesmo formato nos frames snapshot do SSE e no GET de fallback (polling). progress é None em scans antigos (TTL expirado) ou sem progresso gravado.

scan*
ScanOut
connection_name*
string
seq*
integer
progress
object | null
server_ts*
string (date-time)

ScanOut

id*
string
connection_id*
string
status*
string
trigger*
string
dataset_ids
string[] | null
stats
object | null
profile_depth
string | null
resample
booleanCartão #317: o scan leu uma amostra de linhas nova (outra semente).
error
string | null
correlation_id*
string
started_at
string (date-time) | null
finished_at
string (date-time) | null
created_at*
string (date-time)

SchemaImpactedDatasetOut

dataset_id*
string
name*
string
depth
integer
via_column
string | null
kind
string | null
restricted
boolean

SchemaRenameOut

from_column*
string
to_column*
string
confidence*
number
reason
string
signals
string[]
logical_type
string | null

ScoreDimensionChangeOut

dimension*
string
weight*
number
before*
number
after*
number
points*
numberpeso·(depois − antes): a parte do Δscore desta dimensão.
unexplained_points*
numberO que os drivers não explicam nesta dimensão (min(), clamp, arredondamento).
missing_before
boolean
missing_after
boolean

ScoreDriverOut

Uma causa da variação, em pontos de score (ponderados, com sinal).

kind*
stringcolumn_nulls | column_set_changed | duplicates | uniqueness_basis_changed | rule_failing | rule_passing | rule_set_changed | freshness | drift | consistency_issue | consistency_branch_changed | dimension_unrecorded
dimension*
string
points*
numberContribuição para o Δscore, já ponderada pelo peso da dimensão.
column
string | null
rule_id
string | null
rule_type
string | null
issue_id
string | null
params
object
copy
stringFrase determinística em pt-PT (relatórios); a UI formata a partir de kind+params.

ScoreExplanationOut

Δscore entre dois scans decomposto por dimensão e drivers (cartão #318).

Σ drivers + unexplained_points = delta.

dataset_id*
string
from_scan_id*
string
to_scan_id*
string
from_computed_at
string (date-time) | null
to_computed_at
string (date-time) | null
score_before*
number
score_after*
number
delta*
number
unexplained_points*
number
notes
string[]

ScorePointOut

scan_id*
string
score*
number
dimensions
object
dimensions_meta
objectDimensões estimadas sobre amostra (hoje só `unicidade`); vazio quando todas cobrem a tabela inteira.
computed_at*
string (date-time)

SemanticTypeOut

Tipo semântico inferido no profiling (domain/quality/semantic_types.py).

kind*
string
confidence*
number
valid_pct*
numberFração (0..1) dos valores distintos da amostra que casam com o tipo.
estimated
booleanTrue quando `valid_pct` sai da amostra de valores (cartão #350).
sample_size
integer | nullValores distintos da amostra medidos (até 20): a UI mostra «N/M valores da amostra». None quando o tipo não sai da amostra ou em perfis anteriores ao cartão #350.
region
string | nullSó no tipo `phone`: o país do plano de numeração (ISO 3166-1 alfa-2), que a UI mostra no selo («Telefone ES»). None nos outros tipos e em `phone_pt` (é PT) (cartão #516).

SensitivityEventOut

id*
string
column*
string
from_level
string | null
to_level
string | null
source*
string
actor_id
string | null
actor_name
string | null
note
string | null
created_at*
string (date-time)

SensitivityLevel

Classificação de sensibilidade de uma coluna (cartão #112 — SENSCLASS).

Ordem = ordem crescente de sensibilidade (a herança por linhagem sugere sempre o nível mais alto a montante).

Values: "public" · "internal" · "confidential" · "pii"

SensitivitySuggestionOut

Nível herdado sugerido por linhagem (dataset diretamente a montante).

level*
string
dataset_id*
string
dataset_name*
string
column*
string

Severity

Values: "info" · "warning" · "critical"

SignalOut

id*
string
source_ref*
string
source_url
string | null
title*
string
kind*
string
severity*
string
summary*
string
entities_json
any[] | null
dataset_id
string | null
dataset_name
string | null
match_confidence
number | null
status*
string
issue_id
string | null
rule_suggestion_id
string | null
extracted_by*
string
updated_at*
string (date-time)

SlaAgeingOut

Abertas no fim do período por idade de calendário.

lt_1d*
integerMenos de 1 dia.
d1_3*
integerDe 1 a 3 dias.
d3_7*
integerDe 3 a 7 dias.
d7_30*
integerDe 7 a 30 dias.
gt_30d*
integerMais de 30 dias.

SlaGroupOut

key*
string | nullid do domínio ou da equipa, ou a severidade; null = sem domínio/equipa (ou o total).
label
string | nullNome do domínio ou da equipa; null nos outros grupos.
opened*
integerCriados no período.
resolved*
integerFechados no período (resolvidos ou ignorados).
open_at_end*
integerPor resolver no fim do período.
breached*
integerDos fechados no período e dos abertos no fim, os que passaram o alvo.
in_scope*
integerDos fechados no período e dos abertos no fim, os que tinham alvo.
mtta_median_hours
number | null
mtta_p90_hours
number | null
mttr_median_hours
number | null
mttr_p90_hours
number | null

SlaReportOut

Relatório mensal de stewardship (cartão #396): SLA de resolução, MTTA/MTTR.

period*
string
group_by*
"domain" | "team" | "severity"
starts_at*
string (date-time)
ends_at*
string (date-time)
as_of*
string (date-time)Fim do período, ou agora num mês em curso.
targets*
SlaTargetOut[]
groups*
SlaGroupOut[]

SlaTargetOut

Cartão #396: alvo de resolução de uma severidade e desde quando conta.

severity*
string
target_hours*
integer
active_since*
string (date-time)

SloBreakdownOut

Dataset-dias violados por subtipo (um dia pode violar vários).

freshness
integer
score
integer
verdict
integer

SloDatasetOut

dataset_id*
string
dataset_name*
string
target_hours
number | null
met_days
integer
violated_days
integer
unmeasured_days
integer
attainment_pct
number | null
meets_objective
boolean
worst_observed_hours
number | null
last_observed_hours
number | null

SloMonthOut

month*
string
met_days
integer
violated_days
integer
unmeasured_days
integer
attainment_pct
number | null
meets_objective
boolean

SloSummaryOut

attainment_pct
number | null
current_month_attainment_pct
number | null
datasets_with_slo
integer
datasets_measured
integer
datasets_meeting_objective
integer
met_days
integer
violated_days
integer
unmeasured_days
integer

SloViolationOut

date*
string
dataset_id*
string
dataset_name*
string
target_hours
number | null
observed_hours
number | null
issue_count
integer

SourceQueryLogOut

Uma forma de statement executada pelo DataVault numa fonte (sem valores).

created_at*
string | null
operation*
string
scan_id*
string | null
query_tag*
string
endpoint*
string
executions*
integer
errors*
integer
total_ms*
number
max_ms*
number
rows*
integer | null
first_at*
string | null
last_at*
string | null
statement_hash*
string
statement*
string

SuggestionCategory

Values: "deduplication" · "schema" · "performance" · "governance" · "rules" · "refactoring" · "enrichment"

SuggestionOut

id*
string
dataset_id
string | null
scan_id
string | null
category*
string
title*
string
description_md
string
sql_snippet
string | null
pyspark_snippet
string | null
impact
object | null
effort*
string
status*
string
source*
string
signature
string | null
issue_id
string | null
signal_id
string | null
proposed_rule
object | null
approved_at
string (date-time) | null
applied_at
string (date-time) | null
verified_at
string (date-time) | null
created_at*
string (date-time)
pull_request
object | null
rehearsal
SuggestionRehearsalOut | nullÚltimo ensaio só-leitura do passo de diagnóstico; null se nunca foi ensaiada.
ai_generated
booleanTexto gerado por IA (`source=ai`): pelo LLM das sugestões ou pelo assistente.
ai_model
string | nullModelo que gerou a sugestão; null fora da IA e nas sugestões IA antigas.
generated_at
string (date-time) | nullQuando a sugestão IA foi gerada; null fora da IA.

SuggestionRehearsalOut

Último ensaio só-leitura do passo de diagnóstico (cartão #178). Só contagens.

version*
integer
status*
"queued" | "ok" | "blocked" | "timeout" | "error"
affected_rows
integer | nullLinhas que o passo de diagnóstico devolve, contadas na fonte.
total_rows
integer | nullLinhas do dataset no último scan (o denominador de `pct`).
pct
number | nullaffected_rows / total_rows × 100; null sem total ou acima dele.
requested_at
string (date-time) | null
ran_at
string (date-time) | null
duration_ms
integer | null
actor
string | nullEmail do admin que pediu o ensaio; «conta eliminada» depois de a conta ser apagada.

SuggestionRehearsalReasonOut

Porque é que o ensaio não contou (cartão #178): código estável + params; a UI compõe o texto e message é o mesmo motivo em pt-PT, de recurso.

code*
stringno_diagnosis, aggregate, limit, not_select, forbidden, function_not_allowed, unknown_table, multiple_statements, system_table, timeout, source_error, blackout, not_supported, dataset_missing, messaging_unavailable…
params
object
message
string

SuggestionStatus

Ciclo de vida da remediação governada.

proposed → accepted (aprovada por admin) → applied (executada pelo cliente, fora do DataVault) → verified (o scan seguinte confirmou a resolução). dismissed rejeita; done é legado equivalente a verified.

Values: "proposed" · "accepted" · "applied" · "verified" · "dismissed" · "done"

SyntheticColumnEvaluationOut

name*
string
strategy*
string
null_rate_expected*
numberTaxa de nulos do perfil (0–1).
null_rate_observed*
numberTaxa de nulos no output (0–1).
null_delta*
numberObservada − perfil.
quantile_deltas
object | null|Δ| de cada quantil p05–p95 ÷ IQR do perfil (null sem quantis).
quantile_delta
number | nullMédia de `quantile_deltas`.
distribution_tvd
number | nullDistância de variação total (0–1) ao histograma do perfil ou às quotas categóricas.

SyntheticCorrelationEvaluationOut

column_a*
string
column_b*
string
expected*
numberCoeficiente do perfil usado na geração.
observed
number | nullPearson no output (null sem variância).
delta
number | null

SyntheticEvaluationOut

Scorecard utilidade × privacidade das linhas de (rows, seed) — cartão #174.

Só taxas, deltas, contagens e nomes de colunas; nunca valores.

rows*
integer
seed*
integer
utility_score
number | null0–100: média ponderada das fidelidades (ver `utility_weights`).
utility_components*
objectFidelidade 0–1 por métrica: nulls, quantiles, distribution, correlations.
utility_weights*
object
privacy_verdict*
"pass" | "warn" | "fail"fail com qualquer leak; warn com k_min abaixo de k_threshold; senão pass.
reason
string | nullMotivo do veredito em pt-PT, de `key` e `params` (texto de recurso); null em pass.
key
"leaks" | "k_below" | nullCódigo do motivo: `leaks` em fail, `k_below` em warn; null em pass.
params
SyntheticReasonParamsOut | nullCom que se compõe o motivo da `key`; null em pass.
sample_leak*
boolean
extreme_leak*
boolean
pii_leak*
boolean
k_min
integer | nullk-anonimato do output sobre os quase-identificadores com valores do domínio real (numéricos, temporais ou categóricos; ≥ 2).
k_share_below
number | nullFração das linhas em classes com menos de k_threshold.
k_threshold*
integer
quasi_identifiers*
SyntheticQuasiIdentifierOut[]

SyntheticLeakOut

kind*
"sample" | "extreme" | "pii"
column*
string
rows*
integerLinhas do output com o leak — nunca o valor.

SyntheticPackIn

Body de POST /synthetic-packs (cartão #175): exatamente um de connection_id, domain_id ou dataset_ids. O teto de rows_per_table vem das settings. Um campo desconhecido (rows em vez de rows_per_table) dá 422 em vez de cair no default.

connection_id
string | null
domain_id
string | null
dataset_ids
string[] | null
rows_per_table
integer
max_tables
integer
format
"zip" | "sqlite"
seed
integer

SyntheticReasonParamsOut

Com que a UI compõe o motivo, por key: nomes de colunas e números, nunca valores.

sample_columns
string[]`leaks`: colunas com sample_leak.
extreme_columns
string[]`leaks`: colunas com extreme_leak.
pii_columns
string[]`leaks`: colunas com pii_leak.
k_min
integer | null`k_below`: o k_min do output.
k_threshold
integer | null`k_below`: o limiar (5).
qi_columns
string[]`k_below`: os quase-identificadores do k_min.

TicketEntityType

Entidade do DataVault a que um ticket externo está ligado (cartão #374).

As violações de política de dados são issues do tipo policy_violation: ligam-se como issue. Um incidente é derivado a cada leitura — ancora-se no seu id (inc-<id do issue raiz>).

Values: "issue" · "incident" · "suggestion" · "contract_proposal" · "column_sensitivity"

TopIssueItem

id*
string
dataset_name
string | null
type*
string
severity*
string
title*
string
created_at*
string (date-time)

TreemapLeafMetricsOut

Métricas brutas de uma folha — para o resumo no hover.

volume
integer | null
cost
number | null
columns
integer

TreemapNodeOut

Nó do treemap do catálogo: raiz, conexão, schema ou dataset.

name*
string
kind*
string
dataset_id
string | null
value*
number
estimated
boolean
score
number | null
issues_abertas
integer
dataset_count
integer
metrics
TreemapLeafMetricsOut | null
children
TreemapNodeOut[]

TrustBlockerOut

Bloqueador ou aviso do trust score. A UI traduz pela key e pelos params (ADR 0006, adenda do cartão #476); message é o texto em pt-PT.

key*
string
message*
string
cap*
number
params
object

TrustComponentOut

Componente do trust score (cartão #142): peso, valor 0..1, pontos, evidência em pt-PT com números e a ação para subir (None = já no máximo).

key*
string
weight*
number
value
number | null
points*
number
evidence*
string
action
string | null

TrustContractFlagsOut

active: há versão do contrato aceite pelo produtor; valid: o contrato não falha.

active*
boolean
valid*
boolean

TrustDecisionBatchIn

Body de POST /trust-decisions (cartão #150): decisão de confiança em lote.

dataset_ids*
string[]
purpose
string

TrustDecisionBatchOut

Decisões de um lote: decision é a pior e ttl_seconds o menor.

purpose*
"agente" | "rag" | "treino" | "bi"
decision*
"trusted" | "caution" | "untrusted" | "unknown"
ttl_seconds*
integer
datasets*
TrustDecisionOut[]

TrustDecisionOut

Decisão de confiança para consumir o dataset numa finalidade, com as razões, o que falta para subir de decisão e por quanto tempo vale.

dataset_id*
string | null
purpose*
"agente" | "rag" | "treino" | "bi"
decision*
"trusted" | "caution" | "untrusted" | "unknown"
reasons*
TrustReasonOut[]
verdict*
"pass" | "warn" | "fail" | "unknown"
last_scan_at*
string | null
as_of*
string
ttl_seconds*
integer
recommended_action_pt*
string
required_actions*
string[]
valid_until*
string

TrustFactsAiReadinessOut

Score global e, por caso de uso (rag, ml, agente, bi), score e veredito.

score*
number | null
verdict*
"pronto" | "com_reservas" | "nao_pronto" | "sem_dados" | null
use_cases*
object

TrustFactsContractOut

problems só com detail=full.

status*
"ok" | "warn" | "fail"
active_version*
integer | null
activated_at*
string | null
problem_count*
integer
problems
string[] | null

TrustFactsFreshnessOut

Idade dos dados (horas inteiras) contra o alvo e o cumprimento a 30 dias.

observed_age_hours*
integer | null
target_hours*
number | null
target_source*
string | null
met*
boolean | null
attainment_30d_pct*
number | null

TrustFactsLinksOut

URLs relativos (UI e API): o consumidor junta a sua base.

dataset*
string
contract*
string
issues*
string
lineage*
string
trust_decision*
string
trust_facts*
string

TrustFactsPolicyViolationOut

columns e message só com detail=full.

rule*
string
severity*
"warning" | "critical"
source*
string
columns
string[] | null
message
string | null

TrustFactsScoreOut

quality*
number | null
quality_7d_ago*
number | null
trend_7d*
number | null
trend_direction*
"up" | "down" | "flat" | null
trust*
integer | null
trust_grade*
string | null
trust_blocked*
boolean

TrustFactsUseCaseOut

blocker só com detail=full.

score*
number | null
verdict*
"pronto" | "com_reservas" | "nao_pronto" | null
blocker
string | null

TrustFactsVerdictOut

reasons só com detail=full.

value*
"pass" | "warn" | "fail" | "unknown"
with_policy*
boolean
decision*
"trusted" | "caution" | "untrusted" | "unknown"
purpose*
"agente" | "rag" | "treino" | "bi"
reason_codes*
string[]
reasons
TrustReasonOut[] | null

TrustOut

Trust score composto e explicável (cartão #142). score/grade None = dataset sem scan (reason diz porquê). Na lista (?include=trust) vêm só score/grade/blocked — os componentes ficam para o detalhe.

score
integer | null
grade
string | null
blocked
boolean
reason
string | null
cap
number | null
raw_score
number | null
components
TrustComponentOut[]
blockers
TrustBlockerOut[]
warnings
TrustBlockerOut[]
computed_at
string (date-time) | null

TrustReasonOut

code*
string
severity*
"critical" | "warning" | "info"
message_pt*
string

ValidationErrorResponse

Corpo do 422 da validação: detail é sempre a lista dos campos recusados.

detail*
ValidationItem[]Os campos recusados, um por item.
code
string | nullCódigo estável do erro quando existe (ex.: `auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`); senão `null`. Decide por este campo, não pelo texto de `detail`.
request_id*
stringO mesmo valor do header `X-Request-ID`: o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Cita-o ao suporte.

ValidationItem

Um campo recusado pela validação (422).

Os campos do ValidationError que o FastAPI publicava antes do cartão #361. O input deixou de vir no cartão #450 (ecoava passwords) e fica descrito até uma major: retirá-lo do schema é uma quebra (docs/api/VERSIONAMENTO.md §4).

loc*
string | integer[]Onde está o campo: `query`, `path` ou `body`, e o nome.
msg*
stringO motivo, legível.
type*
stringTipo do erro de validação (ex.: `missing`, `int_parsing`).
input
anyJá não vem na resposta (desde a API 1.65.0): ecoava o valor recebido, passwords incluídas. Fica no schema até à próxima major.
ctx
objectOs limites da regra que recusou o valor (`gt`, `ge`, `lt`, `le`, `multiple_of`, `min_length`, `max_length`, `max_digits`, `decimal_places`), quando os há. Nunca traz o valor recebido.

ValidationSummaryOut

records*
integer
passed*
integer
failed*
integer
rules*
integer
rules_evaluated*
integerRegras avaliadas em pelo menos um registo.

VerdictCountsOut

Datasets por veredito.

pass*
integer
warn*
integer
fail*
integer
unknown*
integer

VerdictFailedRuleOut

Regra que falhou no último scan. engine = dbt quando a falha veio do dbt test (aí observed é a contagem de linhas falhadas).

rule_type*
string
column*
string | null
severity*
string
observed*
string | null
threshold*
string | null
engine*
string

VersionOut

Identidade da release (cartão #312).

version*
stringVersão do produto (semver).
build_sha*
string7 hex do commit da imagem a servir; `dev` fora de uma imagem publicada.
api_version*
stringVersão da API pública (changelog de developers), com semver próprio.