Generazione di immagini
POST /v1/images/generations
Genera immagini da un prompt testuale. Compatibile con OpenAI — stesso endpoint e stessa chiamata SDK (client.images.generate) dell'API immagini di OpenAI, instradata sui modelli immagine di OpenAI, Google, Alibaba e ByteDance dietro un'unica chiave API.
L'accesso è attualmente limitato tramite allowlist (workspace/utenti specifici). Una chiave non in allowlist riceve 403 image_gateway_not_allowlisted — chiedi al tuo amministratore di abilitarlo per il tuo workspace.
Corpo della richiesta
| Parametro | Tipo | Descrizione |
|---|---|---|
model* | string | Il modello immagine da usare (es. gpt-image-1, qwen-image-2.0, seedream-4-0-250828). Elenca tutti i modelli disponibili tramite GET /v1/images/models. |
prompt* | string | Descrizione testuale dell'immagine desiderata. |
n | integer | Numero di immagini da generare (predefinito 1). |
size | string | Dimensione dell'immagine, es. 1024x1024. Il supporto varia per modello — alcuni accettano solo dimensioni specifiche; omettila per usare il valore predefinito del modello. |
quality | string | Suggerimento di qualità/rendering dove il modello lo supporta (es. standard, hd). |
response_format | string | b64_json (predefinito) restituisce i byte dell'immagine in base64; url restituisce un URL scaricabile dove l'upstream lo supporta. |
seed | integer | Seed facoltativo per output riproducibile (dove supportato). |
negative_prompt | string | Testo facoltativo che descrive cosa evitare (dove supportato). |
image | string | string[] | Input image-to-image: base64 o data URI (una stringa, o un array per più immagini di riferimento). Se incluso, modifica l'immagine di input secondo il prompt invece di generare dal solo testo. Gli URL http(s) non sono ancora supportati. |
Modelli disponibili
La disponibilità dei modelli dipende dal tuo deployment. Recupera l'elenco aggiornato e filtrato per conformità tramite GET /v1/images/models. Un insieme rappresentativo:
Non sai quale modello scegliere? Scegli in base a ciò che ti serve
| Cosa serve | Nota | Modelli consigliati |
|---|---|---|
| Il più economico | $0.03 / image | wan2.7-image seedream-4-0-250828 |
| Massima qualità | — | gemini-3-pro-image-preview gpt-image-2 |
| Modifica immagine (image-to-image) | invia il campo image | gpt-image-2 seedream-4-0-250828 wan2.7-image |
| Mantenere i dati fuori dalla Cina continentale | fornitori occidentali | gpt-image-2 gemini-3-pro-image-preview |
| Collegamenti client lenti / transfrontalieri | response_format: "url" | wan2.7-image qwen-image-2.0 |
| Modello | Provider | Prezzo | Risposta | Modifica (i2i) | Note |
|---|---|---|---|---|---|
gpt-image-2 | OpenAI | token · $5→$30 /1M | b64 only | ≤16 | Ammiraglia; verifica dell'organizzazione richiesta |
gpt-image-1.5 | OpenAI | token · $5→$32 /1M | b64 only | ≤16 | Deprecato |
gpt-image-1 | OpenAI | token · $5→$40 /1M | b64 only | ≤16 | Deprecato |
gpt-image-1-mini | OpenAI | token · $2→$8 /1M | b64 only | ≤16 | Deprecato; il più economico di OpenAI |
gemini-3-pro-image-preview | token · $2→$120 /1M | b64 only | ≤14 | Anteprima; qualità superiore | |
gemini-3.1-flash-image-preview | token · $0.5→$60 /1M | b64 only | ≤14 | Anteprima | |
gemini-3.1-flash-lite-image | token · $0.25→$30 /1M | b64 only | ≤14 | Anteprima; il Gemini più veloce | |
gemini-2.5-flash-image | token · $0.3→$30 /1M | b64 only | ≤3 | Ritiro il 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 | Qualità superiore |
wan2.7-image | Alibaba | $0.03 / image | b64 · url ✓ | ≤9 | Il più economico |
wan2.7-image-pro | Alibaba | $0.075 / image | b64 · url ✓ | ≤9 | — |
seedream-4-0-250828 | ByteDance | $0.03 / image | b64 · url ✓ | ≤10 | Accetta 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 = fatturato in base all'uso (OpenAI / Google); $/image = tariffa fissa per immagine generata. Response: i modelli b64 · url ✓ possono anche restituire un URL pre-firmato ospitato dal fornitore (response_format: "url", valido ~24 h). La velocità di download dipende dal fornitore: gli URL di Alibaba passano per una CDN accelerata a livello globale (veloce ovunque, inclusa la Cina continentale); gli URL seedream di ByteDance sono serviti da object storage a Singapore (veloce per i client esteri, lento dalla Cina continentale). I modelli b64 only rifiutano response_format: "url" con 400 url_not_supported. Edit (i2i) = ogni modello supporta image-to-image (invia il campo image); il valore è il numero massimo di immagini di riferimento.
Image-to-image (modifica)
Aggiungi un campo image alla stessa richiesta per modificare o usare come riferimento un'immagine di input. Supportato su gpt-image, gemini-*-image, qwen-image / wan2.7 e seedream (ogni modello limita quante immagini di input accetta). Invia l'immagine come base64 o data URI; passa un array per più riferimenti.
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 della risposta
Imposta response_format: b64_json restituisce i byte dell'immagine in base64 (predefinito); url restituisce un URL scaricabile dove l'upstream lo supporta. La risposta corrisponde all'API immagini di OpenAI: { created, data: [{ b64_json | url }] }.
url è supportato solo dove l'upstream stesso restituisce un URL CDN — attualmente le famiglie Alibaba e ByteDance (qwen-image*, wan*, seedream*); l'immagine si scarica dalla CDN del vendor tramite un URL pre-firmato valido ~24 ore. I modelli OpenAI e Google (gpt-image*, gemini*) sono solo b64: richiedere url lì restituisce 400 url_not_supported — rifiutata prima della generazione, senza alcun addebito. Verifica per modello tramite il campo supports_url di GET /v1/images/models, oppure nella tabella dei modelli qui sopra.
Esempio completo — modalità url
Genera con response_format: "url", leggi data[0].url dalla risposta, poi scarica l'immagine dalla CDN del vendor — un giro completo che puoi incollare in un terminale:
# 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..." L'URL è pre-firmato — chiunque lo abbia può scaricare, senza header di autenticazione — e scade in ~24 ore: scaricalo subito e ri-ospita il file se ti serve a lungo termine. Tempo tipico end-to-end: ~15–30 s di generazione + download dalla CDN sotto il secondo.
Latenza, risposte grandi e timeout
Il tempo di generazione varia per modello: qwen-image-2.0 risponde tipicamente in ~5–10 s, mentre wan2.7-image e i modelli di classe seedream richiedono ~15–30 s (di più a dimensioni 2K+). Il gateway consente fino a 180 s per richiesta e oltre restituisce 504 generation_timeout — questa API di per sé non restituisce mai 408.
Il response_format=b64_json predefinito incorpora l'immagine completa nel corpo della risposta (2–3 MB di base64 per i modelli grandi). Su collegamenti client lenti o a lunga distanza, scaricare quel corpo può richiedere minuti e far scattare il timeout del tuo client HTTP o del gateway intermedio — che sul tuo lato appare tipicamente come 408 o errore di timeout.
Per i modelli con immagini grandi o client lontani dalla regione di servizio, preferisci response_format: "url" — il corpo della risposta è minuscolo e l'immagine si scarica direttamente dal vendor. Differenza tra vendor: gli URL Alibaba (qwen-image*/wan*) viaggiano su una CDN con accelerazione globale, veloce anche dalla Cina continentale; gli URL seedream di ByteDance sono serviti da object storage a Singapore — veloci all'estero, lenti dalla Cina continentale. Gli URL sono pre-firmati e validi per ~24 ore: scaricali subito e ri-ospitali se ti serve persistenza. Se devi usare b64_json su un collegamento lento, alza il timeout del client a ≥180 s.
Fatturazione
Fatturato solo in caso di successo (HTTP 200). La maggior parte dei modelli è addebitata per immagine (numero × prezzo unitario); i modelli OpenAI gpt-image-* che restituiscono l'utilizzo in token sono addebitati per token. Ogni addebito è registrato con request_id, modello e costo per la tracciabilità.
Alcuni modelli rifiutano una size esplicita (es. seedream-4-5-251128 / seedream-5-0-260128 restituiscono 400 con size=1024x1024). In caso di errore InvalidParameter:size, ometti size per usare il valore predefinito del modello.
Esempio — 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"
}' Esempio — Python (SDK OpenAI)
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) Esempio — Node (SDK OpenAI)
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")); Idempotenza
Passa un header X-Idempotency-Key per rendere sicuri i retry: una richiesta ripetuta con la stessa chiave restituisce 409 invece di generare (e fatturare) una seconda volta. La generazione di immagini è lenta e soggetta a retry, quindi questo evita addebiti doppi.