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).
Integreer Entity Enricher in drie stappen:
GET /api/schema/savedToon opgeslagen schema's of genereer er een op basis van voorbeelddata
POST /api/single/enrich/streamStart een enrichment, ontvang een job-ID voor SSE-streaming
GET /api/records/{id}Haal de volledige enrichment-record op met gestructureerde uitvoer
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/optionsMaak 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.
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /api/enrichment/options | Beschikbare models, talen en strategieën |
| POST | /api/single/enrich/stream | Start een enrichment van één entity (geeft job_id terug voor SSE) |
| POST | /api/single/enrich/sync | Blokkerende enkele verrijking voor niet-SSE-clients (Make.com, curl) |
| POST | /api/enrichment/batch/start | Start een batch-enrichment voor meerdere entities |
| POST | /api/enrichment/batch/fetch | Haal entiteiten op van een externe URL |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| 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) |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /api/schema/saved | Alle opgeslagen schema's weergeven |
| POST | /api/schema/saved | Een nieuw schema aanmaken |
| POST | /api/schema/generate/stream | Genereer schema uit voorbeelddata (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | Schema AI-bewerken met natuurlijke taal (SSE) |
| POST | /api/schema/analyze-sample | Analyseer 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}/analyze | Voer 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-split | Pas éé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-data | Wis de verrijkingsdata van een schema — records en entity-status — met behoud van het schema (owner+) |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /api/records | Records weergeven met paginering en filtering |
| GET | /api/records/{id} | Krijg volledige recorddetails met gestructureerde uitvoer |
| POST | /api/records/batch-delete | Meerdere records verwijderen (max. 100) |
| POST | /api/fusion/merge | Resultaten van meerdere modellen samenvoegen |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| POST | /api/attachments | Eén of meer bestanden uploaden (multipart/form-data) |
| POST | /api/attachments/base64 | Eén bestand uploaden via JSON base64 (voor niet-multipart clients) |
| GET | /api/attachments/{id}/download | Download de originele bestandsbytes |
| DELETE | /api/attachments/{id} | Een bijlage verwijderen (opschoning na verrijking) |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| POST | /api/schema/saved/{id}/publish | Publiceer 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/stream | Genereer 1..N JSON-voorbeeldobjecten van één entiteitstype (geeft job_id terug voor SSE) |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /api/databases | Toont de databaseregistraties van de organisatie, met het aantal openstaande delta's |
| POST | /api/databases | Een database registreren op een schema |
| GET | /api/databases/{id}/snapshot | Download de volledige status als .sql-snapshot — begin vanaf nul |
| GET | /api/databases/{id}/changes | Haal het volgende FIFO-venster met delta's op; claim ze om ze te leasen voor bevestigde levering |
| POST | /api/databases/{id}/ack | Bevestig toegepaste delta's tot aan een id — geeft de lease vrij |
| POST | /api/databases/{id}/clear-acked | Afgeleverde en bevestigde delta's opruimen |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /api/semantic-concepts | Blader door het conceptvocabulaire, gefilterd op type en gescoord ten opzichte van een referentieconcept |
| GET | /api/semantic-concepts/types | Toont de concepttypen met hun aantallen en embeddingmodellen |
| POST | /api/semantic-concepts/probe | Doe een dry-run van de resolutieladder voor een tekst — waarmee zou hij matchen, en hoe nauw |
| GET | /api/semantic-concepts/duplicates | Conceptparen die net onder de samenvoegdrempel zitten |
| POST | /api/semantic-concepts/import | Los in batch een CSV met identiteitsteksten op (aanmaken vereist eigenaarsrechten) |
| GET | /api/semantic-concepts/export | Exporteer de woordenlijst als CSV |
| POST | /api/semantic-concepts/delete-impact | Wat het verwijderen van concepten raakt — gebruiksaantallen en hersynchronisatiekosten |
| GET | /api/semantic-concepts/migration/status | De status van de migratie van het embeddingmodel, als er een loopt |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /api/benchmarks | Benchmarkscenario's weergeven |
| POST | /api/benchmarks/{id}/run | Draai een scenario over meerdere modellen — elk resultaat wordt automatisch gescoord |
| POST | /api/benchmarks/{id}/reference | Sla de gouden referentie op waartegen een scenario wordt gescoord en verifieer die |
| GET | /api/billing/balance | Huidig creditsaldo |
| GET | /api/billing/transactions | Transactiegeschiedenis van credits, inclusief uitgaven aan embeddings |
| GET | /api/billing/plans | Beschikbare abonnementen en hun limieten |
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:
| Gebeurtenis | Beschrijving |
|---|---|
| model_started | Modelverwerking begint |
| expertise_completed | Eén expertisedomein voltooid (met gedeeltelijke resultaten) |
| model_completed | Model voltooid met result, record_id en cost |
| fusion_started / fusion_completed | Levenscyclusgebeurtenissen van multimodelfusie |
| entity_started / entity_completed | Batch-specifieke gebeurtenissen per entiteit (bevatten entity_index) |
| completed | Terminal-event - sluit de verbinding |
| error | Er is een fout op jobniveau opgetreden |
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))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'| Status | Betekenis | Voorbeeld |
|---|---|---|
| 200 | Gelukt | Aanvraag voltooid |
| 400 | Ongeldig verzoek | Ongeldige modelsleutel of ontbrekend veld |
| 401 | Niet geautoriseerd | Ontbrekende of ongeldige API-sleutel |
| 402 | Betaling vereist | Abonnementslimiet 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. |
| 403 | Verboden | Onvoldoende rol voor dit endpoint |
| 404 | Niet gevonden | Record, schema of taak niet gevonden |
| 500 | Serverfout | Interne fout |
Foutantwoorden bevatten een veld detail met een leesbare foutmelding. Fouten rond abonnement en facturatie (402) bevatten daarnaast een gestructureerde body met een stabiele code — prompt_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.
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::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatDe applicatie bevat interactieve API-documentatie met voorbeelden van aanvragen en antwoorden. Vereist admin-authenticatie voor toegang: