> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bettertoken.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# API Gemini de retouche d’images

> Retouchez des images Nano Banana avec l’API Gemini de BetterToken. Envoyez références et consignes, testez la requête en ligne et consultez la réponse contenant l’image.

export const GeminiImageInput = ({labels}) => {
  const [images, setImages] = useState([]);
  const [busy, setBusy] = useState(false);
  const [feedback, setFeedback] = useState("");
  const selection = useRef(0);
  const inputId = useId();
  const readImages = async event => {
    const version = ++selection.current;
    const files = Array.from(event.target.files || []);
    setImages([]);
    setFeedback("");
    if (files.some(file => !["image/png", "image/jpeg"].includes(file.type))) {
      setFeedback(labels[4]);
      setBusy(false);
      return;
    }
    setBusy(true);
    try {
      const next = await Promise.all(files.map(file => new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = () => resolve({
          name: file.name,
          type: file.type,
          data: String(reader.result).split(",")[1]
        });
        reader.onerror = reject;
        reader.onabort = reject;
        reader.readAsDataURL(file);
      })));
      if (version === selection.current) setImages(next);
    } catch {
      if (version === selection.current) setFeedback(labels[5]);
    } finally {
      if (version === selection.current) setBusy(false);
    }
  };
  const copy = async value => {
    try {
      await navigator.clipboard.writeText(value);
      setFeedback(labels[2]);
    } catch {
      setFeedback(labels[3]);
    }
  };
  return <section className="bt-gemini-input not-prose" aria-label={labels[0]}>
      <label htmlFor={inputId}>{labels[0]}</label>
      <input id={inputId} type="file" accept="image/png,image/jpeg" multiple onChange={readImages} />
      <p>{labels[7]}</p>
      <p role="status" aria-live="polite">{busy ? labels[6] : feedback}</p>
      {images.map((image, index) => <div key={index} className="bt-gemini-input-image">
          <div className="bt-gemini-input-header">
            <img src={"data:" + image.type + ";base64," + image.data} alt={image.name} />
            <span>{image.name}</span>
            <code>{image.type}</code>
            <button type="button" title={labels[1]} aria-label={labels[1] + " " + image.name} onClick={() => copy(image.data)}><Icon icon="copy" size={16} /></button>
          </div>
          <textarea aria-label={labels[1] + " " + image.name} rows={3} readOnly value={image.data} spellCheck={false} />
        </div>)}
    </section>;
};

Envoyez une référence et une consigne à Nano Banana Pro, 2 ou 2.1 pour obtenir une image retouchée.

`POST /v1beta/models/{model}:generateContent`

La génération par texte et la retouche utilisent le même endpoint. La retouche ajoute une image de référence à la requête.

## Préparer les références

Placez le texte et chaque image dans des éléments distincts. `inlineData.data` contient le base64 brut sans préfixe Data URL. Utilisez des références PNG ou JPEG ; cet endpoint accepte du JSON, pas de multipart ni d’URL d’image.

Avant l’envoi, remplacez `REPLACE_WITH_IMAGE_BASE64` par le base64 de votre image et adaptez `inlineData.mimeType` au fichier. L’instruction d’exemple décrit une tasse ; modifiez-la si votre sujet est différent.

<GeminiImageInput labels={["Images de référence","Copier le base64","Copié","Sélectionnez et copiez le base64 ci-dessous.","Choisissez des images PNG ou JPEG.","Lecture impossible. Sélectionnez à nouveau l’image.","Préparation des images...","Les images sont converties localement. Dans le Playground, remplacez inlineData.data par le base64 copié et indiquez le type MIME affiché dans inlineData.mimeType. Placez chaque image supplémentaire dans un élément distinct."]} />

## Tester une requête

Préparez d’abord la référence. Saisissez BetterToken API Key dans **x-goog-api-key** et choisissez **model**. Dans **contents**, indiquez l’instruction et les données de l’image. Vérifiez que `inlineData.data` a été remplacé et que `inlineData.mimeType` correspond au fichier, puis cliquez sur **Send**.

<Note>
  Cliquer sur **Send** envoie une véritable requête de génération susceptible d’être facturée. Attendez la réponse synchrone. Après une expiration ou une déconnexion, vérifiez la consommation et le résultat avant de renvoyer la requête.
</Note>

Les trois proposent `1K`, `2K` et `4K`. Nano Banana 2 et 2.1 prennent en charge 14 proportions, Pro en propose 10. `X-BetterToken-Max-Images` plafonne les images livrées et facturées sans en garantir le nombre. [Proportions](/fr/api-reference/nano-banana#aspect-ratios)

<Warning>
  BetterToken API ne prend pas en charge la génération avec recherche, y compris Google Web Search et Image Search grounding. N’ajoutez pas d’outils de recherche.
</Warning>

Utilisez `generateContent` sans streaming. Cette intégration ne prend pas en charge Files / `fileData`, Batch, Interactions ni le streaming.

## Lire la réponse

Les images figurent dans `candidates[].content.parts[].inlineData`. Parcourez les éléments, ignorez `thought: true`, décodez `data` et choisissez l’extension selon `mimeType`. L’image n’est pas forcément le premier élément ni toujours au format PNG.

## Guides associés

* [Génération par texte](/fr/api-reference/gemini-images-generations)
* [SDK, sauvegarde et retouches successives](/fr/api-reference/nano-banana)
* [Présentation des modèles](/fr/model-updates/nano-banana)
* <a href={"https://bettertoken.ai/pricing"}>Catalogue de modèles</a>


## OpenAPI

````yaml api-reference/gemini-images-edits.fr.json POST /v1beta/models/{model}:generateContent
openapi: 3.1.0
info:
  title: API Gemini de retouche d’images
  description: >-
    Retouchez des images Nano Banana avec l’API Gemini de BetterToken. Envoyez
    références et consignes, testez la requête en ligne et consultez la réponse
    contenant l’image.
  version: 1.0.0
servers:
  - url: https://bettertoken.ai
security:
  - geminiApiKey: []
paths:
  /v1beta/models/{model}:generateContent:
    post:
      summary: API Gemini de retouche d’images
      description: >-
        Envoyez une référence et une consigne à Nano Banana Pro, 2 ou 2.1 pour
        obtenir une image retouchée. BetterToken API ne prend pas en charge la
        génération avec recherche, y compris Google Web Search et Image Search
        grounding. N’ajoutez pas d’outils de recherche.
      operationId: editGeminiImage_fr
      parameters:
        - name: model
          in: path
          required: true
          description: Model ID BetterToken. Choisissez un des trois modèles Nano Banana.
          schema:
            type: string
            enum:
              - nano-banana-pro
              - nano-banana-2
              - nano-banana-2.1
            default: nano-banana-2.1
        - name: X-BetterToken-Max-Images
          in: header
          description: >-
            Plafond d’images livrées et facturées, pas un nombre garanti. Valeur
            par défaut : 1.
          schema:
            type: integer
            minimum: 1
            maximum: 4
            default: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - contents
              properties:
                contents:
                  type: array
                  description: >-
                    Historique. Conservez le content complet du modèle et
                    thoughtSignature pour les retouches suivantes.
                  minItems: 1
                  items:
                    type: object
                    required:
                      - parts
                    properties:
                      role:
                        type: string
                        description: >-
                          user pour une nouvelle requête ; model pour les
                          réponses précédentes de l’historique.
                        enum:
                          - user
                          - model
                        default: user
                      parts:
                        type: array
                        description: >-
                          Texte et images. Séparez text et inlineData dans des
                          éléments distincts.
                        minItems: 1
                        items:
                          anyOf:
                            - type: object
                              required:
                                - text
                              properties:
                                text:
                                  type: string
                                  description: Description ou consigne de retouche.
                                  example: >-
                                    Rends la tasse rouge. Conserve sa forme, le
                                    fond et l’éclairage.
                              additionalProperties: true
                            - type: object
                              required:
                                - inlineData
                              properties:
                                inlineData:
                                  type: object
                                  description: Référence intégrée en base64.
                                  required:
                                    - mimeType
                                    - data
                                  properties:
                                    mimeType:
                                      type: string
                                      description: Type MIME de la référence.
                                      enum:
                                        - image/png
                                        - image/jpeg
                                      example: image/png
                                    data:
                                      type: string
                                      description: >-
                                        Octets originaux de l’image en base64,
                                        sans préfixe Data URL. Avant l’envoi,
                                        remplacez REPLACE_WITH_IMAGE_BASE64 par
                                        les données de votre propre PNG ou JPEG.
                                      contentEncoding: base64
                                      example: REPLACE_WITH_IMAGE_BASE64
                                  additionalProperties: false
                              additionalProperties: true
                    additionalProperties: false
                generationConfig:
                  type: object
                  description: Paramètres de génération.
                  properties:
                    responseModalities:
                      type: array
                      description: Demandez explicitement une sortie image.
                      items:
                        type: string
                        enum:
                          - IMAGE
                      default:
                        - IMAGE
                    candidateCount:
                      type: integer
                      enum:
                        - 1
                      default: 1
                      description: >-
                        Omettez ou utilisez l’entier 1. Ne transmettez pas n à
                        la racine.
                    imageConfig:
                      type: object
                      description: Paramètres de l’image produite.
                      properties:
                        imageSize:
                          type: string
                          description: Résolution. Utilisez K majuscule.
                          enum:
                            - 1K
                            - 2K
                            - 4K
                          default: 1K
                        aspectRatio:
                          type: string
                          description: >-
                            Proportions. Pro en accepte 10 ; 2 et 2.1 acceptent
                            aussi 1:4, 4:1, 1:8 et 8:1.
                          enum:
                            - '1:1'
                            - '1:4'
                            - '1:8'
                            - '2:3'
                            - '3:2'
                            - '3:4'
                            - '4:1'
                            - '4:3'
                            - '4:5'
                            - '5:4'
                            - '8:1'
                            - '9:16'
                            - '16:9'
                            - '21:9'
                          default: '1:1'
                      additionalProperties: false
                  additionalProperties: false
              additionalProperties: false
            example:
              contents:
                - role: user
                  parts:
                    - text: >-
                        Rends la tasse rouge. Conserve sa forme, le fond et
                        l’éclairage.
                    - inlineData:
                        mimeType: image/png
                        data: REPLACE_WITH_IMAGE_BASE64
              generationConfig:
                responseModalities:
                  - IMAGE
                candidateCount: 1
                imageConfig:
                  imageSize: 1K
                  aspectRatio: '1:1'
      responses:
        '200':
          description: Résultat. Vérifiez les images finales et finishReason.
          content:
            application/json:
              schema:
                type: object
                properties:
                  candidates:
                    type: array
                    items:
                      type: object
                      properties:
                        content:
                          type: object
                          properties:
                            role:
                              type: string
                            parts:
                              type: array
                              items:
                                type: object
                                properties:
                                  text:
                                    type: string
                                  thought:
                                    type: boolean
                                  thoughtSignature:
                                    type: string
                                  inlineData:
                                    type: object
                                    properties:
                                      mimeType:
                                        type: string
                                      data:
                                        type: string
                                        contentEncoding: base64
                        finishReason:
                          type: string
                  promptFeedback:
                    type: object
                    additionalProperties: true
                  usageMetadata:
                    type: object
                    additionalProperties: true
              example:
                candidates:
                  - content:
                      role: model
                      parts:
                        - inlineData:
                            mimeType: image/png
                            data: BASE64_IMAGE_DATA
                    finishReason: STOP
        '400':
          description: Paramètres invalides ou fonction non prise en charge.
        '401':
          description: API Key absente ou invalide.
        '402':
          description: Solde insuffisant.
        '429':
          description: Limite de requêtes ou service occupé.
        '500':
          description: Erreur de génération. Vérifiez le résultat avant de réessayer.
components:
  securitySchemes:
    geminiApiKey:
      type: apiKey
      in: header
      name: x-goog-api-key
      description: BetterToken API Key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.