Генерация изображений (OpenAI Images API)
Синхронная генерация изображений в формате OpenAI Images API: параметры, ожидание до 300 секунд, оплата только завершённого изображения, настройка Cherry Studio. Редактирование выполняется через асинхронный /api/media/generate.
POST /v1/images/generations генерирует изображения в формате OpenAI Images API: вы отправляете запрос и получаете изображение в том же ответе. Это адаптер поверх той же очереди, что и POST /api/media/generate: модели, цена, проверка баланса, переключение на другого поставщика и списание средств общие, поэтому одна и та же генерация стоит одинаково по обоим адресам.
curl https://getvibeapi.com/v1/images/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"nano-banana","prompt":"a red bicycle on a bridge","n":1,"size":"1024x1024"}'Ответ (HTTP 200):
{
"created": 1792706400,
"data": [{ "url": "https://getvibeapi.com/media/r/…/0.png" }]
}Передайте ключ как Authorization: Bearer sk-pv-… или x-api-key. Официальный OpenAI SDK работает без изменений:
from openai import OpenAI
client = OpenAI(base_url="https://getvibeapi.com/v1", api_key="sk-pv-...", timeout=600)
image = client.images.generate(model="nano-banana", prompt="a red bicycle on a bridge", size="1024x1024")
print(image.data[0].url)Параметры тела
| Параметр | Тип | Описание |
|---|---|---|
modelreq. | string | Идентификатор модели изображений из /api/media-catalog (kind: "image"), например nano-banana, gpt-image-2, flux-2. Также принимаются идентификатор с префиксом поставщика (google/nano-banana) и закреплённый вариант (gpt-image-2:network). Модели видео и аудио здесь отклоняются с кодом 400. |
promptreq. | string | Описание изображения. |
n | number | Только 1: каждая генерация — отдельная задача со своей ценой. Чтобы получить несколько изображений, отправьте несколько запросов. |
size | string | Интерпретируется как соотношение сторон: 1024x1024 → 1:1, 1792x1024 → 16:9, 1024x1792 → 9:16, 1536x1024 → 3:2, 1024x1536 → 2:3; другие значения точно приводятся к соотношению (1920x1080 → 16:9). Соотношение, которое модель не поддерживает, отклоняется с указанием списка поддерживаемых размеров — подстановка ближайшего варианта не выполняется. Значение "auto" или отсутствие поля означает значение по умолчанию для модели. |
quality | string | Только для моделей, у которых в каталоге есть параметр quality; неподдерживаемое значение отклоняется. Значение "auto" исключает этот параметр из запроса. |
response_format | "url" | "b64_json" | по умолчанию — URL. b64_json возвращает файл в теле ответа (до 20 MB). |
user | string | Принято и проигнорировано. |
Неизвестные поля, а также background, style, output_format, output_compression, moderation, stream и partial_images отклоняются с кодом 400 по имени, а не молча удаляются — иначе вам пришлось бы платить за изображение, которое вы не запрашивали. Модели, которым требуется исходное изображение (редактирование, увеличение разрешения, дорисовка), не работают по этому адресу, поскольку передать сюда изображение невозможно; используйте POST /api/media/generate.
Ожидание и тайм-аут
Запрос остаётся открытым до завершения задачи, но не более 300 секунд. Медианное время составляет от 15 до 85 секунд в зависимости от модели; отдельные генерации на самых медленных моделях занимают 3–4 минуты. Установите тайм-аут клиента не менее 300 секунд (значение по умолчанию в OpenAI SDK — 600).
- Каждый ответ, включая ошибки после создания задачи, содержит заголовок
x-pv-media-job-idс идентификатором задачи. - Если задача не завершилась в течение 300 секунд, ответом будет
504сcause: image_generation_timeoutи идентификатором задачи в сообщении. Генерация продолжается: получите результат изGET /api/media/jobs/{id}. - Если соединение разрывается (тайм-аут приложения, сеть), выполнение задачи всё равно продолжается до завершения.
GET /v1/images/generations?limit=20(до 100) перечисляет недавние изображения этого ключа с их статусами, ссылками и списанной суммойcost_rub.
Оплата
При отправке средства не списываются. Оплачивается только успешно завершённая генерация — по той же цене, что и в /api/media-catalog и в котировке POST /api/media/price. При неудачной генерации возвращается 502 с сообщением "Nothing was charged", и средства не списываются. Списанная сумма возвращается в заголовке x-pv-cost-rub. Если баланса недостаточно для генерации, ответ 402 возвращается до запуска какой-либо задачи.
data[].url ведут на наш домен и действуют в течение 7 дней после завершения генерации, после чего отвечают 410 media_result_expired. Сохраните файлы у себя.Ошибки
| Параметр | Тип | Описание |
|---|---|---|
400 | invalid_request_error | Invalid body: unknown_parameter, unsupported_parameter, unsupported_n, unsupported_size, unsupported_quality, unsupported_model_kind. Fix the request. |
401 / 403 | authentication_error / permission_error | Недействительный ключ или IP-адрес отправителя отсутствует в списке разрешённых для ключа. |
402 | insufficient_quota | Недостаточно средств для этой генерации. Задача не создана. |
404 | not_found_error | model_not_found — такой модели для работы с изображениями нет. См. /api/media-catalog. |
429 | rate_limit_error | Лимит запросов для медиаданных; повторите попытку после Retry-After. |
502 | upstream_error | Генерация завершилась ошибкой. Средства не списаны; можно повторить попытку. |
503 | upstream_error | В данный момент модель недоступна у всех поставщиков. Задача не создана; повторите попытку позже или выберите другую модель. |
504 | upstream_error | image_generation_timeout — задача всё ещё выполняется; получите её по идентификатору из x-pv-media-job-id. |
Настольные приложения (Cherry Studio и другие)
Подойдёт любое приложение, которое умеет генерировать изображения через совместимого с OpenAI провайдера. В качестве примера используем Cherry Studio:
- Добавьте провайдера типа OpenAI с адресом API
https://getvibeapi.com(приложение само добавляет/v1) и вашим ключомsk-pv-…. - Добавьте модель вручную, используя идентификатор из
https://getvibeapi.com/api/media-catalog(только записи сkind: "image"), напримерnano-bananaилиgpt-image-2. В списке моделей приложения отображаются текстовые модели; медиамоделей в нём нет. - Запускайте генерацию из функции рисования / генерации изображений приложения, а не из обычного чата. Чат отправляет запрос в
/v1/chat/completions, где медиамодели не работают. - Если приложение позволяет задать тайм-аут запроса, установите его не менее 300 секунд. Изображение, от генерации которого приложение отказалось из-за тайм-аута, будет указано в
GET /v1/images/generations. Повторная попытка из приложения создаёт новую генерацию, которая оплачивается отдельно.
Режим, который редактирует загруженное изображение в таких приложениях, называется /v1/images/edits и также поддерживается (см. ниже).
Editing: /v1/images/edits
POST /v1/images/edits принимает запрос OpenAI SDK (multipart/form-data: файл в image или несколько файлов в image[] с prompt, model, size, quality и response_format) или JSON с images: [{"image_url": "…"}]. Он работает так же, как описанная выше генерация: тот же ответ, то же время ожидания, тот же x-pv-media-job-id и та же цена, что и у POST /api/media/generate с исходным изображением; неудачное редактирование не оплачивается. Режим редактирования модели выбирается из каталога. Запрос без mask отклоняется с ошибкой 400 unsupported_parameter, а модель, которая не принимает исходное изображение, — с model_cannot_edit. Для редактирования с маской используйте POST /api/media/generate и опрашивайте GET /api/media/jobs/{id} — см. руководство по асинхронной генерации. Видео не генерируется синхронно: /v1/video/generations и /v1/videos также возвращают 410 (подробнее).
Идентификатор Nano Banana Pro
В каталоге и новом коде используйте nano-banana-pro. Для миграции существующих асинхронных клиентов значение gemini-3-pro-image по-прежнему принимается только в поле model запроса /api/media/generate и разрешается в ту же публичную модель. Оно не публикуется в discovery или ценах.