APIs de imágenes GPT Image 2 y Gemini

Genera imágenes con GPT Image 2 mediante la API Images compatible con OpenAI o con Nano Banana Pro y Nano Banana 2 mediante la API nativa de Gemini.

Esta página reúne dos contratos independientes de API para generación de imágenes. Comparten la clave API y los Credits de Modelflare, pero sus formatos de solicitud y respuesta no son intercambiables.

  • gpt-image-2 usa los contratos compatibles con OpenAI /v1/images/generations y /v1/images/edits.
  • gemini-3-pro-image y gemini-3.1-flash-image usan el contrato nativo de Gemini generateContent.

Elige la familia de modelos antes de copiar un ejemplo. No mezcles campos de Gemini y GPT Images.

1. GPT Image 2 — Images API compatible con OpenAI

Genera PNG o edita imágenes de referencia mediante URL pública o carga local con gpt-image-2 y la API Images compatible con OpenAI. Cada solicitud devuelve una imagen y admite calidad media o alta, URL firmada temporal o base64 y SSE opcional.

Elige endpoint y modo

  • Usa https://origin.modelflare.dev/v1 para JSON síncrono que pueda tardar varios minutos.
  • Usa https://modelflare.dev/v1 con stream=true para solicitudes largas por Cloudflare; se envían heartbeats SSE hasta que la imagen final esté lista.
  • No redirijas un POST en curso entre hosts.

Solicitud síncrona

curl https://origin.modelflare.dev/v1/images/generations \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2","prompt":"Una cabaña tranquila junto al lago al amanecer","n":1,"quality":"medium","size":"1024x1024","response_format":"url","output_format":"png"}'

La respuesta URL contiene un enlace privado firmado de Modelflare que caduca en una hora. Usa response_format=b64_json para recibir el PNG validado sin persistir un objeto de salida.

La página en vivo de Modelos y precios muestra precios medium y high para tamaños habituales. La facturación usa la calidad y las dimensiones exactas solicitadas, sin multiplicadores de grupos de enrutamiento normales, y registra el cargo final en los logs de uso.

Editar una imagen de referencia

Envía una o varias URL HTTP(S) de imágenes accesibles públicamente a POST /v1/images/edits. Cada elemento de images contiene exactamente un image_url:

curl https://origin.modelflare.dev/v1/images/edits \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2","prompt":"Cambia el fondo por un estudio fotográfico blanco y limpio","images":[{"image_url":"https://example.com/input.png"}],"size":"2048x2048","response_format":"url"}'

También puedes cargar un archivo PNG, JPEG o WebP local con multipart/form-data:

curl https://origin.modelflare.dev/v1/images/edits \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Cambia el fondo por un estudio fotográfico blanco y limpio" \
  -F "image=@/path/to/input.png" \
  -F "size=2048x2048" \
  -F "response_format=url"

La solicitud multipart debe contener exactamente un archivo de imagen y no superar 20 MiB en total. La URL de referencia o el archivo cargado se envía al proveedor upstream seleccionado; la URL debe seguir accesible durante la descarga. Modelflare no conserva ninguna referencia como recurso de salida de la API.

Solicitud SSE

curl -N https://modelflare.dev/v1/images/generations \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2","prompt":"Un gato blanco corre por una calle de neón bajo la lluvia","n":1,"quality":"high","size":"1024x1024","response_format":"url","stream":true}'

Los comentarios SSE son solo heartbeats. Finaliza tras image_generation.completed y data: [DONE].

Se admiten model, prompt, n=1, quality=medium|high, un WIDTHxHEIGHT válido, response_format=url|b64_json, output_format=png y stream opcional. /v1/images/edits acepta un array images no vacío con un image_url HTTP(S) público por elemento, o exactamente un PNG, JPEG o WebP válido en el campo multipart image. Las solicitudes de generación rechazan referencias; se rechazan varios archivos, entradas data/base64, máscaras, input_fidelity, variaciones, imágenes parciales y campos desconocidos. Los Credits reservados para solicitudes fallidas se devuelven mediante el reembolso idempotente por Request ID.

Usa una clave API normal. Las claves fijadas a un canal se rechazan y una clave con límites de modelo debe incluir gpt-image-2.


2. Gemini Image — API nativa de Gemini

Usa Nano Banana Pro o Nano Banana 2 con el formato nativo de Gemini. Estos modelos no usan /v1/images/generations.

Endpoint y solicitudes largas

Solicitud por streaming

Este ejemplo usa Nano Banana 2. Sustituye el modelo de la URL por gemini-3-pro-image para usar Nano Banana Pro.

curl -N "https://modelflare.dev/v1beta/models/gemini-3.1-flash-image:streamGenerateContent?alt=sse" \
  -H "x-goog-api-key: YOUR_MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{"text": "Create a clean blue circle centered on a white background. No text."}]
    }],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {"aspectRatio": "1:1", "imageSize": "1K"}
    }
  }'

Contrato de respuesta

Cada evento SSE data: contiene JSON nativo de Gemini. La imagen final en base64 está en candidates[].content.parts[].inlineData.data y el MIME en inlineData.mimeType. También puede haber texto. Termina al recibir finishReason=STOP o al cerrarse el stream; aquí no se usa image_generation.completed.

Modelos, resoluciones y precios estimados

Modelo Resolución Precio estimado por imagen
Nano Banana Pro 1K / 2K US$0.06720
Nano Banana Pro 4K US$0.12000
Nano Banana 2 0.5K US$0.02241
Nano Banana 2 1K US$0.03360
Nano Banana 2 2K US$0.05040
Nano Banana 2 4K US$0.07560

Usa K mayúscula en imageSize. Son precios estimados por imagen; el cargo final puede variar ligeramente según la solicitud y queda registrado en los logs de uso.

Usa una clave API normal de Modelflare mediante x-goog-api-key. Debe poder usar el grupo gemini-image e incluir el modelo elegido si tiene límites de modelo.