Referência de Endpoints por Área
Integrar um sistema ao DATTA não deveria exigir engenharia reversa da interface. Esta página consolida, área por área, os endpoints citados nos guias da plataforma — com método, caminho e o que cada um faz — para que você monte sua integração consultando um único lugar. Autenticação, proteção CSRF e convenções gerais (formato JSON, campo error, permissões) estão na visão geral da API e valem para tudo o que segue.
Convenções desta página: segmentos variáveis aparecem como placeholders ({id}, {numero}, {taskId}); parâmetros de query relevantes são citados na descrição; endpoints marcados como servidor-a-servidor são pensados para integração entre sistemas, não para chamadas de navegador.
Busca, Chat & IA
Construa buscas semânticas, assistentes conversacionais e geração assistida por IA sobre o acervo do seu contexto.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/search/hybrid | Busca textual híbrida (léxica + vetorial + grafo, com fusão de rankings) |
| POST | /api/search/hybrid/diagnosticada | A mesma busca no índice de um contexto (domain), devolvendo {hits, diagnostico}: quando o resultado volta vazio — ou só com uma das duas buscas, a léxica ou a vetorial —, diagnostico.texto diz o que não bate (índice inexistente ou vazio, campo de vetor ausente, candidatos abaixo do corte de relevância, busca que falhou e por quê) |
| POST | /api/search/hybrid/multi/diagnosticada | O mesmo sobre um padrão de índices (indexPattern, ex.: datta_* ou datta_cpc,datta_cdc), com o diagnóstico também de campo da consulta que o índice não tem |
| POST | /api/chat/stream | Resposta da IA em streaming (SSE) para a Busca/Chat |
| GET | /api/users/me/prompt | Lê o prompt personalizado do usuário logado (resolvido pelo token, nunca por parâmetro); sem prompt → {"customPrompt":""} |
| PUT | /api/users/me/prompt | Grava o prompt personalizado ({"customPrompt":"..."}; trim + truncamento em 8000 caracteres) |
| POST | /api/captain/sessoes/{id}/anexos | Anexa um documento à conversa do Captain (multipart, campo file); o texto extraído entra como contexto do objetivo. O arquivo original fica no bucket de staging (MinIO) por 24h; nada é indexado nem vetorizado |
| GET | /api/captain/sessoes/{id}/anexos/{indice}/arquivo | Baixa o arquivo original de um anexo, como foi enviado. 404 quando a retenção já expirou |
| POST | /api/captain/sessoes/{id}/objetivo | Monta o plano do Captain a partir de um objetivo em linguagem natural; progresso via SSE. Não executa nada |
| POST | /api/captain/sessoes/{id}/confirmar | Executa o plano confirmado (SSE, passo a passo). Único ponto onde uma escrita nasce; exige CAPTAIN_EXECUTE |
| POST | /api/llm/chat/sync | Chamada síncrona ao modelo de linguagem; header X-LLM-Lane: batch seleciona a fila de baixa prioridade (sem header = interativa) |
| POST | /api/embeddings/batch | Gera embeddings em lote (servidor-a-servidor; usado p. ex. na deduplicação semântica de regras) |
| POST | /api/siql/semantic/nl-to-sql | Converte pergunta em português em SQL ({question, workspace?, modelId?}); limite de 30 chamadas/hora |
| POST | /api/siql/events/ingest | Recebe eventos de consulta do motor analítico pelo caminho alternativo, quando a publicação no fluxo de eventos falha (servidor-a-servidor) |
| GET | /api/search/node-text | Resolve o texto integral de um item indexado a partir de ponteiro (?index=&id=); servidor-a-servidor, restrito aos índices da plataforma |
As rotas de gravação no índice de busca — documentos, trechos, vetores, regras e texto integral — são servidor-a-servidor e exigem SEARCH_INDEX_WRITE (só do perfil ADMIN) ou a credencial de serviço da plataforma. A permissão de busca (SEARCH_EXECUTE), que todos os perfis têm, não grava nem apaga.
As leituras que expõem um índice inteiro — a varredura e a paginação do backfill (/api/search/backfill/scan e /api/search/backfill/page) e a exportação do texto dos documentos de um contexto (/api/search/chunks/document-texts) — também são servidor-a-servidor: exigem SEARCH_VIEW (só do perfil ADMIN) ou a credencial de serviço. A paginação só aceita o nome exato de um índice do escopo do backfill.
A exclusão por consulta (DELETE /api/search/query/{indexName}?field=&value=) exige SEARCH_INDEX_DELETE e, desde a issue #1912, só aceita o nome exato de um índice de contexto: padrão (datta_*), lista, exclusão e índice interno da plataforma respondem 400, mesmo para o ADMIN.
Disparar, verificar e cancelar a geração de embeddings (/api/embeddings/backfill, /api/embeddings/backfill-global e /api/embeddings/backfill/cancel) exige MODELS_MANAGE (só do perfil ADMIN) ou a credencial de serviço desde a issue #1912; a permissão de gerar embedding (EMBEDDING_GENERATE), que todos os perfis têm, pede vetor e lê o status da geração (/api/embeddings/backfill/status), mas não dispara nem cancela. Os disparos são POST desde 2026-09-28 (eram GET) e respondem o progresso em SSE; a geração segue no servidor mesmo que a conexão seja fechada. O mesmo vale para a migração Neo4j → OpenSearch (POST /api/search/admin/migrate/{domain} e /migrate-all, com OPENSEARCH_ADMIN) e para o download de modelo local (POST /api/local-llm/pull/{modelo}, com MODELS_MANAGE): nenhum GET da plataforma dispara trabalho.
Desde 2026-09-29 os dois também se cancelam, com a mesma permissão do disparo, e a exclusão vale para a plataforma inteira, não por réplica:
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/search/admin/migrate/cancel | Cancela a migração Neo4j → OpenSearch em andamento, em qualquer réplica (OPENSEARCH_ADMIN). Cooperativo: para antes do próximo lote e fecha o SSE de quem disparou com o evento cancelada; o que já foi gravado nos índices permanece. Responde {cancelling, runId, message}; sem migração em andamento, cancelling=false |
| GET | /api/search/admin/migration-status | Estado da migração visto de qualquer réplica: running, runId, domain, phase (INIT … DONE, ERROR, CANCELADA) e message |
| POST | /api/local-llm/pull/{modelo}/cancel | Cancela o download de um modelo local (MODELS_MANAGE; alias /api/ollama/pull/{modelo}/cancel). Na réplica que baixa, interrompe na hora; em outra, em até 5 s. O cancelamento não cai no registro via Hugging Face e o modelo não é registrado; o SSE termina com status: cancelado. Responde {cancelling, message} |
Só uma migração roda por vez: a segunda, em qualquer réplica, recebe um único evento error ("Já existe uma migração em andamento"). O download é um por modelo: pedir de novo o modelo que já está baixando acompanha o download em curso quando ele roda na mesma réplica, e responde 409 com a mensagem em português (um único evento cujo status é o texto) quando ele roda em outra réplica. Nenhum dos dois começa um segundo download ou uma segunda migração.
Pelo mesmo critério (issue #1935), as escritas em /api/embedding-models/** exigem MODELS_MANAGE no filtro e no handler — ativar e abrir a troca de modelo (/api/embedding-models/current, /api/embedding-models/migracao/preparar) e o passo do rerank aceitam também a credencial de serviço — e POST /api/rules/reindex-embeddings, que regera os vetores de todas as regras da plataforma, exige MODELS_MANAGE ou a credencial de serviço (antes, RULES_EDIT).
Nas rotas de busca que recebem índice no corpo (/api/search/query, /hybrid/multi, /suggest, /spellcheck…), um padrão com curinga (datta_*) ganha a exclusão de todos os índices de sistema da plataforma (histórico, prompts, telemetria, logs, glossário, catálogo, Captain), e pedir um deles pelo nome exato responde 400 (issue #1935).
curl -X PUT "$BASE/api/users/me/prompt" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Content-Type: application/json" \
-d '{"customPrompt": "Responda sempre com referências normativas."}'Documentos & Ingestão
Automatize a entrada de conteúdo — URLs de legislação, fontes de jurisprudência, atualizações de contexto — e a remoção controlada de processos.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/upload/extrair-texto | Devolve o TEXTO de um documento enviado (multipart, campo file; ?maxCaracteres= corta na origem) — sem ingerir, indexar ou vetorizar. Exige DOCUMENT_EXTRACT_TEXT; formato fora da whitelist volta 422 com mensagem acionável |
| POST | /api/ingest-url/start | Inicia ingestão de URL (legislação, HTML, arquivos); retorna {taskId} imediato |
| GET | /api/ingest-url/status/{taskId} | Status, porcentagem e fase da ingestão de URL (polling ~2 s) |
| POST | /api/ingest-url/cancel/{taskId} | Cancela a ingestão de URL em andamento |
| POST | /api/pipelines/{id}/execute | Dispara a carga de jurisprudência — cada fonte oficial é um pacote do Datta Extract; corpo opcional {parametros:{...}} |
| POST | /api/contexts/{ctx}/update | "Atualizar contexto" (retoma de onde parou); {force:true} reprocessa integralmente |
| GET | /api/contexts/{ctx}/update/status/{taskId} | Progresso e relatório da atualização (diferenças, desvios) |
| DELETE | /api/processos | Exclui o processo e o subgrafo próprio (?numero=&domain=; corpo {justificativa} obrigatório). Forma canônica — é a única que alcança número com barra, como a numeração de tribunal superior (AREsp 1.627.029/RS) |
| DELETE | /api/processos/{numero} | Mesma exclusão com o número no endereço. Mantida para integrações já escritas; não alcança número com barra |
| GET | /api/processos/documentos | Lista os documentos (com PDF) do processo (?numero=&domain=&prefix=). Forma canônica; a variante /api/processos/{numero}/documentos não alcança número com barra |
| DELETE | /api/search/chunks/by-processo | Remove os trechos indexados do processo na base de busca (?processoNumero=&domain=; corpo opcional {documentCodes[]}; idempotente). Exige PROCESSOS_DELETE — a mesma permissão de excluir o processo — ou SEARCH_INDEX_WRITE; a permissão de busca não basta |
| GET | /api/documents/dossie/{cnpj}/pdfs.zip | Baixa um ZIP com todos os PDFs do dossiê ligados ao CNPJ (?domain= do contexto) |
| GET | /api/documents/processo/pdfs.zip | Baixa um ZIP com todos os PDFs do processo (?numero=&domain=&prefix=). Forma canônica; a variante /api/documents/processo/{numero}/pdfs.zip não alcança número com barra |
Triagem & Regras
Dispare triagens em lote ou individuais, acompanhe o progresso em tempo real e gerencie o ciclo de vida completo das regras — inclusive geração por IA.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/audit/batch/start | Inicia a triagem em lote ({reprocess, apenasRegrasNovas, domain} → {taskId, total, ...}) |
| GET | /api/audit/batch/stream | Progresso por processo via SSE (consumir com fetch + Bearer, não EventSource; heartbeat 15 s) |
| GET | /api/audit/batch/status | Status/reconciliação da triagem em lote (mesma fonte do painel de execuções) |
| POST | /api/audit/batch/cancel | Cancela a triagem em lote em andamento |
| GET | /api/audit/batch/interrompidas | Triagens interrompidas do contexto (?domain=), lidas do espelho durável — insumo do botão "Retomar" |
| GET | /api/audit/details | Detalhe da auditoria + resumo do processo (?numero=&domain= — número vai em query por conter /) |
| GET | /api/alerts | Lista os alertas do contexto (?context=&status=&severidade=&page=&size=; ordena por severidade e depois por recência) |
| GET | /api/alerts/{alertaId} | Detalhe de um alerta, com a análise que o originou |
| POST | /api/alerts/{alertaId}/status | Move o estado do alerta ({status, justificativa}; descartar exige justificativa, e cada transição vira registro) |
| GET | /api/alerts/acoes | Histórico das transições dos alertas do contexto (quem moveu, quando e por quê) |
| POST | /api/alerts/backfill | Reprojeta como alertas as triagens já concluídas do contexto (?context=; idempotente, sem LLM — a análise já está gravada) |
| GET | /api/rules | Lista regras de triagem (?contexto= filtra) |
| POST | /api/rules | Cria regra |
| PUT | /api/rules/{numero} | Atualiza/move regra |
| DELETE | /api/rules/{numero} | Exclui regra |
| PATCH | /api/rules/{numero}/toggle | Ativa/desativa regra |
| GET | /api/rules/escopo | Vocabulário de escopo das regras (LOCAL, GLOBAL, DIALETICA) com rótulo e ajuda em português |
| POST | /api/rules/escopo/sugerir | Sugere o escopo para um título+texto ainda não salvos ({regraTitulo, regraTexto}; heurística, sem LLM, não grava nada) |
| POST | /api/rules/escopo/classificar | Backfill: atribui escopo às regras sem decisão registrada e devolve a contagem por valor (?dryRun=true simula — padrão; dryRun=false grava e audita) |
| GET | /api/rules/{numero}/versoes | Histórico de versões da regra ou critério (autor, data e motivo de cada alteração) |
| GET | /api/rules/{numero}/interpretacao | Leitura da regra feita pelo LLM: intenção, critérios, paráfrases e evidência esperada |
| POST | /api/rules/{numero}/interpretacao | Regera a leitura sob demanda (best-effort, em segundo plano) |
| GET | /api/rules/niveis-anomalia | Níveis de anomalia com os tipos aninhados (?contexto= filtra os tipos) |
| GET | /api/rules/niveis-anomalia/tipos | Nomes dos tipos ativos de um contexto (?contexto= obrigatório) |
| POST | /api/rules/niveis-anomalia | Cria nível de anomalia |
| PUT | /api/rules/niveis-anomalia/{chave} | Atualiza nível |
| DELETE | /api/rules/niveis-anomalia/{chave} | Exclui nível (recusa os padrão e os que ainda têm tipos) |
| POST | /api/rules/niveis-anomalia/{chave}/tipos | Cria tipo de anomalia no nível |
| PUT | /api/rules/niveis-anomalia/{chave}/tipos/{id} | Atualiza tipo (trocar de nível move o vínculo) |
| DELETE | /api/rules/niveis-anomalia/{chave}/tipos/{id} | Exclui tipo |
| GET | /api/rules/{numero}/versoes/{versao} | Texto exato de uma versão específica da regra ou critério |
| POST | /api/rules/test-references | Testa referências normativas de uma regra ({regraTexto, regraContexto[]} → {references[], total_found, total_missing}) |
| POST | /api/rules/delete-all | Apaga TODAS as regras do contexto ({contexto, motivo}; permissão administrativa dedicada) |
| POST | /api/rules/reindex-embeddings | Regera trechos e vetores de TODAS as regras da plataforma (MODELS_MANAGE ou credencial de serviço) |
| POST | /api/rules/generate | Gera regras de triagem com IA ({contexto, descricao, quantidade, todas} → {status:"RUNNING", taskId}) |
| GET | /api/rules/generate/stream/{taskId} | Progresso da geração em tempo real (SSE) |
| GET | /api/rules/generate/status/{taskId} | Status da geração (permite retomar ao reabrir a página) |
| POST | /api/rules/generate/cancel/{taskId} | Cancela a geração de regras |
| GET | /api/rules/generate/active | Gerações de regras em andamento |
| GET | /api/rules/generate/recent | Últimas gerações de regras finalizadas |
curl -X POST "$BASE/api/rules/generate" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Content-Type: application/json" \
-d '{"contexto": "CPC", "descricao": "prazos recursais", "quantidade": 5}'Recursos & Peças
Gere peças recursais fundamentadas por IA e converta o resultado em documento editável.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/chat/recurso | Gera a peça recursal (processoNumero, tipoRecurso, fundamentacao, chatContext, model, provider, domain); limite ~20 chamadas/hora |
| POST | /api/chat/recurso/docx | Converte a peça já gerada em .docx (content, tipoRecurso, processoNumero); não chama a IA novamente |
curl -X POST "$BASE/api/chat/recurso" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Content-Type: application/json" \
-d '{"processoNumero": "0001234-56.2024.8.26.0100", "tipoRecurso": "apelacao", "fundamentacao": "cerceamento de defesa"}'Catálogo & Conhecimento
Publique e governe datasets no Knowledge Catalog, conduza a curadoria dos ativos de conhecimento e mantenha glossário e prompts de domínio.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/catalog/datasets/upsert | Registra/atualiza um dataset no Knowledge Catalog (estatísticas + semântica por coluna; também chamado pela catalogação automática) |
| GET | /api/catalog/lineage/graph | Grafo de linhagem (dashboard, chart, dataset, processo, coluna) |
| POST | /api/catalog/lineage/edges/by-name | Grava arestas de linhagem de forma idempotente |
| GET | /api/catalog/classifications | Lista os 5 níveis de classificação de dados |
| GET | /api/catalog/datasets/{id}/ownership | Lê o ownership atual (dono, curador, classificação) |
| PUT | /api/catalog/datasets/{id}/ownership | Atribui/substitui ownership ({ownerId, stewardId, classification}) |
| DELETE | /api/catalog/datasets/{id}/ownership | Remove ownership (volta ao padrão INTERNAL) |
| POST | /api/catalog/datasets/{id}/classify | Classificação automática (heurística de PII + IA), preservando dono/curador |
| GET | /api/catalog/datasets/by-classification | Lista datasets por nível (?level=PII; relatórios LGPD) |
| GET | /api/catalog/sources/grouped | Agregado das fontes de dados disponíveis em todos os motores (?type=all) |
| POST | /api/catalog/sources/invalidate | Força o refresh do agregador de fontes |
| GET | /api/knowledge/assets | Lista ativos de conhecimento paginados (filtros dominio, tipo, status, page, size) |
| GET | /api/knowledge/assets/{id} | Detalhe de um ativo com rastreabilidade completa (documento de origem, trechos, modelo, versão, aprovador) |
| POST | /api/knowledge/assets/generate | Dispara geração de ativos em lote ({dominio, documentCodes?, tipos?}); 202 + {taskId}; máx. 50 documentos por lote |
| GET | /api/knowledge/assets/generate/stream/{taskId} | Progresso da geração via SSE (fase, total, processados, falhas, ativos gerados) |
| POST | /api/knowledge/assets/{id}/regenerate | Re-geração pontual (nova versão do mesmo documento/tipo); 202 + {taskId} |
| PUT | /api/knowledge/assets/{id}/status | Transição de status (`{status: "APPROVED"\ |
| PUT | /api/knowledge/assets/{id}/conteudo | Persiste edição humana do conteúdo (mantém DRAFT, marca edição humana; valida citações) |
| GET | /api/knowledge/assets/{id}/fonte | Ativo + trechos-fonte citados, para revisão lado a lado |
| GET | /api/knowledge/assets/{id}/diff | Diferença entre a versão atual e a última aprovada |
| PUT | /api/knowledge/assets/status-lote | Aprovação/rejeição em lote ({ids, status, reason}, máx. 200 ids; resultado parcial por item) |
| DELETE | /api/knowledge/assets/{id} | Exclui ativo em DRAFT/REJECTED (nunca um aprovado) |
| GET | /api/knowledge/review-queue/fontes | Documentos fora da origem esperada aguardando decisão humana (?dominio=) |
| GET | /api/knowledge/metrics/overview | Indicadores da base de conhecimento (funil, backlog, qualidade da geração, últimos lotes) |
| GET | /api/catalog/glossary/terms | Lista termos de glossário (?status=DRAFT; com proveniência do documento de origem) |
| PUT | /api/catalog/glossary/terms/{id} | Edição inline da definição de um termo |
| PUT | /api/catalog/glossary/status-lote | Aprovação/rejeição de termos em lote (máx. 500 ids); propaga ao chat em ≤ 5 min |
| GET | /api/knowledge-prompt/{tipo} | Lê o prompt de conhecimento do domínio (tipo: doc, faq, glossary, tone; ?domain=) |
| POST | /api/knowledge-prompt/{tipo} | Customiza o prompt do domínio (?domain=) |
| POST | /api/knowledge-prompt/{tipo}/reset | Restaura o prompt padrão do domínio (?domain=) |
| GET | /api/system-prompt | Lê o prompt de sistema do contexto (?domain=; sem ele, o do contexto ativo ou o genérico). Mesmo contrato para user-prompt, ner-prompt, audit-prompt, extraction-prompt, investigation-prompt e process-type-prompt |
| POST | /api/system-prompt | Grava o prompt do contexto (?domain=, corpo {content}). Sem domain: o único contexto cadastrado; com vários, 400 listando os nomes; cadastro de contextos indisponível, 503 — nunca o contexto ativo. Vale também para .../reset, para os demais tipos e para knowledge-prompt |
| GET | /api/captain-prompt | Instruções da instalação para o Captain — globais, sem domain |
| POST | /api/captain-prompt | Grava as instruções da instalação ({content}; PROMPT_EDIT) |
| POST | /api/captain-prompt/reset | Restaura as instruções da instalação (vazias) |
curl -X POST "$BASE/api/knowledge/assets/generate" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Content-Type: application/json" \
-d '{"dominio": "CPC"}'Conexões & Drivers
Cadastre fontes de dados externas de forma idempotente — toda conexão criada dispara catalogação automática — e administre os drivers que as suportam.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/connections | Cria conexão explicitamente (sem deduplicação) |
| POST | /api/connections/ensure | Cria ou reusa conexão de forma idempotente (deduplicação por fingerprint de tipo+host+porta+banco+usuário, sem credencial) |
| GET | /api/connections | Lista conexões visíveis ao usuário (?orphan=true lista órfãs; admin) |
| GET | /api/connections/{id} | Detalhe da conexão |
| POST | /api/connections/test-without-save | Testa a configuração antes de persistir |
| POST | /api/connections/{id}/test | Testa uma conexão existente |
| POST | /api/connections/{id}/scan | Recatalogação manual — enfileira nova varredura de catalogação (admin) |
| GET | /api/connections/{id}/scan/status | Estado da varredura de catalogação em andamento |
| GET | /api/connections/{id}/scan/events | Progresso da catalogação via SSE |
| POST | /api/connections/{id}/bindings | Reatribui credencial/vínculo a um usuário (conexão órfã) |
| GET | /api/connections/{id}/monitoring | Lê agenda, janela e política da fonte monitorada |
| PUT | /api/connections/{id}/monitoring | Grava agenda, janela e política da fonte monitorada |
| POST | /api/connections/{id}/check-now | Dispara verificação imediata; 202 + {syncId, status, historyUrl}; 409 se já há sincronização em andamento; limite 10/hora por usuário |
| GET | /api/connections/{id}/sync-history | Histórico paginado de sincronizações (?page=&size=, size 1–100) |
| DELETE | /api/connections/{id} | Revoga a conexão (datasets já catalogados permanecem) |
| GET | /api/drivers | Lista drivers instalados (?status= filtra) |
| GET | /api/drivers/catalog | Catálogo oficial de drivers aprovados |
| POST | /api/drivers/upload | Upload de driver + metadados; passa por pipeline de validação (bytecode, vulnerabilidades, assinatura, teste de carga) |
| POST | /api/drivers/bootstrap | Instala em lote os drivers oficiais de download automático |
| GET | /api/drivers/{id}/usages | Conexões que usam o driver |
| POST | /api/drivers/{id}/fetch-docs | Reingesta a documentação do fabricante (202; tarefa em segundo plano) |
| GET | /api/drivers/{id}/docs-status | Progresso da ingestão de documentação (RUNNING/COMPLETED/FAILED) |
Painéis & DATTA BI
Monte workspaces, publique dashboards, renderize visuais com filtros e drill, e acione os copilots de BI — tudo o que o editor faz, via API.
As rotas /api/config/panel/{domain}/* consultam a fonte de dados com a identidade de quem abre o painel: o Authorization da chamada é encaminhado ao grafo, à busca, ao agente JDBC e ao Trino, e cada um aplica o próprio escopo de contexto e a própria permissão. Painel não é atalho: quem não alcança o contexto pela tela do grafo também não o alcança por um painel, e consultar um agente JDBC por um painel continua exigindo JDBC_EXECUTE. Chamada sem usuário (S2S por X-Internal-Token) recebe uma credencial de serviço restrita à descoberta de fontes.
| Método | Endpoint | O que faz |
|---|---|---|
| GET | /api/config/panels | Catálogo achatado dos painéis da plataforma (nativos, canvas e dashboards BI) — escopado à visibilidade de workspace do usuário |
| GET | /api/config/workspaces | Lista os workspaces visíveis ao usuário (admin/S2S vê todos; workspace sem membros, ou só com administradores da plataforma, é público; com membro comum, só membros e owner). Cada membro traz adminPlataforma, decidido pelo servidor |
| GET | /api/config/workspaces/{id} | Detalhe de um workspace visível; workspace restrito de que o usuário não é membro responde 404 |
| PUT | /api/config/workspaces/{id}/panel-refs | Define os painéis vinculados por referência ({"panelRefs":[{"workspaceId","panelId"}]}; valida e deduplica; referência inválida → 400) |
| POST | /api/config/workspaces/{id}/panels | Cria painel de canvas / publica dashboard BI no workspace (kind: "dattabi-dashboard"). config.domain presente precisa ser o nome de um contexto cadastrado — senão 400 listando os válidos |
| PUT | /api/config/workspaces/{id}/panels/{panelId} | Salva título/configuração do painel (mesma conferência de config.domain) |
| GET | /api/config/panel/{domain}/datasources | Fontes disponíveis no contexto (construtor de painéis) — cada fonte é descoberta com a identidade do chamador; fonte fora do alcance dele volta sem recursos |
| POST | /api/config/panel/{domain}/fields | Campos da fonte selecionada (_all_ como domínio na criação rápida) |
| POST | /api/config/panel/{domain}/tables | Tabelas da fonte selecionada |
| POST | /api/config/panel/{domain}/aggregate | Dados agregados para renderização de painel (leitura via POST — parâmetros no corpo); exige PANEL_VIEW ou CONFIG_EDIT, e a fonte ainda cobra a permissão dela |
| POST | /api/config/panel/{domain}/preview | Preview de dados reais para tabelas |
| GET | /api/datalayer-admin/kafka/topics | Lista tópicos de streaming disponíveis (criação rápida) |
| GET | /api/dattabi/workspaces | Lista workspaces do DATTA BI |
| GET | /api/dattabi/workspaces/{id}/shares | Lista usuários com acesso ao workspace + papel |
| PUT | /api/dattabi/workspaces/{id}/shares/{userId} | Define o papel do compartilhamento (`{role: "view"\ |
| DELETE | /api/dattabi/workspaces/{id}/shares/{userId} | Remove o compartilhamento do workspace |
| GET | /api/dattabi/workspaces/{id}/themes | Lista temas do workspace |
| GET | /api/dattabi/dashboards | Lista dashboards (?workspaceId=&includeArchived=; workspaceId vazio → []) |
| POST | /api/dattabi/dashboards | Cria dashboard |
| PATCH | /api/dattabi/dashboards/{id} | Atualização parcial (merge de campos não-nulos: título, descrição, layouts, modelo, filtros, páginas, tema); usada pelo auto-save |
| GET | /api/dattabi/dashboards/{id}/versions | Lista versões do dashboard |
| POST | /api/dattabi/dashboards/{id}/restore | Restaura a última versão |
| GET | /api/dattabi/dashboards/{id}/export.pdf | Exporta o dashboard (também .png, .csv, .svg) |
| POST | /api/dattabi/dashboards/{id}/share | Cria link de compartilhamento |
| GET | /api/dattabi/shares/public | Consome link de compartilhamento (?t=<token>&p=) |
| DELETE | /api/dattabi/shares/{id} | Revoga link de compartilhamento |
| GET | /api/dattabi/dashboards/{id}/thumbnail.png | Miniatura do dashboard (header `X-Thumb-Source: snapshot\ |
| PUT | /api/dattabi/dashboards/{id}/thumbnail | Publica o screenshot real da miniatura |
| POST | /api/dattabi/dashboards/{id}/render | Re-renderiza o dashboard (SSE). Corpo opcional: filtroCruzado ({origem, campo, valor}, o clique num visual) e overrides (LET @nome); ?pageId= escolhe a página |
| POST | /api/dattabi/charts/{id}/render-drilled | Renderiza um chart com drill ({overrides, bindingsOverride, filtroCruzado}), com os filtros salvos do visual |
| POST | /api/dattabi/copilot/chat | Copilot do editor (SSE) |
| POST | /api/dattabi/copilot/quick-dashboard | Criação rápida (precedência customQuery > sources[] > fonte única legada) |
| POST | /api/dattabi/copilot/generate-dashboard | Gera dashboard por linguagem natural ({prompt, datasetIds?, persist?, workspaceId?}) |
| GET | /api/dattabi/datasets | Lista datasets do workspace (?workspaceId=; filtrado por permissão) |
| GET | /api/dattabi/datasets/{id} | Consulta dataset (campo loadMode: IMPORT \ |
| POST | /api/dattabi/datasets | Cria dataset (também usado pelo DATTA Prep para persistir cada consulta) |
| POST | /api/dattabi/models | Cria modelo semântico agrupando consultas |
| POST | /api/dattabi/models/{modelId}/datasets/{datasetId} | Liga um dataset ao modelo |
| POST | /api/dattabi/prep/profile | Perfil estatístico por coluna ({datasetRef, steps, sample?}) |
| POST | /api/dattabi/copilot/r/suggest | Gera script R por linguagem natural |
| GET | /api/dattabi/copilot/r/packages | Lista pacotes R habilitados |
| POST | /api/dattabi/r/execute | Executa script R sobre amostra do dataset |
| POST | /api/dattabi/dattax/validate | Valida sintaxe DATTAX (aba Consulta personalizada) |
| POST | /api/dattabi/refresh-jobs/{id}/run-now | Dispara refresh imediato de dataset materializado |
| GET | /api/config/maps-api-key | Chave de mapas para visuais georreferenciados (compartilhada entre BI, Chat e Investigar) |
curl -X POST "$BASE/api/dattabi/copilot/generate-dashboard" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Content-Type: application/json" \
-d '{"prompt": "Painel de processos por classe e por mês", "persist": true}'Pipelines & Execuções
Execute scripts DATTAX, assine streams em tempo real, controle o ciclo de vida de pipelines e acompanhe qualquer execução em segundo plano.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/dattax/execute | Executa script DATTAX avulso (progresso via SSE da própria chamada) |
| GET | /api/dattax/stdlib | Catálogo da biblioteca padrão DATTAX (alimenta o autocomplete do editor) |
| POST | /api/dattax/stream/subscribe | Cria assinatura de stream DATTAX; retorna {subscriptionId, feasibility, sseUrl, wsUrl} |
| GET | /api/dattax/stream | Lista assinaturas de stream ativas |
| GET | /api/dattax/stream/{id}/events | Eventos da assinatura via SSE (fallback do WebSocket) |
| GET | /api/dattax/stream/{id}/lag | Métricas de atraso da assinatura de stream |
| DELETE | /api/dattax/stream/{id} | Cancela a assinatura de stream |
| WS | /ws/dattax/stream/{id} | Canal primário (WebSocket) de eventos do stream |
| GET | /api/pipelines/summary | Lista paginada dos pacotes de extração (24 por página) com facetas de origem, situação e integração |
| GET | /api/pipelines/stats | Indicadores agregados da galeria de pacotes (total, em execução, agendados, executados hoje, taxa de sucesso) |
| GET | /api/pipelines/quick/capabilities | Combinações de origem e destino que a Extração Rápida sabe executar diretamente |
| POST | /api/pipelines/quick/preview | Converte as escolhas do assistente rápido no desenho do pipeline, sem gravar nem executar |
| GET | /api/pipelines/{id}/dattax | Converte a definição visual do pipeline em script DATTAX |
| POST | /api/pipelines/{id}/{acao} | Ciclo de vida do pipeline (acao: pause, resume, archive, activate) |
| GET | /api/tasks | Execuções em andamento do hub de tarefas (ingestões, uploads) |
| GET | /api/tasks/all | Histórico das últimas tarefas finalizadas (?limit=10) |
| GET | /api/tasks/stream | Estado vivo das execuções via SSE (atualização a cada 5 s) |
| POST | /api/search/executions | Grava registro terminal de execução (servidor-a-servidor) |
| GET | /api/search/executions/history | Lê o histórico durável de execuções (?from=&to= em epoch ms, limit até 1000) |
Processos BPM
Publique modelos de processo, crie instâncias e correlacione mensagens a eventos BPMN a partir dos seus sistemas.
Gerenciar modelos exige a permissão BPMN_DEPLOY (ou perfil administrador). Modelo publicado é imutável: para alterá-lo, abra uma nova versão.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/bpmn/modelos | Cria/importa um modelo BPMN a partir do XML |
| PUT | /api/bpmn/modelos/{id} | Edita o modelo enquanto ele não foi publicado |
| DELETE | /api/bpmn/modelos/{id} | Remove o modelo |
| POST | /api/bpmn/modelos/{id}/publicar | Publica o modelo, tornando-o executável e imutável |
| POST | /api/bpmn/modelos/{id}/nova-versao | Abre nova versão editável a partir do modelo publicado |
| POST | /api/bpmn/modelos/{id}/auto-iniciar | Configura o início automático de instâncias do modelo |
| GET | /api/bpmn/modelos/{id}/contexto/previa | Prévia da troca de contexto (destino=): contagens (incluindo instanciasSeguindoContextoAtivo, que nunca são migradas) e os pares banco/label/propriedade dos dois lados; não escreve nada |
| PUT | /api/bpmn/modelos/{id}/contexto | Reaponta o contexto do modelo e, com migrarInstancias, o das instâncias dele ({contexto, migrarInstancias, motivo}; motivo obrigatório) |
| POST | /api/bpmn/instancias | Cria instância de processo BPM ({modeloId, chaveNegocio, titulo, variaveis}) |
| POST | /api/bpmn/mensagens | Publica mensagem correlacionada para eventos de mensagem BPMN ({nome, correlacao, variaveis} → {entregues}) |
| DELETE | /api/bpmn/instancias/por-contexto | Exclui as instâncias BPM de um contexto purgado (cancela as ativas) |
| GET | /api/bpmn/instancias | Lista instâncias; aceita modeloId, status, chaveNegocio, responsavel (use __sem__ para as sem responsável), pagina, tamanho |
| PUT | /api/bpmn/instancias/{id}/responsavel | Define ou troca o responsável pela instância ({responsavel}; vazio libera). Exige BPMN_EXECUTE |
| PUT | /api/bpmn/instancias/responsavel-por-chave | Propaga o responsável para todas as instâncias de uma chave de negócio (?chave=, corpo {responsavel}) |
| POST | /api/bpmn/instancias/backfill-responsaveis | Preenche o responsável das instâncias antigas a partir das atribuições vigentes (idempotente) |
| GET | `/api/bpmn/relatorios/{resumo\ | fases\ |
curl -X POST "$BASE/api/bpmn/instancias" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Content-Type: application/json" \
-d '{"modeloId": "triagem-processo", "chaveNegocio": "0001234-56.2024.8.26.0100", "titulo": "Triagem do processo", "variaveis": {}}'Usuários, Permissões & Contextos
Provisione contas, atribua perfis e permissões, administre contextos de domínio e execute limpezas controladas.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/auth/users | Cria usuário local já com a role inicial — o cadastro administrativo (USERS_MANAGE_ROLES). Corpo {email, password, displayName, login?, role?} (sem role, READ_ONLY); 201 com a conta, 400 para dado ou role inválida, 409 para e-mail ou login em uso |
| POST | /api/auth/register | Auto-cadastro anônimo (login obrigatório, com validação de campos). Desligado por padrão (datta.auth.self-registration): responde 403 mesmo a quem está autenticado — para provisionar contas use POST /api/auth/users |
| POST | /api/auth/login | Autentica por e-mail OU login no mesmo campo |
| GET | /api/auth/users/{email} | Consulta a conta (e-mail é a chave canônica) |
| PUT | /api/auth/users/{email} | Atualiza a conta |
| DELETE | /api/auth/users/{email} | Remove a conta |
| PUT | /api/auth/users/{email}/role | Define o perfil (role) do usuário |
| PUT | /api/auth/users/{email}/permissions | Concede permissões diretas ao usuário |
| POST | /api/auth/jupyter-cookie | Emite cookie HttpOnly de sessão para o ambiente de Notebook |
| POST | /api/users/atribuir | Atribui o processo a um usuário (?processoNumero=; corpo {email}, contexto opcional). A gravação acontece no contexto em que o processo existe; 404 nomeia o contexto consultado e 409 pede o contexto quando o número existe em mais de um. Exige USERS_EDIT. Forma canônica — é a única que alcança número com barra |
| POST | /api/users/atribuir/{processoNumero} | Mesma atribuição com o número no endereço. Mantida para integrações já escritas; não alcança número com barra |
| GET | /api/contextos | Lista os contextos cadastrados (forma enxuta: chave e rótulo); usada por instaladores e integrações para descobrir o que existe |
| GET | /api/contextos/list | Lista os contextos com os detalhes completos de cada um |
| GET | /api/contextos/active | Contexto ativo no momento |
| GET | /api/contextos/{nome} | Detalhe de um contexto específico |
| GET | /api/config/domain/list | Lista contextos configurados (chave, rótulo, tipo). Exige sessão — qualquer perfil; a estrutura completa (fontes de dados) fica em list-full, com CONFIG_VIEW |
| GET | /api/config/domain/{nome} | Contexto + fontes de dados + base de código processual (quando definida) |
| PUT | /api/config/domain/{nome} | Atualiza o contexto (fontes de dados, flag de consumo de ativos de conhecimento pelo chat; campo vazio limpa, ausente preserva) |
| POST | /api/config/domain/legislacao | Cria um contexto de legislação em uma chamada: corpo {name, displayName, urlDaLei, prompts, ingerir} — cadastro como Código Processual / Legislação Federal e corpus de regras, urlDaLei salva como origem, prompts (opcional, por tipo: system, user, ner, audit, extraction, investigation, process_type, `knowledge.doc |
| GET | /api/config/rule-contexts-merged | Contextos de regra + rótulos {contexts, labels}, já filtrados pela visibilidade |
| GET | /api/prompts/domains/active | Contexto ativo da plataforma (fallback do frontend para resolver domain) |
| GET | /api/config/feature-visible-contexts | Mapa completo funcionalidade → contextos visíveis |
| GET | /api/config/feature-visible-contexts/{feature} | Contextos visíveis de uma funcionalidade (allowlist: rules, pdf, url, dattabi, extract, ontology, bpm) |
| POST | /api/config/feature-visible-contexts/{feature} | Grava a lista de contextos da funcionalidade (lista vazia = todos visíveis) |
| POST | /api/documents/context/purge | Orquestra o purge completo do contexto (?domain=&reason=; permissão sensível) |
| POST | /api/graph/context/purge | Purge do grafo do contexto (?domain=; valida o alvo contra bases de sistema; cascateia ao BPM) |
| POST | /api/search/admin/context/purge | Apaga os índices de busca do contexto (?domain=) |
MCP & Integrações Externas
Conecte agentes de IA externos às ferramentas do DATTA via protocolo MCP (JSON-RPC 2.0 + SSE), com observabilidade das invocações.
| Método | Endpoint | O que faz |
|---|---|---|
| GET | /api/mcp/tools | Lista as ferramentas MCP registradas (nome, schema, permissão) |
| GET | /api/mcp/sessions | Sessões SSE ativas |
| GET | /api/mcp/invocations | Invocações recentes (?limit=200; usuário, ferramenta, duração, resultado) |
| GET | /api/mcp/info | Inventário das ferramentas MCP e a permissão que cada uma exige. Exige MCP_INVOKE (uso servidor-a-servidor com token interno) |
| POST | /mcp/rpc | Canal JSON-RPC 2.0 do MCP (Authorization: Bearer). Requisição (com id) → 200 com a resposta; notificação (sem id) → 202 sem corpo |
| GET | /mcp/sse | Canal SSE do MCP; o evento endpoint devolve a URL de mensagens da sessão (/mcp/sse/messages?sessionId=...) |
curl -X POST "$BASE/mcp/rpc" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'Exportação de Conhecimento & Contas de Serviço
Leve o conhecimento curado do DATTA para sistemas externos — assistentes próprios, portais, buscadores — por um canal com identidade própria, separada das contas de pessoas.
Contas de serviço
Integrações não usam a conta de um usuário: você cria uma conta de serviço com escopo de contextos e troca as credenciais por um token de acesso. O segredo é exibido uma única vez, na criação — guarde-o no seu cofre.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/auth/service-accounts | Cria a conta com escopo de contextos ({nome, descricao, dominios[]}); devolve o identificador e o segredo, este último exibido só agora |
| GET | /api/auth/service-accounts | Lista as contas de serviço existentes |
| DELETE | /api/auth/service-accounts/{id} | Revoga a conta; corpo {reason} obrigatório, idempotente, efeito propagado em até 60 s |
| POST | /api/auth/service-accounts/token | Troca identificador + segredo por um token com o escopo da conta; limite de 10 chamadas/minuto por identificador e origem |
| GET | /api/auth/service-accounts/{id}/status | Consulta a situação da conta (uso servidor-a-servidor para checar revogação) |
Credencial inválida e conta revogada devolvem a mesma resposta de erro no pedido de token — a diferença não é revelada de propósito. Para saber se uma conta foi revogada, consulte a listagem.
Exportação por contexto
Base: /api/knowledge/export/{contexto}/.... Só conteúdo aprovado é exportado. Comece pelo manifesto: ele traz o inventário por coleção e uma versão de snapshot que serve de validador de cache — repetindo a chamada com esse validador, você recebe "sem novidades" em vez do conteúdo inteiro.
| Método | Endpoint | O que faz |
|---|---|---|
| GET | /api/knowledge/export/{contexto}/manifest | Inventário por coleção + versão do snapshot; devolve "não modificado" quando você informa a versão que já tem |
| GET | /api/knowledge/export/{contexto}/documentos | Documentos otimizados aprovados (`?format=json\ |
| GET | /api/knowledge/export/{contexto}/faq | Pares de pergunta e resposta aprovados (?since=) |
| GET | /api/knowledge/export/{contexto}/glossario | Termos de glossário aprovados (?since=) |
| GET | /api/knowledge/export/{contexto}/chunks | Trechos vigentes em fluxo contínuo, paginados por cursor (?includeEmbeddings=) |
| GET | /api/knowledge/export/{contexto}/bundle | Pacote zip com manifesto, documentos, perguntas e glossário de uma vez |
Para sincronização incremental, guarde o instante da última exportação e passe-o em since: as coleções devolvem apenas o que mudou desde então.
TOKEN=$(curl -s -X POST "$BASE/api/auth/service-accounts/token" \
-H "Content-Type: application/json" \
-d '{"clientId": "'"$CLIENT_ID"'", "clientSecret": "'"$CLIENT_SECRET"'"}' | jq -r .accessToken)
curl -s "$BASE/api/knowledge/export/MEC/manifest" \
-H "Authorization: Bearer $TOKEN"Configuração & Utilitários
Ajustes de plataforma consumíveis por API: modelos de IA, chaves de fontes externas, documentação restrita e navegação no armazenamento de objetos.
| Método | Endpoint | O que faz |
|---|---|---|
| POST | /api/config/thinking-model | Grava o modelo de raciocínio da etapa de seleção de ferramenta do chat (escolha de plataforma, vale para todos os contextos) |
| GET/POST | /api/config/datajud-url | Lê/grava a URL base do DataJud (dinâmico, sem reimplantação) |
| GET/POST | /api/config/datajud-key | Lê/grava a chave pública do CNJ (mascarada após salva) |
| GET | /api/config/internal/datajud-key | Leitura servidor-a-servidor da chave DataJud |
| GET | /api/docs/{caminho} | Serve manifesto + conteúdo da seção restrita do Portal de Documentação (autenticado) |
| GET | /api/platform/minio/browser/buckets | Lista buckets do armazenamento de objetos ([{name, creationDate}]) |
| GET | /api/platform/minio/browser/objects | Lista objetos/pastas (?bucket=&prefix=&recursive=&max=&startAfter= → {objects[], truncated, nextToken}) |
| GET | /api/platform/minio/browser/object | Detalhe do objeto (?bucket=&key=; tamanho, tipo, última modificação, etag, metadados) |
| GET | /api/platform/minio/browser/summary | Resumo do bucket (?bucket=; contagem e tamanho total, teto de 50.000 objetos) |
| GET/PUT | /api/platform/minio/config | Lê/grava a configuração do armazenamento de objetos (chave secreta mascarada; escrita administrativa) |
| POST | /api/platform/minio/test | Testa a conectividade do armazenamento de objetos ({ok, message}) |
Os endpoints evoluem junto com a plataforma — novas rotas surgem e parâmetros são refinados a cada versão; em caso de divergência, o comportamento observado na versão instalada prevalece. Toda execução disparada via API (triagens, ingestões, gerações, sincronizações) aparece na área Execuções da interface, com a mesma trilha de auditoria das ações feitas pela tela.