REST API Entity Enricher позволяет обогащать сущности, управлять схемами и получать записи программно. Все ответы — в формате JSON. Прогресс в реальном времени использует Server-Sent Events (SSE).
Интегрируйте Entity Enricher за три шага:
GET /api/schema/savedВыводит список сохранённых schemas или генерирует schema из образца данных
POST /api/single/enrich/streamЗапустите обогащение и получите ID задачи для потоковой передачи через SSE
GET /api/records/{id}Получить полную запись обогащения со структурированным выводом
Все конечные точки API (кроме входа/регистрации) требуют аутентификации. Используйте заголовок X-API-Key с ключом доступа организации:
curl -H "X-API-Key: ent_your_key_here" \
https://your-instance.example.com/api/enrichment/optionsСоздавайте API-ключи на странице «API-ключи» или через POST /api/auth/api-keys. Подробнее о типах ключей и разрешениях см. в руководстве по API-ключам.
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/enrichment/options | Доступные модели, языки и стратегии |
| POST | /api/single/enrich/stream | Запустить обогащение одной сущности (возвращает job_id для SSE) |
| POST | /api/single/enrich/sync | Блокирующее одиночное обогащение для клиентов без SSE (Make.com, curl) |
| POST | /api/enrichment/batch/start | Запустить пакетное обогащение нескольких сущностей |
| POST | /api/enrichment/batch/fetch | Получить сущности из внешнего URL |
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/llm/stream/{job_id} | SSE-поток для любой задачи LLM (обогащение, схема, слияние) |
| POST | /api/llm/cancel/{job_id} | Отменить выполняющуюся или приостановленную задачу |
| POST | /api/llm/continue/{job_id} | Возобновить приостановленную задачу (например, после несоответствия классификации) |
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/schema/saved | Список всех сохранённых schemas |
| POST | /api/schema/saved | Создать новую схему |
| POST | /api/schema/generate/stream | Сгенерировать схему из образца данных (SSE) |
| POST | /api/schema/saved/{id}/prompt/stream | ИИ-редактирование схемы на естественном языке (SSE) |
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/records | Список records с пагинацией и фильтрацией |
| GET | /api/records/{id} | Получить полную информацию о record со структурированным выводом |
| POST | /api/records/batch-delete | Удалить несколько записей (макс. 100) |
| POST | /api/fusion/merge | Объединение результатов от нескольких моделей |
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /api/attachments | Загрузите один или несколько файлов (multipart/form-data) |
| POST | /api/attachments/base64 | Загрузите один файл через JSON base64 (для клиентов без multipart) |
| GET | /api/attachments/{id}/download | Скачать байты исходного файла |
| DELETE | /api/attachments/{id} | Удалить вложение (очистка после обогащения) |
Операции обогащения, генерации схем и слияния используют Server-Sent Events для отображения прогресса в реальном времени. Запустите задачу, получите job_id, затем подключитесь к потоку SSE:
| Событие | Описание |
|---|---|
| model_started | Начинается обработка моделью |
| expertise_completed | Одна область экспертизы завершена (с частичными результатами) |
| model_completed | Модель завершила работу с результатом, record_id и стоимостью |
| fusion_started / fusion_completed | События жизненного цикла слияния нескольких моделей |
| entity_started / entity_completed | События по отдельным сущностям, специфичные для пакета (включают entity_index) |
| completed | Завершающее событие — закрыть соединение |
| error | Произошла ошибка на уровне задания |
Полный рабочий процесс, который выводит список схем, запускает обогащение, передаёт результаты потоком и извлекает итоговую запись:
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 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'| Статус | Значение | Пример |
|---|---|---|
| 200 | Успешно | Запрос выполнен |
| 400 | Некорректный запрос | Недопустимый ключ модели или отсутствующее поле |
| 401 | Не авторизовано | Отсутствует или недействителен ключ API |
| 403 | Запрещено | Недостаточная роль для этого эндпоинта |
| 404 | Не найдено | Запись, схема или задача не найдены |
| 500 | Ошибка сервера | Внутренний сбой |
Ответы с ошибками включают поле detail с сообщением об ошибке в удобочитаемом виде. Потоки SSE выдают событие типа error перед завершающим событием completed, если что-то не удаётся в процессе потоковой передачи.
Модели идентифицируются составными ключами в формате provider_name::model_name. Используйте GET /api/enrichment/options, чтобы получить список доступных моделей и их ключей.
anthropic::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatПриложение включает интерактивную документацию API с примерами запросов и ответов. Для доступа требуется аутентификация администратора: