Для AI-агентов: markdown этой страницы — /docs-content/chats/files/upload.md индекс документации — /llms.txt
Загрузить файл в чат
POST /v1/chats/:chatId/files
Загружает файл в чат. Содержимое передаётся в base64 и публикуется в чате как сообщение.
Для скачивания содержимого в режиме v2 используйте авторизованный GET /v1/files/:fileId/download. Нужен disk или crm. Скоупа im одного недостаточно. Загрузка файла в чат требует im.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
chatId (path) |
number | да | ID чата. Получить: POST /v1/chats или поле chatId строки GET /v1/chats/recent |
format (query) |
string | нет | v2 включает режим v2. Любое другое значение игнорируется, загрузка идёт прежним способом. Повтор format не отклоняется: из format=v1&format=v2 берётся последнее значение, то есть режим v2, а format=v2&format=v1 даёт прежнюю загрузку. Форма format[]=v2 включает режим v2, если все её значения — v2 |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
filename |
string | да | Имя файла с расширением |
content |
string | да | Содержимое файла в кодировке base64 |
message |
string | нет | Текст сообщения, прикреплённый к файлу в том же сообщении |
Режим v2. format=v2 загружает файл и публикует сообщение одним вызовом. Ответ — HTTP 200 с объектом v2: file — сущность файла чата, messageId, chatId, dialogId, ключи в camelCase. Режим принимает в теле только filename, content и message, а в строке запроса — только format. Другое поле или параметр отклоняется с 400 INVALID_PARAMS до обращения к Битрикс24. Ссылок с учётными данными портала в ответе режима v2 нет: ссылки file открываются только в сессии пользователя в Битрикс24, а содержимое файла отдаёт GET /v1/files/:fileId/download.
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/chats/1001/files \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "report.pdf",
"content": "aGVsbG8=",
"message": "Отчёт за период"
}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/chats/1001/files \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"filename": "report.pdf",
"content": "aGVsbG8=",
"message": "Отчёт за период"
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/1001/files', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
filename: 'report.pdf',
content: 'aGVsbG8=',
message: 'Отчёт за период',
}),
})
const { success, data } = await res.json()
console.log('File ID:', data.fileId)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/1001/files', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
filename: 'report.pdf',
content: 'aGVsbG8=',
message: 'Отчёт за период',
}),
})
const { success, data } = await res.json()
console.log('File ID:', data.fileId)
curl — режим v2
curl -X POST "https://vibecode.bitrix24.tech/v1/chats/1001/files?format=v2" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "report.pdf",
"content": "aGVsbG8=",
"message": "Отчёт за период"
}'
Поля ответа
Обычный режим — без format=v2:
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.fileId |
number | ID загруженного файла. Используйте для GET /v1/chats/files/:fileId |
data.name |
string | Имя файла |
data.downloadUrl |
string | Адрес скачивания через API Вайбкод в обычном режиме, GET /v1/files/:id/download. Переход по нему требует скоуп disk или crm |
data.size |
string | Размер файла в байтах |
Режим v2 — format=v2:
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.file |
object|null | Сущность файла чата. null, если Битрикс24 не вернул файл после публикации |
data.file.id |
number | ID файла. Нужен для сохранения на Диск, расшифровки и скачивания через GET /v1/files/:fileId/download |
data.file.chatId |
number | ID чата |
data.file.name |
string | Имя файла |
data.file.extension |
string | Расширение в нижнем регистре |
data.file.size |
number | Размер в байтах |
data.file.type |
string | Тип файла: file, image, audio, video и другие |
data.file.date |
string | Дата загрузки (ISO 8601) |
data.file.authorId |
number | ID автора |
data.file.urlDownload |
string | Ссылка на файл в Битрикс24. Открывается только в сессии пользователя в Битрикс24 |
data.file.urlShow |
string | Ссылка на просмотр в Битрикс24, в той же сессии |
data.file.urlPreview |
string | Ссылка на превью. Пустая строка, если превью нет |
data.file.isTranscribable |
boolean | Файл можно расшифровать |
data.messageId |
number | ID опубликованного сообщения |
data.chatId |
number | ID чата |
data.dialogId |
string | ID диалога — chatN |
Кроме перечисленных, сущность файла несёт поля Битрикс24 для отображения — image, status, progress, authorName, viewerAttrs, mediaUrl, isVideoNote, isVoiceNote, duration.
Пример ответа
Обычный режим, HTTP 201:
{
"success": true,
"data": {
"fileId": 9265,
"name": "report.pdf",
"size": "24576"
}
}
Пример ответа — режим v2
{
"success": true,
"data": {
"file": {
"id": 7701,
"chatId": 1001,
"date": "2026-09-25T10:00:00+00:00",
"type": "file",
"name": "report.pdf",
"extension": "pdf",
"size": 24576,
"image": false,
"status": "done",
"progress": 100,
"authorId": 5,
"authorName": "Иван Петров",
"urlPreview": "",
"urlShow": "https://YOUR_PORTAL.bitrix24.tech/bitrix/services/main/ajax.php?action=disk.api.file.download&SITE_ID=s1&humanRE=1&fileId=7701&exact=N&fileName=report.pdf",
"urlDownload": "https://YOUR_PORTAL.bitrix24.tech/bitrix/services/main/ajax.php?action=disk.api.file.download&SITE_ID=s1&humanRE=1&fileId=7701&exact=N&fileName=report.pdf",
"isTranscribable": false,
"isVideoNote": false,
"isVoiceNote": false,
"duration": null
},
"messageId": 36890,
"chatId": 1001,
"dialogId": "chat1001"
}
}
Пример ответа при ошибке
400 — не переданы обязательные поля:
{
"success": false,
"error": {
"code": "MISSING_PARAMS",
"message": "Required: filename (string) and content (base64-encoded file content)"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_CHAT_ID |
chatId не является положительным целым числом — проверяется до обращения в Битрикс24 |
| 400 | MISSING_PARAMS |
Не переданы обязательные поля filename или content |
| 400 | INVALID_PARAMS |
Режим v2: поле тела вне filename, content, message, параметр строки запроса вне format, filename или content отсутствует или не непустая строка, message не строка. Проверяется до обращения к Битрикс24 |
| 404 | FOLDER_NOT_FOUND |
Папка чата на Диске не найдена |
| 500 | UPLOAD_FAILED |
Загрузка файла не выполнена |
| 422 | BITRIX_ERROR |
Ошибка Битрикс24 при загрузке. В режиме v2 код портала приходит в error.b24Code — например, FILE_INVALID_CONTENT, если content не base64 |
| 413 | PAYLOAD_TOO_LARGE |
Тело запроса больше 40 МиБ |
| 429 | LARGE_BODY_BACKEND_BUSY |
Сейчас принимается слишком много больших тел — повторите через error.retryAfter секунд |
| 403 | SCOPE_DENIED |
Ключу не хватает скоупа im |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ только для чтения — загрузка изменяет чат |
| 401 | TOKEN_MISSING |
Ключ не имеет настроенных токенов Битрикс24 |
Полный список общих ошибок API — Ошибки.
Известные особенности
Три шага за один вызов. В обычном режиме загрузка выполняется в три шага: получение папки чата, загрузка файла на Диск, публикация в чате. При сбое на любом шаге возвращается соответствующая ошибка. Если Битрикс24 отвечает на шаге кодом HTTP 503 или отказом по лимиту частоты запросов, шаг повторяется автоматически. Если шаг загрузки или публикации завершился ошибкой, в том числе по таймауту, файл может остаться в папке чата на Диске: ответ об ошибке не содержит его fileId, а повторный вызов загрузит ещё одну копию. HTTP 201 не подтверждает, что сообщение с файлом появилось в чате: ответ шага публикации не проверяется. Перед повтором проверьте историю чата и папку чата на Диске.
Режим v2 — один вызов. С format=v2 файл загружается и публикуется одним вызовом Битрикс24, отдельных шагов и промежуточных ошибок нет. Если чат разрешает автовступление — например, чат комментариев или коллаб, — вызов делает текущего пользователя участником.
Base64 и размер тела. Кодировка base64 увеличивает размер тела запроса примерно на 33% по сравнению с исходным файлом. Тело этого метода ограничено 40 МиБ, то есть исходный файл — чуть меньше 30 МиБ.