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) |
| POST | /api/schema/analyze-sample | Анализ образца JSON на неоднозначные имена свойств — допускающие в контексте родителя несколько прочтений или ни одного — и на связанные элементы, смешивающие факты о сущности с фактами по конкретному родителю (отчёт без сохранения состояния, предлагаемые переименования) |
| POST | /api/schema/saved/{id}/analyze | Запустите проверки неоднозначности и области идентичности для сохранённой схемы и запишите их аннотации (переписанное описание для каждого неоднозначного имени) |
| POST | /api/schema/scoping-split | Применяет одно разделение по идентичности к набору образцов — собственные факты связанной сущности переносятся в отдельный подобъект (детерминированно, бесплатно, ничего не сохраняется) |
| DELETE | /api/schema/saved/{id}/enrichment-data | Удалить данные обогащения схемы — записи и состояние сущностей — сохранив саму схему (owner+) |
| Метод | Эндпоинт | Описание |
|---|---|---|
| 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} | Удалить вложение (очистка после обогащения) |
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /api/schema/saved/{id}/publish | Публикация рабочей копии связанной схемы как контракта, по которому работают обогащение и её базы данных. Структурные изменения вступают в силу только после этого |
| POST | /api/schema/sample/generate/stream | Сгенерировать от 1 до N JSON-примеров одного типа сущности (возвращает job_id для SSE) |
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/databases | Список регистраций баз данных организации с количеством ожидающих дельт |
| POST | /api/databases | Зарегистрировать базу данных для схемы |
| GET | /api/databases/{id}/snapshot | Скачайте полное состояние в виде .sql-снимка — запуск с нуля |
| GET | /api/databases/{id}/changes | Получить следующее FIFO-окно дельт; захватить их в аренду для доставки с подтверждением |
| POST | /api/databases/{id}/ack | Подтвердить применённые дельты вплоть до указанного id — освобождает аренду |
| POST | /api/databases/{id}/clear-acked | Удалить доставленные и подтверждённые дельты |
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/semantic-concepts | Просмотр словаря концептов с фильтром по типу и оценкой относительно эталонного концепта |
| GET | /api/semantic-concepts/types | Список типов концептов с их количеством и моделями эмбеддингов |
| POST | /api/semantic-concepts/probe | Пробный прогон лестницы разрешения для текста — с чем он совпадёт и насколько точно |
| GET | /api/semantic-concepts/duplicates | Пары концептов чуть ниже порога объединения |
| POST | /api/semantic-concepts/import | Пакетно разрешить CSV с текстами идентичностей (создание новых требует прав владельца) |
| GET | /api/semantic-concepts/export | Экспортировать словарь в CSV |
| POST | /api/semantic-concepts/delete-impact | На что повлияет удаление концептов — количество использований и стоимость повторной синхронизации |
| GET | /api/semantic-concepts/migration/status | Состояние миграции модели эмбеддингов, если она выполняется |
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/benchmarks | Список сценариев бенчмарка |
| POST | /api/benchmarks/{id}/run | Запустите сценарий на нескольких моделях — каждый результат оценивается автоматически |
| POST | /api/benchmarks/{id}/reference | Сохраните и проверьте эталон, по которому оценивается сценарий |
| GET | /api/billing/balance | Текущий баланс кредитов |
| GET | /api/billing/transactions | История операций с кредитами, включая расходы на эмбеддинги |
| GET | /api/billing/plans | Доступные тарифы и их лимиты |
Операции обогащения, генерации схем и слияния используют 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 |
| 402 | Требуется оплата | Ограничение тарифа или баланс кредитов — исчерпана квота, слишком много моделей или языков, функция не входит в ваш тариф. В теле ответа рядом с detail передаётся машиночитаемый код. |
| 403 | Запрещено | Недостаточная роль для этого эндпоинта |
| 404 | Не найдено | Запись, схема или задача не найдены |
| 500 | Ошибка сервера | Внутренний сбой |
Ответы с ошибками содержат поле detail с понятным человеку сообщением об ошибке. Ошибки плана и биллинга (402) дополнительно возвращают структурированное тело со стабильным кодом code — prompt_limit_reached, insufficient_credits, model_limit_exceeded, benchmarks_not_in_plan — а также соответствующие значения лимита и использования, чтобы клиент мог ветвить логику по причине, а не разбирать текст. В потоках SSE, если сбой происходит в середине потока, отправляется событие типа error перед завершающим событием completed.
Модели идентифицируются составными ключами в формате provider_name::model_name. Используйте GET /api/enrichment/options, чтобы получить список доступных моделей и их ключей.
Параметр model необязателен при обогащении, генерации схемы и генерации образцов: опустите его (или передайте буквально "auto"), и сервер выберет модель по умолчанию вашей организации — закреплённое значение по умолчанию для задачи, если оно задано в настройках, иначе модель с лучшей общей оценкой из ваших бенчмарков-источников оценок. Поле default_models в ответе options показывает, во что сейчас разрешается auto, а событие SSE model_auto_selected сообщает о выборе для каждого задания. Авто всегда разрешается в одну модель (оно никогда не запускает слияние); для воспроизводимых конвейеров продолжайте передавать явные модели.
Параметры запроса ограничивают автоматический выбор: при enable_web_search: true рассматриваются только модели с поддержкой веб-поиска (поле default_models_web_search в ответе с параметрами показывает предварительный выбор), а бинарные вложения требуют модели, способной их читать (PDF, изображения, аудио). Если ни одна подходящая модель не удовлетворяет ограничениям, запрос завершается с ошибкой HTTP 400 no_capable_default_model вместо того, чтобы молча отбросить параметр.
anthropic::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatПриложение включает интерактивную документацию API с примерами запросов и ответов. Для доступа требуется аутентификация администратора: