Перейти к основному содержимому

projects

Эндпоинтов: 18

GET /api/projects

Полный список проектов (со сценарием data)

Авторизация: Cookie (connect.sid) или Bearer PAT

Сырые записи bot_projects владельца/коллаборатора, включая data (весь сценарий). Может содержать устаревшее поле botToken.

Query: archived=false|true (default false). Поле isArchivedForMe в каждом элементе.

Клиент: сайдбар редактора (use-projects-query), canvas, bot-queries.

Для списков в UI предпочтительнее GET /api/projects/list; полный сценарий — GET /api/projects/{id}.

curl -s http://localhost:5000/api/projects -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
archivedqueryнетФильтр личного архива текущего пользователя"false"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Массив полных BotProject
401Нет session cookie и Bearer PAT
500Ошибка БД

Пример ответа 200

[
{
"id": 42,
"ownerId": 123456789,
"name": "Мой бот",
"description": "Приветственный бот",
"data": {
"sheets": [
{
"id": "main",
"name": "Основной",
"nodes": [],
"edges": []
}
]
},
"botToken": null,
"sessionId": null,
"userDatabaseEnabled": 1,
"sortOrder": 0,
"adminIds": null,
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-11T12:00:00.000Z",
"isArchivedForMe": false
}
]

POST /api/projects

Создать проект

Авторизация: Cookie (connect.sid) или Bearer PAT

Создаёт проект для текущего пользователя. ownerId берётся из сессии, поле в body игнорируется. После insert создаётся таблица _content, шлётся live-событие projects-changed.

Тело: name обязателен; data — опциональный стартовый сценарий.

Клиент: home, сайдбар, NoProjectsScreen, импорт.

curl -s -X POST http://localhost:5000/api/projects -b cookies.txt \
-H 'Content-Type: application/json' \
-d '{"name":"Мой бот"}'

Тело запроса: CreateProjectRequest

Параметры

ИмяInОбязательныйОписаниеПример
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"name": "Мой бот",
"description": "Приветственный бот",
"data": {
"sheets": [
{
"id": "main",
"nodes": [],
"edges": []
}
]
},
"userDatabaseEnabled": 1,
"sortOrder": 0
}

Ответы

КодОписание
201Проект создан
400Ошибка валидации Zod
401Гость без Telegram-сессии (ownerId === null)
500Ошибка БД / создания

Пример ответа 201

{
"id": 42,
"ownerId": 123456789,
"name": "Мой бот",
"description": "Приветственный бот",
"data": {
"sheets": [
{
"id": "main",
"name": "Основной",
"nodes": [],
"edges": []
}
]
},
"botToken": null,
"sessionId": null,
"userDatabaseEnabled": 1,
"sortOrder": 0,
"adminIds": null,
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-11T12:00:00.000Z",
"isArchivedForMe": false
}

DELETE /api/projects/{id}

Удалить проект

Авторизация: Cookie (connect.sid) или Bearer PAT

Останавливает бота, удаляет токены, медиа, user data и проект. Шлёт projects-changed (deleted) членам команды.

Auth: cookie / Bearer PAT + requireProjectAccess (владелец или collaborator).

Клиент: сайдбар / удаление проекта.

curl -s -X DELETE http://localhost:5000/api/projects/42 -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Проект удалён
401Нет session cookie и Bearer PAT
403Нет прав на удаление
404Проект не найден
500Сбой очистки связанных данных

Пример ответа 200

{
"message": "Проект успешно удалён"
}

GET /api/projects/{id}

Получить проект по ID

Авторизация: Cookie (connect.sid) или Bearer PAT

Полная запись проекта (включая data сценария). Доступ: владелец или collaborator (requireProjectAccess).

Параметры: path id — числовой ID проекта.

Клиент: редактор (use-project-loader), сохранение, MCP.

curl -s http://localhost:5000/api/projects/42 -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Данные проекта
400id не число
401Нет session cookie и Bearer PAT
404Проект не найден или нет доступа
500Ошибка БД

Пример ответа 200

{
"id": 42,
"ownerId": 123456789,
"name": "Мой бот",
"description": "Приветственный бот",
"data": {
"sheets": [
{
"id": "main",
"name": "Основной",
"nodes": [],
"edges": []
}
]
},
"botToken": null,
"sessionId": null,
"userDatabaseEnabled": 1,
"sortOrder": 0,
"adminIds": null,
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-11T12:00:00.000Z",
"isArchivedForMe": false
}

PUT /api/projects/{id}

Обновить проект

Авторизация: Cookie (connect.sid) или Bearer PAT

Частичное обновление полей. При изменении data — синхронизация _content, снимок версии, Redis bot:table_updated, canvas-sync.

Тело: partial insertBotProject + commitMessage, agentEdit, agentSessionId, agentDisplayName, restartOnUpdate.

Auth: cookie / Bearer PAT + requireProjectAccess.

Клиент: редактор (save), MCP live-edit.

curl -s -X PUT http://localhost:5000/api/projects/42 -b cookies.txt \
-H 'Content-Type: application/json' -d '{"name":"Новое имя"}'

Тело запроса: UpdateProjectRequest

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"name": "Новое имя"
}

Ответы

КодОписание
200Обновлённый проект
400Невалидный id или тело (Zod)
401Нет session cookie и Bearer PAT
403Нет доступа к проекту
404Проект не найден

Пример ответа 200

{
"id": 42,
"ownerId": 123456789,
"name": "Мой бот",
"description": "Приветственный бот",
"data": {
"sheets": [
{
"id": "main",
"name": "Основной",
"nodes": [],
"edges": []
}
]
},
"botToken": null,
"sessionId": null,
"userDatabaseEnabled": 1,
"sortOrder": 0,
"adminIds": null,
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-11T12:00:00.000Z",
"isArchivedForMe": false
}

GET /api/projects/{id}/admin-ids

Список ADMIN_IDS проекта

Авторизация: Cookie (connect.sid) или Bearer PAT

Читает ID администраторов бота. Сначала bot_projects.admin_ids, если пусто — fallback на ADMIN_IDS в .env папки бота.

Параметры: path id. Auth — cookie / Bearer PAT + requireProjectAccess.

Клиент: BotAdminIds / use-admin-ids, генератор кода, шаблон «Менеджер ботов» (HTTP GET).

curl -s http://localhost:5000/api/projects/42/admin-ids -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Список админов (может быть пустым)
401Нет session cookie и Bearer PAT
500Ошибка чтения БД / .env

Пример ответа 200

{
"adminIds": "123456789,987654321",
"items": [
{
"id": "123456789"
},
{
"id": "987654321"
}
],
"count": 2
}

PUT /api/projects/{id}/admin-ids

Заменить ADMIN_IDS проекта

Авторизация: Cookie (connect.sid) или Bearer PAT

Полностью перезаписывает список админов в БД. Если есть папка бота — синхронизирует ADMIN_IDS в .env.

Тело: { adminIds: "id1,id2" } — строка через запятую.

Клиент: сохранение в профиле бота, панель env, «Менеджер ботов» (добавление админа через PUT).

curl -s -X PUT http://localhost:5000/api/projects/42/admin-ids -b cookies.txt \
-H 'Content-Type: application/json' \
-d '{"adminIds":"123456789,987654321"}'

Тело запроса: UpdateAdminIdsRequest

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"adminIds": "123456789,987654321"
}

Ответы

КодОписание
200Список сохранён
401Нет session cookie и Bearer PAT
500Ошибка записи БД / .env

Пример ответа 200

{
"success": true,
"adminIds": "123456789,987654321"
}

POST /api/projects/{id}/admin-ids/remove

Удалить одного администратора из ADMIN_IDS

Авторизация: Cookie (connect.sid) или Bearer PAT

Убирает один Telegram ID из списка. Body adminId — число или del_admin_{id} (callback из шаблона «Менеджер ботов»).

Обновляет БД и .env при наличии. Studio UI обычно делает PUT с новым списком; этот эндпоинт — для HTTP из бота-менеджера.

curl -s -X POST http://localhost:5000/api/projects/42/admin-ids/remove \
-b cookies.txt -H 'Content-Type: application/json' \
-d '{"adminId":"del_admin_987654321"}'

Тело запроса: RemoveAdminIdRequest

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"adminId": "del_admin_987654321"
}

Ответы

КодОписание
200Админ удалён, возвращён новый список
401Нет session cookie и Bearer PAT
500Ошибка удаления

Пример ответа 200

{
"success": true,
"adminIds": "123456789"
}

POST /api/projects/{id}/archive

Поместить проект в личный архив

Авторизация: Cookie (connect.sid) или Bearer PAT

Скрывает проект только у текущего пользователя (владелец или коллаборатор). Боты не останавливаются. Другие участники проекта не затрагиваются.

Auth: cookie / Bearer PAT + requireProjectAccess.

curl -s -X POST http://localhost:5000/api/projects/42/archive -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Проект заархивирован для текущего пользователя
401Нет авторизации
403Нет доступа к проекту
500Ошибка БД

Пример ответа 200

{
"success": true
}

POST /api/projects/{id}/duplicate

Дублировать проект

Авторизация: Cookie (connect.sid) или Bearer PAT

Копия сценария без botToken. Имя из body или «{имя} (копия)». Создаёт _content, шлёт projects-changed (created).

Ответ: безопасный ProjectListItem (без секретов).

Auth: cookie / Bearer PAT + requireProjectAccess; гость → 401.

Клиент: сайдбар / MCP db_duplicate_project.

curl -s -X POST http://localhost:5000/api/projects/42/duplicate \
-b cookies.txt -H 'Content-Type: application/json' \
-d '{"name":"Мой бот (копия)"}'

Тело запроса: DuplicateProjectRequest

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"name": "Мой бот (копия)"
}

Ответы

КодОписание
201Копия создана
401Гость без Telegram-сессии
403Нет доступа к проекту-источнику
404Проект-источник не найден
500Ошибка создания копии

Пример ответа 201

{
"id": 42,
"ownerId": 123456789,
"name": "Мой бот",
"description": "Приветственный бот",
"userDatabaseEnabled": 1,
"sortOrder": 0,
"adminIds": null,
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-11T12:00:00.000Z",
"nodeCount": 12,
"sheetsCount": 2,
"isArchivedForMe": false
}

POST /api/projects/{id}/export

Экспорт Python-кода бота (простой)

Авторизация: Cookie (connect.sid) или Bearer PAT

Генерирует код без кэша media file_id и без флагов токена. userDatabaseEnabled берётся из проекта (=== 1). Тело запроса не нужно.

Ответ: { code } — строка Python.

Auth: cookie / Bearer PAT + requireProjectAccess.

Клиент: MCP db_export_project (exportProjectInDb). Полная генерация с media — POST …/generate.

curl -s -X POST http://localhost:5000/api/projects/42/export -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Сгенерированный код
401Нет session cookie и Bearer PAT
403Нет доступа к проекту
404Проект не найден
500Ошибка генерации

Пример ответа 200

{
"code": "import asyncio\nfrom aiogram import Bot, Dispatcher\n# ...\n"
}

POST /api/projects/{id}/generate

Сгенерировать Python-код бота (полный)

Авторизация: Cookie (connect.sid) или Bearer PAT

Собирает сценарий проекта в Python. На сервере подтягиваются флаги первого токена (catchAllHandlers, protectContent, contentCache) и кэшированные Telegram file_id / обложки медиа из /uploads/.

Тело: { userDatabaseEnabled?, enableLogging? } — остальное не из body.

Auth: cookie / Bearer PAT + requireProjectAccess.

Клиент: Code panel (use-code-generator, mode=server).

Проще экспорт без media/file_ids — POST …/export.

curl -s -X POST http://localhost:5000/api/projects/42/generate -b cookies.txt \
-H 'Content-Type: application/json' \
-d '{"userDatabaseEnabled":true,"enableLogging":false}'

Тело запроса: GenerateCodeRequest

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"userDatabaseEnabled": true,
"enableLogging": false
}

Ответы

КодОписание
200Код, число строк и timestamp
401Нет session cookie и Bearer PAT
403Нет доступа к проекту
404Проект не найден
500Сбой генератора

Пример ответа 200

{
"code": "import asyncio\nfrom aiogram import Bot, Dispatcher\n# ...\n",
"lines": 2157,
"generatedAt": 1723392000000
}

GET /api/projects/{id}/launches/all

История запусков ботов проекта

Авторизация: Cookie (connect.sid) или Bearer PAT

До 100 записей bot_launch_history по всем токенам проекта: status, startedAt, stoppedAt, errorMessage (до 100 символов). Сортировка по started_at DESC.

Параметры: path id. Query tokenId UI может слать, хендлер его не фильтрует.

Auth: cookie / Bearer PAT + requireProjectAccess.

Клиент: системная таблица «Запуски» (use-system-tables).

При ошибке БД — 200 с [].

curl -s http://localhost:5000/api/projects/42/launches/all -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Массив запусков (или [] при ошибке БД)
401Нет session cookie и Bearer PAT
403Нет доступа к проекту

Пример ответа 200

[
{
"status": "stopped",
"startedAt": "2026-08-08T19:55:00.000Z",
"stoppedAt": "2026-08-08T20:10:00.000Z",
"errorMessage": null
},
{
"status": "error",
"startedAt": "2026-08-07T12:00:00.000Z",
"stoppedAt": "2026-08-07T12:01:00.000Z",
"errorMessage": "Token revoked"
}
]

GET /api/projects/{id}/logs/all

Системные логи бота проекта

Авторизация: Cookie (connect.sid) или Bearer PAT

Укороченные строки bot_logs: level (= type), message (до 150 символов content), createdAt (= timestamp). Сортировка DESC.

Query: limit (default 200), опционально tokenId.

Auth: cookie / Bearer PAT + requireProjectAccess.

Клиент: системная таблица «Логи» (use-system-tables).

При ошибке БД хендлер отвечает 200 с [] (не 500).

curl -s 'http://localhost:5000/api/projects/42/logs/all?limit=200&tokenId=7' \
-b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
limitqueryнетЛимит записей (default 200)"200"
tokenIdqueryнетОпциональный фильтр bot_logs.token_id"7"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Массив логов (или [] при ошибке БД)
401Нет session cookie и Bearer PAT
403Нет доступа к проекту

Пример ответа 200

[
{
"level": "stdout",
"message": "Bot started successfully",
"createdAt": "2026-08-08T20:00:00.000Z"
},
{
"level": "stderr",
"message": "Warning: deprecated handler",
"createdAt": "2026-08-08T19:59:50.000Z"
}
]

POST /api/projects/{id}/unarchive

Вернуть проект из личного архива

Авторизация: Cookie (connect.sid) или Bearer PAT

Убирает личную запись архива для текущего пользователя. Проект снова появляется в активных списках и переключателе.

Auth: cookie / Bearer PAT + requireProjectAccess.

curl -s -X POST http://localhost:5000/api/projects/42/unarchive -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Проект возвращён из архива для текущего пользователя
401Нет авторизации
403Нет доступа к проекту
500Ошибка БД

Пример ответа 200

{
"success": true
}

GET /api/projects/{projectId}/collaborators

Участники проекта (владелец + коллабораторы)

Авторизация: Cookie (connect.sid) или Bearer PAT

Read-only список для Files UI: владелец и приглашённые с именем и аватаркой, без дублей. Не путать с CRUD /api/bot/projects/{id}/collaborators.

Параметры: path projectId. Auth — cookie / Bearer PAT + requireProjectAccess.

Клиент: use-project-collaborators — фильтр «Сотрудник», колонка аватара.

curl -s http://localhost:5000/api/projects/42/collaborators -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
projectIdpathдаЧисловой ID проекта"42"
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Массив CollaboratorInfo (может быть пустым)
400projectId не число
401Нет session cookie и Bearer PAT
403Нет доступа к проекту
404Проект не найден
500Ошибка БД

Пример ответа 200

[
{
"userId": 123456789,
"name": "Иван Иванов",
"photoUrl": "https://t.me/i/userpic/320/example.jpg"
},
{
"userId": 987654321,
"name": "@collaborator",
"photoUrl": null
}
]

GET /api/projects/list

Лёгкий список проектов (без секретов и data)

Авторизация: Cookie (connect.sid) или Bearer PAT

Метаданные проектов владельца и коллаборатора: id, name, sortOrder, nodeCount / sheetsCount. Без data, botToken, sessionId (whitelist DTO toProjectListItem).

Query: archived=false|true (default false).

Клиент: App, home, use-project-loader, MCP db_list_projects.

Предпочтительнее тяжёлого GET /api/projects для списков в UI.

curl -s http://localhost:5000/api/projects/list -b cookies.txt

Параметры

ИмяInОбязательныйОписаниеПример
archivedqueryнетФильтр личного архива текущего пользователя"false"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Ответы

КодОписание
200Массив ProjectListItem (может быть пустым)
401Нет session cookie и Bearer PAT
500Ошибка БД / маппинга

Пример ответа 200

[
{
"id": 42,
"ownerId": 123456789,
"name": "Мой бот",
"description": "Приветственный бот",
"userDatabaseEnabled": 1,
"sortOrder": 0,
"adminIds": null,
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-11T12:00:00.000Z",
"nodeCount": 12,
"sheetsCount": 2,
"isArchivedForMe": false
}
]

PUT /api/projects/reorder

Изменить порядок проектов в списке

Авторизация: Cookie (connect.sid) или Bearer PAT

Задаёт sortOrder по порядку ID в теле. После успеха шлёт live-событие projects-changed (reordered) владельцу.

Тело: { projectIds: number[] } — непустой массив положительных целых. Каждый ID должен быть доступен текущему пользователю (владелец или collaborator); иначе 403 (защита от IDOR).

Клиент: drag-and-drop в сайдбаре, MCP db_reorder_projects.

curl -s -X PUT http://localhost:5000/api/projects/reorder -b cookies.txt \
-H 'Content-Type: application/json' \
-d '{"projectIds":[42,7,15]}'

Тело запроса: ReorderProjectsRequest

Параметры

ИмяInОбязательныйОписаниеПример
AuthorizationheaderнетAuthorization: Bearer mcp_… — PAT агента (альтернатива cookie)"Bearer mcp_xxxxxxxx"
connect.sidcookieнетSession cookie после login. Не нужна при Authorization: Bearer mcp_…"s%3Axxxx.yyyy"

Пример тела запроса

{
"projectIds": [
42,
7,
15
]
}

Ответы

КодОписание
200Порядок сохранён
400Пустой или невалидный projectIds
401Нет session cookie и Bearer PAT / нет личности
403Нет доступа хотя бы к одному projectId
500Ошибка БД при сохранении порядка

Пример ответа 200

{
"success": true
}