Для 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 с сохранением анимации. Ограничения: до 10 МБ и до 24 миллионов пикселей на файл, до 5 вложений на одно сообщение и до 25 на обращение.
Поля запроса (multipart/form-data)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
file |
file | да | Изображение PNG, JPEG, WebP или GIF, до 10 МБ |
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/feedback/attachments \
-H "X-Api-Key: YOUR_API_KEY" \
-F "file=@screenshot.png"
curl — OAuth-приложение
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 — личный ключ
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-приложение
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.id |
string | UUID вложения. Передаётся в attachmentIds при создании обращения или комментария |
data.mime |
string | Тип после обработки: image/webp для PNG, JPEG и WebP, image/gif для GIF |
data.sizeBytes |
number | Размер обработанного файла в байтах |
data.width |
number | Ширина в пикселях |
data.height |
number | Высота в пикселях |
data.thumbnailUrl |
string | Путь к превью вложения |
data.originalName |
string | Имя исходного файла |
data.expiresAt |
string | Момент, после которого непривязанное вложение удаляется (ISO 8601) |
Пример ответа
{
"success": true,
"data": {
"id": "1209c405-1f99-4240-95e5-d5cc0cd43560",
"mime": "image/webp",
"sizeBytes": 20480,
"width": 1280,
"height": 720,
"thumbnailUrl": "/v1/feedback/_orphan/1209c405-1f99-4240-95e5-d5cc0cd43560/thumb",
"originalName": "screenshot.png",
"expiresAt": "2026-04-19T11:30:00.000Z"
}
}
Пример ответа при ошибке
413 — файл больше 10 МБ:
{
"success": false,
"error": {
"code": "IMAGE_TOO_LARGE",
"message": "File too large"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | NO_FILE |
В запрос не передан файл в поле file |
| 400 | INVALID_MIME |
Формат не входит в PNG, JPEG, WebP, GIF |
| 400 | IMAGE_TOO_MANY_PIXELS |
Больше 24 миллионов пикселей |
| 413 | IMAGE_TOO_LARGE |
Файл больше 10 МБ |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 429 | RATE_LIMITED |
Больше 5 загрузок в минуту с одного ключа |
Полный список общих ошибок API — Ошибки.
Известные особенности
Вложение живёт час до привязки. Загруженное вложение сначала не связано ни с одним обращением и удаляется после expiresAt (через час), если его id не передан в attachmentIds при создании обращения или комментария. После привязки вложение хранится вместе с обращением.
Формат после обработки. PNG, JPEG и WebP приводятся к WebP, поэтому их mime в ответе — image/webp. GIF пересобирается как GIF (image/gif) с сохранением анимации, до 30 кадров. Поля sizeBytes, width и height относятся к обработанному файлу.