L'API gpt-image-2 est le nouveau point d'accès de génération d'images d'OpenAI, lancé parallèlement à ChatGPT Images 2.0 le 21 avril 2026. Si vous utilisez déjà les API de chat ou d'embeddings d'OpenAI, l'ajout de la génération d'images ne nécessite qu'une nouvelle forme de requête, une clé API avec le bon champ d'application, et environ dix minutes.
Ce guide concerne strictement l'API : authentification, paramètres de requête, exemples de code en trois langues, mode de réflexion, génération par lots, gestion des réponses, codes d'erreur, limites de débit, et le flux de travail de test qui vous évite de gaspiller des crédits sur des invites défectueuses. Pour un aperçu au niveau produit des nouveautés de ChatGPT Images 2.0, consultez notre analyse de ChatGPT Images 2.0.
À la fin, vous aurez des appels fonctionnels, une collection Apidog réutilisable pour l'itération, et une idée claire du coût de chaque paramètre.
Prérequis
Avant votre première requête, vous avez besoin de quatre choses :
- Un compte OpenAI avec accès à l'API. Les comptes développeurs sont distincts de ChatGPT Plus ; un abonnement ChatGPT n'inclut pas de crédits API.
- Un niveau d'utilisation facturable.
gpt-image-2est disponible à partir du Niveau 1. Les nouveaux comptes commencent au niveau Gratuit et doivent ajouter un mode de paiement avant que les points d'accès d'images ne soient débloqués. - Une clé API avec le champ d'application
images:write. Les clés au niveau du projet sont recommandées par rapport aux clés au niveau de l'utilisateur pour la production. - Un outil de test qui prévisualise les réponses d'images.
curlen terminal fonctionne pour une première requête ; après cela, utilisez un véritable client API. Plus d'informations ci-dessous.
Définissez la clé une fois dans votre shell pour que tous les exemples de ce guide s'exécutent sans modifications :
export OPENAI_API_KEY="sk-proj-..."
Point d'accès et authentification
gpt-image-2 utilise le même point d'accès de génération d'images que le modèle précédent :
POST https://api.openai.com/v1/images/generations
L'authentification est un jeton porteur dans l'en-tête Authorization. Chaque requête contient également un corps JSON avec l'ID du modèle, l'invite et les paramètres de sortie.
curl https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A sharp product hero image for an API testing platform, dark background",
"size": "1024x1024",
"n": 1,
"quality": "high"
}'
Si l'appel réussit, vous recevez un objet JSON avec un tableau data d'images. Les échecs renvoient une enveloppe d'erreur OpenAI standard avec un code et un message lisible par l'homme ; le tableau d'erreurs plus loin dans ce guide couvre les plus courants.
Paramètres de requête
Chaque champ du corps de la requête modifie ce que vous payez et ce que vous obtenez. Voici la carte complète des paramètres pour gpt-image-2.
| Paramètre | Type | Valeurs | Remarques |
|---|---|---|---|
model |
chaîne | gpt-image-2 |
Obligatoire. |
prompt |
chaîne | Jusqu'à 32 000 caractères | Obligatoire. Les invites plus longues consomment plus de jetons d'entrée. |
size |
chaîne | 1024x1024, 1024x1536, 1536x1024, 2000x1000, 1000x2000, 2000x667, 667x2000 |
Détermine le nombre de jetons de sortie. |
quality |
chaîne | standard, high |
high coûte environ 2 fois plus mais gère les textes fins et les éléments d'interface utilisateur. |
n |
entier | 1–10 | Les requêtes par lots partagent le style de l'ensemble. |
thinking |
chaîne | off, low, medium, high |
Budget de raisonnement avant le rendu. |
response_format |
chaîne | url, b64_json |
Les URL expirent en une heure. |
user |
chaîne | Forme libre | Utilisé pour la détection des abus ; passez un ID utilisateur haché. |
background |
chaîne | auto, transparent, opaque |
La sortie transparente est un PNG avec canal alpha. |
seed |
entier | N'importe quel int32 | Contrôle lâche ; même seed plus même invite est proche, pas identique. |
Les trois paramètres qui modifient le plus le coût sont size, quality et thinking. Une image de haute qualité (high) de 2000 pixels de large avec thinking: "high" peut coûter 4 à 5 fois plus qu'un rendu de base 1024x1024 standard.
Exemple Python
Le SDK officiel (openai>=1.50.0) ajoute un support natif pour gpt-image-2 :
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI()
response = client.images.generate(
model="gpt-image-2",
prompt=(
"A minimalist diagram of an OAuth 2.1 authorization code flow with PKCE. "
"Five boxes labeled in English: User, Client, Auth Server, Resource Server, Token. "
"Sharp sans-serif text, off-white background, teal accent arrows."
),
size="1536x1024",
quality="high",
n=2,
thinking="medium",
response_format="b64_json",
)
out_dir = Path("out")
out_dir.mkdir(exist_ok=True)
for i, image in enumerate(response.data):
png_bytes = base64.b64decode(image.b64_json)
(out_dir / f"oauth_{i}.png").write_bytes(png_bytes)
print(f"Généré {len(response.data)} images dans {out_dir.resolve()}")
Deux points à noter :
response.dataest une liste même lorsquen=1. Toujours itérer.b64_jsonest plus facile pour les scripts locaux ;urlest préférable lorsque vous transférez l'image vers un CDN ou un téléchargement S3, car vous évitez le cycle de décodage puis de réencodage.
Exemple Node.js / TypeScript
import fs from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.images.generate({
model: "gpt-image-2",
prompt:
"Dashboard UI mockup for a REST client, sentence-case labels, latency sparkline in the top-right, cool grey palette.",
size: "1536x1024",
quality: "high",
n: 4,
thinking: "medium",
response_format: "b64_json",
});
await Promise.all(
response.data.map(async (image, i) => {
if (!image.b64_json) return;
await fs.writeFile(`dash_${i}.png`, Buffer.from(image.b64_json, "base64"));
}),
);
console.log(`Enregistré ${response.data.length} images`);
Utilisez le SDK officiel plutôt que fetch brut, à moins d'avoir une bonne raison de ne pas le faire. Le SDK gère les tentatives, les en-têtes d'idempotence et le streaming, et il suit les modifications de schéma majeures entre les révisions de modèle.
Mode de réflexion : quand l'utiliser
thinking contrôle la quantité de calcul que le modèle consacre à la planification de la mise en page avant le rendu. Quatre valeurs, approximativement :
off: pas de raisonnement. Le plus rapide, le moins cher, idéal pour les invites créatives libres où la composition n'a pas besoin d'être exacte.low: planification légère. Un bon réglage par défaut pour les photos de produits et les images d'en-tête.medium: planification plus approfondie. Bon choix pour les diagrammes, infographies, diaporamas, et tout ce qui contient des éléments comptés ("quatre panneaux", "trois flèches").high: raisonnement maximal. Ne s'avère rentable que pour les mises en page multilingues complexes ou les diagrammes techniques stricts ; attendez-vous à une latence et un coût nettement plus élevés.
Une règle pratique : si l'invite contient un nombre, une étiquette ou une contrainte de position, passez au niveau supérieur. Si elle dit simplement "une scène chaleureuse", descendez d'un niveau.
Le mode de réflexion ajoute des jetons de raisonnement à la facture en plus des jetons de sortie d'image. La page de tarification d'OpenAI liste les tarifs actuels par jeton ; prévoyez un budget de 1,2 à 2 fois le coût de votre image de base lorsque medium ou high est activé.
Génération par lots
Définir n > 1 renvoie plusieurs images dans une seule réponse qui partagent la composition et le style. Ce n'est pas la même chose qu'appeler le point d'accès n fois en parallèle ; cela vous donnerait quatre images sans rapport. La sortie par lots est cohérente, ce qui correspond à la façon dont une équipe de conception itère.
response = client.images.generate(
model="gpt-image-2",
prompt="Four different hero illustrations for an API documentation landing page, shared color palette, shared line weight.",
size="1536x1024",
quality="high",
n=4,
thinking="low",
)
Vous payez par image, donc n=4 coûte environ 4 fois n=1. L'avantage est la cohérence, pas le débit.
Format de réponse et stockage
Deux formats, deux cas d'utilisation :
b64_json: l'image est intégrée directement dans la réponse. Facile pour les scripts. Les charges utiles des réponses deviennent rapidement volumineuses ; un PNG de haute qualité de 2000 pixels de large peut dépasser 3 Mo.url: l'image reste sur le CDN d'OpenAI pendant une heure, et vous la téléchargez vous-même. Mieux pour les fonctions sans serveur avec des limites de taille de réponse et pour les pipelines qui transfèrent l'image vers votre propre stockage.
Pour la production, téléchargez l'URL et téléchargez-la immédiatement sur votre propre bucket S3, R2 ou Cloudflare Images. Ne livrez pas d'URL OpenAI aux utilisateurs finaux ; elles expirent.
Gestion des erreurs et limites de débit
gpt-image-2 renvoie des formats d'erreur OpenAI standards. Voici ceux que vous rencontrerez :
| HTTP | code |
Cause | Correction |
|---|---|---|---|
| 400 | invalid_request_error |
Mauvaise taille, rapport non supporté, invite de plus de 32k caractères | Vérifiez la liste des tailles et raccourcissez l'invite. |
| 401 | invalid_api_key |
Clé manquante ou incorrecte | Ré-exportez OPENAI_API_KEY. |
| 403 | insufficient_quota |
Pas de crédits, ou niveau Gratuit | Ajoutez la facturation, vérifiez le niveau. |
| 429 | rate_limit_exceeded |
Trop de requêtes par minute | Faites une pause avec jitter ; réessayez avec Retry-After. |
| 429 | image_generation_user_error |
Refus de politique de contenu | Reformulez l'invite. |
| 500 | server_error |
Problème OpenAI transitoire | Réessayez deux fois avec une temporisation exponentielle. |
| 503 | overloaded |
Pic d'utilisation régional | Attendez et réessayez. |
Les limites de débit sur gpt-image-2 sont basées sur les niveaux. Au niveau 1, vous commencez à environ 50 requêtes par minute ; les niveaux supérieurs augmentent. Lisez toujours les en-têtes x-ratelimit-remaining-requests et x-ratelimit-remaining-tokens sur chaque réponse et ralentissez avant d'atteindre la limite.
Erreurs re-tentables en production :
import time
from openai import OpenAI, RateLimitError, APIStatusError
client = OpenAI()
def generate_with_retry(prompt: str, tries: int = 3):
delay = 1.0
for attempt in range(tries):
try:
return client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="high",
n=1,
)
except RateLimitError:
time.sleep(delay)
delay *= 2
except APIStatusError as e:
if 500 <= e.status_code < 600 and attempt < tries - 1:
time.sleep(delay)
delay *= 2
continue
raise
raise RuntimeError("gpt-image-2 retries exhausted")
Ne réessayez pas les erreurs 400, 401 ou les 429 de politique de contenu ; celles-ci échouent pour une raison et réessayer gaspille des crédits.
Tester l'API avec Apidog
L'itération sur les invites de génération d'images depuis un terminal est lente : vous ne pouvez pas voir le résultat, ni comparer les changements de paramètres, ni versionner les bonnes invites. Un client API dédié résout ces trois problèmes.

Apidog traite le point d'accès gpt-image-2 comme une requête de première classe. Flux de travail typique :
- Créez une nouvelle requête dans votre collection OpenAI, méthode
POST, URLhttps://api.openai.com/v1/images/generations. - Ajoutez
Authorization: Bearer {{OPENAI_API_KEY}}comme en-tête ; définissezOPENAI_API_KEYdans une variable d'environnement afin qu'elle ne figure jamais dans le code source. - Collez le corps JSON avec votre invite ; Apidog valide par rapport à la spécification OpenAPI et signale les incohérences de type avant l'envoi.
- Cliquez sur Envoyer. Les réponses d'images s'affichent en ligne ; enregistrez les bonnes, étiquetez les mauvaises, dupliquez la requête pour des variantes.
- Enregistrez des environnements pour
thinking: off,thinking: mediumetthinking: highafin de comparer la même invite sur différents niveaux de raisonnement.
La comparaison des requêtes d'Apidog est la partie la plus importante ici. Vous ajustez un paramètre ; vous voyez l'image avant et après côte à côte ; vous enregistrez le résultat gagnant dans une bibliothèque d'invites que toute votre équipe partage. C'est le flux de travail que le terminal ne peut pas vous offrir.
Si vous venez d'un client HTTP générique ou d'un espace de travail Postman corrompu, Téléchargez Apidog et configurez-le avec votre clé OpenAI ; l'installation prend moins de cinq minutes. Les équipes évaluant des alternatives peuvent également lire notre guide de test d'API sans Postman et l'aperçu de l'extension Apidog pour VS Code.
Pièges courants
Quelques erreurs courantes gaspillent des crédits et du temps la première semaine avec gpt-image-2.
- Utiliser
quality: "standard"pour les invites contenant beaucoup de texte. La qualité standard déforme le petit texte. Passez àhighlorsque les étiquettes, les icônes ou le texte de l'interface utilisateur sont importants. - Surcharger les invites. 32k caractères est le plafond, pas la cible. Au-delà de quelques centaines de jetons, le modèle commence à ignorer les instructions précédentes. Gardez les invites en dessous de 500 mots et utilisez
thinkingpour appliquer des contraintes complexes. - Attendre de la reproductibilité de
seed.seedréduit la variance mais ne fixe pas la sortie. Si vous avez besoin de la même image exacte, mettez les octets en cache ; ne relancez pas la génération. - Livrer des URL OpenAI. Elles expirent en une heure. Copiez-les toujours vers votre propre stockage avant de les servir en aval.
- Appeler le point d'accès en boucle serrée. La génération d'images est lente. Parallélisez sur les workers et respectez les en-têtes de limite de débit ; les boucles serrées séquentielles ne font que mettre en file d'attente et expirer.
FAQ
En quoi gpt-image-2 diffère-t-il de gpt-image-1 au niveau de l'API ? Même point d'accès, même authentification. Nouveaux paramètres : thinking (off/low/medium/high), valeurs size supplémentaires jusqu'à 2000 px, et n jusqu'à 10 avec un style partagé. Les intégrations SDK existantes continuent de fonctionner après un changement d'ID de modèle ; vous n'ajoutez les nouveaux paramètres que là où ils sont utiles. Pour la différence complète, consultez l'aperçu de ChatGPT Images 2.0.
Quelle est la manière la plus rapide de prototyper une intégration `gpt-image-2` ? Créez une requête dans Apidog, enregistrez deux environnements (standard vs thinking), et itérez sur les invites sans toucher au code. Exportez la requête finale en tant que code curl ou SDK lorsque vous êtes prêt à valider.
L'API prend-elle en charge l'édition ou l'inpainting d'images ? Les points d'accès d'édition et de variation suivent le même modèle que la génération précédente sous le nouvel ID de modèle. Consultez la référence du modèle gpt-image-2 pour le schéma le plus récent ; les paramètres pour les masques et les images d'entrée y sont documentés.
Puis-je utiliser `gpt-image-2` pour une production commerciale ? Oui, selon les politiques d'utilisation standard d'OpenAI. Vous possédez les images générées ; OpenAI conserve le droit d'utiliser les entrées et les sorties pour la surveillance des abus. Les personnages sous marque déposée et les personnalités publiques nommées déclenchent toujours les garde-fous.
Quel est le coût pour une charge de travail de production ? À environ 0,21 $ par image de haute qualité 1024×1024 en mode standard, 10 000 images par mois coûtent environ 2 100 $ sans le mode de réflexion. Ajoutez 20 à 80 % pour le mode de réflexion. Comparez cela avec des alternatives auto-hébergées comme notre guide de l'API GLM 5V Turbo et l'intégration Qwen 3.5 Omni si le budget est plus important que la qualité maximale.
Existe-t-il une alternative moins chère avec un rendu de texte similaire ? Pas encore à la même qualité pour le texte multilingue. Les modèles open-weight ont comblé l'écart en matière de composition mais restent en retard sur les écritures CJK et indiennes.
