Skip to Content

Knowledge

Endpoints Knowledge управляют документами, на которые опираются ваши agents, а также папками и tags, которые их организуют. Есть две группы:

  • Документы — загрузка (асинхронная), перечисление, поиск, получение, отслеживание обработки и удаление.
  • Организация — CRUD папок, CRUD tags и организация документов (перемещение в папку, добавление или удаление tags).

Все endpoints находятся под /knowledge и требуют scope knowledge:read для чтения или scope knowledge:write для записи. Каждый ответ использует описанные здесь формы по принципу запрета по умолчанию — внутренние детали хранилища (ключи S3, хеши файлов, типы MIME), внутренние детали chunking и embedding, а также показатели стоимости никогда не возвращаются.

Документы

Модель асинхронной загрузки

Загрузка документа не блокируется на время обработки. POST /knowledge/documents возвращает 201 с {document_id, status} сразу после приёма файла, после чего документ проходит асинхронный жизненный цикл:

uploaded → validating → stored → processing → ready

(или failed при ошибке). Чтобы следить за ним, либо опрашивайте GET /knowledge/documents/{document_id}/status, либо подпишитесь на SSE-поток GET /knowledge/documents/{document_id}/status/stream. Только когда документ становится ready, он доступен для поиска и использования agent.


POST /knowledge/documents

Загрузите файл в базу knowledge. Асинхронно — сразу возвращает 201 с id нового документа и его начальным (нетерминальным) статусом. Если файл совпадает с существующим документом, endpoint возвращает 409 со структурированным телом дубликата (см. ниже), а не конверт ошибки.

Scope: knowledge:write · Успех: 201

Этот endpoint принимает multipart/form-data, а не JSON.

ПараметрВТипОбязательныйОписание
fileformfileДаФайл документа для загрузки.
titleformstringНетОтображаемый заголовок. По умолчанию имя файла.
descriptionformstringНетОписание в свободной форме.
tagsformstringНетId tags через запятую для применения при загрузке.
folder_idformstringНетПапка, в которую поместить документ.
visibilityformstringНетВидимость доступа. По умолчанию private.
Idempotency-KeyheaderstringНетKey безопасного повтора (смотрите Соглашения).
curl -X POST https://cuneiform.chat/api/developer/v1/knowledge/documents \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -F "file=@handbook.pdf" \ -F "title=Employee Handbook" \ -F "folder_id=fold_abc123" \ -F "tags=tag_hr,tag_policy"
{ "document_id": "doc_9f2a7b", "status": "uploaded" }

Обнаружен дубликат (409). Когда загруженный файл совпадает с существующим документом, ответ — это структурированное тело, а не конверт ошибки, несущее upload_session_id, который вы передаёте в confirm-duplicate, чтобы всё же продолжить:

{ "upload_session_id": "ups_abc123", "duplicate_of": ["doc_existing456"] }

Ошибки: 400 invalid_upload (некорректный файл), 401, 403, 429, 500.


POST /knowledge/documents/confirm-duplicate

Возобновите загрузку, помеченную как дубликат, по upload_session_id из тела 409. Как и загрузка, это асинхронно и возвращает 201 с {document_id, status}.

Scope: knowledge:write · Успех: 201

Этот endpoint принимает multipart/form-data.

ПараметрВТипОбязательныйОписание
upload_session_idformstringДаId из тела дубликата 409.
titleformstringНетОтображаемый заголовок.
descriptionformstringНетОписание в свободной форме.
tagsformstringНетId tags через запятую.
folder_idformstringНетПапка для размещения.
visibilityformstringНетПо умолчанию private.
Idempotency-KeyheaderstringНетKey безопасного повтора.
curl -X POST https://cuneiform.chat/api/developer/v1/knowledge/documents/confirm-duplicate \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -F "upload_session_id=ups_abc123" \ -F "folder_id=fold_abc123"
{ "document_id": "doc_9f2a7b", "status": "uploaded" }

Ошибки: 400, 401, 403, 404 (неизвестная сессия), 429, 500.


GET /knowledge/documents

Перечислите документы с курсорной пагинацией. Необязательные фильтры сужают по папке, tag или статусу обработки.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
limitqueryintegerНетРазмер страницы, 1–100. По умолчанию 20.
cursorquerystringНетnext_cursor с предыдущей страницы.
folder_idquerystringНетОграничить папкой.
tagquerystringНетОграничить id tag.
statusquerystringНетОграничить статусом обработки.
curl "https://cuneiform.chat/api/developer/v1/knowledge/documents?limit=20&status=ready" \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "data": [ { "id": "doc_9f2a7b", "filename": "handbook.pdf", "title": "Employee Handbook", "description": null, "file_format": "pdf", "file_size_bytes": 184320, "status": "ready", "folder_id": "fold_abc123", "tags": ["tag_hr", "tag_policy"], "is_duplicate": false, "duplicate_of": [], "total_chunks": 42, "created_at": "2026-06-07T09:12:00Z", "updated_at": "2026-06-07T09:13:20Z" } ], "has_more": false, "next_cursor": null }

Ошибки: 400 invalid_cursor, 401, 403, 429, 500.


GET /knowledge/documents/search

Ищите документы по строке запроса. Возвращает страницу с курсорной пагинацией из Documents, ранжированных по релевантности, с теми же необязательными фильтрами, что и у endpoint перечисления.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
qquerystringНетСтрока поискового запроса.
limitqueryintegerНетРазмер страницы, 1–100. По умолчанию 20.
cursorquerystringНетnext_cursor с предыдущей страницы.
folder_idquerystringНетОграничить папкой.
tagquerystringНетОграничить id tag.
statusquerystringНетОграничить статусом обработки.
curl "https://cuneiform.chat/api/developer/v1/knowledge/documents/search?q=parental%20leave" \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "data": [ { "id": "doc_9f2a7b", "filename": "handbook.pdf", "title": "Employee Handbook", "description": null, "file_format": "pdf", "file_size_bytes": 184320, "status": "ready", "folder_id": "fold_abc123", "tags": ["tag_hr", "tag_policy"], "is_duplicate": false, "duplicate_of": [], "total_chunks": 42, "created_at": "2026-06-07T09:12:00Z", "updated_at": "2026-06-07T09:13:20Z" } ], "has_more": false, "next_cursor": null }

Ошибки: 400, 401, 403, 429, 500.


GET /knowledge/documents/{document_id}

Получите один документ по id.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
curl https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "id": "doc_9f2a7b", "filename": "handbook.pdf", "title": "Employee Handbook", "description": null, "file_format": "pdf", "file_size_bytes": 184320, "status": "ready", "folder_id": "fold_abc123", "tags": ["tag_hr", "tag_policy"], "is_duplicate": false, "duplicate_of": [], "total_chunks": 42, "created_at": "2026-06-07T09:12:00Z", "updated_at": "2026-06-07T09:13:20Z" }

Ошибки: 401, 403, 404 document_not_found, 429, 500.


GET /knowledge/documents/{document_id}/status

Опрашивайте статус асинхронной обработки документа. Используйте это, чтобы узнать, когда загрузка достигнет ready.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
curl https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b/status \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "document_id": "doc_9f2a7b", "status": "processing", "progress": 60, "error_message": null }

Ошибки: 401, 403, 404, 429, 500.


GET /knowledge/documents/{document_id}/status/stream

Подпишитесь на поток Server-Sent Events со статусом обработки документа. Полезная нагрузка data: каждого события — это объект статуса (та же форма, что у endpoint опроса). Поток сразу выдаёт текущий статус, затем по одному событию на обновление и закрывается, когда статус достигает терминального состояния (ready или failed).

Scope: knowledge:read · Успех: 200 (text/event-stream)

Id документа вне вашей организации возвращает конверт ошибки 404 — а не пустой поток.

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
curl -N https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b/status/stream \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
data: {"document_id": "doc_9f2a7b", "status": "processing", "progress": 40, "error_message": null} data: {"document_id": "doc_9f2a7b", "status": "processing", "progress": 80, "error_message": null} data: {"document_id": "doc_9f2a7b", "status": "ready", "progress": 100, "error_message": null}

Ошибки: 401, 403, 404, 429, 500.


DELETE /knowledge/documents/{document_id}

Удалите документ.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
curl -X DELETE https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "id": "doc_9f2a7b", "deleted": true }

Ошибки: 401, 403, 404, 429, 500.

Организация

POST /knowledge/folders

Создайте папку.

Scope: knowledge:write · Успех: 201

ПараметрВТипОбязательныйОписание
namebodystringДаИмя папки (1–100 символов).
descriptionbodystringНетОписание (≤500 символов).
colorbodystringНетШестнадцатеричный цвет #RRGGBB. По умолчанию #667eea.
curl -X POST https://cuneiform.chat/api/developer/v1/knowledge/folders \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "name": "HR Policies", "color": "#667eea" }'
{ "id": "fold_abc123", "name": "HR Policies", "description": null, "color": "#667eea", "document_count": 0, "created_at": "2026-06-07T09:00:00Z", "updated_at": "2026-06-07T09:00:00Z" }

Ошибки: 400 folder_name_exists, 401, 403, 429, 500.


GET /knowledge/folders

Перечислите папки с курсорной пагинацией.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
limitqueryintegerНетРазмер страницы, 1–100. По умолчанию 20.
cursorquerystringНетnext_cursor с предыдущей страницы.
curl "https://cuneiform.chat/api/developer/v1/knowledge/folders?limit=20" \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "data": [ { "id": "fold_abc123", "name": "HR Policies", "description": null, "color": "#667eea", "document_count": 12, "created_at": "2026-06-07T09:00:00Z", "updated_at": "2026-06-07T09:13:20Z" } ], "has_more": false, "next_cursor": null }

Ошибки: 400, 401, 403, 429, 500.


GET /knowledge/folders/{folder_id}

Получите папку по id.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
folder_idpathstringДаId папки.
curl https://cuneiform.chat/api/developer/v1/knowledge/folders/fold_abc123 \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "id": "fold_abc123", "name": "HR Policies", "description": null, "color": "#667eea", "document_count": 12, "created_at": "2026-06-07T09:00:00Z", "updated_at": "2026-06-07T09:13:20Z" }

Ошибки: 401, 403, 404, 429, 500.


PATCH /knowledge/folders/{folder_id}

Обновите папку. Все поля тела необязательны; опущенные поля остаются без изменений.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
folder_idpathstringДаId папки.
namebodystringНетНовое имя (1–100 символов).
descriptionbodystringНетНовое описание (≤500 символов).
colorbodystringНетНовый шестнадцатеричный цвет #RRGGBB.
curl -X PATCH https://cuneiform.chat/api/developer/v1/knowledge/folders/fold_abc123 \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "name": "HR & Compliance" }'
{ "id": "fold_abc123", "name": "HR & Compliance", "description": null, "color": "#667eea", "document_count": 12, "created_at": "2026-06-07T09:00:00Z", "updated_at": "2026-06-07T10:01:00Z" }

Ошибки: 400 folder_name_exists, 401, 403, 404, 429, 500.


DELETE /knowledge/folders/{folder_id}

Удалите пустую папку. Папка, которая всё ещё содержит документы, возвращает 400 folder_not_empty — сначала переместите или удалите её документы.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
folder_idpathstringДаId папки.
curl -X DELETE https://cuneiform.chat/api/developer/v1/knowledge/folders/fold_abc123 \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "id": "fold_abc123", "deleted": true }

Ошибки: 400 folder_not_empty, 401, 403, 404, 429, 500.


POST /knowledge/tags

Создайте tag.

Scope: knowledge:write · Успех: 201

ПараметрВТипОбязательныйОписание
namebodystringДаИмя tag (1–50 символов).
colorbodystringДаШестнадцатеричный цвет #RRGGBB.
curl -X POST https://cuneiform.chat/api/developer/v1/knowledge/tags \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "name": "policy", "color": "#10b981" }'
{ "id": "tag_policy", "name": "policy", "color": "#10b981", "document_count": 0, "created_at": "2026-06-07T09:00:00Z" }

Ошибки: 400 tag_name_exists, 401, 403, 429, 500.


GET /knowledge/tags

Перечислите tags с курсорной пагинацией.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
limitqueryintegerНетРазмер страницы, 1–100. По умолчанию 20.
cursorquerystringНетnext_cursor с предыдущей страницы.
curl "https://cuneiform.chat/api/developer/v1/knowledge/tags?limit=20" \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "data": [ { "id": "tag_policy", "name": "policy", "color": "#10b981", "document_count": 7, "created_at": "2026-06-07T09:00:00Z" } ], "has_more": false, "next_cursor": null }

Ошибки: 400, 401, 403, 429, 500.


GET /knowledge/tags/{tag_id}

Получите tag по id.

Scope: knowledge:read · Успех: 200

ПараметрВТипОбязательныйОписание
tag_idpathstringДаId tag.
curl https://cuneiform.chat/api/developer/v1/knowledge/tags/tag_policy \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "id": "tag_policy", "name": "policy", "color": "#10b981", "document_count": 7, "created_at": "2026-06-07T09:00:00Z" }

Ошибки: 401, 403, 404, 429, 500.


PATCH /knowledge/tags/{tag_id}

Обновите tag. Все поля тела необязательны.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
tag_idpathstringДаId tag.
namebodystringНетНовое имя (1–50 символов).
colorbodystringНетНовый шестнадцатеричный цвет #RRGGBB.
curl -X PATCH https://cuneiform.chat/api/developer/v1/knowledge/tags/tag_policy \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "color": "#3b82f6" }'
{ "id": "tag_policy", "name": "policy", "color": "#3b82f6", "document_count": 7, "created_at": "2026-06-07T09:00:00Z" }

Ошибки: 400 tag_name_exists, 401, 403, 404, 429, 500.


DELETE /knowledge/tags/{tag_id}

Удалите tag. Это также удаляет tag из каждого документа, к которому он был применён.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
tag_idpathstringДаId tag для удаления.
curl -X DELETE https://cuneiform.chat/api/developer/v1/knowledge/tags/tag_policy \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "id": "tag_policy", "deleted": true }

Ошибки: 401, 403, 404, 429, 500.


PUT /knowledge/documents/{document_id}/folder

Переместите документ в папку или извлеките его из папки, передав folder_id: null.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
folder_idbodystring | nullНетId целевой папки или null для извлечения из папки.
curl -X PUT https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b/folder \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "folder_id": "fold_abc123" }'
{ "document_id": "doc_9f2a7b", "folder_id": "fold_abc123" }

Ошибки: 400, 401, 403, 404, 429, 500.


POST /knowledge/documents/{document_id}/tags

Добавьте один или несколько tags к документу. Ответ — это полный набор tags документа после добавления.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
tag_idsbodyarray of stringДаId tags для добавления (1–20).
curl -X POST https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b/tags \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "tag_ids": ["tag_hr", "tag_policy"] }'
{ "document_id": "doc_9f2a7b", "tag_ids": ["tag_hr", "tag_policy"] }

Ошибки: 400, 401, 403, 404, 429, 500.


DELETE /knowledge/documents/{document_id}/tags/{tag_id}

Удалите один tag из документа. Ответ — это оставшийся набор tags документа.

Scope: knowledge:write · Успех: 200

ПараметрВТипОбязательныйОписание
document_idpathstringДаId документа.
tag_idpathstringДаId tag для удаления.
curl -X DELETE https://cuneiform.chat/api/developer/v1/knowledge/documents/doc_9f2a7b/tags/tag_policy \ -H "Authorization: Bearer cuk_live_xxxxxxxxxxxxxxxx"
{ "document_id": "doc_9f2a7b", "tag_ids": ["tag_hr"] }

Ошибки: 401, 403, 404, 429, 500.

Last updated on