01
Il seed aiuta il confronto, senza garantire pixel identici
Se il modello accetta un seed, salvalo con prompt, versione, dimensioni e riferimenti. Alcuni endpoint producono immagini diverse anche con lo stesso seed.
Soluzione API immagini
Ogni endpoint immagine dichiara i propri campi. Alcuni accettano un prompt negativo, altri un seed, altri restituiscono quattro candidati per chiamata. Un modulo generico nasconde proprio i comandi che rendono ripetibile il risultato.

La sfida
«Metti il prompt, esce l’immagine» regge una decina di secondi. Poi ti serve lo stesso personaggio due volte, un taglio 3:2 invece del quadrato, quattro candidati per chiamata e un seed da annotare.
01
Se il modello accetta un seed, salvalo con prompt, versione, dimensioni e riferimenti. Alcuni endpoint producono immagini diverse anche con lo stesso seed.
02
Alcuni endpoint accettano resolution o aspect_ratio, altri width e height in pixel. Mandare quello sbagliato è un 400, e sugli endpoint tariffati a megapixel la dimensione che scegli è anche il prezzo che paghi.
03
Dove esiste num_outputs, l’addebito segue il numero di immagini e non il numero di richieste. Un valore predefinito di 4 costa quattro volte un valore predefinito di 1, e la stima è l’unico posto in cui quella differenza si vede prima dell’invio.
L’approccio
Crea gli input secondo lo schema dell’endpoint. Salva richiesta esatta, ordine dei riferimenti e versione con il risultato per confrontare varianti. Conserva l’originale: rigenerarlo identico non è garantito.
Le attività immagine usano lo stesso contratto «crea e segui» del video. Tutta la differenza vive dentro input.
POST /api/v1/jobs/createTask
POST /api/v1/jobs/createTask
Authorization: Bearer $SPICY_API_KEY
Idempotency-Key: 7b1f0c2e-9a4d-4f31-8c67-2b5e0d9a1c44
Content-Type: application/json
{
"model": "<publisher>/<model>/text-to-image",
"input": {
"prompt": "A ceramic teapot on linen, soft window light, muted palette",
"aspect_ratio": "3:2",
"num_outputs": 2,
"seed": 1337
}
}GET /api/v1/jobs/recordInfo?taskId=…
{
"code": 200,
"msg": "success",
"request_id": "req_example_record",
"data": {
"taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
"state": "succeeded",
"output": {
"assets": [
{
"mime": "image/png",
"url": "https://…/result.png?X-Amz-Signature=…",
"expiresAt": "2026-09-12T12:20:08Z"
}
]
},
"cost": "0.040000",
"settled": true
}
}Contratto
| Campo o header | Valore o limite |
|---|---|
| input | additionalProperties: false |
| seed · num_outputs · aspect_ratio | declared per endpoint |
| cost + settled: false | hold · final charge never exceeds it |
| errorCode | 9 stable values, content_rejected included |
Scorri in orizzontale per vedere tutte le colonne.
Integrazione
Scelta
Verifiche
Il corpo che componi nella pagina del modello è il corpo che invii dal tuo server: stessi campi, stessa validazione, stessa stima. Non esiste una modalità anteprima semplificata che poi diverge.
L’input è validato sullo schema dell’endpoint con additionalProperties chiuso. Un parametro che il modello non dichiara restituisce 400 con un errorCode stabile invece di essere ignorato in silenzio.
I risultati tornano come output.assets con una chiave, un tipo MIME, un url firmato e expiresAt. Niente punta in hot-link al posto in cui ha girato il modello.
Prima del lancio
Domande frequenti
Modelli
Ogni link apre la pagina di quella famiglia di modelli: input, limiti, politica sui contenuti e prezzo attuale per unità.
Continua
Confronta gli endpoint immagine per input accettati, controlli di dimensione e seed, numero di risultati e prezzo, poi riusa la richiesta che hai provato.