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)
POST/api/schema/analyze-sampleAnalizza il JSON di esempio alla ricerca di nomi di proprietà ambigui — quelli che ammettono più letture nel contesto del proprio elemento padre, o nessuna — e di elementi correlati che mescolano dati dell'entità e dati specifici del padre (report stateless, ridenominazioni suggerite)
POST/api/schema/saved/{id}/analyzeEsegue i controlli di ambiguità e di ambito dell'identità su uno schema salvato e ne scrive le annotazioni (una descrizione riscritta per ogni nome ambiguo)
POST/api/schema/scoping-splitApplica una divisione per scoping dell'identità a un insieme di campioni — i fatti propri dell'entità correlata vengono spostati in un sotto-oggetto dedicato (deterministica, gratuita, nulla viene salvato)
DELETE/api/schema/saved/{id}/enrichment-dataElimina i dati di arricchimento di uno schema — record e stato dell'entità — mantenendo lo schema (owner+)

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)

Pubblicazione dello schema ed esempi

MetodoEndpointDescrizione
POST/api/schema/saved/{id}/publishPubblica la copia di lavoro di uno schema collegato come contratto su cui operano l'enrichment e i relativi database. Nessuna modifica strutturale ha effetto finché non viene eseguita questa operazione
POST/api/schema/sample/generate/streamGenera 1..N oggetti JSON di esempio di un unico tipo di entità (restituisce job_id per SSE)

Database Sync

MetodoEndpointDescrizione
GET/api/databasesElenca le registrazioni di database dell’organizzazione, con i conteggi dei delta in sospeso
POST/api/databasesRegistra un database su uno schema
GET/api/databases/{id}/snapshotScarichi lo stato completo come snapshot .sql — inizializzazione da zero
GET/api/databases/{id}/changesRecupera la finestra FIFO successiva di delta; rivendicali per riservarli a una consegna con conferma
POST/api/databases/{id}/ackConferma i delta applicati fino a un id — rilascia il lease
POST/api/databases/{id}/clear-ackedElimina i delta consegnati e confermati

Concetti semantici

MetodoEndpointDescrizione
GET/api/semantic-conceptsEsplora il vocabolario dei concetti, filtrato per tipo e valutato rispetto a un concetto di riferimento
GET/api/semantic-concepts/typesElenca i tipi di concetto con i relativi conteggi e modelli di embedding
POST/api/semantic-concepts/probeSimuli la scala di risoluzione per un testo — che cosa corrisponderebbe e con quale grado di somiglianza
GET/api/semantic-concepts/duplicatesCoppie di concetti appena al di sotto della soglia di unione
POST/api/semantic-concepts/importRisolve in batch un CSV di testi identitari (la creazione di nuovi ID richiede il ruolo di proprietario)
GET/api/semantic-concepts/exportEsporta il vocabolario in CSV
POST/api/semantic-concepts/delete-impactChe cosa comporterebbe l'eliminazione dei concetti — conteggi di utilizzo e costo della risincronizzazione
GET/api/semantic-concepts/migration/statusStato della migrazione del modello di embedding, se ne è in corso una

Benchmark e fatturazione

MetodoEndpointDescrizione
GET/api/benchmarksElenca gli scenari di benchmark
POST/api/benchmarks/{id}/runEsegua uno scenario su più modelli — ogni risultato viene valutato automaticamente
POST/api/benchmarks/{id}/referenceSalva e verifica il riferimento gold rispetto al quale viene valutato uno scenario
GET/api/billing/balanceSaldo crediti attuale
GET/api/billing/transactionsCronologia delle transazioni di credito, inclusa la spesa per gli embedding
GET/api/billing/plansI piani disponibili e i relativi limiti

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
402Pagamento richiestoLimite del piano o saldo crediti — quota esaurita, troppi modelli o troppe lingue, una funzionalità non inclusa nel piano. Il corpo della risposta contiene un codice leggibile da macchina insieme al dettaglio.
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 errori relativi al piano e alla fatturazione (402) contengono inoltre un corpo strutturato con un code stabile — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — oltre ai valori di limite e di utilizzo pertinenti, così che un client possa distinguere la causa anziché analizzare il testo. I flussi SSE emettono un evento di tipo error prima dell'evento finale completed se qualcosa non riesce durante lo streaming.

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.

Il parametro model è facoltativo per l'arricchimento, la generazione di schema e la generazione di campioni: ometterlo (oppure passare il valore letterale "auto") e il server sceglie il modello predefinito della Sua organizzazione — il predefinito per attività fissato se ne è impostato uno nelle Impostazioni, altrimenti il modello con il miglior punteggio complessivo dai Suoi benchmark di origine del punteggio. Il campo default_models della risposta options mostra a quale modello si risolve attualmente auto, mentre un evento SSE model_auto_selected segnala la scelta per ogni job. Auto si risolve sempre in un singolo modello (non attiva mai la fusion); per pipeline riproducibili, continui a passare modelli espliciti.

Le opzioni della richiesta vincolano la selezione automatica: con enable_web_search: true vengono considerati solo i modelli in grado di effettuare ricerche web (il campo default_models_web_search della risposta con le opzioni mostra un'anteprima di tale selezione) e gli attachment binari richiedono un modello in grado di leggerli (PDF, visione, audio). Quando nessun modello idoneo soddisfa i vincoli, la richiesta ha esito negativo con HTTP 400 no_capable_default_model anziché ignorare silenziosamente l'opzione.

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