Contenido actualizado: 2026-09-18
Generación de imágenes asíncrona
Los modelos de imágenes suelen tardar entre 20 y 120 segundos en generar una imagen. La interfaz síncrona requiere que el cliente mantenga abierta la conexión HTTP mientras espera el resultado, lo cual puede dar lugar a tiempos de espera de lectura en el gateway/proxy, además de que el base64 devuelto es muy grande. El modo asíncrono divide este proceso en dos llamadas:- Enviar: La solicitud responde inmediatamente con
202y un ID de tarea (menos de 1 segundo). - Polling: Con el ID de tarea se consulta
GET /v1/tasks/{id}; cuando termina, se encuentra enresultla URL https de la imagen (archivada permanentemente enmedia.crazyrouter.com); no se devuelve base64.
El nombre del modelo, el cuerpo de la solicitud y la facturación son exactamente iguales al método síncrono. Solo cambia el “momento en que obtienes el resultado”; con la misma API Key puedes enviar algunas solicitudes de forma síncrona y otras de forma asíncrona. Si la tarea falla no se cobra.
Modelos compatibles
Método 1: Alias de ruta Gemini (recomendado para clientes Gemini)
No necesitas modificar ni un solo byte del cuerpo de la solicitud, los encabezados o los parámetros de consulta, solo cambia el sufijo de la acción de:generateContent a :asyncGenerateContent.
cURL
202:
El
model devuelto es el nombre del modelo subyacente resuelto (por ejemplo, gemini-3.1-flash-image-preview), coherente con el registro de consumo; esto no afecta a que envíes usando nano-banana-2. La referencia a la edición de imagen es igual a la del modo síncrono: coloca inlineData (base64) o fileData (URL) en parts.:asyncGenerateContent solo acepta modelos de generación de imágenes; si usas un modelo de texto devolverá 400 async mode is only available for image models. La acción de streaming :streamGenerateContent no soporta el modo asíncrono.
Método 2: Endpoint OpenAI de imágenes agregando el encabezado Prefer
Añade el encabezado HTTP Prefer: respond-async a la solicitud original de /v1/images/generations o /v1/images/edits, sin más cambios. También puedes usar el campo "async": true en el cuerpo de la solicitud (JSON) o el campo de formulario async=true (multipart), con el mismo efecto.
Preference-Applied: respond-async, y el cuerpo de la respuesta será igual al método uno (202 + ID de tarea).
Consultar tarea
404. Se recomienda hacer polling cada 2~3 segundos; si tras 10 minutos no termina, se considera fallo.
Estado
Respuesta al completarse (sistema Gemini)
result es el GenerateContentResponse nativo de Gemini, solo que se ha sustituido inlineData por fileData, que apunta a la URL de la imagen:
Respuesta al completarse (sistema OpenAI)
result tiene el mismo cuerpo que /v1/images/* síncrono, con la imagen en data[].url:
?inline=true; el servidor leerá y restaurará la imagen archivada en inlineData / b64_json (no recomendado, las imágenes grandes son lentas).
Respuesta en caso de fallo
retryable: true indica que puedes crear y enviar una nueva tarea; el sistema no reintentará automáticamente.
Envíos idempotentes
Un reintento de red puede enviar dos veces una misma tarea. Si incluyes el encabezadoIdempotency-Key: <ANY_STRING> en el envío, la misma cuenta y la misma Key devolverán siempre el mismo ID de tarea (la segunda vez responderá 200 en lugar de 202), no generará imágenes duplicadas ni facturará varias veces.