Le service d’édition d’images OpenAI permet de transmettre un nombre arbitraire d’images et d’instructions, et de recevoir en sortie des images modifiées. Actuellement, l’API supporte simultanémentDocumentation Index
Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
Use this file to discover all available pages before exploring further.
dall-e-2, gpt-image-1, le dernier modèle gpt-image-2, ainsi que la série de modèles nano-banana / nano-banana-2 / nano-banana-pro accessibles via la même interface.
Ce document présente principalement le processus d’utilisation de l’API OpenAI Images Edits, qui permet d’utiliser facilement les fonctionnalités officielles d’édition d’images OpenAI.
Processus de demande
Pour utiliser l’API OpenAI Images Edits, rendez-vous d’abord sur la page OpenAI Images Edits API et cliquez sur le bouton « Acquire » pour obtenir les identifiants nécessaires à la requête :
Si vous n’êtes pas connecté ou inscrit, vous serez automatiquement redirigé vers la page de connexion pour vous inscrire et vous connecter. Après inscription et connexion, vous serez automatiquement ramené sur cette page.
Lors de la première demande, un quota gratuit est offert, permettant d’utiliser cette API gratuitement.
Modèle GPT-Image-2
gpt-image-2 offre des améliorations très nettes par rapport à gpt-image-1 dans le contexte de l’édition d’images :
- Maintien plus stable de la structure : lors du changement de peau, de palette de couleurs ou d’arrière-plan, la mise en page et la composition originales sont presque intactes.
- Conservation plus précise du texte : les images contenant du texte (infographies, affiches, menus) conservent un texte clair et lisible après édition.
- Support du passage direct d’URL : en plus du traditionnel téléchargement de fichiers en
multipart/form-data,gpt-image-2supporte également l’envoi d’URL d’image au format JSON, sans besoin de télécharger l’image localement, idéal pour une intégration côté serveur. - Support du rééchantillonnage haute résolution : il est possible de fournir une image originale 1K et de demander une sortie 2K ou 4K via le paramètre
size, le modèle effectuant l’agrandissement lors de l’édition.
Valeurs supportées pour size et niveaux de tarification
Les contraintes sur size sont identiques à celles de l’API de génération : gpt-image-2 accepte size à auto, vide, ou au format WIDTHxHEIGHT. Toute autre forme renvoie une erreur 400. La tarification se divise en deux niveaux, indépendamment de la résolution d’origine, basée uniquement sur la valeur de size demandée :
- Prix standard 1K : toute dimension recommandée 1K dans le tableau ci-dessous, ou alias courant 1K (
1254x1254,1672x941,941x1672). - Autres niveaux (×1.5) : dimensions recommandées 2K / 4K dans le tableau, ou toute valeur personnalisée
WIDTHxHEIGHT.
| Ratio | 1K (prix standard) | 2K recommandé (×1.5) | 4K recommandé (×1.5) |
|---|---|---|---|
| 1:1 | 1024x1024 | 2048x2048 | 2880x2880 |
| 4:3 | 1536x1024 | 2048x1536 | 3264x2448 |
| 3:4 | 1024x1536 | 1536x2048 | 2448x3264 |
| 16:9 | 1792x1024 | 2048x1152 | 3840x2160 |
| 9:16 | 1024x1792 | 1152x2048 | 2160x3840 |
Par exemple : pour une image originale1024x1024, sisizeest2048x2048, le modèle rééchantillonne et édite en 2K, facturé au niveau « autre » ; sisizeest3840x2160, la sortie est en 4K paysage, facturée aussi au niveau « autre » ; sisizeestautoou omis, la facturation est au prix standard 1K.
À propos du paramètreVoici deux exemples concrets illustrant les capacités d’édition denL’API d’éditiongpt-image-2ne supporte pasn > 1: ce paramètre est silencieusement ignoré, que vous passiezn=1oun=10, une seule image est retournée par requête et facturée comme telle. Pour obtenir plusieurs résultats candidats, il faut lancer plusieurs requêtes en parallèle. Cette limitation s’applique aussi àgpt-image-1/gpt-image-1.5et à la sérienano-banana. Seuldall-e-2supporte nativementn > 1.
gpt-image-2.
Mode d’appel 1 : JSON + URL d’image (recommandé)
Envoyez directement une requête enapplication/json avec le champ image contenant l’URL d’une image, le modèle la récupérera et éditera selon le prompt.
Par exemple, l’image originale ci-dessous est une infographie générée avec gpt-image-2 :


Astuce : le champimageaccepte aussi un tableau, par exemple"image": ["url1", "url2", "url3"], jusqu’à 16 images de référence simultanées, permettant au modèle de s’inspirer de plusieurs images pour l’édition.
Mode d’appel 2 : JSON + plusieurs images de référence
gpt-image-2 supporte la prise en compte simultanée de plusieurs images pour générer le résultat final, par exemple pour combiner plusieurs photos de produits dans un panier cadeau :
Exemple de scénario : changement de style + maintien de la structure
Voici un autre exemple, où une étagère en bois est remplacée par une étagère flottante moderne, tout en conservant strictement le nombre et l’arrangement des livres sur chaque niveau. Image originale (étagère en bois générée avecgpt-image-2) :

task_id: e9544dba-727e-44a2-81e1-223d49869380) :

Mode d’appel 3 : multipart/form-data (compatible OpenAI SDK)
Si vous utilisez déjà le SDK Python officiel OpenAI, la méthode d’upload enmultipart/form-data est toujours valide, il suffit de changer model en gpt-image-2 :
OPENAI_BASE_URL à https://api.xhuoapi.ai/v1/openai et OPENAI_API_KEY à votre token obtenu :
Série de modèles Nano Banana
La sérienano-banana est également accessible via /openai/images/edits en changeant simplement le paramètre model par l’un des modèles suivants :
| Modèle | Tarification (Crédits / requête) | Cas d’usage |
|---|---|---|
nano-banana | 0.14 | Édition d’image classique, la plus rapide et économique |
nano-banana-2 | 0.28 | Qualité et détails nettement améliorés |
nano-banana-pro | 0.35 | Modèle phare, meilleure conservation de la structure, du texte et du style |
Important : portée des paramètres supportés Nano Banana, via une couche d’adaptation, supporte uniquement les paramètres :model,prompt,image.
imagepeut être uploadé enmultipart/form-data(converti en interne endata:<mime>;base64,...pour l’upstream) ou passé en chaîne URL dans un champ formulaire.- Les paramètres
mask,n,size,response_formatne sont pas supportés et seront ignorés.- La structure de réponse suit le format OpenAI (
data[].url), maiscreatedest toujours0, pas deb64_json, etrevised_promptest toujours égal aupromptoriginal.
Appel via formulaire + URL d’image

Appel via formulaire + fichier local
Callback asynchrone
Le mécanisme de callback asynchrone viacallback_url fonctionne aussi avec nano-banana, le processus est identique aux autres modèles, voir la section Callback asynchrone ci-dessous.
Utilisation basique
Voici un exemple d’appel via CURL :authorization (sélectionnable dans la liste déroulante), le paramètre model (choix du modèle OpenAI, ici un seul modèle principal disponible, voir la liste fournie), le paramètre prompt (texte décrivant l’image à générer), et enfin image (chemin vers l’image à éditer). L’image à éditer est illustrée ci-dessous :

OPENAI_BASE_URL à https://api.xhuoapi.ai/v1/openai et OPENAI_API_KEY à votre token obtenu dans authorization. Sous Mac OS, vous pouvez définir ces variables avec :
gift-basket.png sera générée dans le répertoire courant, comme illustré ci-dessous :

dall-e-2, gpt-image-1 et gpt-image-2, ce dernier étant recommandé, voir la section Modèle GPT-Image-2.
Callback asynchrone
L’édition d’image via OpenAI Images Edits API peut prendre un certain temps. Si l’API ne répond pas rapidement, la connexion HTTP reste ouverte, consommant des ressources système supplémentaires. Pour pallier cela, l’API propose un support de callback asynchrone. Le processus est le suivant : le client ajoute un champcallback_url lors de la requête. L’API répond immédiatement avec un task_id identifiant la tâche. Une fois l’édition terminée, le résultat est envoyé en POST JSON à l’URL callback_url fournie, incluant aussi le task_id pour faire le lien avec la requête initiale.
Voici un exemple pratique.
Un webhook est un service HTTP capable de recevoir des requêtes. Le développeur doit remplacer l’URL par celle de son propre serveur HTTP. Pour la démonstration, on utilise le site public https://webhook.site/, qui fournit un URL webhook unique, comme montré ci-dessous :
Copiez cette URL, par exemple https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab, et utilisez-la comme webhook.
Ensuite, ajoutez le champ callback_url dans la requête avec cette URL, par exemple :
task_id :
task_id et les données d’image au format base64, identiques à un appel synchrone, permettant d’associer les résultats à la tâche.
Gestion des erreurs
Lors d’un appel API, en cas d’erreur, un code et un message d’erreur sont retournés, par exemple :400 token_mismatched: requête incorrecte, paramètres manquants ou invalides.400 api_not_implemented: requête incorrecte, paramètres manquants ou invalides.401 invalid_token: non autorisé, token d’authentification invalide ou absent.429 too_many_requests: trop de requêtes, limite de débit dépassée.500 api_error: erreur interne serveur.

