Generación de imágenes
POST /v1/images/generations
Genera imágenes a partir de un prompt de texto. Compatible con OpenAI — el mismo endpoint y la misma llamada del SDK (client.images.generate) que la API de imágenes de OpenAI, enrutado entre los modelos de imágenes de OpenAI, Google, Alibaba y ByteDance con una sola API key.
El acceso está actualmente restringido por lista de permitidos (workspaces/usuarios específicos). Una clave que no esté en la lista de permitidos recibe 403 image_gateway_not_allowlisted — pide a tu administrador que lo habilite para tu workspace.
Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
model* | string | El modelo de imagen que se va a usar (p. ej. gpt-image-1, qwen-image-2.0, seedream-4-0-250828). Lista todos los modelos disponibles mediante GET /v1/images/models. |
prompt* | string | Descripción de texto de la imagen deseada. |
n | integer | Número de imágenes que se van a generar (predeterminado 1). |
size | string | Tamaño de la imagen, p. ej. 1024x1024. La compatibilidad varía según el modelo — algunos solo aceptan tamaños específicos; omítelo para usar el valor predeterminado del modelo. |
quality | string | Sugerencia de calidad/renderizado donde el modelo lo admita (p. ej. standard, hd). |
response_format | string | b64_json (predeterminado) devuelve los bytes de la imagen en base64; url devuelve una URL descargable donde el proveedor upstream lo admita. |
seed | integer | Semilla opcional para una salida reproducible (donde sea compatible). |
negative_prompt | string | Texto opcional que describe lo que se debe evitar (donde sea compatible). |
image | string | string[] | Entrada de imagen a imagen: base64 o un data URI (una cadena, o un array para varias imágenes de referencia). Incluirlo edita la imagen de entrada según el prompt en lugar de generar solo a partir de texto. Las URL http(s) aún no son compatibles. |
Modelos disponibles
La disponibilidad de modelos depende de tu despliegue. Obtén la lista en vivo y consciente del cumplimiento mediante GET /v1/images/models. Un conjunto representativo:
¿No sabes qué modelo elegir? Elige según lo que necesites
| Necesitas | Nota | Modelos recomendados |
|---|---|---|
| El más económico | $0.03 / image | wan2.7-image seedream-4-0-250828 |
| Máxima calidad | — | gemini-3-pro-image-preview gpt-image-2 |
| Edición de imágenes (image-to-image) | enviar el campo image | gpt-image-2 seedream-4-0-250828 wan2.7-image |
| Mantener los datos fuera de China continental | proveedores occidentales | gpt-image-2 gemini-3-pro-image-preview |
| Conexiones de cliente lentas / transfronterizas | response_format: "url" | wan2.7-image qwen-image-2.0 |
| Modelo | Proveedor | Precio | Respuesta | Edición (i2i) | Notas |
|---|---|---|---|---|---|
gpt-image-2 | OpenAI | token · $5→$30 /1M | b64 only | ≤16 | Insignia; requiere verificación de la organización |
gpt-image-1.5 | OpenAI | token · $5→$32 /1M | b64 only | ≤16 | Obsoleto |
gpt-image-1 | OpenAI | token · $5→$40 /1M | b64 only | ≤16 | Obsoleto |
gpt-image-1-mini | OpenAI | token · $2→$8 /1M | b64 only | ≤16 | Obsoleto; el más económico de OpenAI |
gemini-3-pro-image-preview | token · $2→$120 /1M | b64 only | ≤14 | Vista previa; calidad superior | |
gemini-3.1-flash-image-preview | token · $0.5→$60 /1M | b64 only | ≤14 | Vista previa | |
gemini-3.1-flash-lite-image | token · $0.25→$30 /1M | b64 only | ≤14 | Vista previa; el Gemini más rápido | |
gemini-2.5-flash-image | token · $0.3→$30 /1M | b64 only | ≤3 | Se retira el 2026-10-02 | |
qwen-image-2.0 | Alibaba | $0.035 / image | b64 · url ✓ | ≤3 | — |
qwen-image-2.0-pro | Alibaba | $0.075 / image | b64 · url ✓ | ≤3 | Mayor calidad |
wan2.7-image | Alibaba | $0.03 / image | b64 · url ✓ | ≤9 | El más económico |
wan2.7-image-pro | Alibaba | $0.075 / image | b64 · url ✓ | ≤9 | — |
seedream-4-0-250828 | ByteDance | $0.03 / image | b64 · url ✓ | ≤10 | Acepta 1024×1024 |
seedream-4-5-251128 | ByteDance | $0.04 / image | b64 · url ✓ | ≤10 | size ≥ 1920×1920 |
seedream-5-0-260128 | ByteDance | $0.035 / image | b64 · url ✓ | ≤10 | 5.0 Lite; size ≥ 1920×1920 |
Price: token · $in→$out /1M = facturado por uso (OpenAI / Google); $/image = tarifa fija por imagen generada. Response: los modelos b64 · url ✓ también pueden devolver una URL prefirmada alojada por el proveedor (response_format: "url", válida ~24 h). La velocidad de descarga depende del proveedor: las URL de Alibaba usan una CDN acelerada globalmente (rápida en todas partes, incluida China continental); las URL seedream de ByteDance se sirven desde almacenamiento de objetos en Singapur (rápida para clientes en el extranjero, lenta desde China continental). Los modelos b64 only rechazan response_format: "url" con 400 url_not_supported. Edit (i2i) = cada modelo admite imagen a imagen (envía el campo image); el valor es el número máximo de imágenes de referencia.
Imagen a imagen (edición)
Añade un campo image a la misma solicitud para editar o tomar como referencia una imagen de entrada. Compatible con gpt-image, gemini-*-image, qwen-image / wan2.7 y seedream (cada modelo limita cuántas imágenes de entrada acepta). Envía la imagen como base64 o como data URI; pasa un array para varias referencias.
curl https://synthorai.io/v1/images/generations \
-H "Authorization: Bearer $SYNTHORAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "add a small red party hat on the main subject",
"image": "'"$(base64 -i input.png)"'"
}' Formato de respuesta
Establece response_format: b64_json devuelve los bytes de la imagen en base64 (predeterminado); url devuelve una URL descargable donde el proveedor upstream lo admita. La respuesta coincide con la API de imágenes de OpenAI: { created, data: [{ b64_json | url }] }.
url is supported only where the upstream itself hands back a CDN URL — currently the Alibaba and ByteDance families (qwen-image*, wan*, seedream*); the image downloads from the vendor's CDN via a pre-signed URL valid ~24 hours. OpenAI and Google models (gpt-image*, gemini*) are b64-only: requesting url there returns 400 url_not_supported — rejected before generation, nothing is billed. Check per model via the supports_url field of GET /v1/images/models, or the model table above.
Complete example — url mode
Generate with response_format: "url", read data[0].url from the response, then download the image from the vendor's CDN — a full round-trip you can paste into a terminal:
# 1) Generate — ask for a URL instead of inline base64
curl https://synthorai.io/v1/images/generations \
-H "Authorization: Bearer $SYNTHORAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-image",
"prompt": "a serene mountain lake at sunrise",
"response_format": "url"
}'
# → 200 in ~15–30 s. Tiny JSON body — no image bytes inline:
{
"created": 1783064343,
"data": [
{
"url": "https://dashscope-463f.oss-accelerate.aliyuncs.com/1d/8a/20260703/xxxx.png?Expires=1783151704&OSSAccessKeyId=LTAI...&Signature=bvTa..."
}
]
}
# 2) Download from the vendor CDN — the URL is pre-signed, no auth header needed
curl -o out.png "https://dashscope-463f.oss-accelerate.aliyuncs.com/1d/8a/20260703/xxxx.png?Expires=1783151704&OSSAccessKeyId=LTAI...&Signature=bvTa..." The URL is pre-signed — anyone with it can download, no auth header needed — and expires in ~24 hours: fetch promptly and re-host the file if you need it long-term. Typical end-to-end: ~15–30 s generation + sub-second CDN download.
Latency, large responses & timeouts
Generation time varies by model: qwen-image-2.0 typically returns in ~5–10 s, while wan2.7-image and seedream-class models take ~15–30 s (longer at 2K+ sizes). The gateway allows up to 180 s per request and returns 504 generation_timeout beyond that — this API itself never returns 408.
The default response_format=b64_json embeds the full image in the response body (2–3 MB of base64 for large models). On slow or long-haul client links, downloading that body can add minutes and trip your HTTP client's or relay gateway's own timeout — typically surfaced on your side as 408 or a timeout error.
Para modelos de imágenes grandes o clientes lejos de la región de servicio, prefiere response_format: "url": el cuerpo de la respuesta es diminuto y la imagen se descarga directamente del proveedor. Diferencia entre proveedores: las URL de Alibaba (qwen-image*/wan*) usan una CDN de aceleración global, rápidas incluso desde China continental; las URL seedream de ByteDance se sirven desde almacenamiento de objetos en Singapur: rápidas en el extranjero, lentas desde China continental. Las URL están prefirmadas y son válidas ~24 horas: descárgalas pronto y vuelve a alojarlas si necesitas persistencia. Si debes usar b64_json en un enlace lento, aumenta el tiempo de espera de tu cliente a ≥180 s.
Facturación
Se factura solo en caso de éxito (HTTP 200). La mayoría de los modelos se cobran por imagen (cantidad × precio unitario); los modelos gpt-image-* de OpenAI que devuelven uso de tokens se cobran por token. Cada cargo se registra con request_id, modelo y coste para su trazabilidad.
Algunos modelos rechazan un size explícito (p. ej. seedream-4-5-251128 / seedream-5-0-260128 devuelven 400 con size=1024x1024). Ante un error InvalidParameter:size, omite size para usar el valor predeterminado del modelo.
Ejemplo — curl
curl https://synthorai.io/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1",
"prompt": "a serene mountain lake at sunrise, photorealistic",
"n": 1,
"size": "1024x1024"
}' Ejemplo — Python (OpenAI SDK)
from openai import OpenAI
import base64
client = OpenAI(base_url="https://synthorai.io/v1", api_key="YOUR_API_KEY")
resp = client.images.generate(
model="qwen-image-2.0",
prompt="a serene mountain lake at sunrise, photorealistic",
n=1,
size="1024x1024",
)
# Default response_format is b64_json
img = base64.b64decode(resp.data[0].b64_json)
with open("out.png", "wb") as f:
f.write(img) Ejemplo — Node (OpenAI SDK)
import OpenAI from "openai";
import fs from "node:fs";
const client = new OpenAI({
baseURL: "https://synthorai.io/v1",
apiKey: process.env.SYNTHORAI_API_KEY,
});
const resp = await client.images.generate({
model: "seedream-4-0-250828",
prompt: "a serene mountain lake at sunrise, photorealistic",
n: 1,
});
fs.writeFileSync("out.png", Buffer.from(resp.data[0].b64_json, "base64")); Idempotencia
Pasa un X-Idempotency-Key para que los reintentos sean seguros: una solicitud repetida con la misma clave devuelve 409 en lugar de generar (y facturar) por segunda vez. La generación de imágenes es lenta y propensa a reintentos, por lo que esto evita cargos duplicados.