Для AI-агентов: markdown этой страницы — /docs-content/chats/files.md индекс документации — /llms.txt
Файлы
Загружайте файлы в чат, сохраняйте их на свой Диск, расшифровывайте аудио, получайте метаданные файла и папку чата на Диске.
Скоуп: im | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Загрузить файл в чат
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.
Текст message ограничен 20 000 кодовых точек Unicode. Считается готовая строка вместе с разметкой, URL и упоминаниями, без обрезки и удаления пробелов. Например, 😀 — одна кодовая точка, а составной эмодзи может занимать несколько. Отказ приходит до любого обращения к Битрикс24.
Без format=v2 принимаются совпадающие текстовые варианты message, MESSAGE, Message и fields.message, включая другие варианты регистра. Их значения должны совпадать. Конфликт даёт 400 INVALID_PARAMS. Объект не преобразуется в текст. В режиме v2 остаётся плоское тело из разрешённых полей: варианты регистра и fields не принимаются.
Примеры
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 | Код | Описание |
|---|---|---|
| HTTP400 | КодMESSAGE_TOO_LONG |
ОписаниеГотовый текст длиннее 20 000 кодовых точек Unicode. В error.details только field: "message", used, limit: 20000, unit: "unicode-code-points". Обращений к Битрикс24 нет |
| HTTP400 | КодINVALID_CHAT_ID |
ОписаниеchatId не является положительным целым числом — проверяется до обращения в Битрикс24 |
| HTTP400 | КодMISSING_PARAMS |
ОписаниеНе переданы обязательные поля filename или content |
| HTTP400 | КодINVALID_PARAMS |
ОписаниеКонфликт текстовых вариантов в обычном режиме или объект вместо текста. Режим v2: поле тела вне filename, content, message, параметр строки запроса вне format, filename или content отсутствует или не непустая строка, message не строка. Проверяется до обращения к Битрикс24 |
| HTTP404 | КодFOLDER_NOT_FOUND |
ОписаниеПапка чата на Диске не найдена |
| HTTP500 | КодUPLOAD_FAILED |
ОписаниеЗагрузка файла не выполнена |
| HTTP422 | КодBITRIX_ERROR |
ОписаниеОшибка Битрикс24 при загрузке. В режиме v2 код портала приходит в error.b24Code — например, FILE_INVALID_CONTENT, если content не base64 |
| HTTP413 | КодPAYLOAD_TOO_LARGE |
ОписаниеТело запроса больше 40 МиБ |
| HTTP429 | КодLARGE_BODY_BACKEND_BUSY |
ОписаниеСейчас принимается слишком много больших тел — повторите через error.retryAfter секунд |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеКлючу не хватает скоупа im |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеКлюч только для чтения — загрузка изменяет чат |
| HTTP401 | КодTOKEN_MISSING |
ОписаниеКлюч не имеет настроенных токенов Битрикс24 |
Полный список общих ошибок API — Ошибки.
Известные особенности
Три шага за один вызов. В обычном режиме загрузка выполняется в три шага: получение папки чата, загрузка файла на Диск, публикация в чате. При сбое на любом шаге возвращается соответствующая ошибка. Если Битрикс24 отвечает на шаге кодом HTTP 503 или отказом по лимиту частоты запросов, шаг повторяется автоматически. Если шаг загрузки или публикации завершился ошибкой, в том числе по таймауту, файл может остаться в папке чата на Диске: ответ об ошибке не содержит его fileId, а повторный вызов загрузит ещё одну копию. HTTP 201 не подтверждает, что сообщение с файлом появилось в чате: ответ шага публикации не проверяется. Перед повтором проверьте историю чата и папку чата на Диске.
Режим v2 — один вызов. С format=v2 файл загружается и публикуется одним вызовом Битрикс24, отдельных шагов и промежуточных ошибок нет. Если чат разрешает автовступление — например, чат комментариев или коллаб, — вызов делает текущего пользователя участником.
Base64 и размер тела. Кодировка base64 увеличивает размер тела запроса примерно на 33% по сравнению с исходным файлом. Тело этого метода ограничено 40 МиБ, то есть исходный файл — чуть меньше 30 МиБ.