Для AI-агентов: markdown этой страницы — /docs-content/ai/images.md индекс документации — /llms.txt
Сгенерировать изображение
POST /v1/images/generations
Создаёт одну картинку по текстовому описанию моделью BitrixGPT 5.6 Image и возвращает её в формате base64. Платформа изображения не хранит, поэтому сохраните картинку на своей стороне.
Картинка учитывается в AI-квоте портала: в рамках квоты тарифа деньги с баланса не списываются, сверх квоты каждая картинка оплачивается с баланса портала по цене из поля pricing.perCall модели в GET /v1/models. С ключом Cowork/Code — ключом со скоупом vibe:cowork — картинка расходует квоту сиденья подписки Cowork/Code, а не AI-квоту портала. Неудачный вызов не оплачивается. Формат запроса и ответа совместим с POST /v1/images/generations из OpenAI API.
Ответ приходит в сыром OpenAI-формате.
Обёртки
{success, data}, которая используется в остальных эндпоинтах Вайбкод —/v1/deals,/v1/tasksи других, — здесь нет.Так сделано для совместимости с OpenAI SDK. Если у вас единый клиент с проверкой
if (!response.success), добавьте для AI Router исключение.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеmodel |
Типstring | Обяз.да | ОписаниеID модели генерации изображений — bitrix/bitrixgpt-5.6-image. В ответе GET /v1/models такую модель отличает capabilities.image_generation |
Полеprompt |
Типstring | Обяз.да | ОписаниеОписание картинки, от 1 до 4000 символов |
Полеsize |
Типstring | Обяз.нет | ОписаниеШирина и высота в пикселях через латинскую x. Стороны задаются независимо: 1024x1024 — квадрат, 1024x576 — широкая картинка, 576x1024 — вертикальная. Каждая сторона — от 64 до 1024 пикселей. Без этого поля сервис генерации отдаёт картинку 1024×1024 |
Полеoutput_format |
Типstring | Обяз.нет | ОписаниеФормат картинки: png, jpeg или webp |
Полеnegative_prompt |
Типstring | Обяз.нет | ОписаниеЧто не должно появиться на картинке, до 4000 символов |
Полеseed |
Типinteger | Обяз.нет | ОписаниеЗерно генерации — целое число от 0. Одинаковые prompt, size и seed дают в точности ту же картинку, поэтому удачный кадр можно сгенерировать заново |
Полеnum_inference_steps |
Типinteger | Обяз.нет | ОписаниеЧисло шагов генерации, от 1 до 8. По умолчанию 4 |
Полеresponse_format |
Типstring | Обяз.нет | ОписаниеПринимается только b64_json |
Полеn |
Типinteger | Обяз.нет | ОписаниеЧисло картинок. Принимается только 1 — цена считается за вызов |
Полеuser |
Типstring | Обяз.нет | ОписаниеИдентификатор конечного пользователя вашего приложения, до 200 символов. Передаётся модели как есть |
Поле вне этого списка отклоняется с 400 invalid_request.
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/images/generations \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bitrix/bitrixgpt-5.6-image",
"prompt": "Рыжая лиса сидит на камне у озера, акварель",
"size": "512x512",
"output_format": "jpeg"
}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/images/generations \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "bitrix/bitrixgpt-5.6-image",
"prompt": "Рыжая лиса сидит на камне у озера, акварель",
"size": "512x512",
"output_format": "jpeg"
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/images/generations', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'bitrix/bitrixgpt-5.6-image',
prompt: 'Рыжая лиса сидит на камне у озера, акварель',
size: '512x512',
output_format: 'jpeg',
}),
})
const result = await res.json()
// Адрес вида data: подходит для атрибута src тега img
const dataUrl = `data:image/jpeg;base64,${result.data[0].b64_json}`
console.log('Картинка готова:', dataUrl.slice(0, 60))
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/images/generations', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'bitrix/bitrixgpt-5.6-image',
prompt: 'Рыжая лиса сидит на камне у озера, акварель',
size: '512x512',
output_format: 'jpeg',
}),
})
const result = await res.json()
const dataUrl = `data:image/jpeg;base64,${result.data[0].b64_json}`
console.log('Картинка готова:', dataUrl.slice(0, 60))
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеcreated |
Типnumber | ОписаниеВремя создания, Unix-время в секундах |
Полеdata |
Типarray | ОписаниеСгенерированные картинки. Один вызов — одна картинка |
Полеdata[].b64_json |
Типstring | ОписаниеКартинка в base64 |
Полеoutput_format |
Типstring | ОписаниеФормат картинки. Приходит, когда его сообщает сервис генерации |
Полеsize |
Типstring | ОписаниеШирина и высота картинки в пикселях, например 512x512. Поле приходит, когда размер сообщает сервис генерации |
Пример ответа
Строка b64_json сокращена: в настоящем ответе это картинка целиком, для JPEG 512×512 — около 140 КБ.
{
"created": 1789740000,
"data": [
{ "b64_json": "/9j/4AAQSkZJRgABAQAAAQABAAD..." }
],
"output_format": "jpeg",
"size": "512x512"
}
Пример ответа при ошибке
400 invalid_request — сторона картинки больше 1024 пикселей:
{
"error": {
"message": "size: each side must be between 64 and 1024 pixels",
"type": "invalid_request_error",
"code": "invalid_request"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | Кодinvalid_request |
ОписаниеТело не прошло проверку: неизвестное поле, пустой prompt, сторона картинки вне диапазона 64–1024, n не равно 1, response_format не b64_json. Проверка идёт до квоты и генерации, списания нет |
| HTTP400 | Кодai_provider_rejected |
ОписаниеСервис генерации отклонил запрос своим ответом 400 или 422. Исходный статус приходит в поле providerStatusCode. Повторять запрос без изменений бессмысленно |
| HTTP402 | Кодinsufficient_balance |
ОписаниеКроме ключа Cowork/Code: предоплатный счёт портала ушёл за овердрафт. Проверяется до генерации |
| HTTP402 | Кодai_quota_exhausted |
ОписаниеКроме ключа Cowork/Code: месячная AI-квота портала исчерпана, а оплатить картинку сверх квоты нельзя — см. «Известные особенности» |
| HTTP402 | Кодaccount_frozen |
ОписаниеКроме ключа Cowork/Code: счёт портала заморожен за долг, а картинка выходит за AI-квоту — расход сверх квоты платит баланс. Картинка внутри квоты под заморозкой продолжает работать |
| HTTP402 | КодACCOUNT_FROZEN |
ОписаниеСчёт портала заморожен за долг. На части порталов заморозка отклоняет любой вызов генерации, в том числе внутри квоты. Так отвечает любой ключ, включая ключ Cowork/Code. Ответ приходит в конверте {success, error}, код в верхнем регистре — состав отказа |
| HTTP402 | Кодcompany_budget_exhausted |
ОписаниеКроме ключа Cowork/Code: исчерпан бюджет расхода компании, который задаёт администратор портала. Поле scope называет пробитый бюджет: USER — личный бюджет вызывающего, PORTAL — бюджет всего портала. Поле canRequest говорит, можно ли запросить увеличение. Отказ приходит только на картинках сверх квоты, которые списывают средства с баланса портала |
| HTTP402 | Кодcowork_subscription_inactive |
ОписаниеТолько ключ Cowork/Code: генерация оплачивается сиденьем подписки Cowork/Code, а действующего сиденья у владельца ключа нет |
| HTTP402 | Кодcowork_subscription_inactive |
ОписаниеТолько ключ Cowork/Code: подписка Cowork/Code приостановлена, потому что на балансе портала не хватило средств. Поле reason равно INSUFFICIENT_BALANCE, поле topupUrl — страница пополнения баланса |
| HTTP402 | Кодcowork_model_not_allowed |
ОписаниеТолько ключ Cowork/Code: модель из поля model не входит в набор моделей Cowork/Code для этого портала |
| HTTP402 | Кодcowork_quota_exhausted |
ОписаниеТолько ключ Cowork/Code: квота сиденья Cowork/Code за окно исчерпана. Поле window называет окно, resetAt — момент сброса квоты, nextTier — следующий уровень подписки. Время до сброса — в заголовке Retry-After |
| HTTP402 | Кодai_credentials_not_configured |
ОписаниеНа платформе не настроен доступ к сервису генерации |
| HTTP403 | Кодscope_missing |
ОписаниеAPI-ключу не хватает скоупа vibe:ai |
| HTTP404 | Кодnot_found |
ОписаниеГенерация изображений недоступна вашему ключу или порталу |
| HTTP404 | Кодai_model_not_found |
ОписаниеВ поле model не модель генерации изображений, доступная ключу. Доступные модели — в ответе GET /v1/models, у них есть capabilities.image_generation. Списания нет |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP429 | Кодai_image_congested |
ОписаниеСервис генерации занят другими запросами. Запрос не выполнялся, списания нет — повторите через число секунд из заголовка Retry-After |
| HTTP429 | Кодai_congested |
ОписаниеПул AI-кластера перегружен. Запрос не выполнялся, списания нет — повторите по заголовку Retry-After. Ответ несёт заголовок X-AI-Admission: shed |
| HTTP429 | Кодai_pacing_limited |
ОписаниеКроме ключа Cowork/Code: превышено суточное или недельное окно равномерного расходования квоты. Это не исчерпание квоты — повторите запрос по заголовку Retry-After. Подробнее — «Равномерное расходование» |
| HTTP429 | Кодrate_limit_exceeded |
ОписаниеПревышен лимит запросов к AI-эндпоинтам либо сервис генерации ограничил частоту запросов. Во втором случае в ответе есть поле providerStatusCode. Время до повтора — в заголовке Retry-After |
| HTTP429 | Кодai_provider_cooldown |
ОписаниеСервис генерации временно недоступен, и платформа держит паузу. Запрос не выполнялся, списания нет — повторите через число секунд из Retry-After |
| HTTP500 | Кодai_credentials_invalid |
ОписаниеУчётные данные платформы для сервиса генерации неполны: в них нет ключа доступа. Повтор запроса не поможет |
| HTTP502 | Кодai_provider_unavailable |
ОписаниеСервис генерации недоступен, ответил внутренней ошибкой или вернул ответ без картинки. Списания нет, повторите запрос |
| HTTP502 | Кодai_provider_network |
ОписаниеПлатформа не смогла соединиться с сервисом генерации. Списания нет, повторите запрос |
| HTTP503 | Кодai_provider_timeout |
ОписаниеКартинка не готова за 60 секунд. Списания нет — повторите через число секунд из Retry-After |
| HTTP503 | Кодai_cluster_not_configured |
ОписаниеСервис генерации изображений не подключён к платформе |
Полный список общих ошибок API — Ошибки.
Известные особенности
Модель ищется по возможности, а не по имени. Модель генерации изображений приходит в общем списке GET /v1/models вместе с чат-моделями и отличается от них полем capabilities.image_generation. Если такой модели в списке нет, генерация изображений вашему ключу или порталу недоступна, и эндпоинт ответит 404. Вшивать идентификатор модели в код не нужно.
Только текстовое описание. Картинку на вход эндпоинт не принимает — поля для изображения-образца в теле запроса нет. Что должно быть на картинке, задаёт prompt, чего на ней быть не должно — negative_prompt.
В рамках квоты — без списаний, сверх квоты — по цене за картинку. С ключом без скоупа vibe:cowork каждая успешная картинка расходует месячную AI-квоту портала. Если расход укладывается в квоту тарифа, деньги с баланса не списываются. Сверх квоты картинка оплачивается с баланса портала по цене из pricing.perCall. Когда квота исчерпана, а оплата сверх неё невозможна, эндпоинт отвечает 402 ai_quota_exhausted. Поле reason различает три случая: breaker — сработал часовой предохранитель расходов сверх квоты, wallet_empty — на балансе портала нет средств, wallet_off — расход сверх квоты для портала недоступен. Поле resetAt — момент, когда запросы снова начнут проходить, для wallet_off оно может отсутствовать. Когда у портала нет оплаченного доступа к AI-моделям, ответ с reason: "wallet_off" дополнительно несёт details.learnMoreUrl — страницу с описанием подписки или тарифа Битрикс24, в которые входит AI, а поле message называет нужный продукт. При других причинах wallet_off поля details.learnMoreUrl нет. Ключ Cowork/Code этим путём не идёт: картинка расходует квоту сиденья, а когда она исчерпана, ответ — 402 cowork_quota_exhausted. Списания с баланса портала по pricing.perCall и отказа ai_quota_exhausted на этом пути нет.
Одновременных запросов ограниченное число. Сервис генерации обрабатывает ограниченное число запросов одновременно, остальные ждут своей очереди. Когда очередь заполнена, запрос сразу получает 429 ai_image_congested и в генерацию не попадает. Картинка, которая не готова за 60 секунд, заканчивается ответом 503 ai_provider_timeout. Чем больше num_inference_steps и размер картинки, тем дольше ждёт и ваш запрос, и очередь за ним.
Картинки не хранятся. Изображение приходит только в ответе, в поле data[].b64_json: ссылок на файлы платформа не выдаёт, повторно скачать картинку с платформы нельзя. Сохраните её сразу после ответа.