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

media

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

DELETE /api/media/{id}​

Удалить медиафайл

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

requireMediaOwnership. Клиент: use-media.

curl -s -X DELETE http://localhost:5000/api/media/10 -b cookies.txt

Operation ID: delete_api_media_id_19c3cd63827c601d

Параметры​

ИмяInОбязательныйОписаниеПример
idpathдаID записи media_files"10"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Удалён
401Не авторизован
403Чужой файл

GET /api/media/{id}​

Медиафайл по ID

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

requireMediaOwnership. UI почти не вызывает (список через project).

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

Operation ID: get_api_media_id_21beeb57c73216ab

Параметры​

ИмяInОбязательныйОписаниеПример
idpathдаID записи media_files"10"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Один файл
401Не авторизован
403Чужой файл
404Не найден

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

{
"id": 10,
"projectId": 42,
"fileName": "photo.jpg",
"fileType": "photo",
"fileSize": 12345,
"mimeType": "image/jpeg",
"url": "/uploads/42/2026-08-08/photo.jpg",
"description": null,
"tags": [],
"usageCount": 0,
"storageBackend": "local",
"createdAt": "2026-08-08T12:00:00.000Z"
}

PUT /api/media/{id}​

Обновить метаданные медиа

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

requireMediaOwnership. Клиент: use-media / thumbnail.

curl -s -X PUT http://localhost:5000/api/media/10 -b cookies.txt \
-H 'Content-Type: application/json' -d '{"description":"cover"}'

Operation ID: put_api_media_id_770b51618f2aeccc

Параметры​

ИмяInОбязательныйОписаниеПример
idpathдаID записи media_files"10"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Обновлённый файл
401Не авторизован
403Чужой файл

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

{
"id": 10,
"projectId": 42,
"fileName": "photo.jpg",
"fileType": "photo",
"fileSize": 12345,
"mimeType": "image/jpeg",
"url": "/uploads/42/2026-08-08/photo.jpg",
"description": null,
"tags": [],
"usageCount": 0,
"storageBackend": "local",
"createdAt": "2026-08-08T12:00:00.000Z"
}

POST /api/media/{id}/file-id​

Upsert Telegram file_id для токена

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

requireMediaFileOwnership. Для бот/integration; UI не вызывает.

curl -s -X POST http://localhost:5000/api/media/10/file-id -b cookies.txt \
-H 'Content-Type: application/json' -d '{"tokenId":7,"fileId":"AgAC…"}'

Operation ID: post_api_media_id_file_id_e4c37d8f2dbca16d

Параметры​

ИмяInОбязательныйОписаниеПример
idpathдаID записи media_files"10"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200file_id сохранён
401Не авторизован
403Нет доступа

POST /api/media/{id}/use​

Инкремент usageCount

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

requireMediaOwnership. Клиент: use-media.

curl -s -X POST http://localhost:5000/api/media/10/use -b cookies.txt

Operation ID: post_api_media_id_use_d1b6a2dd2dece99e

Параметры​

ИмяInОбязательныйОписаниеПример
idpathдаID записи media_files"10"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Счётчик обновлён
401Не авторизован
403Чужой файл

POST /api/media/check-url​

Проверить внешний URL медиа

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

Probe доступности/типа URL. SSRF ограничен validateExternalUrl. Только global auth (без projectId). Клиент: url-downloader.

curl -s -X POST http://localhost:5000/api/media/check-url -b cookies.txt \
-H 'Content-Type: application/json' -d '{"url":"https://example.com/a.jpg"}'

Operation ID: post_api_media_check_url_fc6a6ae4ef637a12

Параметры​

ИмяInОбязательныйОписаниеПример
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

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

{
"url": "https://example.com/a.jpg"
}

Ответы​

КодОписание
200Результат проверки
401Не авторизован

POST /api/media/download-url/{projectId}​

Скачать один URL в медиа проекта

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

requireProjectAccess + SSRF-check. Клиент: url-downloader.

curl -s -X POST http://localhost:5000/api/media/download-url/42 -b cookies.txt \
-H 'Content-Type: application/json' -d '{"url":"https://example.com/a.jpg"}'

Operation ID: post_api_media_download_url_projectId_33fdeb53ce180018

Параметры​

ИмяInОбязательныйОписаниеПример
projectIdpathдаID проекта bot_projects"42"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

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

{
"url": "https://example.com/a.jpg"
}

Ответы​

КодОписание
200Созданный media_files
401Не авторизован
403Нет доступа

POST /api/media/download-urls/{projectId}​

Скачать несколько URL в медиа проекта

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

Batch download. requireProjectAccess. Клиент: url-downloader.

curl -s -X POST http://localhost:5000/api/media/download-urls/42 -b cookies.txt \
-H 'Content-Type: application/json' -d '{"urls":["https://example.com/a.jpg"]}'

Operation ID: post_api_media_download_urls_projectId_d90993814e4c3b1f

Параметры​

ИмяInОбязательныйОписаниеПример
projectIdpathдаID проекта bot_projects"42"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

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

{
"urls": [
"https://example.com/a.jpg"
]
}

Ответы​

КодОписание
200Результаты batch
401Не авторизован
403Нет доступа

GET /api/media/project/{projectId}​

Список медиафайлов проекта

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

requireProjectAccess. Клиент: use-media.

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

Operation ID: get_api_media_project_projectId_6181a4bfb0ade2ef

Параметры​

ИмяInОбязательныйОписаниеПример
projectIdpathдаID проекта bot_projects"42"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Массив media_files (+ метаданные токенов при наличии)
401Не авторизован
403Нет доступа к проекту

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

[
{
"id": 10,
"projectId": 42,
"fileName": "photo.jpg",
"fileType": "photo",
"fileSize": 12345,
"mimeType": "image/jpeg",
"url": "/uploads/42/2026-08-08/photo.jpg",
"description": null,
"tags": [],
"usageCount": 0,
"storageBackend": "local",
"createdAt": "2026-08-08T12:00:00.000Z"
}
]

GET /api/media/s3-proxy/{configId}/*​

Прочитать зарегистрированный приватный объект S3

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

Звёздочка — остаток пути ключа Express. Требуется запись media_files и доступ к её проекту. Content-Type определяется расширением, Cache-Control:private.

Operation ID: get_api_media_s3_proxy_configId_7050280ebaf884d9

Параметры​

ИмяInОбязательныйОписаниеПример
configIdpathда——

Ответы​

КодОписание
200Поток байтов объекта
401Нет авторизации
403Нет доступа к проекту файла
404Объект, ключ, хранилище или запись отсутствует; JSON либо пустое тело
502Хранилище не прочитано; пустое тело ответа

GET /api/media/search/{projectId}​

Поиск медиафайлов проекта

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

Query q — строка поиска. requireProjectAccess. Клиент: use-media.

curl -s 'http://localhost:5000/api/media/search/42?q=photo' -b cookies.txt

Operation ID: get_api_media_search_projectId_b04f9303dc72dfd1

Параметры​

ИмяInОбязательныйОписаниеПример
projectIdpathдаID проекта bot_projects"42"
qqueryнетСтрока поиска по имени/тегам"photo"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Найденные файлы
401Не авторизован
403Нет доступа

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

[
{
"id": 10,
"projectId": 42,
"fileName": "photo.jpg",
"fileType": "photo",
"fileSize": 12345,
"mimeType": "image/jpeg",
"url": "/uploads/42/2026-08-08/photo.jpg",
"description": null,
"tags": [],
"usageCount": 0,
"storageBackend": "local",
"createdAt": "2026-08-08T12:00:00.000Z"
}
]

POST /api/media/upload-from-url​

Сохранить картинку по URL/base64 в uploads/

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

Пишет файл в uploads/{projectId}/…. Доступ: hasProjectAccess(projectId) (раньше не проверялся — IDOR закрыт).

UI сейчас почти не вызывает.

curl -s -X POST http://localhost:5000/api/media/upload-from-url -b cookies.txt \
-H 'Content-Type: application/json' \
-d '{"projectId":42,"nodeName":"start","imageUrl":"https://example.com/a.jpg"}'

Operation ID: post_api_media_upload_from_url_71d824bbd7a627c3

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

Параметры​

ИмяInОбязательныйОписаниеПример
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

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

{
"projectId": 42,
"nodeName": "start",
"imageUrl": "https://example.com/a.jpg"
}

Ответы​

КодОписание
200Файл сохранён
400Нет projectId/nodeName
401Не авторизован
403Нет доступа к проекту

POST /api/media/upload-multiple/{projectId}​

Загрузить до 20 файлов (multipart)

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

multipart field files (≤20). requireProjectAccess.

curl -s -X POST http://localhost:5000/api/media/upload-multiple/42 -b cookies.txt -F files=@a.jpg -F files=@b.jpg

Operation ID: post_api_media_upload_multiple_projectId_c5fb62f82cb55856

Параметры​

ИмяInОбязательныйОписаниеПример
projectIdpathдаID проекта bot_projects"42"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Массив созданных файлов
401Не авторизован
403Нет доступа

POST /api/media/upload/{projectId}​

Загрузить один файл (multipart)

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

multipart field file. requireProjectAccess. Клиент: use-media.

curl -s -X POST http://localhost:5000/api/media/upload/42 -b cookies.txt -F file=@photo.jpg

Operation ID: post_api_media_upload_projectId_791f7ee37609ac2a

Параметры​

ИмяInОбязательныйОписаниеПример
projectIdpathдаID проекта bot_projects"42"
connect.sidcookieнетSession cookie Studio. Не нужна при Bearer PAT. Без обоих — 401."s%3Axxxx.yyyy"

Ответы​

КодОписание
200Созданный media_files
401Не авторизован
403Нет доступа

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

{
"id": 10,
"projectId": 42,
"fileName": "photo.jpg",
"fileType": "photo",
"fileSize": 12345,
"mimeType": "image/jpeg",
"url": "/uploads/42/2026-08-08/photo.jpg",
"description": null,
"tags": [],
"usageCount": 0,
"storageBackend": "local",
"createdAt": "2026-08-08T12:00:00.000Z"
}