Skip to content

Справочник API: инфраструктура и источники данных ​

Регистрация и управление векторными хранилищами, файловыми хранилищами, службами веб-поиска и источниками данных; предусмотрены проверка подключения и операции синхронизации.

Общие правила: чтение — Viewer+, запись/проверка подключения — Admin+ (проверка учётных данных обращается к внешним системам). Возможности API key: векторные хранилища — manage_vector_stores, бэкенды хранилищ — manage_storage_backends, веб-поиск — manage_web_search, источники данных — manage_datasources (любой из них можно заменить на full-access).

Векторные хранилища (/api/v1/vector-stores) ​

GET /api/v1/vector-stores/types ​

Назначение: доступные типы движков и схема конфигурации. Права: Viewer+.

Ответ: 200 {"success":true,"data":[определение типа]}

bash
curl $BASE/api/v1/vector-stores/types -H "Authorization: Bearer $TOKEN"

POST /api/v1/vector-stores/test ​

Назначение: проверка подключения с использованием исходной конфигурации (без сохранения в БД). Права: Admin+.

ПолеТипОбязательноОписание
engine_typestringда (binding:"required")тип движка
connection_configobjectда (binding:"required")конфигурация подключения

Ответ: 200 {"success":true|false,"version":"...","error":"..."}

bash
curl -X POST $BASE/api/v1/vector-stores/test -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"engine_type":"qdrant","connection_config":{"addr":"qdrant:6334"}}'

POST /api/v1/vector-stores ​

Назначение: создание конфигурации векторного хранилища. Права: Admin+. Поля: name (обязательно), engine_type (обязательно), connection_config (обязательно), index_config (необязательно).

Ответ: 201 {"success":true,"data":{VectorStoreResponse}} (id,tenant_id,name,engine_type,connection_config,index_config,...)

bash
curl -X POST $BASE/api/v1/vector-stores -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"qdrant-main","engine_type":"qdrant","connection_config":{"addr":"qdrant:6334"}}'

GET /api/v1/vector-stores ​

Назначение: список векторных хранилищ (хранилища __env_*, внедрённые через переменные окружения, идут первыми). Права: Viewer+.

Ответ: 200 {"success":true,"data":[VectorStoreResponse]}

bash
curl $BASE/api/v1/vector-stores -H "Authorization: Bearer $TOKEN"

GET /api/v1/vector-stores/:id ​

Назначение: подробности векторного хранилища (поддерживаются ID __env_*). Права: Viewer+.

Ответ: 200 {"success":true,"data":{VectorStoreResponse}}

bash
curl $BASE/api/v1/vector-stores/vs-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/vector-stores/:id ​

Назначение: обновление (только переименование; env store изменить нельзя). Права: Admin+. Тело запроса: {"name":"..."} (binding:"required").

Ответ: 200 {"success":true,"data":{VectorStoreResponse}}

bash
curl -X PUT $BASE/api/v1/vector-stores/vs-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"qdrant-prod"}'

DELETE /api/v1/vector-stores/:id ​

Назначение: удаление (env store удалить нельзя). Права: Admin+.

Ответ: 200 {"success":true}

bash
curl -X DELETE $BASE/api/v1/vector-stores/vs-1 -H "Authorization: Bearer $TOKEN"

POST /api/v1/vector-stores/:id/test ​

Назначение: проверка сохранённого/env векторного хранилища. Права: Admin+.

Ответ: 200 {"success":true|false,"version","error"}

bash
curl -X POST $BASE/api/v1/vector-stores/vs-1/test -H "Authorization: Bearer $TOKEN"

Бэкенды хранилищ (/api/v1/storage-backends) ​

Тело запроса (Create/Update/TestRaw используют общий storageBackendRequest):

ПолеТипОбязательноОписание
namestringда (binding:"required")имя
providerstringда (binding:"required")провайдер: local/minio/cos/tos/s3/oss/ks3/obs, ограничивается STORAGE_ALLOW_LIST
configobjectнетконфигурация провайдера, поля см. в Бэкенды хранилищ (в ответе учётные данные маскируются)
statusstringнетactive (по умолчанию)/disabled

GET /api/v1/storage-backends/types ​

Назначение: список имён провайдеров, разрешённых STORAGE_ALLOW_LIST (если не задан — возвращаются все). Права: Viewer+. Ответ: 200 {"success":true,"data":["local","minio",...]}

bash
curl $BASE/api/v1/storage-backends/types -H "Authorization: Bearer $TOKEN"

POST /api/v1/storage-backends/test ​

Назначение: проверка подключения с исходной конфигурацией. Права: Admin+. Ответ: 200 {"success":bool,"error"}

bash
curl -X POST $BASE/api/v1/storage-backends/test -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"t","provider":"minio","config":{"endpoint":"minio:9000"}}'

POST /api/v1/storage-backends ​

Назначение: создание бэкенда хранилища. Права: Admin+. Ответ: 201 {"success":true,"data":{StorageBackend}}

bash
curl -X POST $BASE/api/v1/storage-backends -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"minio-main","provider":"minio","config":{"endpoint":"minio:9000"}}'

GET /api/v1/storage-backends ​

Назначение: список (включает default_storage_backend_id). Права: Viewer+. Ответ: 200 {"success":true,"data":[...],"default_storage_backend_id":"..."}

bash
curl $BASE/api/v1/storage-backends -H "Authorization: Bearer $TOKEN"

GET /api/v1/storage-backends/:id ​

Назначение: подробности (учётные данные маскируются). Права: Viewer+. Ответ: 200 {"success":true,"data":{StorageBackend}}

bash
curl $BASE/api/v1/storage-backends/sb-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/storage-backends/:id ​

Назначение: обновление. Права: Admin+. Ответ: 200 {"success":true,"data":{StorageBackend}}

bash
curl -X PUT $BASE/api/v1/storage-backends/sb-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"minio-prod","provider":"minio"}'

DELETE /api/v1/storage-backends/:id ​

Назначение: удаление. Права: Admin+. Ответ: 200 {"success":true}

bash
curl -X DELETE $BASE/api/v1/storage-backends/sb-1 -H "Authorization: Bearer $TOKEN"

POST /api/v1/storage-backends/:id/test ​

Назначение: проверка сохранённого бэкенда. Права: Admin+. Ответ: 200 {"success":bool,"error"}

bash
curl -X POST $BASE/api/v1/storage-backends/sb-1/test -H "Authorization: Bearer $TOKEN"

PUT /api/v1/storage-backends/:id/default ​

Назначение: назначение бэкенда по умолчанию. Права: Admin+. Ответ: 200 {"success":true}

bash
curl -X PUT $BASE/api/v1/storage-backends/sb-1/default -H "Authorization: Bearer $TOKEN"

Веб-поиск (/api/v1/web-search и /api/v1/web-search-providers) ​

Сейчас зарегистрировано 14 поставщиков поиска, включая Metaso, Exa, Bocha, Brave, Serply. Параметры api_key и extra_config для каждого см. в Веб-поиск.

GET /api/v1/web-search/providers ​

Назначение: каталог встроенных поставщиков поиска (только чтение). Права: Viewer+, только JWT (политика API key не объявлена). Handler: internal/handler/web_search.go

Ответ: 200 {"success":true,"data":[...]}

bash
curl $BASE/api/v1/web-search/providers -H "Authorization: Bearer $TOKEN"

GET /api/v1/web-search-providers/types ​

Назначение: типы поставщиков и схема параметров. Права: Viewer+. Handler: internal/handler/web_search_provider.go

Ответ: 200 {"success":true,"data":[...]}

bash
curl $BASE/api/v1/web-search-providers/types -H "Authorization: Bearer $TOKEN"

POST /api/v1/web-search-providers/test ​

Назначение: проверка исходных учётных данных (без сохранения в БД). Права: Admin+. Тело запроса: provider (binding:"required"), parameters (необязательно).

Ответ: 200 {"success":bool,"error"}

bash
curl -X POST $BASE/api/v1/web-search-providers/test -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"provider":"tavily","parameters":{"api_key":"tvly-..."}}'

POST /api/v1/web-search-providers ​

Назначение: создание конфигурации поставщика. Права: Admin+.

ПолеТипОбязательноОписание
namestringда (binding:"required")имя
providerstringда (binding:"required")тип (bing/tavily/google…)
descriptionstringнетописание
parametersobjectнетпараметры (api_key рекомендуется передавать через подресурс credentials)
is_defaultboolнетпоставщик по умолчанию

Ответ: 201 {"success":true,"data":{WebSearchProviderResponse}}

bash
curl -X POST $BASE/api/v1/web-search-providers -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"tavily-main","provider":"tavily"}'

GET /api/v1/web-search-providers ​

Назначение: список поставщиков. Права: Viewer+. Ответ: 200 {"success":true,"data":[...]}

bash
curl $BASE/api/v1/web-search-providers -H "Authorization: Bearer $TOKEN"

GET /api/v1/web-search-providers/:id ​

Назначение: подробности. Права: Viewer+. Ответ: 200 {"success":true,"data":{...}}

bash
curl $BASE/api/v1/web-search-providers/wsp-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/web-search-providers/:id ​

Назначение: обновление (пустые поля сохраняют исходные значения; APIKey сохраняется). Права: Admin+. Тело запроса: name/description/parameters/is_default (все необязательны).

Ответ: 200 {"success":true,"data":{...}}

bash
curl -X PUT $BASE/api/v1/web-search-providers/wsp-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"is_default":true}'

DELETE /api/v1/web-search-providers/:id ​

Назначение: удаление. Права: Admin+. Ответ: 200 {"success":true}

bash
curl -X DELETE $BASE/api/v1/web-search-providers/wsp-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/web-search-providers/:id/credentials ​

Назначение: установка API key ({"api_key":"..."}; при пропуске возвращается состояние). Права: Admin+. Handler: internal/handler/web_search_provider_credentials.go

Ответ: 200 {"success":true,"data":{"fields":{"api_key":{"configured":bool}}}}

bash
curl -X PUT $BASE/api/v1/web-search-providers/wsp-1/credentials -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"api_key":"tvly-..."}'

DELETE /api/v1/web-search-providers/:id/credentials/:field ​

Назначение: удаление поля учётных данных (field может быть только api_key). Права: Admin+. Ответ: 204.

bash
curl -X DELETE $BASE/api/v1/web-search-providers/wsp-1/credentials/api_key -H "Authorization: Bearer $TOKEN"

POST /api/v1/web-search-providers/:id/test ​

Назначение: проверка сохранённого поставщика. Права: Admin+. Ответ: 200 {"success":bool,"error"}

bash
curl -X POST $BASE/api/v1/web-search-providers/wsp-1/test -H "Authorization: Bearer $TOKEN"

Источники данных (/api/v1/datasource) ​

Коннекторы внешнего контента (Feishu/Notion/Yuque и т. п.); задачи синхронизации записываются в KB. Handler: internal/handler/datasource.go. Большинство ответов этой группы — исходные объекты/массивы (без обёртки success).

Сейчас зарегистрированы типы: feishu, lark, feishu_drive, lark_drive, notion, confluence, yuque, dingtalk, ima, rss, gitlab. Про credentials, выбор ресурсов и ограничения синхронизации каждого коннектора см. в Импорт источников данных. После включения sync_deletions удалённые знания, принадлежащие этому источнику данных, удаляются по-настоящему; source_created_at/source_updated_at сохраняются в metadata знания.

GET /api/v1/datasource/types ​

Назначение: каталог доступных коннекторов. Права: Viewer+.

Ответ: 200 [{type,name,description,icon,priority,auth_type,capabilities}]

bash
curl $BASE/api/v1/datasource/types -H "Authorization: Bearer $TOKEN"

POST /api/v1/datasource/validate-credentials ​

Назначение: проверка исходных учётных данных (кнопка «Проверить подключение», без сохранения в БД). Права: Admin+.

ПолеТипОбязательноОписание
typestringда (binding:"required")тип коннектора
credentialsmapда (binding:"required")учётные данные

Ответ: 200 {"status":"connected"}; при сбое 400 {"error":"..."}

bash
curl -X POST $BASE/api/v1/datasource/validate-credentials -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"type":"notion","credentials":{"api_key":"ntn_xxx"}}'

POST /api/v1/datasource ​

Назначение: создание источника данных. Права: Admin+. Тело запроса (types.DataSource):

ПолеТипОбязательноОписание
knowledge_base_idstringдацелевая KB (должна принадлежать текущему пространству)
namestringдаимя
typestringдатип коннектора
configobjectдаучётные данные (хранятся в зашифрованном виде) + выбор ресурсов + настройки
sync_schedulestringнетвыражение cron
sync_modestringнетincremental (по умолчанию)/full
conflict_strategystringнетoverwrite (по умолчанию)/skip
sync_deletionsboolнетпо умолчанию true
sync_log_retention_daysintнетпо умолчанию 30

Ответ: 201 DataSourceResponse (учётные данные удалены, см. internal/handler/dto/datasource.go).

bash
curl -X POST $BASE/api/v1/datasource -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"knowledge_base_id":"kb-1","name":"Синхронизация Notion","type":"notion","config":{}}'

GET /api/v1/datasource ​

Назначение: список источников данных. Права: Viewer+. Параметры запроса: kb_id (обязательно).

Ответ: 200 [DataSourceResponse]

bash
curl "$BASE/api/v1/datasource?kb_id=kb-1" -H "Authorization: Bearer $TOKEN"

GET /api/v1/datasource/:id ​

Назначение: подробности. Права: Viewer+. Ответ: 200 DataSourceResponse; 404 {"error":"data source not found"}

bash
curl $BASE/api/v1/datasource/ds-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/datasource/:id ​

Назначение: обновление (id/tenant_id/knowledge_base_id фиксируются на исходных значениях). Права: Admin+. Тело запроса, как при создании.

PUT полностью заменяет конфигурацию источника данных и не поддерживает частичное обновление: сначала выполните GET подробностей, затем отправьте изменённый полный объект (name, type, config, sync_schedule, sync_mode, conflict_strategy, sync_deletions, sync_log_retention_days, status и т. д.). sync_schedule и sync_deletions всегда записываются по телу запроса: при пропуске sync_schedule оно очищается до пустой строки (только ручная синхронизация, существующие задачи по расписанию при этом удаляются), при пропуске sync_deletions значение становится false; для остальных полей сохранение исходного значения при пропуске не гарантируется. Учётные данные через этот эндпоинт не изменяются: config.credentials из тела запроса игнорируется, сохранённые учётные данные остаются.

Ответ: 200 DataSourceResponse

bash
curl -X PUT $BASE/api/v1/datasource/ds-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Синхронизация Notion v2","type":"notion","knowledge_base_id":"kb-1",
       "config":{"type":"notion","resource_ids":["page-1"]},
       "sync_schedule":"0 0 */6 * * *","sync_mode":"incremental","conflict_strategy":"overwrite",
       "sync_deletions":true,"sync_log_retention_days":30,"status":"active"}'

DELETE /api/v1/datasource/:id ​

Назначение: удаление. Права: Admin+. Ответ: 204.

bash
curl -X DELETE $BASE/api/v1/datasource/ds-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/datasource/:id/credentials ​

Назначение: полная замена учётных данных (учётные данные источника данных — атомарный map с «единственным логическим полем credentials»). Права: Admin+. Тело запроса: {"credentials":{...}} (обязателен непустой map). Handler: internal/handler/datasource_credentials.go

Ответ: 200 {"success":true,"data":{"fields":{"credentials":{"configured":bool}}}}

bash
curl -X PUT $BASE/api/v1/datasource/ds-1/credentials -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"credentials":{"api_key":"ntn_xxx"}}'

DELETE /api/v1/datasource/:id/credentials/:field ​

Назначение: очистка учётных данных (field должен быть credentials). Права: Admin+. Ответ: 204.

bash
curl -X DELETE $BASE/api/v1/datasource/ds-1/credentials/credentials -H "Authorization: Bearer $TOKEN"

POST /api/v1/datasource/:id/validate ​

Назначение: проверка подключения сохранённого источника данных. Права: Admin+. Ответ: 200 {"status":"connected"}

bash
curl -X POST $BASE/api/v1/datasource/ds-1/validate -H "Authorization: Bearer $TOKEN"

GET /api/v1/datasource/:id/resources ​

Назначение: просмотр дерева внешних ресурсов (ленивая загрузка). Права: Admin+. Параметры запроса: parent_id (необязательно, пусто = верхний уровень).

Ответ: 200 [{external_id,name,type,description,url,modified_at,parent_id,has_children,metadata}]

bash
curl "$BASE/api/v1/datasource/ds-1/resources?parent_id=" -H "Authorization: Bearer $TOKEN"

POST /api/v1/datasource/:id/resource-ancestors ​

Назначение: разбор цепочки предков ресурса (раскрытие в селекторе). Права: Admin+. Тело запроса: {"resource_ids":["..."]} (обязательно).

Ответ: 200 {"ancestors":[...]}

bash
curl -X POST $BASE/api/v1/datasource/ds-1/resource-ancestors -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"resource_ids":["page-1"]}'

POST /api/v1/datasource/:id/sync ​

Назначение: ручной запуск синхронизации. Права: Admin+. Ответ: 200 SyncLog (id,status,started_at,items_total,items_created,items_updated,items_deleted,items_failed,...)

bash
curl -X POST $BASE/api/v1/datasource/ds-1/sync -H "Authorization: Bearer $TOKEN"

POST /api/v1/datasource/:id/pause и POST /api/v1/datasource/:id/resume ​

Назначение: приостановка / возобновление синхронизации по расписанию. Права: Admin+.

Ответ: 200 {"status":"paused"} / {"status":"active"}

bash
curl -X POST $BASE/api/v1/datasource/ds-1/pause -H "Authorization: Bearer $TOKEN"

GET /api/v1/datasource/:id/logs ​

Назначение: список журналов синхронизации. Права: Viewer+. Параметры запроса: limit (по умолчанию 10, максимум 100), offset (по умолчанию 0).

Ответ: 200 [SyncLog]

bash
curl "$BASE/api/v1/datasource/ds-1/logs?limit=10" -H "Authorization: Bearer $TOKEN"

GET /api/v1/datasource/logs/:log_id ​

Назначение: одна запись журнала синхронизации. Права: Viewer+. Ответ: 200 SyncLog; 404 {"error":"sync log not found"}

bash
curl $BASE/api/v1/datasource/logs/log-1 -H "Authorization: Bearer $TOKEN"

Справочник по реализации ​

Регистрация маршрутов: RegisterVectorStoreRoutes, RegisterStorageBackendRoutes, RegisterWebSearchRoutes, RegisterWebSearchProviderRoutes, RegisterDataSourceRoutes в internal/router/routes_infra.go. Handler: internal/handler/vectorstore.go, internal/handler/storagebackend.go, internal/handler/web_search.go, internal/handler/web_search_provider.go, internal/handler/web_search_provider_credentials.go, internal/handler/datasource.go, internal/handler/datasource_credentials.go.

Версия v0.8.3 · MIT License