Справочник API — Документация Entity Enricher

Справочник API

REST API Entity Enricher позволяет обогащать сущности, управлять схемами и получать записи программно. Все ответы — в формате JSON. Прогресс в реальном времени использует Server-Sent Events (SSE).

Быстрый старт

Интегрируйте Entity Enricher за три шага:

1

Получить схему

GET /api/schema/saved

Выводит список сохранённых schemas или генерирует schema из образца данных

2

Обогатить

POST /api/single/enrich/stream

Запустите обогащение и получите ID задачи для потоковой передачи через SSE

3

Получить результат

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)

Database Sync

МетодЭндпоинтОписание
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Доступные тарифы и их лимиты

Потоковая передача SSE

Операции обогащения, генерации схем и слияния используют Server-Sent Events для отображения прогресса в реальном времени. Запустите задачу, получите job_id, затем подключитесь к потоку SSE:

Поток событий 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"}

Основные типы событий

СобытиеОписание
model_startedНачинается обработка моделью
expertise_completedОдна область экспертизы завершена (с частичными результатами)
model_completedМодель завершила работу с результатом, record_id и стоимостью
fusion_started / fusion_completedСобытия жизненного цикла слияния нескольких моделей
entity_started / entity_completedСобытия по отдельным сущностям, специфичные для пакета (включают entity_index)
completedЗавершающее событие — закрыть соединение
errorПроизошла ошибка на уровне задания

Пример на Python

Полный рабочий процесс, который выводит список схем, запускает обогащение, передаёт результаты потоком и извлекает итоговую запись:

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

Пример curl

Запустите пакетное обогащение с двумя моделями и получайте результаты в потоке:

# 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) дополнительно возвращают структурированное тело со стабильным кодом codeprompt_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
anthropic::claude-sonnet-4-5-20250514
OpenAI
openai::gpt-4o
Google
google::gemini-2.5-pro
DeepSeek
deepseek::deepseek-chat

Интерактивная документация API

Приложение включает интерактивную документацию API с примерами запросов и ответов. Для доступа требуется аутентификация администратора:

Дальнейшие шаги