API-referentie - Entity Enricher-documentatie

API-referentie

Met de Entity Enricher REST API kun je entiteiten verrijken, schema's beheren en records programmatisch ophalen. Alle antwoorden zijn JSON. Realtime voortgang gebruikt Server-Sent Events (SSE).

Snel aan de slag

Integreer Entity Enricher in drie stappen:

1

Schema ophalen

GET /api/schema/saved

Toon opgeslagen schema's of genereer er een op basis van voorbeelddata

2

Verrijken

POST /api/single/enrich/stream

Start een enrichment, ontvang een job-ID voor SSE-streaming

3

Resultaat ophalen

GET /api/records/{id}

Haal de volledige enrichment-record op met gestructureerde uitvoer

Authenticatie

Alle API-eindpunten (behalve inloggen/registreren) vereisen authenticatie. Gebruik de X-API-Key-header met een toegangssleutel van de organisatie:

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

Maak API-sleutels aan op de pagina API-sleutels of via POST /api/auth/api-keys. Zie de gids voor API-sleutels voor details over sleuteltypes en permissies.

Belangrijkste endpoints

Verrijking

MethodeEndpointBeschrijving
GET/api/enrichment/optionsBeschikbare models, talen en strategieën
POST/api/single/enrich/streamStart een enrichment van één entity (geeft job_id terug voor SSE)
POST/api/single/enrich/syncBlokkerende enkele verrijking voor niet-SSE-clients (Make.com, curl)
POST/api/enrichment/batch/startStart een batch-enrichment voor meerdere entities
POST/api/enrichment/batch/fetchHaal entiteiten op van een externe URL

Jobbeheer

MethodeEndpointBeschrijving
GET/api/llm/stream/{job_id}SSE-stream voor elke LLM-taak (enrichment, schema, fusion)
POST/api/llm/cancel/{job_id}Een lopende of gepauzeerde taak annuleren
POST/api/llm/continue/{job_id}Hervat een gepauzeerde taak (bijv. na een classification-mismatch)

Schema's

MethodeEndpointBeschrijving
GET/api/schema/savedAlle opgeslagen schema's weergeven
POST/api/schema/savedEen nieuw schema aanmaken
POST/api/schema/generate/streamGenereer schema uit voorbeelddata (SSE)
POST/api/schema/saved/{id}/prompt/streamSchema AI-bewerken met natuurlijke taal (SSE)
POST/api/schema/analyze-sampleAnalyseer sample-JSON op ambigue eigenschapsnamen — namen die in de context van hun ouder meerdere lezingen toelaten, of geen enkele — en op gerelateerde items die entiteitsfeiten mengen met feiten per ouder (stateless rapport, voorgestelde hernoemingen)
POST/api/schema/saved/{id}/analyzeVoer de controles op ambiguïteit en identiteitsafbakening uit op een opgeslagen schema en schrijf de annotaties weg (een herschreven beschrijving per dubbelzinnige naam)
POST/api/schema/scoping-splitPas één identiteitsafbakeningssplitsing toe op een sampleset — de eigen feiten van de gerelateerde entiteit verhuizen naar een eigen subobject (deterministisch, gratis, niets wordt opgeslagen)
DELETE/api/schema/saved/{id}/enrichment-dataWis de verrijkingsdata van een schema — records en entity-status — met behoud van het schema (owner+)

Records & Fusie

MethodeEndpointBeschrijving
GET/api/recordsRecords weergeven met paginering en filtering
GET/api/records/{id}Krijg volledige recorddetails met gestructureerde uitvoer
POST/api/records/batch-deleteMeerdere records verwijderen (max. 100)
POST/api/fusion/mergeResultaten van meerdere modellen samenvoegen

Bijlagen

MethodeEndpointBeschrijving
POST/api/attachmentsEén of meer bestanden uploaden (multipart/form-data)
POST/api/attachments/base64Eén bestand uploaden via JSON base64 (voor niet-multipart clients)
GET/api/attachments/{id}/downloadDownload de originele bestandsbytes
DELETE/api/attachments/{id}Een bijlage verwijderen (opschoning na verrijking)

Schema publiceren & voorbeelden

MethodeEndpointBeschrijving
POST/api/schema/saved/{id}/publishPubliceer de werkkopie van een gekoppeld schema als het contract waartegen verrijking en de bijbehorende databases draaien. Structurele wijzigingen worden pas van kracht zodra dit gebeurt
POST/api/schema/sample/generate/streamGenereer 1..N JSON-voorbeeldobjecten van één entiteitstype (geeft job_id terug voor SSE)

Database Sync

MethodeEndpointBeschrijving
GET/api/databasesToont de databaseregistraties van de organisatie, met het aantal openstaande delta's
POST/api/databasesEen database registreren op een schema
GET/api/databases/{id}/snapshotDownload de volledige status als .sql-snapshot — begin vanaf nul
GET/api/databases/{id}/changesHaal het volgende FIFO-venster met delta's op; claim ze om ze te leasen voor bevestigde levering
POST/api/databases/{id}/ackBevestig toegepaste delta's tot aan een id — geeft de lease vrij
POST/api/databases/{id}/clear-ackedAfgeleverde en bevestigde delta's opruimen

Semantische concepten

MethodeEndpointBeschrijving
GET/api/semantic-conceptsBlader door het conceptvocabulaire, gefilterd op type en gescoord ten opzichte van een referentieconcept
GET/api/semantic-concepts/typesToont de concepttypen met hun aantallen en embeddingmodellen
POST/api/semantic-concepts/probeDoe een dry-run van de resolutieladder voor een tekst — waarmee zou hij matchen, en hoe nauw
GET/api/semantic-concepts/duplicatesConceptparen die net onder de samenvoegdrempel zitten
POST/api/semantic-concepts/importLos in batch een CSV met identiteitsteksten op (aanmaken vereist eigenaarsrechten)
GET/api/semantic-concepts/exportExporteer de woordenlijst als CSV
POST/api/semantic-concepts/delete-impactWat het verwijderen van concepten raakt — gebruiksaantallen en hersynchronisatiekosten
GET/api/semantic-concepts/migration/statusDe status van de migratie van het embeddingmodel, als er een loopt

Benchmarks & facturering

MethodeEndpointBeschrijving
GET/api/benchmarksBenchmarkscenario's weergeven
POST/api/benchmarks/{id}/runDraai een scenario over meerdere modellen — elk resultaat wordt automatisch gescoord
POST/api/benchmarks/{id}/referenceSla de gouden referentie op waartegen een scenario wordt gescoord en verifieer die
GET/api/billing/balanceHuidig creditsaldo
GET/api/billing/transactionsTransactiegeschiedenis van credits, inclusief uitgaven aan embeddings
GET/api/billing/plansBeschikbare abonnementen en hun limieten

SSE-streaming

Verrijking, schemageneratie en fusiebewerkingen gebruiken Server-Sent Events voor realtime voortgang. Start een taak, ontvang een job_id en maak vervolgens verbinding met de SSE-stream:

SSE-gebeurtenisstroom

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"}

Belangrijkste gebeurtenistypes

GebeurtenisBeschrijving
model_startedModelverwerking begint
expertise_completedEén expertisedomein voltooid (met gedeeltelijke resultaten)
model_completedModel voltooid met result, record_id en cost
fusion_started / fusion_completedLevenscyclusgebeurtenissen van multimodelfusie
entity_started / entity_completedBatch-specifieke gebeurtenissen per entiteit (bevatten entity_index)
completedTerminal-event - sluit de verbinding
errorEr is een fout op jobniveau opgetreden

Python-voorbeeld

Een complete workflow die schema's opsomt, verrijking start, resultaten streamt en het uiteindelijke record ophaalt:

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

curl-voorbeeld

Start een batch-enrichment met twee modellen en stream de resultaten:

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

Foutafhandeling

StatusBetekenisVoorbeeld
200GeluktAanvraag voltooid
400Ongeldig verzoekOngeldige modelsleutel of ontbrekend veld
401Niet geautoriseerdOntbrekende of ongeldige API-sleutel
402Betaling vereistAbonnementslimiet of creditsaldo — quotum uitgeput, te veel modellen of talen, een functie die niet in je abonnement zit. De body bevat een machineleesbare code naast detail.
403VerbodenOnvoldoende rol voor dit endpoint
404Niet gevondenRecord, schema of taak niet gevonden
500ServerfoutInterne fout

Foutantwoorden bevatten een veld detail met een leesbare foutmelding. Fouten rond abonnement en facturatie (402) bevatten daarnaast een gestructureerde body met een stabiele codeprompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — plus de betreffende limiet- en gebruikscijfers, zodat een client op de oorzaak kan vertakken in plaats van tekst te parsen. SSE-streams sturen een error-event vóór het afsluitende completed-event als er halverwege de stream iets misgaat.

Samengestelde sleutels van model

Modellen worden geïdentificeerd door samengestelde sleutels in de indeling provider_name::model_name. Gebruik GET /api/enrichment/options om beschikbare modellen en hun sleutels op te sommen.

De modelparameter is optioneel bij verrijking, schemageneratie en samplegeneratie: laat hem weg (of geef letterlijk "auto" mee) en de server kiest het standaardmodel van je organisatie — de vastgezette standaard per taak als die is ingesteld in Instellingen, anders het model met de beste algehele score uit je scorebron-benchmarks. Het veld default_models in de options-response toont waar auto momenteel naar verwijst, en een model_auto_selected-SSE-event rapporteert de keuze bij elke taak. Auto verwijst altijd naar één enkel model (het activeert nooit fusie); voor reproduceerbare pipelines blijf je expliciete modellen meegeven.

Verzoekopties beperken de automatische keuze: met enable_web_search: true worden alleen modellen die kunnen zoeken op internet overwogen (het veld default_models_web_search in de optie-respons geeft een voorbeeld van die keuze), en binaire bijlagen vereisen een model dat ze kan lezen (PDF, beeld, audio). Wanneer geen enkel geschikt model aan de beperkingen voldoet, mislukt het verzoek met HTTP 400 no_capable_default_model in plaats van de optie stilzwijgend te negeren.

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

Interactieve API-documentatie

De applicatie bevat interactieve API-documentatie met voorbeelden van aanvragen en antwoorden. Vereist admin-authenticatie voor toegang:

Volgende stappen