L'API REST Entity Enricher vous permet d'enrichir des entités, de gérer des schémas et de récupérer des enregistrements par programmation. Toutes les réponses sont au format JSON. La progression en temps réel utilise les Server-Sent Events (SSE).
Intégrez Entity Enricher en trois étapes :
GET /api/schema/savedLister les schémas enregistrés ou en générer un à partir de données d'exemple
POST /api/single/enrich/streamLancez l'enrichissement et obtenez un ID de tâche pour le streaming SSE
GET /api/records/{id}Récupérer l'enregistrement d'enrichissement complet avec la sortie structurée
Tous les points de terminaison de l'API (sauf connexion/inscription) nécessitent une authentification. Utilisez l'en-tête X-API-Key avec une clé d'accès d'organisation :
curl -H "X-API-Key: ent_your_key_here" \
https://your-instance.example.com/api/enrichment/optionsCréez des clés API depuis la page Clés API ou via POST /api/auth/api-keys. Consultez le guide des clés API pour plus de détails sur les types de clés et les permissions.
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/enrichment/options | Modèles, langues et stratégies disponibles |
| POST | /api/single/enrich/stream | Lancer l'enrichissement d'une entité unique (renvoie job_id pour le SSE) |
| POST | /api/single/enrich/sync | Enrichissement unitaire bloquant pour les clients non SSE (Make.com, curl) |
| POST | /api/enrichment/batch/start | Lancer l'enrichissement par traitement par lot pour plusieurs entités |
| POST | /api/enrichment/batch/fetch | Récupérer des entités depuis une URL externe |
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/llm/stream/{job_id} | Flux SSE pour toute tâche LLM (enrichissement, schéma, fusion) |
| POST | /api/llm/cancel/{job_id} | Annuler une tâche en cours ou en pause |
| POST | /api/llm/continue/{job_id} | Reprendre une tâche en pause (p. ex. après une incohérence de classification) |
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/schema/saved | Lister tous les schémas enregistrés |
| POST | /api/schema/saved | Créer un nouveau schéma |
| POST | /api/schema/generate/stream | Générer un schéma à partir de données d'exemple (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | Édition du schéma par IA en langage naturel (SSE) |
| POST | /api/schema/analyze-sample | Analyse le JSON d'exemple à la recherche de noms de propriétés ambigus — ceux qui admettent plusieurs lectures dans le contexte de leur parent, ou aucune — et d'éléments liés mêlant des faits sur l'entité et des faits propres à chaque parent (rapport sans état, renommages suggérés) |
| POST | /api/schema/saved/{id}/analyze | Exécuter les vérifications d'ambiguïté et de portée d'identité sur un schéma enregistré et écrire leurs annotations (une description réécrite pour chaque nom ambigu) |
| POST | /api/schema/scoping-split | Appliquer une scission de cadrage d'identité à un jeu d'échantillons — les faits propres à l'entité liée sont déplacés dans leur propre sous-objet (déterministe, gratuit, rien n'est enregistré) |
| DELETE | /api/schema/saved/{id}/enrichment-data | Purger les données d'enrichissement d'un schéma — enregistrements et état de l'entité — tout en conservant le schéma (owner+) |
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/records | Lister les enregistrements avec pagination et filtrage |
| GET | /api/records/{id} | Obtenir le détail complet de l'enregistrement avec sortie structurée |
| POST | /api/records/batch-delete | Supprimer plusieurs enregistrements (max 100) |
| POST | /api/fusion/merge | Fusionner les résultats de plusieurs modèles |
| Méthode | Point de terminaison | Description |
|---|---|---|
| POST | /api/attachments | Téléverser un ou plusieurs fichiers (multipart/form-data) |
| POST | /api/attachments/base64 | Téléverser un fichier via JSON base64 (pour les clients non multipart) |
| GET | /api/attachments/{id}/download | Télécharger les octets du fichier d'origine |
| DELETE | /api/attachments/{id} | Supprimer une pièce jointe (nettoyage post-enrichissement) |
| Méthode | Point de terminaison | Description |
|---|---|---|
| POST | /api/schema/saved/{id}/publish | Publiez la copie de travail d’un schéma lié comme contrat sur lequel s’appuient l’enrichissement et ses bases de données. Rien de structurel ne prend effet tant que cette opération n’a pas été exécutée |
| POST | /api/schema/sample/generate/stream | Générer 1..N objets JSON d'exemple d'un même type d'entité (renvoie job_id pour le SSE) |
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/databases | Lister les bases de données déclarées de l’organisation, avec le nombre de deltas en attente |
| POST | /api/databases | Enregistrer une base de données sur un schéma |
| GET | /api/databases/{id}/snapshot | Téléchargez l'état complet sous forme d'instantané .sql — pour démarrer de zéro |
| GET | /api/databases/{id}/changes | Récupérer la prochaine fenêtre FIFO de deltas ; les réclamer pour les réserver en vue d'une livraison avec accusé de réception |
| POST | /api/databases/{id}/ack | Accuser réception des deltas appliqués jusqu'à un id donné — libère le bail |
| POST | /api/databases/{id}/clear-acked | Purger les deltas livrés et acquittés |
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/semantic-concepts | Parcourir le vocabulaire de concepts, filtré par type et noté par rapport à un concept de référence |
| GET | /api/semantic-concepts/types | Lister les types de concepts avec leurs effectifs et leurs modèles d'embedding |
| POST | /api/semantic-concepts/probe | Simulez l'échelle de résolution pour un texte — ce qu'elle associerait, et avec quelle proximité |
| GET | /api/semantic-concepts/duplicates | Paires de concepts situées juste en dessous du seuil de fusion |
| POST | /api/semantic-concepts/import | Résoudre en traitement par lot un CSV de textes d'identité (la création nécessite le rôle propriétaire) |
| GET | /api/semantic-concepts/export | Exporter le vocabulaire en CSV |
| POST | /api/semantic-concepts/delete-impact | Ce que la suppression de concepts affecterait — nombre d'utilisations et coût de resynchronisation |
| GET | /api/semantic-concepts/migration/status | État de la migration des modèles d'embedding, si une migration est en cours |
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/benchmarks | Lister les scénarios de benchmark |
| POST | /api/benchmarks/{id}/run | Exécutez un scénario sur plusieurs modèles — chaque résultat est noté automatiquement |
| POST | /api/benchmarks/{id}/reference | Enregistrer et vérifier la référence gold utilisée pour noter un scénario |
| GET | /api/billing/balance | Solde de crédits actuel |
| GET | /api/billing/transactions | Historique des transactions de crédits, y compris les dépenses d'embedding |
| GET | /api/billing/plans | Les forfaits disponibles et leurs limites |
Les opérations d'enrichissement, de génération de schéma et de fusion utilisent les Server-Sent Events pour une progression en temps réel. Lancez une tâche, obtenez un job_id, puis connectez-vous au flux SSE :
| Événement | Description |
|---|---|
| model_started | Le traitement par le modèle commence |
| expertise_completed | Un domaine d'expertise terminé (avec des résultats partiels) |
| model_completed | Le modèle a terminé avec result, record_id et cost |
| fusion_started / fusion_completed | Événements du cycle de vie de la fusion multi-modèles |
| entity_started / entity_completed | Événements par entité propres au traitement par lot (incluant entity_index) |
| completed | Événement terminal - fermer la connexion |
| error | Une erreur au niveau de la tâche s'est produite |
Un flux de travail complet qui liste les schémas, démarre l'enrichissement, diffuse les résultats et récupère l'enregistrement final :
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))Lancez un enrichissement par traitement par lot avec deux modèles et diffusez les résultats en continu :
# 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'| Statut | Signification | Exemple |
|---|---|---|
| 200 | Succès | Requête terminée |
| 400 | Requête invalide | Clé de modèle invalide ou champ manquant |
| 401 | Non autorisé | Clé API manquante ou invalide |
| 402 | Paiement requis | Limite de forfait ou solde de crédits — quota épuisé, trop de modèles ou de langues, fonctionnalité absente de votre forfait. Le corps de la réponse contient un code exploitable par machine en plus du détail. |
| 403 | Interdit | Rôle insuffisant pour ce point de terminaison |
| 404 | Introuvable | Enregistrement, schéma ou tâche introuvable |
| 500 | Erreur serveur | Échec interne |
Les réponses d'erreur comportent un champ detail contenant un message d'erreur lisible. Les échecs liés à l'offre et à la facturation (402) transportent en plus un corps structuré avec un code stable — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — ainsi que les valeurs de limite et d'utilisation concernées, afin qu'un client puisse traiter la cause sans analyser du texte. Les flux SSE émettent un événement de type error avant l'événement final completed si une erreur survient en cours de flux.
Les modèles sont identifiés par des clés composites au format provider_name::model_name. Utilisez GET /api/enrichment/options pour lister les modèles disponibles et leurs clés.
Le paramètre model est optionnel pour l'enrichissement, la génération de schéma et la génération d'échantillons : omettez-le (ou transmettez la valeur littérale "auto") et le serveur choisit le modèle par défaut de votre organisation — le défaut par tâche épinglé si un est défini dans les Paramètres, sinon le modèle avec le meilleur score global issu de vos benchmarks source de scoring. Le champ default_models de la réponse des options indique vers quoi auto résout actuellement, et un événement SSE model_auto_selected signale le choix pour chaque tâche. Auto résout toujours vers un seul modèle (il ne déclenche jamais la fusion) ; pour des pipelines reproductibles, continuez à transmettre des modèles explicites.
Les options de la requête contraignent la sélection automatique : avec enable_web_search: true, seuls les modèles compatibles avec la recherche web sont pris en compte (le champ default_models_web_search de la réponse d'options prévisualise cette sélection), et les pièces jointes binaires nécessitent un modèle capable de les lire (PDF, vision, audio). Lorsqu'aucun modèle éligible ne satisfait les contraintes, la requête échoue avec une erreur HTTP 400 no_capable_default_model au lieu d'ignorer silencieusement l'option.
anthropic::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatL'application inclut une documentation API interactive avec des exemples de requêtes/réponses. Nécessite une authentification administrateur pour y accéder :