Riferimento API - Documentazione di Entity Enricher

Riferimento API

L'API REST di Entity Enricher consente di arricchire entità, gestire schemi e recuperare record in modo programmatico. Tutte le risposte sono in JSON. L'avanzamento in tempo reale utilizza i Server-Sent Events (SSE).

Avvio rapido

Integra Entity Enricher in tre passaggi:

1

Ottieni schema

GET /api/schema/saved

Elenca gli schema salvati o generane uno dai dati di esempio

2

Arricchisci

POST /api/single/enrich/stream

Avvia l'arricchimento, ottieni un ID job per lo streaming SSE

3

Ottieni risultato

GET /api/records/{id}

Recupera il record di arricchimento completo con output strutturato

Autenticazione

Tutti gli endpoint API (tranne login/registrazione) richiedono l'autenticazione. Utilizzare l'header X-API-Key con una chiave di accesso dell'organizzazione:

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

Crea chiavi API dalla pagina Chiavi API o tramite POST /api/auth/api-keys. Consulta la guida alle chiavi API per i dettagli sui tipi di chiave e i permessi.

Endpoint principali

Arricchimento

MetodoEndpointDescrizione
GET/api/enrichment/optionsModelli, lingue e strategie disponibili
POST/api/single/enrich/streamAvvia l'arricchimento di una singola entità (restituisce job_id per SSE)
POST/api/single/enrich/syncArricchimento singolo bloccante per client non SSE (Make.com, curl)
POST/api/enrichment/batch/startAvvia l'arricchimento batch per più entità
POST/api/enrichment/batch/fetchRecupera le entity da un URL esterno

Gestione dei job

MetodoEndpointDescrizione
GET/api/llm/stream/{job_id}Stream SSE per qualsiasi job LLM (arricchimento, schema, fusione)
POST/api/llm/cancel/{job_id}Annulla un processo in esecuzione o in pausa
POST/api/llm/continue/{job_id}Riprendi un processo in pausa (ad es. dopo una mancata corrispondenza di classificazione)

Schemi

MetodoEndpointDescrizione
GET/api/schema/savedElenca tutti gli schema salvati
POST/api/schema/savedCrea un nuovo schema
POST/api/schema/generate/streamGenera schema dai dati di esempio (SSE)
POST/api/schema/saved/{id}/prompt/streamModifica dello schema con AI in linguaggio naturale (SSE)

Record e fusione

MetodoEndpointDescrizione
GET/api/recordsElenca i record con paginazione e filtri
GET/api/records/{id}Ottieni i dettagli completi del record con output strutturato
POST/api/records/batch-deleteElimina più record (max 100)
POST/api/fusion/mergeUnisci i risultati di più modelli

Allegati

MetodoEndpointDescrizione
POST/api/attachmentsCarica uno o più file (multipart/form-data)
POST/api/attachments/base64Carica un file tramite JSON base64 (per client non multipart)
GET/api/attachments/{id}/downloadScarica i byte del file originale
DELETE/api/attachments/{id}Elimina un allegato (pulizia post-arricchimento)

Streaming SSE

Le operazioni di arricchimento, generazione degli schemi e fusione utilizzano i Server-Sent Events per il progresso in tempo reale. Avviare un job, ottenere un job_id, quindi connettersi allo stream SSE:

Flusso di eventi 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"}

Tipi di evento principali

EventoDescrizione
model_startedL'elaborazione del modello ha inizio
expertise_completedUn dominio di competenza completato (con risultati parziali)
model_completedIl modello ha terminato con result, record_id e cost
fusion_started / fusion_completedEventi del ciclo di vita della fusione multi-modello
entity_started / entity_completedEventi per entità specifici del batch (includono entity_index)
completedEvento terminale - chiudere la connessione
errorSi è verificato un errore a livello di job

Esempio Python

Un flusso di lavoro completo che elenca gli schemi, avvia l'arricchimento, trasmette i risultati in streaming e recupera il record finale:

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

Esempio curl

Avvia un arricchimento batch con due model ed esegui lo streaming dei risultati:

# 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'

Gestione degli errori

StatoSignificatoEsempio
200Operazione riuscitaRichiesta completata
400Richiesta non validaChiave del modello non valida o campo mancante
401Non autorizzatoChiave API mancante o non valida
403VietatoRuolo insufficiente per questo endpoint
404Non trovatoRecord, schema o processo non trovato
500Errore del serverErrore interno

Le risposte di errore includono un campo detail con un messaggio di errore leggibile. Gli stream SSE emettono un evento di tipo error prima dell'evento terminale completed se qualcosa fallisce durante lo stream.

Chiavi composite del modello

I modelli sono identificati da chiavi composite nel formato provider_name::model_name. Utilizzare GET /api/enrichment/options per elencare i modelli disponibili e le relative chiavi.

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

Documentazione API interattiva

L'applicazione include una documentazione API interattiva con esempi di richiesta/risposta. Per accedervi è richiesta l'autenticazione come amministratore:

Passaggi successivi