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)

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)

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
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. 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.

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