Справочник 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)

Записи и слияние

МетодЭндпоинтОписание
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}Удалить вложение (очистка после обогащения)

Потоковая передача 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
403ЗапрещеноНедостаточная роль для этого эндпоинта
404Не найденоЗапись, схема или задача не найдены
500Ошибка сервераВнутренний сбой

Ответы с ошибками включают поле detail с сообщением об ошибке в удобочитаемом виде. Потоки SSE выдают событие типа error перед завершающим событием completed, если что-то не удаётся в процессе потоковой передачи.

Составные ключи модели

Модели идентифицируются составными ключами в формате provider_name::model_name. Используйте GET /api/enrichment/options, чтобы получить список доступных моделей и их ключей.

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

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

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

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