> ## Documentation Index
> Fetch the complete documentation index at: https://germeytechnology-docs-remove-4o-image-nav.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# API de génération d’images OpenAI : demande et utilisation

> OpenAI generation 集成指南 - Ace Data Cloud

L’API de génération d’images OpenAI prend actuellement en charge plusieurs modèles de génération d’images, notamment le classique `dall-e-3`, le modèle avec une capacité de rendu de texte améliorée `gpt-image-1`, la dernière génération **`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. Tous peuvent générer des images de haute qualité à partir de descriptions textuelles.

Ce document présente principalement le processus d’utilisation de l’API de génération d’images OpenAI, qui permet d’utiliser facilement les fonctionnalités de génération d’images de la série OpenAI.

## Processus de demande

Pour utiliser l’API de génération d’images OpenAI, rendez-vous d’abord sur la page [OpenAI Images Generations API](https://platform.acedata.cloud/documents/openai-images-generations) et cliquez sur le bouton « Acquire » pour obtenir les identifiants nécessaires aux requêtes :

![](https://cdn.acedata.cloud/nyq0xz.png)

Si vous n’êtes pas encore connecté ou inscrit, vous serez automatiquement redirigé vers la page de connexion pour vous inscrire et vous connecter. Après connexion ou inscription, vous serez automatiquement ramené à la page actuelle.

Lors de la première demande, un quota gratuit est offert, vous permettant d’utiliser cette API gratuitement.

## Modèle GPT-Image-2

`gpt-image-2` est un modèle de génération d’images de nouvelle génération lancé par OpenAI. Par rapport à `dall-e-3` et `gpt-image-1`, il présente des améliorations notables dans les domaines suivants :

* **Meilleure capacité à suivre les instructions** : capable de comprendre précisément des instructions structurées complexes telles que la composition, le comptage, les relations de position, etc.
* **Rendu du texte plus clair** : dans des scénarios comme les affiches, menus, infographies, logos, les lettres et chiffres en anglais sont quasiment exempts d’erreurs.
* **Expression stylistique plus riche** : support natif de styles variés tels que portraits cinématographiques, affiches rétro, illustrations pour enfants, photographie de produit, infographies, etc.
* **Support natif multi-format + haute résolution** : couvre 5 formats (1:1, 4:3, 3:4, 16:9, 9:16) avec 3 résolutions (1K / 2K / 4K).

La méthode d’appel est identique aux autres modèles, il suffit de définir le champ `model` à `gpt-image-2`. L’URL retournée dans le résultat est un lien d’image hébergée en permanence sur `platform.cdn.acedata.cloud`, pouvant être ouverte directement dans un navigateur ou intégrée dans une page web.

### Valeurs supportées pour `size`

`gpt-image-2` vérifie uniquement le format de `size` : tant que ce n’est pas `auto` ou une chaîne vide, il doit correspondre au format `WIDTHxHEIGHT` (par exemple `1024x1024`, `2048x1152`, `800x600`) ; toute autre forme renverra une erreur 400. **Tous les formats (1K / 2K / 4K / personnalisés) sont facturés de manière unifiée par image, sans supplément selon la taille.**

Contraintes strictes côté fournisseur pour les tailles personnalisées : largeur et hauteur doivent être multiples de 16, côté long ≤ 3840, nombre total de pixels ≤ 8 294 400. Les requêtes hors limites seront rejetées avec un code 4xx.

| Format | Recommandé 1K | Recommandé 2K | Recommandé 4K |
| ------ | ------------- | ------------- | ------------- |
| 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`   |

> Vous pouvez aussi passer `size: "auto"` ou **omettre le champ `size`**, auquel cas le modèle choisira la taille par défaut.
>
> En 1K, la sortie du fournisseur ne garantit pas une correspondance stricte des pixels — par exemple, vous demandez `1024x1024` et obtenez `1254x1254`, le ratio est conservé. Si vous réutilisez cette valeur comme `size`, la facturation reste la même.
>
> Un appel 4K prend généralement 4 à 8 minutes, il est recommandé d’utiliser le `callback_url` pour un rappel asynchrone (voir plus bas).

> **À propos du paramètre `n`**
>
> `gpt-image-2` **ne supporte pas `n > 1`** : ce paramètre est ignoré silencieusement, que vous passiez `n=1` ou `n=10`, une seule image est retournée et facturée par requête. Pour obtenir plusieurs images candidates, lancez plusieurs requêtes en parallèle (il est conseillé de varier `prompt` ou `seed` pour éviter des images très similaires). Cette limitation s’applique aussi à `gpt-image-1` / `gpt-image-1.5` et à la série `nano-banana`. `dall-e-2` est actuellement le seul modèle supportant nativement `n > 1` ; `dall-e-3` ne supporte que `n = 1`.

Voici plusieurs exemples réels illustrant les capacités de `gpt-image-2`.

### Scénario 1 : portrait cinématographique

Le prompt peut utiliser des termes cinématographiques (pellicule 35mm, faible profondeur de champ, néons, etc.) pour contrôler précisément l’ambiance et la texture.

Exemple de code Python :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-image-2",
    "prompt": "A cinematic portrait of a young woman standing in a convenience store at night, illuminated by soft pink and cyan neon signs through the window. Shot on 35mm film, shallow depth of field, slight grain, melancholic mood.",
    "size": "1024x1536"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse :

```json theme={null}
{
  "success": true,
  "task_id": "ab58a5df-6f46-4874-bff6-93169e2849a3",
  "created": 1777048800,
  "data": [
    {
      "revised_prompt": "A cinematic portrait of a young woman standing in a convenience store at night, illuminated by soft pink and cyan neon signs through the window. Shot on 35mm film, shallow depth of field, slight grain, melancholic mood.",
      "url": "https://platform.cdn.acedata.cloud/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png"
    }
  ]
}
```

Image générée :

<p>
  <img src="https://platform.cdn.acedata.cloud/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png" width="500" className="m-auto" />
</p>

### Scénario 2 : affiche de voyage rétro (avec rendu de texte)

`gpt-image-2` est stable en typographie et mise en page, idéal pour générer des affiches, menus, cartes de vœux avec texte.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "A vintage travel poster of the Amalfi Coast, Italy. Stylized art-deco illustration of cliffside lemon-yellow houses cascading down to a turquoise sea, with a small white sailboat in the harbor. Bold typography at the top reads AMALFI and at the bottom ITALIA 1958. Limited color palette: cream, sea-blue, lemon yellow, terracotta. Slight paper-grain texture.",
    "size": "1024x1536"
}
```

Image correspondante :

<p>
  <img src="https://platform.cdn.acedata.cloud/gpt-image/c6061f92-3fae-498e-af8e-688e7f415ba3_0.png" width="500" className="m-auto" />
</p>

Le modèle reproduit fidèlement le style Art Deco et rend clairement les textes `AMALFI` et `ITALIA 1958`.

### Scénario 3 : composition complexe et comptage

Ce prompt teste la capacité du modèle à suivre des instructions structurées sur les quantités et positions.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "A wooden bookshelf consisting of three shelves: On the top shelf, there should be one book. On the second shelf, there should be three books. On the bottom shelf, there should be seven books. Soft warm lighting, photorealistic, cozy library atmosphere.",
    "size": "1024x1024"
}
```

Image générée :

<p>
  <img src="https://platform.cdn.acedata.cloud/gpt-image/64a3b932-a082-4cad-9f85-9d30474b104d_0.png" width="500" className="m-auto" />
</p>

Le nombre de livres sur chaque étagère (1 / 3 / 7) correspond parfaitement au prompt, ce qui était difficile à obtenir de manière stable avec `dall-e-3`.

### Scénario 4 : style illustration (format paysage)

En spécifiant le médium artistique et des mots-clés d’ambiance, on peut guider le modèle vers des illustrations stylisées.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "A soft, poetic children's book illustration of a small fox reading a book under a glowing mushroom in a moonlit forest. Watercolor and pencil texture, gentle pastel colors, dreamy atmosphere, hand-drawn feel.",
    "size": "1536x1024"
}
```

Illustration paysage générée :

![](https://platform.cdn.acedata.cloud/gpt-image/6cd57e69-d237-4cc1-a666-759a93964a08_0.png)

### Asynchrone et rappel (callback)

Un appel unique à `gpt-image-2` prend généralement 60 à 90 secondes. Pour éviter de maintenir une connexion longue, vous pouvez utiliser le mécanisme de rappel asynchrone via `callback_url` présenté plus bas, la procédure d’appel est identique aux autres modèles.

## Série Nano Banana

La série `nano-banana` est un modèle de génération d’images basé sur Gemini, accessible via la même interface `/openai/images/generations` sans changer d’endpoint, il suffit de changer la valeur de `model` selon le tableau ci-dessous.

| Modèle            | Facturation (Crédits / appel) | Scénarios d’usage                                                   |
| ----------------- | ----------------------------- | ------------------------------------------------------------------- |
| `nano-banana`     | 0.14                          | Génération d’images standard, 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 de la série, meilleur en composition, détails et texte |

> **Important : portée des paramètres**
>
> Nano Banana utilise une couche d’adaptation pour le protocole OpenAI et supporte moins de paramètres que `gpt-image-*` : uniquement `model`, `prompt`, `size`.
>
> * `size` est mappé en interne sur `aspect_ratio` selon le tableau ci-dessous, les tailles non listées sont ramenées à `1:1` :
>   * `1024x1024` / `512x512` / `256x256` → `1:1`
>   * `1792x1024` → `16:9`
>   * `1024x1792` → `9:16`
> * Ne supporte pas `n`, `quality`, `style`, `response_format`, `background`, `output_format` ; ces paramètres sont ignorés s’ils sont fournis.
> * La structure de retour suit le format OpenAI (`data[].url`), mais `created` est toujours `0`, aucun `b64_json` n’est retourné, et `revised_prompt` est toujours égal au prompt original.

### Appel basique

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "nano-banana",
    "prompt": "a small red apple on a white table, photoreal",
    "size": "1024x1024"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse :

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.acedata.cloud/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png",
      "revised_prompt": "a small red apple on a white table, photoreal"
    }
  ]
}
```

L’image générée est accessible directement via le champ `url` :

<p>
  <img src="https://platform.cdn.acedata.cloud/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png" width="500" className="m-auto" />
</p>

### Passage au modèle phare `nano-banana-pro`

Il suffit de changer `model` en `nano-banana-pro`, les autres paramètres restent identiques :

```python theme={null}
payload = {
    "model": "nano-banana-pro",
    "prompt": "abstract painting",
    "size": "1024x1024"
}
```

Exemple de réponse :

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.acedata.cloud/nanobanana/6227fcc9-3442-4aa3-a76c-4a4441a99649.png",
      "revised_prompt": "abstract painting"
    }
  ]
}
```

<p>
  <img src="https://platform.cdn.acedata.cloud/nanobanana/6227fcc9-3442-4aa3-a76c-4a4441a99649.png" width="500" className="m-auto" />
</p>

### Rappel asynchrone

Le mécanisme `callback_url` fonctionne aussi avec nano-banana, la procédure d’appel est identique aux autres modèles, voir la section [Rappel asynchrone](#asynchrone-et-rappel-callback).

## Utilisation basique

Vous pouvez ensuite remplir les champs correspondants dans l’interface, comme illustré :

<p>
  <img src="https://cdn.acedata.cloud/zv58ug.png" width="500" className="m-auto" />
</p>

Lors de la première utilisation, vous devez renseigner au moins trois éléments : `authorization` (à sélectionner dans la liste déroulante), `model` (le modèle OpenAI DALL-E à utiliser, nous proposons principalement un modèle, voir la liste), et `prompt` (le texte décrivant l’image à générer).

Sur la droite, vous verrez le code d’appel généré que vous pouvez copier et exécuter directement, ou cliquer sur « Try » pour tester.

<p>
  <img src="https://cdn.acedata.cloud/pbss4f.png" width="500" className="m-auto" />
</p>

Exemple de code Python :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse attendue :

```json theme={null}
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "A delightful image showcasing a young sea otter, who is born brown, with wide charming eyes. It is delightfully lying on its back, paddling in the calm sea waters. Its dense, velvety fur appears wet and shimmering, capturing the essence of its habitat. The small creature curiously plays with a sea shell with its small paws, looking absolutely innocent and charming in its natural environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/5d98aa7c-80c6-4523-b571-fc606ad455b9/generated_00.png?se=2024-07-23T05%3A34%3A48Z&sig=GAz%2Bi3%2BkHOQwAMhxcv22tBM%2FaexrxPgT9V0DbNrL4ik%3D&ske=2024-07-23T08%3A41%3A10Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T08%3A41%3A10Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Les champs retournés sont :

* `created` : identifiant unique de la tâche de génération d’image.
* `data` : contient les informations sur l’image générée.

Le champ `data` contient les détails de l’image générée, notamment `url` qui est le lien vers l’image, comme illustré ci-dessous.

<p>
  <img src="https://cdn.acedata.cloud/dz7u0x.png" width="500" className="m-auto" />
</p>

## Paramètre de qualité d’image `quality`

Vous pouvez définir la qualité de l’image générée. Le paramètre `quality` propose deux options : `standard` pour une image standard, et `hd` pour une image avec plus de détails et une meilleure cohérence.

Exemple de réglage sur `standard` :

<p>
  <img src="https://cdn.acedata.cloud/1q303w.png" width="500" className="m-auto" />
</p>

Le code d’appel correspondant est généré à droite, vous pouvez le copier ou cliquer sur « Try ».

<p>
  <img src="https://cdn.acedata.cloud/c0ps6i.png" width="500" className="m-auto" />
</p>

Exemple de code Python :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "quality": "standard"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse :

```json theme={null}
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "A cute baby sea otter is lying playfully on its back in the water, with its fur looking glossy and soft. One of its tiny paws is reaching out curiously, and it has an expression of pure joy and warmth on its face as it looks up to the sky. Its body is surrounded by bubbles from its playful twirling in the water. A gentle breeze is playing with its fur making it look more charming. The scene portrays the tranquility and charm of marine life.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/a93ee5e7-3abd-4923-8d79-dc9ef126da46/generated_00.png?se=2024-07-23T08%3A13%3A55Z&sig=wTXGYvUOwUIkaB2CxjK9ww%2FHjS8OwYUWcYInXYKwcAM%3D&ske=2024-07-23T11%3A32%3A05Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T11%3A32%3A05Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

L’image générée avec `quality` à `standard` est la suivante :

<p>
  <img src="https://cdn.acedata.cloud/j5v15b.png" width="500" className="m-auto" />
</p>

En changeant simplement `quality` à `hd`, on obtient une image avec plus de détails et une meilleure cohérence :

<p>
  <img src="https://cdn.acedata.cloud/vjpbqr.png" width="500" className="m-auto" />
</p>

## Paramètre de taille d’image `size`

Vous pouvez aussi définir la taille de l’image générée.

Exemple de réglage à `1024x1024` :

<p>
  <img src="https://cdn.acedata.cloud/dx5rwh.png" width="500" className="m-auto" />
</p>

Le code d’appel est généré à droite, prêt à être copié ou testé.

<p>
  <img src="https://cdn.acedata.cloud/0sbybl.png" width="500" className="m-auto" />
</p>

Exemple de code Python :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "size": "1024x1024"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse :

```json theme={null}
{
  "created": 1721636652,
  "data": [
    {
      "revised_prompt": "A delightful depiction of a baby sea otter. The small mammal is captured in its natural habitat in the ocean, floating on its back. It has thick brown fur that is sleek and wet from the sea water. Its eyes are closed as if it is enjoying a moment of deep relaxation. The water around it is calm, reflecting the peacefulness of the scene. The background should hint at a diverse marine ecosystem, with visible strands of kelp floating on the surface, suggesting the baby otter's preferred environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/9d625ac6-fd2b-42a9-84a6-8c99eb357ccf/generated_00.png?se=2024-07-23T08%3A24%3A24Z&sig=AXtYXowEakGxfRp8LhC2DwqL%2F07LhEDW40oCP%2BdTO8s%3D&ske=2024-07-23T18%3A00%3A45Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T18%3A00%3A45Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Image générée en `1024x1024` :

<p>
  <img src="https://cdn.acedata.cloud/o4pvvx.png" width="500" className="m-auto" />
</p>

En changeant la taille à `1792x1024`, on obtient une image avec un format différent :

![](https://cdn.acedata.cloud/4pilae.png)

D’autres tailles sont possibles, voir la documentation officielle pour plus de détails.

## Paramètre de style d’image `style`

Le paramètre `style` propose deux options : `vivid` pour une image plus vive, et `natural` pour une image plus naturelle.

Exemple avec `vivid` :

<p>
  <img src="https://cdn.acedata.cloud/609l9i.png" width="500" className="m-auto" />
</p>

Code généré à droite, prêt à copier ou tester.

<p>
  <img src="https://cdn.acedata.cloud/ee3u9o.png" width="500" className="m-auto" />
</p>

Exemple de code Python :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "style": "vivid"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse :

```json theme={null}
{
  "created": 1721637086,
  "data": [
    {
      "revised_prompt": "A baby sea otter with soft, shiny fur and sparkling eyes floating playfully on calm ocean waters. This adorable creature is trippingly frolicking amidst small, gentle waves under a bright, clear, sunny sky. The tranquility of the sea contrasts subtly with the delightful energy of this young otter. The critter gamely clings to a tiny piece of driftwood, its small paws adorably enveloping the floating object.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/6e48f701-7fd3-4356-839e-a2f6f0fe82d9/generated_00.png?se=2024-07-23T08%3A31%3A37Z&sig=4percxqTbUR1j3BQmkhvj%2FAhHzInKI%2FqiTo1MP69coI%3D&ske=2024-07-27T10%3A39%3A55Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-20T10%3A39%3A55Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Image générée avec `style` à `vivid` :

<p>
  <img src="https://cdn.acedata.cloud/e0rpc3.png" width="500" className="m-auto" />
</p>

En changeant `style` à `natural`, on obtient une image plus naturelle :

<p>
  <img src="https://cdn.acedata.cloud/q9tqwu.png" width="500" className="m-auto" />
</p>

`vivid` produit des images plus vives et réalistes que `natural`.

## Paramètre de format de lien d’image `response_format`

Ce paramètre propose deux options : `b64_json` pour un encodage Base64 du lien image, et `url` pour un lien direct vers l’image.

Exemple avec `url` :

<p>
  <img src="https://cdn.acedata.cloud/2zbgrg.png" width="500" className="m-auto" />
</p>

Code généré à droite, prêt à copier ou tester.

<p>
  <img src="https://cdn.acedata.cloud/a9exmp.png" width="500" className="m-auto" />
</p>

Exemple de code Python :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "response_format": "url"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Réponse :

```json theme={null}
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "A charming depiction of a baby sea otter. The otter is seen resting serenely on its back amidst the gentle, blue ocean waves. The baby otter's fur is an endearing mix of soft greyish brown shades, glinting subtly in the muted sunlight. Its small paws are touching, lifted slightly towards the sky as if playing with an unseen object. Its round, expressive eyes are wide in curiosity, sparking with life and innocence. Use a realistic style to evoke the otter's natural habitat and its adorably fluffy exterior.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/87792c5f-8b6d-412e-81dd-f1a1baa19bd2/generated_00.png?se=2024-07-23T08%3A39%3A47Z&sig=zzRAn30TqIKHdLVqZPUUuSJdjCYpoJdaGU6BeoA76Jo%3D&ske=2024-07-23T13%3A32%3A13Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T13%3A32%3A13Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Le lien direct vers l’image est accessible ici : [Image URL](https://dalleprodsec.blob.core.windows.net/private/images/87792c5f-8b6d-412e-81dd-f1a1baa19bd2/generated_00.png?se=2024-07-23T08%3A39%3A47Z\&sig=zzRAn30TqIKHdLVqZPUUuSJdjCYpoJdaGU6BeoA76Jo%3D\&ske=2024-07-23T13%3A32%3A13Z\&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96\&sks=b\&skt=2024-07-16T13%3A32%3A13Z\&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d\&skv=2020-10-02\&sp=r\&spr=https\&sr=b\&sv=2020-10-02) et l’image est affichée ci-dessous :

<p>
  <img src="https://cdn.acedata.cloud/33hs4z.png" width="500" className="m-auto" />
</p>

En changeant `response_format` à `b64_json`, vous obtiendrez l’image encodée en Base64, par exemple :

```json theme={null}
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "A charming image of a young baby sea otter. The otter is gently floating on a calm blue sea, basking in the warm, golden rays of sunlight streaming down from a clear sky above. The otter's fur is a rich chocolate brown, and it looks incredibly soft and fluffy. The otter's eyes are bright and expressive, filled with childlike curiosity and joy. It has small, pricked ears and a button-like nose which adds to its overall cuteness. In the sea around it, twinkling droplets of water can be seen, pepped up by the sunlight, the sight is certainly a delightful one."
    }
  ]
}
```

## Rappel asynchrone

La génération d’images via l’API OpenAI peut prendre un certain temps. Pour éviter que la requête HTTP reste ouverte trop longtemps et consomme des ressources système, l’API supporte un mécanisme de rappel asynchrone.

Le processus est le suivant : lors de l’envoi de la requête, vous spécifiez un champ `callback_url`. L’API retourne immédiatement un résultat contenant un `task_id` identifiant la tâche. Une fois la génération terminée, le résultat est envoyé en POST JSON à l’URL spécifiée dans `callback_url`, incluant aussi le `task_id` pour relier la réponse à la requête initiale.

Exemple d’utilisation :

Un webhook est un service HTTP capable de recevoir des requêtes. Vous devez remplacer l’URL par celle de votre serveur HTTP. Pour la démonstration, nous utilisons le site public [https://webhook.site/](https://webhook.site/) qui génère une URL webhook comme ci-dessous :

![](https://cdn.acedata.cloud/cjjfly.png)

Copiez cette URL, par exemple `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab`, et utilisez-la comme valeur de `callback_url` dans la requête :

```python theme={null}
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Vous obtiendrez immédiatement :

```json theme={null}
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
```

Quelques instants plus tard, vous verrez sur le webhook le résultat de la génération :

```json theme={null}
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": {
    "created": 1721626477,
    "data": [
      {
        "revised_prompt": "A delightful image showcasing a young sea otter...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
```

Le champ `task_id` permet de relier la réponse asynchrone à la requête initiale.

## Gestion des erreurs

En cas d’erreur lors de l’appel API, 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’autorisation invalide ou manquant.
* `429 too_many_requests` : trop de requêtes, limite de fréquence dépassée.
* `500 api_error` : erreur interne serveur.

### Exemple de réponse d’erreur

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusion

Ce document vous a présenté comment utiliser facilement l’API de génération d’images OpenAI pour exploiter les fonctionnalités officielles de génération d’images DALL-E. Nous espérons que ce guide vous aidera à intégrer et utiliser cette API efficacement. Pour toute question, n’hésitez pas à contacter notre équipe de support technique.
