Referencia de la API - Documentación de Entity Enricher

Referencia de la API

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

Inicio rápido

Integre Entity Enricher en tres pasos:

1

Obtener esquema

GET /api/schema/saved

Listar esquemas guardados o generar uno a partir de datos de muestra

2

Enriquecer

POST /api/single/enrich/stream

Inicie el enriquecimiento y obtenga un ID de trabajo para la transmisión SSE

3

Obtener resultado

GET /api/records/{id}

Recupera el record de enrichment completo con la salida estructurada

Autenticación

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/options

Cree 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.

Endpoints clave

Enriquecimiento

MétodoEndpointDescripción
GET/api/enrichment/optionsModelos, idiomas y estrategias disponibles
POST/api/single/enrich/streamInicie el enriquecimiento de una sola entidad (devuelve job_id para SSE)
POST/api/single/enrich/syncEnriquecimiento único bloqueante para clientes sin SSE (Make.com, curl)
POST/api/enrichment/batch/startInicie el enriquecimiento por lotes de varias entidades
POST/api/enrichment/batch/fetchObtener entidades desde una URL externa

Gestión de trabajos

MétodoEndpointDescripció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)

Esquemas

MétodoEndpointDescripción
GET/api/schema/savedListar todos los esquemas guardados
POST/api/schema/savedCrear un nuevo esquema
POST/api/schema/generate/streamGenerar esquema a partir de datos de muestra (SSE)
POST/api/schema/saved/{id}/prompt/streamEdición de esquemas con IA mediante lenguaje natural (SSE)
POST/api/schema/analyze-sampleAnaliza el JSON de muestra en busca de nombres de propiedad ambiguos —los que admiten varias lecturas en el contexto de su elemento padre, o ninguna— y de elementos relacionados que mezclan datos de la entidad con datos específicos de cada padre (informe sin estado, cambios de nombre sugeridos)
POST/api/schema/saved/{id}/analyzeEjecute las verificaciones de ambigüedad y de alcance de identidad en un esquema guardado y escriba sus anotaciones (una descripción reescrita por cada nombre ambiguo)
POST/api/schema/scoping-splitAplica una división de delimitación de identidad a un conjunto de muestras: los datos propios de la entidad relacionada pasan a su propio subobjeto (determinista, gratuita, no se guarda nada)
DELETE/api/schema/saved/{id}/enrichment-dataPurgar los datos de enriquecimiento de un esquema (registros y estado de la entidad), conservando el esquema (propietario+)

Registros y fusión

MétodoEndpointDescripción
GET/api/recordsListar registros con paginación y filtrado
GET/api/records/{id}Obtenga el detalle completo del registro con salida estructurada
POST/api/records/batch-deleteEliminar varios registros (máx. 100)
POST/api/fusion/mergeFusionar resultados de varios modelos

Adjuntos

MétodoEndpointDescripción
POST/api/attachmentsSuba uno o más archivos (multipart/form-data)
POST/api/attachments/base64Suba un archivo mediante JSON base64 (para clientes que no admiten multipart)
GET/api/attachments/{id}/downloadDescargar los bytes del archivo original
DELETE/api/attachments/{id}Eliminar un adjunto (limpieza posterior al enriquecimiento)

Publicación de esquemas y muestras

MétodoEndpointDescripción
POST/api/schema/saved/{id}/publishPublique la copia de trabajo de un esquema vinculado como el contrato con el que se ejecutan el enriquecimiento y sus bases de datos. Ningún cambio estructural surte efecto hasta que esto se ejecute
POST/api/schema/sample/generate/streamGenera 1..N objetos JSON de muestra de un mismo tipo de entidad (devuelve job_id para SSE)

Database Sync

MétodoEndpointDescripción
GET/api/databasesEnumera las bases de datos registradas de la organización, con los recuentos de deltas pendientes
POST/api/databasesRegistrar una base de datos en un esquema
GET/api/databases/{id}/snapshotDescargue el estado completo como una instantánea .sql: arranque desde cero
GET/api/databases/{id}/changesObtener la siguiente ventana FIFO de deltas; reclamarlos para reservarlos con entrega confirmada
POST/api/databases/{id}/ackConfirma los deltas aplicados hasta un id: libera la concesión
POST/api/databases/{id}/clear-ackedPurgar los deltas entregados y confirmados

Conceptos semánticos

MétodoEndpointDescripción
GET/api/semantic-conceptsExplore el vocabulario de conceptos, filtrado por tipo y puntuado frente a un concepto de referencia
GET/api/semantic-concepts/typesEnumera los tipos de concepto con sus recuentos y modelos de embedding
POST/api/semantic-concepts/probeSimule la escalera de resolución para un texto: con qué coincidiría y con qué grado de proximidad
GET/api/semantic-concepts/duplicatesPares de conceptos justo por debajo del umbral de fusión
POST/api/semantic-concepts/importResuelve por lotes un CSV de textos de identidad (la creación requiere rol de propietario)
GET/api/semantic-concepts/exportExportar el vocabulario como CSV
POST/api/semantic-concepts/delete-impactQué afectaría la eliminación de conceptos: recuentos de uso y coste de resincronización
GET/api/semantic-concepts/migration/statusEstado de la migración del modelo de embeddings, si hay alguna en curso

Benchmarks y facturación

MétodoEndpointDescripción
GET/api/benchmarksEnumerar los escenarios de benchmark
POST/api/benchmarks/{id}/runEjecute un escenario en varios modelos — cada resultado se puntúa automáticamente
POST/api/benchmarks/{id}/referenceGuarde y verifique la referencia de oro con la que se puntúa un escenario
GET/api/billing/balanceSaldo de créditos actual
GET/api/billing/transactionsHistorial de transacciones de créditos, incluido el gasto en embeddings
GET/api/billing/plansPlanes disponibles y sus límites

Streaming SSE

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:

Flujo de eventos SSE

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

Tipos de eventos clave

EventoDescripción
model_startedComienza el procesamiento del modelo
expertise_completedUn dominio de especialización finalizado (con resultados parciales)
model_completedEl modelo finalizó con result, record_id y coste
fusion_started / fusion_completedEventos del ciclo de vida de la fusión multimodelo
entity_started / entity_completedEventos por entidad específicos del lote (incluyen entity_index)
completedEvento terminal: cierra la conexión
errorSe produjo un error a nivel del trabajo

Ejemplo en Python

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

Ejemplo con curl

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'

Gestión de errores

EstadoSignificadoEjemplo
200CorrectoSolicitud completada
400Solicitud incorrectaClave de modelo no válida o campo faltante
401No autorizadoFalta la clave de API o no es válida
402Pago requeridoLímite del plan o saldo de créditos — cuota agotada, demasiados modelos o idiomas, una función que no incluye su plan. El cuerpo lleva un código legible por máquina junto con el detalle.
403ProhibidoRol insuficiente para este endpoint
404No encontradoRegistro, esquema o trabajo no encontrado
500Error del servidorFallo interno

Las respuestas de error incluyen un campo detail con un mensaje de error legible. Los fallos de plan y facturación (402) llevan además un cuerpo estructurado con un code estable — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — junto con las cifras de límite y uso pertinentes, de modo que un cliente puede bifurcar según la causa en lugar de analizar texto. Los flujos SSE emiten un evento de tipo error antes del evento final completed si algo falla a mitad del flujo.

Claves compuestas del modelo

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.

El parámetro model es opcional en el enriquecimiento, la generación de esquemas y la generación de muestras: omítalo (o pase el literal "auto") y el servidor elige el modelo predeterminado de su organización: el predeterminado por tarea fijado si hay uno configurado en Ajustes, de lo contrario el modelo con la mejor puntuación global de sus benchmarks de origen de puntuación. El campo default_models de la respuesta de opciones muestra a qué se resuelve auto actualmente, y un evento SSE model_auto_selected informa de la elección en cada trabajo. Auto siempre se resuelve en un único modelo (nunca activa la fusión); para canalizaciones reproducibles, siga pasando modelos explícitos.

Las opciones de la solicitud restringen la selección automática: con enable_web_search: true solo se tienen en cuenta los modelos con capacidad de búsqueda web (el campo default_models_web_search de la respuesta de opciones muestra una vista previa de esa selección), y los adjuntos binarios requieren un modelo que pueda leerlos (PDF, visión, audio). Cuando ningún modelo elegible cumple las restricciones, la solicitud falla con HTTP 400 no_capable_default_model en lugar de descartar la opción de forma silenciosa.

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

Documentación interactiva de la API

La aplicación incluye documentación interactiva de la API con ejemplos de solicitud/respuesta. Requiere autenticación de administrador para acceder:

Próximos pasos