Referência da API - Documentação do Entity Enricher

Referência da API

A API REST do Entity Enricher permite-lhe enriquecer entidades, gerir schemas e obter registos de forma programática. Todas as respostas são JSON. O progresso em tempo real usa Server-Sent Events (SSE).

Início rápido

Integre o Entity Enricher em três passos:

1

Obter schema

GET /api/schema/saved

Listar os schemas guardados ou gerar um a partir de dados de exemplo

2

Enriquecer

POST /api/single/enrich/stream

Inicie o enriquecimento e obtenha um ID de tarefa para streaming SSE

3

Obter resultado

GET /api/records/{id}

Obter o registo de enriquecimento completo com saída estruturada

Autenticação

Todos os endpoints da API (exceto início de sessão/registo) requerem autenticação. Utilize o cabeçalho X-API-Key com uma chave de acesso da organização:

curl -H "X-API-Key: ent_your_key_here" \
     https://your-instance.example.com/api/enrichment/options

Crie chaves de API a partir da página de chaves de API ou através de POST /api/auth/api-keys. Consulte o guia de chaves de API para detalhes sobre os tipos de chave e as permissões.

Principais endpoints

Enriquecimento

MétodoEndpointDescrição
GET/api/enrichment/optionsModelos, idiomas e estratégias disponíveis
POST/api/single/enrich/streamInicie o enriquecimento de uma única entidade (devolve job_id para SSE)
POST/api/single/enrich/syncEnriquecimento único bloqueante para clientes não-SSE (Make.com, curl)
POST/api/enrichment/batch/startIniciar enriquecimento em lote para várias entidades
POST/api/enrichment/batch/fetchObter entidades a partir de um URL externo

Gestão de Tarefas

MétodoEndpointDescrição
GET/api/llm/stream/{job_id}Stream SSE para qualquer tarefa de LLM (enriquecimento, schema, fusão)
POST/api/llm/cancel/{job_id}Cancelar uma tarefa em execução ou pausada
POST/api/llm/continue/{job_id}Retomar uma tarefa em pausa (por ex., após incompatibilidade de classificação)

Esquemas

MétodoEndpointDescrição
GET/api/schema/savedListar todos os schemas guardados
POST/api/schema/savedCriar um novo schema
POST/api/schema/generate/streamGerar schema a partir de dados de exemplo (SSE)
POST/api/schema/saved/{id}/prompt/streamEditar esquema com IA usando linguagem natural (SSE)
POST/api/schema/analyze-sampleAnalise o JSON de amostra em busca de nomes de propriedades ambíguos — os que admitem várias leituras no contexto do respetivo elemento pai, ou nenhuma — e de itens relacionados que misturam factos da entidade com factos por elemento pai (relatório sem estado, sugestões de renomeação)
POST/api/schema/saved/{id}/analyzeExecutar as verificações de ambiguidade e de âmbito de identidade num esquema guardado e escrever as respetivas anotações (uma descrição reescrita para cada nome ambíguo)
POST/api/schema/scoping-splitAplicar uma divisão de delimitação de identidade a um conjunto de amostras — os factos próprios da entidade relacionada passam para um subobjeto próprio (determinista, gratuita, nada é guardado)
DELETE/api/schema/saved/{id}/enrichment-dataElimine os dados de enrichment de um schema — records e estado da entidade — mantendo o schema (owner+)

Registos e Fusão

MétodoEndpointDescrição
GET/api/recordsListar registos com paginação e filtragem
GET/api/records/{id}Obtenha o detalhe completo do record com resultados estruturados
POST/api/records/batch-deleteEliminar vários registos (máx. 100)
POST/api/fusion/mergeCombinar resultados de vários modelos

Anexos

MétodoEndpointDescrição
POST/api/attachmentsCarregar um ou mais ficheiros (multipart/form-data)
POST/api/attachments/base64Carregar um ficheiro através de JSON base64 (para clientes não multipart)
GET/api/attachments/{id}/downloadTransferir os bytes do ficheiro original
DELETE/api/attachments/{id}Eliminar um anexo (limpeza pós-enriquecimento)

Publicação de schemas e amostras

MétodoEndpointDescrição
POST/api/schema/saved/{id}/publishPublique a cópia de trabalho de um schema associado como o contrato sobre o qual funcionam o enriquecimento e as suas bases de dados. Nada de estrutural entra em vigor até isto ser executado
POST/api/schema/sample/generate/streamGere 1..N objetos JSON de amostra de um tipo de entidade (devolve job_id para SSE)

Database Sync

MétodoEndpointDescrição
GET/api/databasesListar as bases de dados registadas da organização, com as contagens de deltas pendentes
POST/api/databasesRegistar uma base de dados num schema
GET/api/databases/{id}/snapshotTransfira o estado completo como um snapshot .sql — arranque do zero
GET/api/databases/{id}/changesObter a próxima janela FIFO de deltas; reivindique-os para os reservar para entrega com confirmação
POST/api/databases/{id}/ackConfirmar os deltas aplicados até um id — liberta a concessão
POST/api/databases/{id}/clear-ackedEliminar os deltas entregues e confirmados

Conceitos semânticos

MétodoEndpointDescrição
GET/api/semantic-conceptsExplorar o vocabulário de conceitos, filtrado por tipo e pontuado em relação a um conceito de referência
GET/api/semantic-concepts/typesListar os tipos de conceito com as respetivas contagens e modelos de embedding
POST/api/semantic-concepts/probeSimule a escada de resolução para um texto — a que corresponderia e com que proximidade
GET/api/semantic-concepts/duplicatesPares de conceitos que ficam ligeiramente abaixo do limiar de fusão
POST/api/semantic-concepts/importResolver em lote um CSV de textos de identidade (a criação de conceitos exige proprietário)
GET/api/semantic-concepts/exportExportar o vocabulário em CSV
POST/api/semantic-concepts/delete-impactO que a eliminação de conceitos afetaria — contagens de utilização e custo de ressincronização
GET/api/semantic-concepts/migration/statusEstado da migração do modelo de embeddings, caso esteja em curso

Benchmarks e Faturação

MétodoEndpointDescrição
GET/api/benchmarksListar cenários de benchmark
POST/api/benchmarks/{id}/runExecute um cenário em vários modelos — cada resultado é pontuado automaticamente
POST/api/benchmarks/{id}/referenceGuardar e verificar a referência dourada com base na qual um cenário é pontuado
GET/api/billing/balanceSaldo de créditos atual
GET/api/billing/transactionsHistórico de transações de créditos, incluindo gastos com embeddings
GET/api/billing/plansPlanos disponíveis e respetivos limites

Streaming SSE

As operações de enriquecimento, geração de schema e fusion utilizam Server-Sent Events para acompanhar o progresso em tempo real. Inicie um trabalho, obtenha um job_id e depois ligue-se ao stream SSE:

Fluxo de eventos SSE

data: {"type":"model_started","model":"anthropic::claude-sonnet-4-5"}
data: {"type":"expertise_completed","expertise_key":"financial","partial_result":{...}}
data: {"type":"model_completed","success":true,"result":{...},"record_id":"uuid"}
data: {"type":"completed"}

Principais tipos de evento

EventoDescrição
model_startedO processamento do modelo começa
expertise_completedUm domínio de expertise concluído (com resultados parciais)
model_completedO model terminou com o resultado, o record_id e o custo
fusion_started / fusion_completedEventos do ciclo de vida da fusão multi-modelo
entity_started / entity_completedEventos por entidade específicos do lote (incluem entity_index)
completedEvento terminal - fechar a ligação
errorOcorreu um erro ao nível da tarefa

Exemplo em Python

Um fluxo de trabalho completo que lista esquemas, inicia o enriquecimento, transmite resultados e obtém o registo final:

import httpx
import json

BASE = "https://your-instance.example.com"
KEY = "ent_your_api_key"
HEADERS = {"X-API-Key": KEY, "Content-Type": "application/json"}

# 1. List saved schemas
schemas = httpx.get(f"{BASE}/api/schema/saved", headers=HEADERS).json()
schema_id = schemas["schemas"][0]["id"]

# 2. Start enrichment
resp = httpx.post(f"{BASE}/api/single/enrich/stream", headers=HEADERS, json={
    "entity_data": {"name": "Moderna Inc", "country": "US"},
    "schema_id": schema_id,
    "models": ["anthropic::claude-sonnet-4-5-20250514"],
    "strategy": "multi_expertise",
})
job_id = resp.json()["job_id"]

# 3. Stream SSE events
record_id = None
with httpx.stream("GET", f"{BASE}/api/llm/stream/{job_id}", headers=HEADERS) as stream:
    for line in stream.iter_lines():
        if not line.startswith("data: "):
            continue
        event = json.loads(line[6:])

        if event["type"] == "model_completed" and event.get("record_id"):
            record_id = event["record_id"]
        elif event["type"] == "completed":
            break

# 4. Retrieve the enrichment record
if record_id:
    record = httpx.get(f"{BASE}/api/records/{record_id}", headers=HEADERS).json()
    print(json.dumps(record["structured_output"], indent=2))

Exemplo com curl

Inicie um enriquecimento em lote com dois modelos e transmita os resultados:

# Start batch enrichment
JOB_ID=$(curl -s -X POST \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  "$BASE/api/enrichment/batch/start" \
  -d '{
    "entities": [
      {"name": "Pfizer Inc", "country": "US"},
      {"name": "Roche", "country": "CH"}
    ],
    "schema_id": "your-schema-uuid",
    "models": ["anthropic::claude-sonnet-4-5-20250514", "openai::gpt-4o"],
    "strategy": "multi_expertise",
    "arbitration_model": "anthropic::claude-sonnet-4-5-20250514"
  }' | jq -r '.job_id')

# Stream events
curl -N -H "X-API-Key: $KEY" "$BASE/api/llm/stream/$JOB_ID"

# List resulting records
curl -s -H "X-API-Key: $KEY" \
  "$BASE/api/records?type=enrichment&page_size=10" | jq '.records'

Tratamento de erros

EstadoSignificadoExemplo
200SucessoPedido concluído
400Pedido inválidoChave de model inválida ou campo em falta
401Não autorizadoChave de API em falta ou inválida
402Pagamento necessárioLimite do plano ou saldo de créditos — quota esgotada, demasiados modelos ou idiomas, uma funcionalidade que não faz parte do seu plano. O corpo inclui um código legível por máquina, a par do detalhe.
403ProibidoFunção insuficiente para este endpoint
404Não encontradoRegisto, esquema ou tarefa não encontrado
500Erro do servidorFalha interna

As respostas de erro incluem um campo detail com uma mensagem de erro legível. As falhas de plano e de faturação (402) trazem ainda um corpo estruturado com um code estável — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — além dos números de limite e de utilização relevantes, para que um cliente possa decidir com base na causa em vez de interpretar texto corrido. Os fluxos SSE emitem um tipo de evento error antes do evento terminal completed se algo falhar a meio do fluxo.

Chaves Compostas do Model

Os modelos são identificados por chaves compostas no formato provider_name::model_name. Use GET /api/enrichment/options para listar os modelos disponíveis e as respetivas chaves.

O parâmetro model é opcional no enriquecimento, na geração de esquemas e na geração de amostras: omita-o (ou passe o literal "auto") e o servidor escolhe o modelo predefinido da sua organização — a predefinição por tarefa fixada, se estiver definida nas Definições, caso contrário o modelo com a melhor pontuação global dos seus benchmarks de origem de pontuação. O campo default_models da resposta de opções mostra para que o auto resolve atualmente, e um evento SSE model_auto_selected comunica a escolha em cada tarefa. O auto resolve sempre para um único modelo (nunca aciona fusão); para pipelines reproduzíveis, continue a passar modelos explícitos.

As opções do pedido restringem a seleção automática: com enable_web_search: true apenas os modelos com capacidade de pesquisa na web são considerados (o campo default_models_web_search da resposta de opções pré-visualiza essa seleção) e os anexos binários exigem um modelo que os consiga ler (PDF, visão, áudio). Quando nenhum modelo elegível satisfaz as restrições, o pedido falha com HTTP 400 no_capable_default_model em vez de descartar silenciosamente a opção.

Anthropic
anthropic::claude-sonnet-4-5-20250514
OpenAI
openai::gpt-4o
Google
google::gemini-2.5-pro
DeepSeek
deepseek::deepseek-chat

Documentação interativa da API

A aplicação inclui documentação de API interativa com exemplos de pedido/resposta. Requer autenticação de administrador para aceder:

Próximos Passos