Для AI-агентов: markdown этой страницы — /docs-content/entities/catalog-products/images-create.md индекс документации — /llms.txt
Загрузить изображение товара
POST /v1/catalog-products/:productId/images
Загружает изображение товара каталога из содержимого в base64: детальную картинку, картинку анонса или картинку галереи. Тело запроса — плоский JSON.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
productId (path) |
number | да | ID товара. Список: GET /v1/catalog-products. Подходит и ID головного товара из GET /v1/catalog-skus, вариации из GET /v1/catalog-offers или услуги из GET /v1/catalog-services |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
type |
string | да | Вид изображения: DETAIL_PICTURE — детальная картинка, PREVIEW_PICTURE — картинка анонса, MORE_PHOTO — картинка галереи. Другое значение отклоняется до обращения к Битрикс24 |
fileName |
string | да | Имя файла с расширением, например photo.png. Пустое имя не принимается |
fileContent |
string | да | Содержимое файла в base64 |
Других полей тело не принимает: лишнее поле, например description, возвращает 400 INVALID_PARAMS. Предел тела запроса — 40 MiB.
Примеры
curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/catalog-products/7257/images" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "MORE_PHOTO",
"fileName": "photo.png",
"fileContent": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScL/nwAAAABJRU5ErkJggg=="
}'
curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/catalog-products/7257/images" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "MORE_PHOTO",
"fileName": "photo.png",
"fileContent": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScL/nwAAAABJRU5ErkJggg=="
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-products/7257/images', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'MORE_PHOTO',
fileName: 'photo.png',
fileContent: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScL/nwAAAABJRU5ErkJggg==',
}),
})
const { success, data } = await res.json()
console.log('ID изображения:', data.id)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-products/7257/images', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'MORE_PHOTO',
fileName: 'photo.png',
fileContent: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScL/nwAAAABJRU5ErkJggg==',
}),
})
const { success, data } = await res.json()
Поля ответа
Успешная загрузка отвечает HTTP-статусом 201 Created.
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
object | Загруженное изображение |
data.id |
number | ID изображения |
data.productId |
number | ID товара, которому принадлежит изображение |
data.type |
string | Вид изображения: DETAIL_PICTURE — детальная картинка, PREVIEW_PICTURE — картинка анонса, MORE_PHOTO — картинка галереи |
data.name |
string | Имя файла |
data.createTime |
string | null | Время создания в формате ISO 8601 со смещением часового пояса, либо null |
data.detailUrl |
string | Адрес изображения — путь от адреса портала, начинающийся с /, или абсолютный http/https URL. Без сессии портала адрес может быть недоступен. Это недоверенные данные — правила в разделе Изображения товара |
Пример ответа
{
"success": true,
"data": {
"id": 38993,
"productId": 7257,
"type": "MORE_PHOTO",
"name": "photo.png",
"createTime": "2026-10-08T23:59:02+03:00",
"detailUrl": "https://cdn-ru.bitrix24.ru/b00000000/iblock/2ba/2bae996b883855a3997fde84f01c7aee/photo.png"
}
}
Пример ответа при ошибке
400 — неизвестный type, пустое имя файла, содержимое не в base64 или лишнее поле в теле:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "type, fileName and base64 fileContent are required"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_PARAMS |
Тело не прошло проверку: неизвестный type, пустое или отсутствующее fileName, fileContent не в base64 или в теле есть другое поле |
| 400 | INVALID_PARAMS |
productId не является каноническим положительным целым числом, например abc, 0 или значение за пределами безопасного диапазона JavaScript |
| 404 | ENTITY_NOT_FOUND |
Товара с таким productId нет |
| 413 | PAYLOAD_TOO_LARGE |
Тело запроса больше 40 MiB |
| 422 | BITRIX_ERROR |
Битрикс24 не принял файл, например имя с расширением не картинки — note.txt |
| 422 | BITRIX_ERROR |
Новое изображение не сохранено: при замене DETAIL_PICTURE или PREVIEW_PICTURE осталась прежняя картинка. Сообщение — Product image was not saved |
| 502 | BITRIX_UNAVAILABLE |
Битрикс24 недоступен или вернул ответ, не прошедший проверку формы и безопасности |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Ключ неверен |
| 401 | TOKEN_MISSING |
К ключу не привязаны токены Битрикс24 |
| 403 | SCOPE_DENIED |
У ключа нет скоупа catalog |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ работает в режиме только чтения. Для загрузки и удаления нужен ключ с правом записи |
| 403 | BITRIX_ACCESS_DENIED |
Битрикс24 запретил доступ к каталогу |
| 429 | RATE_LIMITED |
Превышен лимит запросов. Повторите после срока из заголовка Retry-After |
| 429 | OPERATION_TIME_LIMIT |
Исчерпан лимит времени операций Битрикс24. Повторите после срока из заголовка Retry-After |
| 503 | BITRIX_TIMEOUT |
Битрикс24 не ответил вовремя, и исход записи неизвестен. Перед повтором проверьте список изображений товара |
Полный список общих ошибок API — Ошибки.
Известные особенности
- Замена детальной картинки и картинки анонса. У товара одна детальная картинка и одна картинка анонса. Повторная загрузка
DETAIL_PICTUREилиPREVIEW_PICTUREзаменяет прежнюю: в ответе новыйid, а прежнийidбольше не читается.MORE_PHOTOдобавляет картинку в галерею. - Содержимое файла не проверяется. Текст с именем
photo.pngсохраняется как картинка. Проверяйте, чтоfileContent— изображение, до загрузки. - Одинаковое содержимое — один файл. Повторная загрузка того же содержимого создаёт изображение с новым
id, ноnameиdetailUrlу него от ранее загруженного файла, даже если вfileNameпередано другое имя.