Для AI-агентов: markdown этой страницы — /docs-content/feedback/attachments.md индекс документации — /llms.txt

Загрузить вложение

POST /v1/feedback/attachments

Загружает изображение или документ и возвращает его идентификатор для последующей привязки к обращению или комментарию. Загрузка двухэтапная: сначала файл отправляется сюда, затем полученный id передаётся в поле attachmentIds при создании обращения или добавлении комментария.

Файл передаётся как multipart/form-data в поле file, тип определяется по расширению в имени файла. Изображения PNG, JPEG, WebP и GIF перекодируются на стороне сервера: PNG, JPEG и WebP приводятся к WebP, GIF пересобирается как GIF с сохранением анимации. Документы TXT, MD, CSV, HTML, XLSX и ZIP сохраняются без изменений. Ограничения: до 10 МБ на файл, до 24 миллионов пикселей на изображение, до 5 вложений на одно сообщение и до 25 на обращение.

Поля запроса (multipart/form-data)

Поле Тип Обяз. Описание
Полеfile Типfile Обяз.да ОписаниеФайл до 10 МБ. Изображение — расширение .png, .jpg, .jpeg, .webp или .gif. Документ — .txt, .md, .csv, .html, .htm, .xlsx или .zip

Примеры

curl — личный ключ

Terminal
curl -X POST https://vibecode.bitrix24.tech/v1/feedback/attachments \
  -H "X-Api-Key: YOUR_API_KEY" \
  -F "file=@screenshot.png"

curl — OAuth-приложение

Terminal
curl -X POST https://vibecode.bitrix24.tech/v1/feedback/attachments \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -F "file=@screenshot.png"

JavaScript — личный ключ

javascript
const form = new FormData()
form.append('file', fileInput.files[0])

const res = await fetch('https://vibecode.bitrix24.tech/v1/feedback/attachments', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
  body: form,
})
const { data } = await res.json()
// data.id передайте в attachmentIds при создании обращения или комментария

JavaScript — OAuth-приложение

javascript
const form = new FormData()
form.append('file', fileInput.files[0])

const res = await fetch('https://vibecode.bitrix24.tech/v1/feedback/attachments', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
  body: form,
})
const { data } = await res.json()

Поля ответа

Поле Тип Описание
Полеsuccess Типboolean ОписаниеВсегда true при успехе
Полеdata Типobject ОписаниеЗагруженное вложение
Полеdata.id Типstring ОписаниеUUID вложения. Передаётся в attachmentIds при создании обращения или комментария
Полеdata.kind Типstring ОписаниеКласс вложения: IMAGE или DOCUMENT
Полеdata.mime Типstring ОписаниеТип после обработки. У изображения — image/webp для PNG, JPEG и WebP, image/gif для GIF. У документа — тип по расширению, например text/plain или application/zip
Полеdata.sizeBytes Типnumber ОписаниеРазмер сохранённого файла в байтах
Полеdata.width Типnumber ОписаниеШирина в пикселях. У документа 0
Полеdata.height Типnumber ОписаниеВысота в пикселях. У документа 0
Полеdata.thumbnailUrl Типstring · null ОписаниеПуть к превью вложения. У документа null
Полеdata.originalName Типstring · null ОписаниеИмя исходного файла. null, если изображение загружено без имени файла. У документа без имени приходит attachment.<расширение>
Полеdata.expiresAt Типstring ОписаниеМомент, после которого непривязанное вложение удаляется (ISO 8601)

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

Загружено изображение screenshot.png:

JSON
{
  "success": true,
  "data": {
    "id": "15ae6203-e67c-4378-912c-9b0465360c79",
    "kind": "IMAGE",
    "mime": "image/webp",
    "sizeBytes": 560,
    "width": 640,
    "height": 360,
    "thumbnailUrl": "/v1/feedback/_orphan/15ae6203-e67c-4378-912c-9b0465360c79/thumb",
    "originalName": "screenshot.png",
    "expiresAt": "2026-10-09T09:27:47.506Z"
  }
}

Загружен документ note.txt — без превью и без размеров:

JSON
{
  "success": true,
  "data": {
    "id": "f4ec1f18-431b-49ec-85bb-bedcfce6da7d",
    "kind": "DOCUMENT",
    "mime": "text/plain",
    "sizeBytes": 16,
    "width": 0,
    "height": 0,
    "thumbnailUrl": null,
    "originalName": "note.txt",
    "expiresAt": "2026-10-09T09:25:40.292Z"
  }
}

Пример ответа при ошибке

413 — файл больше 10 МБ:

JSON
{
  "success": false,
  "error": {
    "code": "IMAGE_TOO_LARGE",
    "message": "File too large: a feedback attachment is capped at 10 MB (10485760 bytes)",
    "hint": "Shrink the image below 10 MB (lower the resolution or re-encode as JPEG or WebP) and upload it again. The cap applies to each file and is not raised by retrying."
  }
}

Ошибки

HTTP Код Описание
HTTP400 КодNO_FILE ОписаниеВ запрос не передан файл в поле file
HTTP400 КодINVALID_MIME ОписаниеРасширение имени файла не входит в список допустимых. Файл без расширения отклоняется, если его Content-Type не image/png, image/jpeg, image/webp или image/gif
HTTP400 КодMIME_MISMATCH ОписаниеСодержимое не соответствует типу: у изображения сигнатура не распознана ни как PNG, JPEG, WebP или GIF, у .zip и .xlsx нет сигнатуры ZIP-архива. Расхождение между двумя форматами изображений ошибкой не является — обработка идёт от фактического содержимого
HTTP400 КодINVALID_FILE_EMPTY ОписаниеФайл пустой
HTTP400 КодIMAGE_DECODE_FAILED ОписаниеФайл не удалось разобрать как изображение: данные повреждены, у изображения нет размеров либо обработка не уложилась в 5 секунд
HTTP400 КодIMAGE_TOO_MANY_PIXELS ОписаниеБольше 24 миллионов пикселей
HTTP400 КодTOO_MANY_FRAMES ОписаниеВ анимации больше 30 кадров
HTTP402 КодACCOUNT_FROZEN ОписаниеБаланс заморожен — загрузка вложений под заморозкой недоступна
HTTP403 КодMANAGEMENT_KEY_READ_ONLY ОписаниеКлюч управления не загружает вложения
HTTP403 КодWRITE_BLOCKED_READONLY_KEY ОписаниеКлюч только для чтения — см. права доступа
HTTP413 КодIMAGE_TOO_LARGE ОписаниеФайл больше 10 МБ. Код один для изображений и документов
HTTP401 КодMISSING_API_KEY ОписаниеНе передан заголовок X-Api-Key
HTTP429 КодRATE_LIMITED ОписаниеБольше 5 загрузок в минуту с одного ключа. Это суммарный лимит платформы; действующее значение приходит в заголовке X-RateLimit-Limit

Полный список общих ошибок API — Ошибки.

Известные особенности

Вложение живёт час до привязки. Загруженное вложение сначала не связано ни с одним обращением и удаляется после expiresAt (через час), если его id не передан в attachmentIds при создании обращения или комментария. После привязки вложение хранится вместе с обращением.

Формат после обработки. PNG, JPEG и WebP приводятся к WebP, поэтому их mime в ответе — image/webp. GIF пересобирается как GIF (image/gif) с сохранением анимации, до 30 кадров, сверх этого — 400 TOO_MANY_FRAMES. Поля sizeBytes, width и height относятся к обработанному файлу. Документ хранится байт в байт, его mime определяется расширением, а не содержимым. Архив не распаковывается, у .zip и .xlsx проверяется только сигнатура ZIP.

Класс вложения выбирается по расширению имени, а не по Content-Type. Изображение обрабатывается по фактическому содержимому, поэтому JPEG, сохранённый как image.png, принимается, а mime в ответе — результат перекодирования. Файл без расширения — например, blob, который FormData.append даёт объекту Blob, — принимается только как изображение и только когда его Content-Type — image/png, image/jpeg, image/webp или image/gif.

Операции с привязанным вложением

После привязки к обращению вложение доступно на скачивание и удаление по его id (поле data.attachments[].id в Получить обращение). Эти операции работают с бинарными данными, поэтому у них нет JSON-тела и стандартного набора из 4 примеров.

Скачать вложение

GET /v1/feedback/:id/attachments/:attId/file

Возвращает файл вложения. Доступно ключу, у которого есть доступ к обращению. Изображение приходит со своим типом — image/webp или image/gif — и поддерживает ETag и If-None-Match: условный запрос отвечает 304 Not Modified. Документ всегда приходит как application/octet-stream с заголовком Content-Disposition: attachment и исходным именем файла, без ETag.

Параметр Тип Обяз. Описание
Параметрid (path) Типstring Обяз.да ОписаниеUUID обращения
ПараметрattId (path) Типstring Обяз.да ОписаниеUUID вложения из data.attachments[].id
Terminal
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666/attachments/1209c405-1f99-4240-95e5-d5cc0cd43560/file" \
  -o attachment.webp

Если вложение не существует, недоступно ключу или не относится к указанному обращению — 404 NOT_FOUND. При замороженном балансе — 402 ACCOUNT_FROZEN.

Превью вложения

GET /v1/feedback/:id/attachments/:attId/thumb

Возвращает уменьшенное превью изображения. Content-Type — всегда image/jpeg. Параметры и правила доступа — как у скачивания файла. У документа превью нет — запрос отвечает 404 NOT_FOUND.

Terminal
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666/attachments/1209c405-1f99-4240-95e5-d5cc0cd43560/thumb" \
  -o thumb.jpg

Удалить вложение

DELETE /v1/feedback/:id/attachments/:attId

Удаляет вложение. Доступно тому, кто его загрузил. При успехе возвращается 204 No Content с пустым телом. Удалить нельзя, если другая сторона уже ответила после загрузки вложения.

Параметр Тип Обяз. Описание
Параметрid (path) Типstring Обяз.да ОписаниеUUID обращения
ПараметрattId (path) Типstring Обяз.да ОписаниеUUID вложения
Параметрreason (body) Типstring Обяз.нет ОписаниеПричина удаления, 3–500 символов
Terminal
curl -X DELETE -H "X-Api-Key: YOUR_API_KEY" \
  "https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666/attachments/1209c405-1f99-4240-95e5-d5cc0cd43560"
HTTP Код Описание
HTTP402 КодACCOUNT_FROZEN ОписаниеБаланс заморожен
HTTP403 КодDELETE_NOT_ALLOWED ОписаниеДругая сторона уже ответила после загрузки вложения
HTTP403 КодWRITE_BLOCKED_READONLY_KEY ОписаниеКлюч только для чтения — см. права доступа
HTTP400 КодREASON_INVALID Описаниеreason короче 3 или длиннее 500 символов
HTTP404 КодNOT_FOUND ОписаниеВложение не найдено, не принадлежит ключу или не относится к обращению

Смотрите также