Die Entity Enricher REST-API ermöglicht es Ihnen, Entitäten anzureichern, Schemas zu verwalten und Datensätze programmatisch abzurufen. Alle Antworten sind JSON. Der Echtzeit-Fortschritt nutzt Server-Sent Events (SSE).
Integrieren Sie Entity Enricher in drei Schritten:
GET /api/schema/savedGespeicherte Schemas auflisten oder aus Beispieldaten eines erzeugen
POST /api/single/enrich/streamAnreicherung starten und eine Job-ID für SSE-Streaming erhalten
GET /api/records/{id}Den vollständigen Enrichment-Record mit strukturierter Ausgabe abrufen
Alle API-Endpunkte (außer Login/Registrierung) erfordern eine Authentifizierung. Verwenden Sie den X-API-Key-Header mit einem Zugriffsschlüssel der Organisation:
curl -H "X-API-Key: ent_your_key_here" \
https://your-instance.example.com/api/enrichment/optionsErstellen Sie API-Schlüssel über die Seite „API-Schlüssel“ oder via POST /api/auth/api-keys. Siehe den API-Schlüssel-Leitfaden für Details zu Schlüsseltypen und Berechtigungen.
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/enrichment/options | Verfügbare Modelle, Sprachen und Strategien |
| POST | /api/single/enrich/stream | Anreicherung einer einzelnen Entität starten (gibt job_id für SSE zurück) |
| POST | /api/single/enrich/sync | Blockierende Einzelanreicherung für Nicht-SSE-Clients (Make.com, curl) |
| POST | /api/enrichment/batch/start | Batch-Anreicherung für mehrere Entitäten starten |
| POST | /api/enrichment/batch/fetch | Entitäten von einer externen URL abrufen |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/llm/stream/{job_id} | SSE-Stream für jeden LLM-Job (Anreicherung, Schema, Fusion) |
| POST | /api/llm/cancel/{job_id} | Einen laufenden oder pausierten Job abbrechen |
| POST | /api/llm/continue/{job_id} | Einen pausierten Job fortsetzen (z. B. nach Klassifizierungs-Abweichung) |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/schema/saved | Alle gespeicherten Schemas auflisten |
| POST | /api/schema/saved | Ein neues Schema erstellen |
| POST | /api/schema/generate/stream | Schema aus Beispieldaten generieren (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | Schema per KI mit natürlicher Sprache bearbeiten (SSE) |
| POST | /api/schema/analyze-sample | Analysiert Beispiel-JSON auf mehrdeutige Eigenschaftsnamen – solche, die im Kontext ihres übergeordneten Objekts mehrere oder gar keine Lesarten zulassen – sowie auf verknüpfte Einträge, die Entitätsfakten mit Fakten pro übergeordnetem Objekt vermischen (zustandsloser Bericht, Umbenennungsvorschläge) |
| POST | /api/schema/saved/{id}/analyze | Führt die Prüfungen auf Mehrdeutigkeit und Identitätsbezug für ein gespeichertes Schema aus und schreibt deren Anmerkungen (eine neu formulierte Beschreibung pro mehrdeutigem Namen) |
| POST | /api/schema/scoping-split | Eine Identitäts-Scoping-Aufteilung auf einen Beispielsatz anwenden – die eigenen Fakten der verwandten Entität wandern in ein eigenes Unterobjekt (deterministisch, kostenlos, nichts wird gespeichert) |
| DELETE | /api/schema/saved/{id}/enrichment-data | Anreicherungsdaten eines Schemas löschen – Datensätze und Entitätsstatus – unter Beibehaltung des Schemas (owner+) |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/records | Datensätze mit Paginierung und Filterung auflisten |
| GET | /api/records/{id} | Vollständige Datensatzdetails mit strukturierter Ausgabe abrufen |
| POST | /api/records/batch-delete | Mehrere Datensätze löschen (max. 100) |
| POST | /api/fusion/merge | Ergebnisse aus mehreren Modellen zusammenführen |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| POST | /api/attachments | Eine oder mehrere Dateien hochladen (multipart/form-data) |
| POST | /api/attachments/base64 | Eine Datei per JSON-base64 hochladen (für Nicht-Multipart-Clients) |
| GET | /api/attachments/{id}/download | Die ursprünglichen Datei-Bytes herunterladen |
| DELETE | /api/attachments/{id} | Einen Anhang löschen (Bereinigung nach der Anreicherung) |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| POST | /api/schema/saved/{id}/publish | Veröffentlichen Sie die Arbeitskopie eines verknüpften Schemas als den Vertrag, gegen den die Anreicherung und ihre Datenbanken laufen. Strukturelle Änderungen werden erst wirksam, wenn dies ausgeführt wird |
| POST | /api/schema/sample/generate/stream | 1..N JSON-Beispielobjekte eines Entitätstyps erzeugen (liefert job_id für SSE) |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/databases | Die Datenbankregistrierungen der Organisation mit ausstehenden Delta-Anzahlen auflisten |
| POST | /api/databases | Eine Datenbank für ein Schema registrieren |
| GET | /api/databases/{id}/snapshot | Den vollständigen Stand als .sql-Snapshot herunterladen — von null aufsetzen |
| GET | /api/databases/{id}/changes | Das nächste FIFO-Fenster an Deltas abrufen; per Claim für die bestätigte Zustellung reservieren |
| POST | /api/databases/{id}/ack | Angewendete Deltas bis zu einer ID bestätigen — gibt die Lease frei |
| POST | /api/databases/{id}/clear-acked | Zugestellte und bestätigte Deltas bereinigen |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/semantic-concepts | Das Konzeptvokabular durchsuchen, gefiltert nach Typ und bewertet gegenüber einem Referenzkonzept |
| GET | /api/semantic-concepts/types | Konzepttypen mit ihren Anzahlen und Embedding-Modellen auflisten |
| POST | /api/semantic-concepts/probe | Die Auflösungskette für einen Text im Testlauf durchspielen — was würde übereinstimmen und wie genau |
| GET | /api/semantic-concepts/duplicates | Konzeptpaare knapp unterhalb der Zusammenführungsschwelle |
| POST | /api/semantic-concepts/import | Eine CSV mit Identitätstexten im Batch auflösen (das Erzeugen erfordert Eigentümerrechte) |
| GET | /api/semantic-concepts/export | Vokabular als CSV exportieren |
| POST | /api/semantic-concepts/delete-impact | Was das Löschen von Konzepten beeinflussen würde – Nutzungszahlen und Kosten der Resynchronisierung |
| GET | /api/semantic-concepts/migration/status | Status der Migration des Embedding-Modells, sofern eine läuft |
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/benchmarks | Benchmark-Szenarien auflisten |
| POST | /api/benchmarks/{id}/run | Ein Szenario über mehrere Modelle hinweg ausführen – jedes Ergebnis wird automatisch bewertet |
| POST | /api/benchmarks/{id}/reference | Die Goldreferenz speichern und prüfen, anhand derer ein Szenario bewertet wird |
| GET | /api/billing/balance | Aktuelles Credit-Guthaben |
| GET | /api/billing/transactions | Verlauf der Credit-Transaktionen, einschließlich Ausgaben für Embeddings |
| GET | /api/billing/plans | Verfügbare Tarife und ihre Limits |
Anreicherung, Schema-Generierung und Fusion-Operationen nutzen Server-Sent Events für Echtzeit-Fortschritt. Starten Sie einen Job, erhalten Sie eine job_id und verbinden Sie sich dann mit dem SSE-Stream:
| Ereignis | Beschreibung |
|---|---|
| model_started | Modellverarbeitung beginnt |
| expertise_completed | Ein Fachbereich abgeschlossen (mit Teilergebnissen) |
| model_completed | Modell abgeschlossen mit Ergebnis, record_id und Kosten |
| fusion_started / fusion_completed | Lifecycle-Ereignisse der Multi-Modell-Fusion |
| entity_started / entity_completed | Batch-spezifische Ereignisse pro Entität (enthalten entity_index) |
| completed | Terminales Ereignis – Verbindung schließen |
| error | Fehler auf Job-Ebene aufgetreten |
Ein vollständiger Workflow, der Schemas auflistet, eine Anreicherung startet, Ergebnisse streamt und den endgültigen Datensatz abruft:
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))Starten Sie eine Batch-Anreicherung mit zwei Modellen und streamen Sie die Ergebnisse:
# 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 | Bedeutung | Beispiel |
|---|---|---|
| 200 | Erfolg | Anfrage abgeschlossen |
| 400 | Ungültige Anfrage | Ungültiger Modellschlüssel oder fehlendes Feld |
| 401 | Nicht autorisiert | Fehlender oder ungültiger API-Schlüssel |
| 402 | Zahlung erforderlich | Tariflimit oder Credit-Guthaben – Kontingent erschöpft, zu viele Modelle oder Sprachen, eine Funktion außerhalb Ihres Tarifs. Der Body enthält neben detail einen maschinenlesbaren Code. |
| 403 | Verboten | Unzureichende Rolle für diesen Endpunkt |
| 404 | Nicht gefunden | Datensatz, Schema oder Job nicht gefunden |
| 500 | Serverfehler | Interner Fehler |
Fehlerantworten enthalten ein Feld detail mit einer lesbaren Fehlermeldung. Tarif- und Abrechnungsfehler (402) liefern zusätzlich einen strukturierten Body mit einem stabilen code — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — sowie die betreffenden Grenz- und Nutzungswerte, sodass ein Client anhand der Ursache verzweigen kann, statt Fließtext zu parsen. SSE-Streams senden einen Ereignistyp error vor dem abschließenden Ereignis completed, falls mitten im Stream etwas fehlschlägt.
Modelle werden durch zusammengesetzte Schlüssel im Format provider_name::model_name identifiziert. Verwenden Sie GET /api/enrichment/options, um verfügbare Modelle und ihre Schlüssel aufzulisten.
Der Modellparameter ist bei Anreicherung, Schemagenerierung und Beispielgenerierung optional: Lassen Sie ihn weg (oder übergeben Sie das Literal "auto"), und der Server wählt das Standardmodell Ihrer Organisation — die angeheftete aufgabenspezifische Vorgabe, falls in den Einstellungen festgelegt, andernfalls das Modell mit der besten Gesamtbewertung aus Ihren Benchmarks als Bewertungsquelle. Das Feld default_models der Optionsantwort zeigt, worauf Auto derzeit aufgelöst wird, und ein model_auto_selected-SSE-Ereignis meldet die Auswahl bei jedem Auftrag. Auto wird immer zu einem einzigen Modell aufgelöst (es löst niemals Fusion aus); für reproduzierbare Pipelines übergeben Sie weiterhin explizite Modelle.
Anfrageoptionen schränken die automatische Auswahl ein: Mit enable_web_search: true werden nur websuchfähige Modelle berücksichtigt (das Feld default_models_web_search der Optionsantwort zeigt diese Auswahl in der Vorschau), und binäre Anhänge erfordern ein Modell, das sie lesen kann (PDF, Vision, Audio). Wenn kein geeignetes Modell die Einschränkungen erfüllt, schlägt die Anfrage mit HTTP 400 no_capable_default_model fehl, anstatt die Option stillschweigend zu verwerfen.
anthropic::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatDie Anwendung enthält eine interaktive API-Dokumentation mit Beispielen für Anfragen/Antworten. Für den Zugriff ist eine Admin-Authentifizierung erforderlich: