La API REST de Entity Enricher le permite enriquecer entidades, gestionar esquemas y recuperar registros de forma programática. Todas las respuestas son JSON. El progreso en tiempo real utiliza Server-Sent Events (SSE).
Integre Entity Enricher en tres pasos:
GET /api/schema/savedListar esquemas guardados o generar uno a partir de datos de muestra
POST /api/single/enrich/streamInicie el enriquecimiento y obtenga un ID de trabajo para la transmisión SSE
GET /api/records/{id}Recupera el record de enrichment completo con la salida estructurada
Todos los endpoints de la API (excepto login/register) requieren autenticación. Use la cabecera X-API-Key con una clave de acceso de la organización:
curl -H "X-API-Key: ent_your_key_here" \
https://your-instance.example.com/api/enrichment/optionsCree claves de API desde la página Claves de API o mediante POST /api/auth/api-keys. Consulte la guía de claves de API para más detalles sobre los tipos de claves y los permisos.
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/enrichment/options | Modelos, idiomas y estrategias disponibles |
| POST | /api/single/enrich/stream | Inicie el enriquecimiento de una sola entidad (devuelve job_id para SSE) |
| POST | /api/single/enrich/sync | Enriquecimiento único bloqueante para clientes sin SSE (Make.com, curl) |
| POST | /api/enrichment/batch/start | Inicie el enriquecimiento por lotes de varias entidades |
| POST | /api/enrichment/batch/fetch | Obtener entidades desde una URL externa |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/llm/stream/{job_id} | Flujo SSE para cualquier trabajo de LLM (enriquecimiento, esquema, fusión) |
| POST | /api/llm/cancel/{job_id} | Cancelar un trabajo en ejecución o en pausa |
| POST | /api/llm/continue/{job_id} | Reanudar un trabajo en pausa (p. ej., tras una discrepancia de classification) |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/schema/saved | Listar todos los esquemas guardados |
| POST | /api/schema/saved | Crear un nuevo esquema |
| POST | /api/schema/generate/stream | Generar esquema a partir de datos de muestra (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | Edición de esquemas con IA mediante lenguaje natural (SSE) |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/records | Listar registros con paginación y filtrado |
| GET | /api/records/{id} | Obtenga el detalle completo del registro con salida estructurada |
| POST | /api/records/batch-delete | Eliminar varios registros (máx. 100) |
| POST | /api/fusion/merge | Fusionar resultados de varios modelos |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/attachments | Suba uno o más archivos (multipart/form-data) |
| POST | /api/attachments/base64 | Suba un archivo mediante JSON base64 (para clientes que no admiten multipart) |
| GET | /api/attachments/{id}/download | Descargar los bytes del archivo original |
| DELETE | /api/attachments/{id} | Eliminar un adjunto (limpieza posterior al enriquecimiento) |
Las operaciones de enriquecimiento, generación de esquemas y fusión utilizan Server-Sent Events para el progreso en tiempo real. Inicie un trabajo, obtenga un job_id y, a continuación, conéctese al flujo SSE:
| Evento | Descripción |
|---|---|
| model_started | Comienza el procesamiento del modelo |
| expertise_completed | Un dominio de especialización finalizado (con resultados parciales) |
| model_completed | El modelo finalizó con result, record_id y coste |
| fusion_started / fusion_completed | Eventos del ciclo de vida de la fusión multimodelo |
| entity_started / entity_completed | Eventos por entidad específicos del lote (incluyen entity_index) |
| completed | Evento terminal: cierra la conexión |
| error | Se produjo un error a nivel del trabajo |
Un flujo de trabajo completo que enumera esquemas, inicia el enriquecimiento, transmite resultados y recupera el registro 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))Inicie un enriquecimiento por lotes con dos modelos y transmita los resultados:
# 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'| Estado | Significado | Ejemplo |
|---|---|---|
| 200 | Correcto | Solicitud completada |
| 400 | Solicitud incorrecta | Clave de modelo no válida o campo faltante |
| 401 | No autorizado | Falta la clave de API o no es válida |
| 403 | Prohibido | Rol insuficiente para este endpoint |
| 404 | No encontrado | Registro, esquema o trabajo no encontrado |
| 500 | Error del servidor | Fallo interno |
Las respuestas de error incluyen un campo detail con un mensaje de error legible. Los flujos SSE emiten un tipo de evento error antes del evento terminal completed si algo falla a mitad de la transmisión.
Los modelos se identifican mediante claves compuestas con el formato provider_name::model_name. Utilice GET /api/enrichment/options para listar los modelos disponibles y sus claves.
anthropic::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatLa aplicación incluye documentación interactiva de la API con ejemplos de solicitud/respuesta. Requiere autenticación de administrador para acceder: