01
Une seed aide à comparer, sans garantir les mêmes pixels
Si le modèle accepte une seed, conservez-la avec le prompt, la version, la taille et les références. Certains endpoints peuvent produire une autre image avec la même seed.
Solution API image
Chaque point d’accès image déclare ses propres champs : invite négative ici, graine là, quatre candidats par appel ailleurs. Un formulaire générique masque précisément les contrôles qui rendent un résultat reproductible.

L’enjeu
« Une invite, une image » tient une dizaine de secondes. Ensuite il vous faut le même personnage une seconde fois, du 3:2 plutôt que du carré, quatre candidats par appel et une graine que vous pouvez noter.
01
Si le modèle accepte une seed, conservez-la avec le prompt, la version, la taille et les références. Certains endpoints peuvent produire une autre image avec la même seed.
02
Certains points d’accès prennent resolution ou aspect_ratio, d’autres width et height en pixels. Se tromper donne un 400, et là où la facturation est au mégapixel, la taille choisie est aussi le prix payé.
03
Là où num_outputs existe, la facturation suit le nombre d’images et non le nombre de requêtes. Une valeur par défaut de 4 coûte quatre fois celle de 1, et cet écart n’est visible avant l’envoi que dans l’estimation.
La méthode
Construisez les entrées selon le schéma de l’endpoint. Gardez la requête exacte, l’ordre des références et la version avec le résultat pour comparer les variantes. Conservez l’original : une reproduction identique n’est pas garantie.
Les tâches image utilisent le même contrat « créer puis suivre » que la vidéo. Toute la différence tient dans 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
}
}Contrat
| Champ ou en-tête | Valeur ou 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 |
Balayez horizontalement pour voir toutes les colonnes.
Intégration
Pertinence
Vérifications
Le corps assemblé sur la page modèle est celui que votre serveur envoie : mêmes champs, même validation, même estimation. Aucun aperçu simplifié ne divergera plus tard.
L’entrée est validée contre le schéma du point d’accès avec additionalProperties fermé. Un paramètre non déclaré renvoie 400 avec un errorCode stable au lieu d’être ignoré.
Les résultats arrivent dans output.assets avec key, type MIME, url signée et expiresAt. Rien ne pointe vers l’endroit où le modèle a tourné.
Avant la mise en production
Questions fréquentes
Modèles
Chaque lien ouvre la page de la famille de modèles concernée : entrées, limites, politique de contenu et prix actuel à l’unité.
Et après
Comparez les points d’accès image par entrées, contrôles de taille et de graine, nombre de sorties et prix par image, puis réutilisez la requête testée.