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

# MAI-Image-2.6 Génération d’images

> Texte-image, retouche d’une image, composition avec jusqu’à 5 images de référence et recherche web. Versions haute qualité et Flash.

## Choix du modèle

| ID du modèle | Caractéristiques |
| - | - |
| `mai-image-2.6` | Version haute qualité pour les usages privilégiant le rendu |
| `mai-image-2.6-flash` | Version plus rapide et moins chère, avec une qualité légèrement inférieure |

Les deux modèles ont les mêmes capacités et paramètres et génèrent 1 image par requête. Consultez les [tarifs des modèles](https://apimart.ai/pricing) pour les prix applicables.

<Info>
  Cet endpoint est asynchrone. Après soumission, récupérez l’ID dans `data[0].task_id`, puis utilisez la [consultation des tâches](/fr/api-reference/tasks/status). Interrogez toutes les 3–5 secondes avec un délai d’attente global de 3 minutes. Arrêtez lorsque l’état est `completed` ou `failed`.
</Info>

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.apimart.ai/v1/images/generations \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "mai-image-2.6",
      "prompt": "Affiche photoréaliste d’un campus universitaire au coucher du soleil, éclairage cinématographique",
      "size": "16:9",
      "resolution": "2K"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.apimart.ai/v1/images/generations",
      headers={"Authorization": "Bearer <token>"},
      json={
          "model": "mai-image-2.6",
          "prompt": "Affiche photoréaliste d’un campus universitaire au coucher du soleil, éclairage cinématographique",
          "size": "16:9",
          "resolution": "2K"
      }
  )
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.apimart.ai/v1/images/generations", {
    method: "POST",
    headers: {
      Authorization: "Bearer <token>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "mai-image-2.6",
      prompt: "Affiche photoréaliste d’un campus universitaire au coucher du soleil, éclairage cinématographique",
      size: "16:9",
      resolution: "2K"
    })
  });
  if (!response.ok) throw new Error(await response.text());
  console.log(await response.json());
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "code": 200,
    "data": [
      {
        "status": "submitted",
        "task_id": "task_01K..."
      }
    ]
  }
  ```
</ResponseExample>

## En-têtes de requête

<ParamField header="Authorization" type="string" required>
  Authentification Bearer au format `Bearer <token>`, où `<token>` est votre APIMart API Key.
</ParamField>

## Paramètres de requête

<ParamField body="model" type="string" required>
  ID du modèle : `mai-image-2.6` ou `mai-image-2.6-flash`.
</ParamField>

<ParamField body="prompt" type="string" required>
  Description de l’image ou instructions de retouche. Chinois et anglais pris en charge, jusqu’à environ 32 000 tokens (pas des caractères).
</ParamField>

<ParamField body="size" type="string" default="1:1">
  Accepte un rapport d’aspect (`16:9`), des dimensions en pixels (`1536x1024`) ou `auto`.

  * Rapport d’aspect : tout rapport d’entiers entre `1:4` et `4:1`, avec `resolution`.
  * Pixels : formats `largeurxhauteur`, `largeur*hauteur` ou `largeur×hauteur`. Dans ce cas, `resolution` ne détermine pas les dimensions.
  * `auto` : le modèle choisit le rapport d’aspect selon le prompt.

  Uniquement pour le texte-image. Avec des images de référence, le modèle détermine les dimensions.
</ParamField>

<ParamField body="resolution" type="string" default="1K">
  Accepte `1K` et `2K`, y compris en minuscules. Les autres niveaux, comme `4K`, renvoient HTTP 400.

  Détermine le niveau de taille en texte-image avec un rapport d’aspect. N’intervient pas dans le calcul si les pixels sont spécifiés directement. Ne permet pas de définir les dimensions en image-image.
</ParamField>

<ParamField body="width" type="integer">
  Largeur exacte en pixels, à fournir avec `height`. Cette paire prime sur `size` et `resolution` pour les dimensions en texte-image.

  Largeur et hauteur doivent être au moins égales à 768, avec au maximum 2 359 296 pixels au total. Utilisez des multiples de 32 ; sinon chaque dimension est arrondie au multiple de 32 inférieur.

  Ce paramètre ne détermine pas les dimensions en image-image.
</ParamField>

<ParamField body="height" type="integer">
  Hauteur exacte en pixels, à fournir avec `width`, selon les contraintes ci-dessus. Ne détermine pas les dimensions en image-image.
</ParamField>

<ParamField body="image_urls" type="string[]">
  Liste de références, jusqu’à 5 images. Omettez pour le texte-image ; fournissez une image pour la retouche, plusieurs pour une composition.

  Chaque élément accepte une URL HTTP(S) d’image accessible publiquement ou une Data URL Base64 comme `data:image/png;base64,...`.

  JPEG et PNG sont acceptés ; WEBP et GIF sont convertis automatiquement en PNG. Les URL doivent être accessibles publiquement, sinon la tâche échoue.

  **En image-image, le modèle détermine les dimensions selon les références**, soit environ 1 million de pixels avec un rapport similaire. `size`, `resolution`, `width` et `height` ne permettent pas de fixer ces dimensions.
</ParamField>

<ParamField body="auto_aspect_ratio" type="boolean" default="false">
  Avec `true`, le modèle choisit le rapport selon le prompt, ce qui équivaut à `size: "auto"`.
</ParamField>

<ParamField body="web_grounding" type="boolean" default="false">
  Avec `true`, recherche des informations en temps réel avant la génération, utile pour les personnes, lieux ou événements réels.
</ParamField>

<ParamField body="n" type="integer" default="1">
  Seule la valeur `1` est acceptée. Soumettez des tâches séparées pour plusieurs images. Une valeur supérieure à 1 renvoie HTTP 400.
</ParamField>

## Dimensions en texte-image

| Besoin | Paramètres |
| - | - |
| Carré par défaut | Omettre les paramètres de taille : `1:1` + `1K`, sortie 1024×1024 |
| Résolution + rapport d’aspect | `size: "16:9"`, `resolution: "2K"` |
| Pixels exacts | `size: "1536x1024"`, ou `width: 1536`, `height: 1024` |
| Rapport automatique | `size: "auto"` ou `auto_aspect_ratio: true` |

Priorité en texte-image : paire `width` / `height` → `size` en pixels → `size` en rapport d’aspect combiné à `resolution`.

### Niveaux et rapports d’aspect

| Rapport d’aspect | 1K | 2K |
| - | - | - |
| 1:1 | 1024×1024 | 1536×1536 |
| 4:3 / 3:4 | 1152×864 / 864×1152 | 1760×1312 / 1312×1760 |
| 3:2 / 2:3 | 1248×832 / 832×1248 | 1856×1248 / 1248×1856 |
| 16:9 / 9:16 | 1344×768 / 768×1344 | 2048×1152 / 1152×2048 |
| 2:1 / 1:2 | 1536×768 / 768×1536 | 2144×1056 / 1056×2144 |
| 21:9 / 9:21 | 1792×768 / 768×1792 | 2336×992 / 992×2336 |
| 4:1 / 1:4 | 3072×768 / 768×3072 | 3072×768 / 768×3072 |

Les dimensions sont converties en multiples de 32. Comme le petit côté doit atteindre 768, les rapports extrêmes peuvent dépasser environ 1 million de pixels même en `1K`. La facturation utilise les tokens correspondant aux pixels réellement produits.

### Contraintes des pixels exacts

* Largeur et hauteur : au moins 768 chacune.
* Largeur × hauteur : au maximum 2 359 296 (1536 × 1536).
* Chaque dimension est arrondie au multiple de 32 inférieur. Par exemple, `1000x1000` produit `992x992`. Utilisez des multiples de 32 pour des dimensions exactes.

`1536x1024`, `2048x1152` et `3072x768` sont acceptés. `512x512` est rejeté car les côtés sont trop petits ; `2048x2048` dépasse la limite totale de pixels.

<Warning>
  La limite porte sur le **nombre total de pixels**, pas sur un maximum de 1536 par côté. `2048x1152` et `3072x768` sont donc valides, mais le niveau 4K n’est pas pris en charge. Ces réglages s’appliquent uniquement au texte-image.
</Warning>

## Exemples de requêtes

### Pixels exacts et recherche web

```json theme={null}
{
  "model": "mai-image-2.6-flash",
  "prompt": "La tour Eiffel de nuit avec des feux d’artifice, style affiche de voyage",
  "width": 2048,
  "height": 1152,
  "web_grounding": true
}
```

### Retouche d’une image

```json theme={null}
{
  "model": "mai-image-2.6",
  "prompt": "Rendez le vélo bleu et ajoutez un petit chien à côté",
  "image_urls": ["https://example.com/bicycle.png"]
}
```

### Composition de plusieurs images

```json theme={null}
{
  "model": "mai-image-2.6-flash",
  "prompt": "Combinez les deux images de référence en une photo de produit épurée et futuriste",
  "image_urls": [
    "https://example.com/first.png",
    "https://example.com/second.jpg"
  ]
}
```

Remplacez les URL d’exemple par des URL d’images accessibles.

## Paramètres non pris en charge

`quality`, `style`, `background`, `output_format`, `response_format` et `mask_url` ne sont pas pris en charge et sont ignorés. La sortie est toujours en PNG. La retouche par masque n’est pas prise en charge.

## Réponse de soumission

<ResponseField name="code" type="integer">
  Code de statut de la réponse. `200` indique un succès.
</ResponseField>

<ResponseField name="data" type="array">
  Résultat de la soumission.

  <Expandable title="Afficher les champs de la tâche">
    <ResponseField name="status" type="string">
      `submitted` indique une soumission réussie, pas la fin de la génération.
    </ResponseField>

    <ResponseField name="task_id" type="string">
      ID de tâche pour consulter l’état et les résultats.
    </ResponseField>
  </Expandable>
</ResponseField>

## Consulter les résultats

```bash theme={null}
curl --request GET \
  --url https://api.apimart.ai/v1/tasks/task_01K... \
  --header 'Authorization: Bearer <token>'
```

Exemple de réponse réussie (l’URL d’image est fictive) :

```json theme={null}
{
  "code": 200,
  "data": {
    "id": "task_01K...",
    "status": "completed",
    "progress": 100,
    "result": {
      "images": [
        {
          "url": ["https://example.com/generated-image.png"]
        }
      ]
    }
  }
}
```

| État | Action |
| - | - |
| `pending` | En attente ; continuer les interrogations |
| `processing` | En cours ; continuer les interrogations |
| `completed` | Succès ; récupérer les liens dans le tableau `data.result.images[0].url` |
| `failed` | Échec ; consulter `data.error.message` et arrêter les interrogations. Remboursement intégral |

## Facturation

Facturation selon les tokens d’entrée et de sortie réellement utilisés. Voir les [tarifs des modèles](https://apimart.ai/pricing).

* Tokens de sortie image = largeur réelle × hauteur ÷ 1024. 1024×1024 correspond à 1024 tokens, 1536×1536 à 2304 tokens.
* Les tokens d’entrée par référence correspondent approximativement à sa largeur × hauteur ÷ 1024. Les prompts textuels comptent aussi en entrée.
* Un montant selon le niveau est prélevé à la soumission, puis ajusté après succès à la consommation réelle par remboursement ou prélèvement complémentaire.
* Les tâches échouées sont automatiquement remboursées intégralement. Les erreurs de paramètres rejetées à la soumission ne créent aucune tâche et ne sont pas facturées.

## Erreurs courantes

| HTTP | Cause et action |
| - | - |
| 400 | `resolution` non prise en charge, comme `4K` ; utiliser `1K` ou `2K` |
| 400 | Largeur ou hauteur inférieure à 768, ou total supérieur à 2 359 296 pixels |
| 400 | Seul `width` ou `height` est fourni ; les deux sont requis ensemble |
| 400 | Rapport hors de la plage `1:4` à `4:1`, ou format `size` non reconnu |
| 400 | `n` supérieur à 1 ou plus de 5 références |

En cas d’échec, vérifiez les erreurs de téléchargement ou de sécurité du contenu, puis modifiez le prompt ou les références avant de réessayer. La retouche de photos réalistes impliquant des mineurs peut être bloquée par les règles de sécurité.


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