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).
Integra Entity Enricher in tre passaggi:
GET /api/schema/savedElenca gli schema salvati o generane uno dai dati di esempio
POST /api/single/enrich/streamAvvia l'arricchimento, ottieni un ID job per lo streaming SSE
GET /api/records/{id}Recupera il record di arricchimento completo con output strutturato
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/optionsCrea 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.
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /api/enrichment/options | Modelli, lingue e strategie disponibili |
| POST | /api/single/enrich/stream | Avvia l'arricchimento di una singola entità (restituisce job_id per SSE) |
| POST | /api/single/enrich/sync | Arricchimento singolo bloccante per client non SSE (Make.com, curl) |
| POST | /api/enrichment/batch/start | Avvia l'arricchimento batch per più entità |
| POST | /api/enrichment/batch/fetch | Recupera le entity da un URL esterno |
| Metodo | Endpoint | Descrizione |
|---|---|---|
| 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) |
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /api/schema/saved | Elenca tutti gli schema salvati |
| POST | /api/schema/saved | Crea un nuovo schema |
| POST | /api/schema/generate/stream | Genera schema dai dati di esempio (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | Modifica dello schema con AI in linguaggio naturale (SSE) |
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /api/records | Elenca i record con paginazione e filtri |
| GET | /api/records/{id} | Ottieni i dettagli completi del record con output strutturato |
| POST | /api/records/batch-delete | Elimina più record (max 100) |
| POST | /api/fusion/merge | Unisci i risultati di più modelli |
| Metodo | Endpoint | Descrizione |
|---|---|---|
| POST | /api/attachments | Carica uno o più file (multipart/form-data) |
| POST | /api/attachments/base64 | Carica un file tramite JSON base64 (per client non multipart) |
| GET | /api/attachments/{id}/download | Scarica i byte del file originale |
| DELETE | /api/attachments/{id} | Elimina un allegato (pulizia post-arricchimento) |
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:
| Evento | Descrizione |
|---|---|
| model_started | L'elaborazione del modello ha inizio |
| expertise_completed | Un dominio di competenza completato (con risultati parziali) |
| model_completed | Il modello ha terminato con result, record_id e cost |
| fusion_started / fusion_completed | Eventi del ciclo di vita della fusione multi-modello |
| entity_started / entity_completed | Eventi per entità specifici del batch (includono entity_index) |
| completed | Evento terminale - chiudere la connessione |
| error | Si è verificato un errore a livello di job |
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))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'| Stato | Significato | Esempio |
|---|---|---|
| 200 | Operazione riuscita | Richiesta completata |
| 400 | Richiesta non valida | Chiave del modello non valida o campo mancante |
| 401 | Non autorizzato | Chiave API mancante o non valida |
| 403 | Vietato | Ruolo insufficiente per questo endpoint |
| 404 | Non trovato | Record, schema o processo non trovato |
| 500 | Errore del server | Errore 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.
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::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatL'applicazione include una documentazione API interattiva con esempi di richiesta/risposta. Per accedervi è richiesta l'autenticazione come amministratore: