Tema
Idioma

Generación de imágenes (OpenAI Images API)

Generación síncrona de imágenes en el formato de OpenAI Images API: parámetros, una espera de hasta 300 segundos, facturación solo por una imagen terminada y configuración de Cherry Studio. La edición se realiza mediante /api/media/generate de forma asíncrona.

POST /v1/images/generations genera imágenes en el formato de OpenAI Images API: envías una solicitud y recibes la imagen en la misma respuesta. Es un adaptador sobre la misma cola que POST /api/media/generate: los modelos, el precio, la comprobación del saldo, la conmutación por error del proveedor y el cargo son compartidos, por lo que la misma generación cuesta lo mismo en ambas direcciones.

POSThttps://getvibeapi.com/v1/images/generations
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"}'

Respuesta (HTTP 200):

{
  "created": 1792706400,
  "data": [{ "url": "https://getvibeapi.com/media/r/…/0.png" }]
}

Pasa la clave como Authorization: Bearer sk-pv-… o x-api-key. El SDK oficial de OpenAI funciona tal cual:

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)

Parámetros del cuerpo

ParámetroTipoDescripción
modelreq.stringUn id de modelo de imágenes de /api/media-catalog (kind: "image"), por ejemplo, nano-banana, gpt-image-2, flux-2. También se aceptan un id con prefijo del proveedor (google/nano-banana) y una variante fijada (gpt-image-2:network). Los modelos de video y audio se rechazan aquí con 400.
promptreq.stringDescripción de la imagen.
nnumberSolo 1: cada generación es un trabajo independiente con su propio precio. Para obtener varias imágenes, envía varias solicitudes.
sizestringSe respeta como una relación de aspecto: 1024x1024 → 1:1, 1792x1024 → 16:9, 1024x1792 → 9:16, 1536x1024 → 3:2, 1024x1536 → 2:3; otros valores se reducen exactamente (1920x1080 → 16:9). Si el modelo no ofrece una relación, se rechaza con la lista de tamaños compatibles; no se sustituye por la coincidencia más cercana. "auto" o la ausencia del campo significa que se usa el valor predeterminado del modelo.
qualitystringSolo para modelos con un parámetro de calidad en el catálogo; un valor no compatible se rechaza. "auto" lo omite.
response_format"url" | "b64_json"url de forma predeterminada. b64_json devuelve el archivo en el cuerpo de la respuesta (hasta 20 MB).
userstringAceptado e ignorado.

Los campos desconocidos, así como background, style, output_format, output_compression, moderation, stream y partial_images, se rechazan con 400 por nombre en lugar de descartarse silenciosamente; de lo contrario, pagarías por una imagen que no solicitaste. Los modelos que necesitan una imagen de origen (edición, ampliación, relleno) no funcionan en esta dirección, porque aquí no hay forma de pasar una imagen; usa POST /api/media/generate.

Espera y tiempo de espera

La solicitud permanece abierta hasta que termina el trabajo, durante un máximo de 300 segundos. El tiempo mediano es de 15 a 85 segundos, según el modelo; las generaciones individuales en los modelos más lentos tardan entre 3 y 4 minutos. Configura el tiempo de espera de tu cliente en al menos 300 segundos (el valor predeterminado del SDK de OpenAI es 600).

  • Cada respuesta, incluidos los errores posteriores a la creación del trabajo, lleva el encabezado x-pv-media-job-id con el id del trabajo.
  • Si el trabajo no terminó en 300 segundos, la respuesta es 504 con cause: image_generation_timeout y el id del trabajo en el mensaje. La generación continúa ejecutándose: obtén el resultado desde GET /api/media/jobs/{id}.
  • Si la conexión se interrumpe (tiempo de espera de la aplicación o de la red), el trabajo se completa de todos modos. GET /v1/images/generations?limit=20 (hasta 100) muestra las imágenes recientes de esta clave con su estado, enlaces y el importe cobrado cost_rub.

Facturación

No se cobra nada al enviar la solicitud. Solo se cobra una generación completada correctamente, al mismo precio que en /api/media-catalog y en la cotización de POST /api/media/price. Una generación fallida devuelve 502 con el mensaje "Nothing was charged" y no cuesta nada. El importe cobrado se devuelve en el encabezado x-pv-cost-rub. Si el saldo no puede cubrir la generación, la respuesta es 402 antes de que se inicie cualquier trabajo.

Los enlaces de data[].url apuntan a nuestro dominio y están disponibles durante 7 días después de que finaliza la generación; luego responden 410 media_result_expired. Guarda los archivos de tu lado.

Errores

ParámetroTipoDescripción
400invalid_request_errorInvalid body: unknown_parameter, unsupported_parameter, unsupported_n, unsupported_size, unsupported_quality, unsupported_model_kind. Fix the request.
401 / 403authentication_error / permission_errorClave no válida o la IP desde la que se realiza la llamada no está en la lista de permitidos de la clave.
402insufficient_quotaSaldo insuficiente para esta generación. No se creó ningún trabajo.
404not_found_errormodel_not_found: no existe tal modelo de imagen. Consulta /api/media-catalog.
429rate_limit_errorLímite de solicitudes multimedia; vuelve a intentarlo después de Retry-After.
502upstream_errorLa generación falló. No se cobró nada; puedes volver a intentarlo.
503upstream_errorEl modelo no está disponible con ningún proveedor en este momento. No se creó ningún trabajo; vuelve a intentarlo más tarde o elige otro modelo.
504upstream_errorimage_generation_timeout: el trabajo aún está en ejecución; recupéralo mediante el id indicado en x-pv-media-job-id.

Aplicaciones de escritorio (Cherry Studio y otras)

Funciona cualquier aplicación que pueda generar imágenes mediante un proveedor compatible con OpenAI. Usaremos Cherry Studio como ejemplo:

  1. Agrega un proveedor de tipo OpenAI con la dirección de API https://getvibeapi.com (la aplicación agrega /v1 por sí misma) y tu clave sk-pv-….
  2. Agrega el modelo manualmente usando un id de https://getvibeapi.com/api/media-catalog (solo las entradas con kind: "image"), por ejemplo, nano-banana o gpt-image-2. La lista de modelos de la aplicación muestra modelos de texto; los modelos multimedia no aparecen en ella.
  3. Genera desde la función de pintura o generación de imágenes de la aplicación, no desde el chat normal. El chat envía la solicitud a /v1/chat/completions, donde los modelos de imágenes no funcionan.
  4. Si la aplicación te permite establecer un tiempo de espera de la solicitud, configúralo en al menos 300 segundos. Una imagen a la que la aplicación dejó de esperar aparece en GET /v1/images/generations. Reintentar desde la aplicación crea una nueva generación que se cobra por separado.

El modo que edita una imagen subida en aplicaciones de este tipo se llama /v1/images/edits, y también está disponible (consulta más abajo).

Editing: /v1/images/edits

POST /v1/images/edits procesa la solicitud del SDK de OpenAI (multipart/form-data: el archivo en image, o varios en image[], con prompt, model, size, quality y response_format) o JSON con images: [{"image_url": "…"}]. Funciona igual que la generación anterior: la misma respuesta, la misma espera, el mismo x-pv-media-job-id y el mismo precio que POST /api/media/generate con una imagen de origen; una edición fallida no se cobra. El modo de edición del modelo se elige del catálogo. Un mask se rechaza con 400 unsupported_parameter, y un modelo que no acepta una imagen de origen con model_cannot_edit. Para una edición con máscara, usa POST /api/media/generate y consulta GET /api/media/jobs/{id} periódicamente; consulta la guía de generación asíncrona. El video no se genera de forma síncrona: /v1/video/generations y /v1/videos también responden con 410 (detalles).

Id. de Nano Banana Pro

En el catálogo y en el código nuevo, usa nano-banana-pro. Para migrar clientes asíncronos existentes, el valor gemini-3-pro-image todavía se acepta únicamente en el campo model de la solicitud /api/media/generate y corresponde al mismo modelo público. No se publica en la información de modelos disponibles ni en los precios.

Generación de imágenes de GetVibe API — OpenAI-compatible Images API | GetVibe API