DocumentationOuvrir Moon AI
Parcourir la documentation

Images

Référence de POST /v1/images/generations et POST /v1/images/edits : créer et retoucher des images au format d’OpenAI, tailles, formats, limites et coûts.

Sur cette page

Deux points d’accès au format de l’API Images d’OpenAI : POST /v1/images/generations crée des images à partir d’une description, POST /v1/images/edits les crée à partir d’une ou plusieurs images. Les images reviennent dans la réponse, en base64 : Moon AI n’en garde aucune copie et ne fournit pas d’adresse hébergée.

Créer une imageLien vers la section Créer une image

HTTP
POST https://api.realmoon.ai/v1/images/generations
  • Authentification : clé sk-moon-… avec la portée inference (voir Authentification).
  • Corps : JSON, 1 Mo au plus.
  • Réponse : un objet image (voir Réponse).

ParamètresLien vers la section Paramètres

ParamètreTypeObligatoireDescription
modelchaîneouiUn modèle de type image de GET /v1/models?type=image.
promptchaîneouiDescription de l’image, 8 000 caractères au plus.
nentiernonNombre d’images, de 1 à 4. 1 par défaut. Facturé par image produite.
sizechaînenonauto ou LARGEURxHAUTEUR, de 64 à 8 192 pixels de côté. Sert à choisir le format et la taille les plus proches que le modèle propose (voir Taille et format).
aspect_ratiochaînenonFormat parmi ceux du modèle (aspect_ratios dans /v1/models), par exemple 1:1, 16:9, 2:3. Prioritaire sur le format déduit de size.
image_sizechaînenon1K, 2K ou 4K, pour les modèles qui proposent plusieurs tailles (image_sizes). Prioritaire sur la taille déduite de size.
qualitychaînenonauto, low, medium, high, standard ou hd. Accepté pour la compatibilité, sans effet : le modèle choisit lui-même.
response_formatchaînenonb64_json (par défaut) ou url. Avec url, l’image arrive sous forme d’adresse data:.
streambooléennonSeule la valeur false est acceptée.

Les paramètres user, style, moderation, background, output_compression, output_format, partial_images et input_fidelity sont acceptés et sans effet. Tout autre paramètre est refusé avec 400 unknown_parameter. Une image envoyée dans image ou images est refusée ici : utilisez /v1/images/edits.

ExempleLien vers la section Exemple

cURL
curl https://api.realmoon.ai/v1/images/generations \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "google/gemini-3.1-flash-image",
        "prompt": "Une affiche rétro d’une fusée au-dessus de Paris",
        "size": "1024x1536"
      }' \
  | jq -r '.data[0].b64_json' | base64 --decode > affiche.png
Python
import base64
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.realmoon.ai/v1", api_key=os.environ["MOONAI_API_KEY"])

img = client.images.generate(
    model="google/gemini-3.1-flash-image",
    prompt="Une affiche rétro d’une fusée au-dessus de Paris",
    size="1024x1536",
    # Paramètre propre à Moon AI : passé par extra_body.
    extra_body={"image_size": "2K"},
)
with open("affiche.png", "wb") as f:
    f.write(base64.b64decode(img.data[0].b64_json))
JavaScript
import fs from 'node:fs';
import OpenAI from 'openai';

const client = new OpenAI({ baseURL: 'https://api.realmoon.ai/v1', apiKey: process.env.MOONAI_API_KEY });

const img = await client.images.generate({
  model: 'google/gemini-3.1-flash-image',
  prompt: 'Une affiche rétro d’une fusée au-dessus de Paris',
  size: '1024x1536',
  // Paramètre propre à Moon AI, envoyé tel quel.
  image_size: '2K',
});
fs.writeFileSync('affiche.png', Buffer.from(img.data[0].b64_json, 'base64'));

Taille et formatLien vers la section Taille et format

Quand vous donnez size sans aspect_ratio ni image_size :

  • le format retenu est celui du modèle le plus proche du rapport largeur sur hauteur ;
  • la taille retenue est 1K si le plus grand côté fait au plus 1 100 pixels, 2K jusqu’à 2 200 pixels, 4K au-delà (ou la plus grande taille du modèle).

L’image produite peut donc avoir des dimensions un peu différentes de size. Sans size, aspect_ratio ni image_size, le modèle choisit.

Retoucher une imageLien vers la section Retoucher une image

HTTP
POST https://api.realmoon.ai/v1/images/edits
  • Authentification : clé sk-moon-… avec la portée inference.
  • Corps : multipart/form-data (avec l’en-tête Content-Length) ou JSON, 90 Mo au plus.
  • Réponse : un objet image (voir Réponse).

ParamètresLien vers la section Paramètres

Tous les paramètres de la création s’appliquent, plus les images :

ParamètreTypeObligatoireDescription
imagefichier, chaîne ou tableauouiEn multipart : un ou plusieurs fichiers dans le champ image ou image[]. En JSON : une chaîne ou une liste de chaînes (adresse data: en base64, base64 seul, ou adresse https://).
imagestableaunonEn JSON, forme d’OpenAI : [{"image_url": "…"}]. S’ajoute à image.
masknonNon accepté (400 unsupported_parameter) : décrivez la modification dans la consigne.
RègleValeur
Types d’imagePNG, JPEG, WebP, GIF
Taille d’une image20 Mo et 40 mégapixels au plus
Nombre d’imagesmax_input_images du modèle dans /v1/models
Taille du corps90 Mo au plus

Une image donnée par une adresse https:// est lue par le fournisseur du modèle, jamais par Moon AI.

ExempleLien vers la section Exemple

cURL
curl https://api.realmoon.ai/v1/images/edits \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -F model=google/gemini-3.1-flash-image \
  -F prompt="Même photo, en noir et blanc" \
  -F image=@photo.png
Python
edit = client.images.edit(
    model="google/gemini-3.1-flash-image",
    image=open("photo.png", "rb"),
    prompt="Même photo, en noir et blanc",
)
with open("photo-nb.png", "wb") as f:
    f.write(base64.b64decode(edit.data[0].b64_json))

# Plusieurs images : une liste.
combo = client.images.edit(
    model="google/gemini-3.1-flash-image",
    image=[open("produit.png", "rb"), open("decor.png", "rb")],
    prompt="Le produit de la première image posé dans le décor de la seconde",
)
JavaScript
const edit = await client.images.edit({
  model: 'google/gemini-3.1-flash-image',
  image: fs.createReadStream('photo.png'),
  prompt: 'Même photo, en noir et blanc',
});
fs.writeFileSync('photo-nb.png', Buffer.from(edit.data[0].b64_json, 'base64'));

Le même appel en JSON, avec une image en base64 et une image à une adresse :

Corps JSON
{
  "model": "google/gemini-3.1-flash-image",
  "prompt": "Le produit de la première image posé dans le décor de la seconde",
  "images": [
    { "image_url": "data:image/png;base64,iVBORw0KGgo…" },
    { "image_url": "https://example.com/decor.jpg" }
  ]
}

RéponseLien vers la section Réponse

Les deux points d’accès renvoient le même objet.

Réponse
{
  "created": 1793577600,
  "model": "google/gemini-3.1-flash-image",
  "data": [
    { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…", "output_format": "png" }
  ],
  "usage": { "images": 1, "credits": 650 }
}
ChampTypeDescription
createdentierDate en secondes Unix.
modelchaîneLe modèle appelé.
data[].b64_jsonchaîneL’image en base64, avec response_format: "b64_json".
data[].urlchaîneL’image en adresse data:, avec response_format: "url".
data[].output_formatchaîneFormat du fichier : png, jpeg, webp, gif ou svg.
usage.imagesentierNombre d’images produites.
usage.creditsentierCrédits facturés pour la requête.

Quand vous demandez plusieurs images et que certaines échouent, la réponse ne contient que celles qui ont été produites : comparez usage.images à n.

En-têtes : X-Moon-Request-Id, X-Moon-Prompt-Storage: none, X-Moon-Blur: not_applied (Moon Blur ne s’applique pas aux images ni à leur description) et Cache-Control: no-store.

ModèlesLien vers la section Modèles

Liste au 5 novembre 2026 ; la liste à jour, avec les prix, vient de GET /v1/models?type=image.

ModèleFormatsTaillesImages en entrée
google/gemini-3.1-flash-image (Nano Banana 2)1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91K, 2K, 4K8
google/gemini-3-pro-image (Nano Banana Pro)1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91K, 2K, 4K8
google/gemini-3.1-flash-lite-image1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:31K, 2K, 4K4
openai/gpt-image-2, openai/gpt-image-1-mini1:1, 3:2, 2:3une seule4
black-forest-labs/flux.2-pro, flux.2-max, flux.2-klein-4b, flux-3-image1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3une seule4
bytedance-seed/seedream-5-0-pro, seedream-5-0-lite1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3une seule4
qwen/qwen-image-3, x-ai/grok-imagine-image-2.01:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3une seule4
recraft/recraft-v4.1, recraft/recraft-v4.1-vector (sortie SVG)1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3une seule4

image_size n’est accepté que par les modèles à plusieurs tailles.

CoûtsLien vers la section Coûts

  • Avant l’appel, la requête retient le plus qu’elle peut coûter : max_credits_per_unit (ou celui de la taille demandée) fois le nombre d’images, plus les images envoyées.
  • Après, vous payez le coût réel annoncé par le fournisseur (à défaut, le prix de la liste), et le reste de la retenue est rendu aussitôt.
  • Une requête qui échoue, refusée avant toute création, ou coupée par notre délai, ne coûte rien.
  • Un modèle qui répond par du texte au lieu d’une image (refus de sécurité, consigne mal comprise) facture le texte qu’il a écrit, et l’API répond 400 content_policy_violation : reformulez la consigne.

Voir Coûts et porte-monnaie pour la réserve et le règlement.

LimitesLien vers la section Limites

  • Toutes les images d’une requête sont faites en même temps ; la requête répond en 90 secondes environ au plus.
  • Au plus 8 requêtes d’images en cours à la fois par workspace (au-delà : 429 too_many_concurrent, Retry-After: 5).

ErreursLien vers la section Erreurs

HTTPcodeSignification
400missing_required_parametermodel, prompt ou image absent.
400unknown_parameterParamètre inconnu (param le nomme).
400unsupported_valueValeur hors de ce que le modèle accepte (n, size, aspect_ratio, image_size, quality, response_format).
400unsupported_parametermask, stream, image_size sur un modèle à taille unique, image envoyée à /generations, ou paramètre refusé par le modèle (avec une indication).
400unsupported_modelLe modèle ne fait pas de retouche.
400string_above_max_lengthConsigne de plus de 8 000 caractères.
400too_many_imagesPlus d’images que max_input_images.
400invalid_imageImage illisible, d’un autre type, ou de plus de 40 mégapixels.
400content_policy_violationLe système de sécurité du modèle a refusé l’image.
400invalid_request_errorLe modèle a refusé la requête sans autre précision.
400nullCorps JSON invalide, base64 invalide, champ de fichier inattendu ou formulaire illisible.
403org_policyLes règles de votre organisation refusent ce modèle.
404model_not_foundModèle inconnu ou qui ne sert pas ce point d’accès.
411length_requiredEnvoi multipart sans en-tête Content-Length.
413request_too_large, file_too_largeCorps ou image trop volumineux.
429too_many_concurrentTrop de requêtes d’images en cours dans le workspace.
429upstream_rate_limitedLe modèle est surchargé : réessayez après Retry-After (10 secondes).
502, 504upstream_error, upstream_timeoutLe modèle a échoué ou n’a pas répondu à temps.
503upstream_unavailableLe service est momentanément indisponible.

Les erreurs de clé, de solde et de plafonds sont dans Erreurs.

Voir aussiLien vers la section Voir aussi

Moon AI

Moon AI en action

0:00

À découvrir

Captures de chat.realmoon.ai du 29 octobre 2026, avec des données fictives.

Moon AI

Vos préférences

Aucun suivi publicitaire.

Ce site ne dépose aucun cookie publicitaire ni cookie de mesure d’audience : notre serveur compte les visites sans cookie. Votre thème et la fermeture de l’information sur les cookies sont mémorisés sur cet appareil.

L’application Moon AI possède ses propres réglages de confidentialité.