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

# Solicitud y uso de la API de Generación de Imágenes de OpenAI

> OpenAI generation API guide - Ace Data Cloud

La API de Generación de Imágenes de OpenAI actualmente soporta varios modelos de generación de imágenes, incluyendo el clásico `dall-e-3`, la capacidad de renderizado de texto más potente `gpt-image-1`, la última generación **`gpt-image-2`**, así como la serie de modelos **`nano-banana` / `nano-banana-2-lite` / `nano-banana-2` / `nano-banana-pro`** que se conectan a través de la misma interfaz. Todos ellos pueden generar imágenes de alta calidad a partir de descripciones de texto.

Este documento presenta principalmente el flujo de uso de la API de Generación de Imágenes de OpenAI, que nos permite utilizar fácilmente las funciones de generación de imágenes de la serie OpenAI.

## Proceso de Solicitud

Para utilizar la API de Generación de Imágenes de OpenAI, primero dirígete a la [consola de Ace Data Cloud](https://platform.acedata.cloud/console/applications) para obtener tu Token de API, que debes guardar como respaldo.

![](https://cdn.acedata.cloud/5hmkdg.jpg)

Si aún no has iniciado sesión o registrado, serás redirigido automáticamente a la página de inicio de sesión que te invitará a registrarte e iniciar sesión; una vez completado, regresarás automáticamente a la página actual.

**Un Token de API es suficiente para acceder a todos los servicios de la plataforma, sin necesidad de solicitar uno por cada servicio.** La primera solicitud te otorgará un crédito gratuito para que lo pruebes; si el crédito es insuficiente, puedes recargar el saldo general en la [consola](https://platform.acedata.cloud/console/coin).

> 📘 Documentación completa: [API de Generación de Imágenes de OpenAI →](https://platform.acedata.cloud/documents/openai-images-generations)

## Modelo GPT-Image-2

`gpt-image-2` es el nuevo modelo de generación de imágenes lanzado por OpenAI, que presenta mejoras significativas en comparación con `dall-e-3` y `gpt-image-1` en los siguientes aspectos:

* **Mayor capacidad de seguimiento de instrucciones**: puede entender con precisión instrucciones estructuradas complejas sobre composición, conteo, relaciones de posición, etc.
* **Renderizado de texto más claro**: en escenarios como carteles, menús, infografías, logotipos, el inglés y los números casi no presentan confusiones.
* **Mayor variedad de estilos**: soporta de forma nativa múltiples estilos como retratos cinematográficos, carteles retro, ilustraciones infantiles, fotografía de productos, infografías, entre otros.
* **Soporte nativo para múltiples proporciones + alta resolución**: cubre 5 proporciones (1:1, 4:3, 3:4, 16:9, 9:16) con 3 niveles de resolución (1K / 2K / 4K).

La forma de invocación es completamente idéntica a otros modelos, solo necesitas establecer el campo `model` como `gpt-image-2`. La `url` en el resultado devuelto es un enlace a una imagen alojada permanentemente en `platform.cdn.acedata.cloud`, que se puede abrir directamente en el navegador o incrustar en una página web.

### Ruta oficial / variante inversa (`:official` / `:reverse`)

`gpt-image-2` utiliza por defecto la ruta inversa. A través del sufijo del nombre del modelo, puedes seleccionar explícitamente la ruta:

* **`gpt-image-2:official`**: ruta oficial de intermediación. Soporta `n > 1` (devuelve múltiples imágenes a la vez) y resoluciones reales de 2K / 4K, **cobrando por cada imagen, con un precio que es el doble del precio por defecto de `gpt-image-2`**. Actualmente, solo está disponible a través del canal openai-hk; si la ruta no está disponible, devolverá un error directamente y no se degradará a la ruta inversa.
* **`gpt-image-2:reverse`**: completamente equivalente al `gpt-image-2` por defecto (ruta inversa), utilizado para declarar explícitamente que se utiliza la ruta inversa, sin cambios en el precio.

> Las restricciones sobre el parámetro “n” que se mencionan a continuación solo se aplican a la ruta por defecto / inversa; `gpt-image-2:official` soporta `n > 1` y cobra por imagen.

### Valores soportados para `size`

`gpt-image-2` solo verifica el formato de `size`, siempre que no sea `auto` o una cadena vacía, debe coincidir con `WIDTHxHEIGHT` (por ejemplo, `1024x1024`, `2048x1152`, `800x600`); cualquier otra forma devolverá 400. **Todos los tamaños (1K / 2K / 4K / personalizado) se cobran de manera uniforme por imagen, sin recargo por tamaño.**

Restricciones estrictas de la parte superior para tamaños personalizados: tanto el ancho como la altura deben ser múltiplos de 16, el lado más largo ≤ 3840, el número total de píxeles ≤ 8,294,400. Si se excede el rango, será rechazado por la parte superior y devolverá un 4xx.

| Proporción | 1K Recomendado | 2K Recomendado | 4K Recomendado |
| ---------- | -------------- | -------------- | -------------- |
| 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`    |

> También puedes pasar `size: "auto"` o **omitir el campo `size`**, en cuyo caso el modelo elegirá el tamaño predeterminado.
> En la categoría de 1K, la salida de la parte superior no garantiza un alineamiento de píxeles estricto: si pasas `1024x1024`, podrías recibir `1254x1254`, manteniendo la proporción. Si lo vuelves a pasar como `size`, el cobro no cambia.
> Las llamadas de 4K generalmente requieren de 4 a 8 minutos, se recomienda usarlo junto con el `callback_url` para callbacks asíncronos.

> **Sobre el parámetro `n`**
> `gpt-image-2` actualmente **no soporta `n > 1`**: este parámetro será ignorado silenciosamente, ya sea que pases `n=1` o `n=10`, una sola solicitud solo devolverá 1 imagen y se cobrará solo por 1 imagen. Si necesitas obtener múltiples imágenes candidatas a la vez, por favor **inicia múltiples solicitudes en paralelo** (se recomienda pasar diferentes `prompt` o diferentes `seed`, de lo contrario, las imágenes obtenidas pueden ser muy similares). Esta limitación también se aplica a `gpt-image-1` / `gpt-image-1.5`, así como a la serie `nano-banana` / `nano-banana-2-lite` / `nano-banana-2` / `nano-banana-pro`. `dall-e-2` es actualmente el único modelo que soporta de forma nativa `n > 1`; `dall-e-3` solo soporta `n = 1`.

A continuación, se presentan algunos ejemplos reales desde diferentes ángulos para experimentar visualmente la capacidad de `gpt-image-2`.

### Escenario 1: Retrato cinematográfico

En las palabras clave se pueden utilizar términos cinematográficos (película de 35 mm, profundidad de campo reducida, luz de neón, etc.) para controlar con precisión la atmósfera y la textura.

Código de ejemplo de llamada en 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": "Un retrato cinematográfico de una joven de pie en una tienda de conveniencia por la noche, iluminada por suaves letreros de neón rosa y cian a través de la ventana. Tomado en película de 35 mm, profundidad de campo superficial, ligero grano, estado de ánimo melancólico.",
    "size": "1024x1536"
}

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

El resultado devuelto es el siguiente:

```json theme={null}
{
  "success": true,
  "task_id": "ab58a5df-6f46-4874-bff6-93169e2849a3",
  "created": 1777048800,
  "data": [
    {
      "revised_prompt": "Un retrato cinematográfico de una joven de pie en una tienda de conveniencia por la noche, iluminada por suaves letreros de neón rosa y cian a través de la ventana. Tomado en película de 35 mm, profundidad de campo superficial, ligero grano, estado de ánimo melancólico.",
      "url": "https://platform.cdn.acedata.cloud/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png"
    }
  ]
}
```

La imagen generada es la siguiente:

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

### Escena dos: Póster de viaje retro (con renderizado de texto)

`gpt-image-2` muestra un rendimiento estable en tipografía y renderizado de fuentes, siendo muy adecuado para generar diseños con texto como carteles, menús, tarjetas de felicitación, etc.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "Un póster de viaje vintage de la Costa de Amalfi, Italia. Ilustración estilizada art-deco de casas amarillas limón en acantilados que descienden hacia un mar turquesa, con un pequeño velero blanco en el puerto. Tipografía en negrita en la parte superior que dice AMALFI y en la parte inferior ITALIA 1958. Paleta de colores limitada: crema, azul marino, amarillo limón, terracota. Ligera textura de grano de papel.",
    "size": "1024x1536"
}
```

La imagen correspondiente al campo `url` en el resultado devuelto es la siguiente:

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

Se puede ver que el modelo no solo reproduce con precisión el estilo visual del póster Art Deco, sino que el texto del título `AMALFI` y `ITALIA 1958` se ha renderizado de manera clara y correcta.

### Escena tres: Composición compleja y conteo

La siguiente frase se utiliza para probar la capacidad del modelo para seguir instrucciones estructuradas sobre "cantidad" y "posición".

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "Una estantería de madera que consta de tres estantes: En el estante superior, debe haber un libro. En el segundo estante, debe haber tres libros. En el estante inferior, debe haber siete libros. Iluminación cálida suave, fotorealista, atmósfera acogedora de biblioteca.",
    "size": "1024x1024"
}
```

La imagen generada es la siguiente:

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

Se puede ver que la cantidad de libros en los tres estantes (1 / 3 / 7) coincide completamente con la frase, algo que era difícil de lograr de manera estable en la era de `dall-e-3`.

### Escena cuatro: Estilo de ilustración (horizontal)

Al especificar el medio artístico y palabras clave de emoción, se puede guiar al modelo para producir ilustraciones estilizadas.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "Una suave y poética ilustración de un libro infantil de un pequeño zorro leyendo un libro bajo un hongo brillante en un bosque iluminado por la luna. Textura de acuarela y lápiz, colores pasteles suaves, atmósfera soñadora, sensación de dibujo a mano.",
    "size": "1536x1024"
}
```

La ilustración horizontal generada es la siguiente:

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

### Asincronía y devolución de llamada

`gpt-image-2` generalmente requiere de 60 a 90 segundos por llamada, si no se desea mantener una conexión larga, se puede utilizar el mecanismo de devolución de llamada asíncrona `callback_url` que se describe más adelante en este artículo, el flujo de llamada es completamente consistente con otros modelos.

## Serie de modelos Nano Banana

La serie `nano-banana` es un modelo de generación de imágenes basado en Gemini, que se ha integrado a través de la misma interfaz `/openai/images/generations`, sin necesidad de cambiar el endpoint, solo hay que cambiar el `model` a cualquiera de los que se enumeran a continuación.

| Modelo               | Costo (Créditos / vez) | Escenarios aplicables                                                       |
| -------------------- | ---------------------- | --------------------------------------------------------------------------- |
| `nano-banana`        | 0.14                   | Generación de imágenes comunes, la más rápida y de menor costo              |
| `nano-banana-2-lite` | 0.14                   | Modelo de imagen ligero Gemini 3.1, solo admite 1K, salida de baja latencia |
| `nano-banana-2`      | 0.28                   | Calidad y detalles notablemente mejorados                                   |
| `nano-banana-pro`    | 0.35                   | El buque insignia de la serie, mejor en composición, detalles y texto       |

> **Importante: Rango de soporte de parámetros**
> Nano Banana se integra al protocolo de OpenAI a través de una capa de adaptación, en comparación con `gpt-image-*` solo admite los siguientes parámetros: `model`, `prompt`, `size`.
>
> * `size` se mapeará a `aspect_ratio` interno según la siguiente tabla, las dimensiones no listadas se degradarán a `1:1`:
>   * `1024x1024` / `512x512` / `256x256` → `1:1`
>   * `1792x1024` → `16:9`
>   * `1024x1792` → `9:16`
> * No se admiten parámetros como `n`, `quality`, `style`, `response_format`, `background`, `output_format`, etc.; si se ingresan, serán ignorados.
> * La estructura de retorno sigue el formato de OpenAI (`data[].url`), pero `created` es fijo en `0`, y no se devolverá `b64_json`, `revised_prompt` siempre será igual al `prompt` original.

### Llamada básica

```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": "una pequeña manzana roja sobre una mesa blanca, fotoreal",
    "size": "1024x1024"
}

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

El resultado devuelto es el siguiente:

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.acedata.cloud/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png",
      "revised_prompt": "una pequeña manzana roja sobre una mesa blanca, fotoreal"
    }
  ]
}
```

生成的 imágenes se pueden acceder directamente a través del campo `url` devuelto:

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

### Actualizar al modelo insignia `nano-banana-pro`

Solo necesita cambiar `model` a `nano-banana-pro`, los demás parámetros son completamente iguales:

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

Ejemplo de respuesta:

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

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

### Callback asíncrono

El mecanismo de callback asíncrono `callback_url` también es efectivo para nano-banana, el flujo de llamada es completamente igual que con otros modelos, consulte la sección [Callback asíncrono](#异步回调) a continuación.

## Uso básico

A continuación, puede completar el contenido correspondiente en la interfaz, como se muestra en la imagen:

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

La primera vez que use esta interfaz, necesitamos completar al menos tres contenidos, uno es `authorization`, que se puede seleccionar directamente en la lista desplegable. Otro parámetro es `model`, `model` es la categoría del modelo que elegimos usar del sitio oficial de OpenAI DALL-E, aquí tenemos principalmente 1 tipo de modelo, los detalles se pueden ver en los modelos que proporcionamos. El último parámetro es `prompt`, `prompt` es la palabra clave que ingresamos para generar la imagen.

Al mismo tiempo, puede notar que a la derecha hay un código de llamada correspondiente generado, puede copiar el código y ejecutarlo directamente, o puede hacer clic en el botón "Try" para realizar pruebas.

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

Código de llamada de ejemplo en 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": "Un lindo bebé nutria marina"
}

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

Después de la llamada, encontramos que el resultado devuelto es el siguiente:

```json theme={null}
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "Una imagen encantadora que muestra a una joven nutria marina, que nace marrón, con ojos encantadores y grandes. Está deliciosamente acostada de espaldas, remando en las tranquilas aguas del mar. Su densa y aterciopelada piel parece húmeda y brillante, capturando la esencia de su hábitat. La pequeña criatura juega curiosamente con una concha marina con sus pequeñas patas, luciendo absolutamente inocente y encantadora en su entorno natural.",
      "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"
    }
  ]
}
```

El resultado devuelto tiene varios campos, que se describen a continuación:

* `created`, ID de la generación de esta imagen, utilizado para identificar de manera única esta tarea.
* `data`, que contiene la información del resultado de la generación de la imagen.

Donde `data` incluye la información específica de la imagen generada por el modelo, su `url` es el enlace detallado de la imagen generada, como se puede ver en la imagen.

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

## Parámetro de calidad de imagen `quality`

A continuación, se presentará cómo configurar algunos parámetros detallados del resultado de la generación de imágenes, donde el parámetro de calidad de imagen `quality` incluye dos tipos, el primero `standard` indica que se genera una imagen estándar, el otro `hd` indica que la imagen creada tiene detalles más finos y mayor consistencia.

A continuación, se establece el parámetro de calidad de imagen en `standard`, la configuración específica se muestra en la imagen a continuación:

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

Al mismo tiempo, puede notar que a la derecha hay un código de llamada correspondiente generado, puede copiar el código y ejecutarlo directamente, o puede hacer clic en el botón "Try" para realizar pruebas.

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

Código de llamada de ejemplo en 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": "Un lindo bebé nutria marina",
    "quality": "standard"
}

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

Después de la llamada, encontramos que el resultado devuelto es el siguiente:

```json theme={null}
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "Una linda bebé nutria marina está acostada juguetonamente de espaldas en el agua, con su pelaje luciendo brillante y suave. Una de sus pequeñas patas se extiende curiosamente, y tiene una expresión de pura alegría y calidez en su rostro mientras mira hacia el cielo. Su cuerpo está rodeado de burbujas de su jugueteo en el agua. Una suave brisa juega con su pelaje haciéndola lucir más encantadora. La escena retrata la tranquilidad y el encanto de la vida marina.",
      "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"
    }
  ]
}
```

El resultado devuelto es consistente con el contenido del uso básico, se puede ver que la imagen generada con el parámetro de calidad de imagen `standard` es como se muestra en la imagen a continuación:

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

```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)
```

调用之后，我们发现返回结果如下：

```json theme={null}
{
  "created": 1721637500,
  "data": [
    {
      "revised_prompt": "A cute baby sea otter floating on its back in the ocean, surrounded by gentle waves. The otter has soft, fluffy fur and bright, curious eyes. The sunlight sparkles on the water's surface, creating a serene and joyful atmosphere. In the background, hints of kelp and other marine life can be seen, adding to the beauty of the scene.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/7e48f701-7fd3-4356-839e-a2f6f0fe82d9/generated_00.png?se=2024-07-23T08%3A45%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"
    }
  ]
}
```

返回的结果与基本使用的内容一致，可以看到图片链接的格式参数为 `url` 的生成图片如下图所示：

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

与上述相同操作，仅需将图片链接的格式参数为 `b64_json` ，可以得到如下图所示的图片：

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

可以看到 `url` 和 `b64_json` 生成的图片链接格式明显不同，具体使用方式请参考我们官网文档。

```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": "Un lindo bebé nutria marina",
    "response_format": "url"
}

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

Después de la llamada, encontramos que el resultado devuelto es el siguiente:

```json theme={null}
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "Una encantadora representación de un bebé nutria marina. La nutria se ve descansando serenamente sobre su espalda en medio de las suaves olas azules del océano. El pelaje del bebé nutria es una mezcla entrañable de suaves tonos marrón grisáceo, brillando sutilmente bajo la luz del sol tenue. Sus pequeñas patas están tocando, levantadas ligeramente hacia el cielo como si estuvieran jugando con un objeto invisible. Sus ojos redondos y expresivos están abiertos de par en par por la curiosidad, chispeando con vida e inocencia. Usa un estilo realista para evocar el hábitat natural de la nutria y su exterior adorablemente esponjoso.",
      "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"
    }
  ]
}
```

El resultado devuelto es consistente con el contenido de uso básico, se puede ver que el enlace de la imagen con el parámetro de formato `url` de la imagen generada es [Imagen 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) esto se puede acceder directamente, el contenido de la imagen se muestra a continuación:

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

Con la misma operación anterior, solo se necesita cambiar el parámetro de formato del enlace de la imagen a `b64_json`, se puede obtener el enlace de la imagen codificado en Base64, el resultado específico se muestra a continuación:

```json theme={null}
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "Una encantadora imagen de una joven bebé nutria marina. La nutria flota suavemente en un mar azul tranquilo, disfrutando de los cálidos rayos dorados de sol que caen desde un cielo claro arriba. El pelaje de la nutria es de un rico marrón chocolate, y se ve increíblemente suave y esponjoso. Los ojos de la nutria son brillantes y expresivos, llenos de curiosidad infantil y alegría. Tiene pequeñas orejas puntiagudas y una nariz en forma de botón que añade a su ternura general. En el mar a su alrededor, se pueden ver gotas de agua brillantes, animadas por la luz del sol, la vista es sin duda encantadora."
    }
  ]
}
```

## Callback asíncrono

Dado que el tiempo de generación de imágenes de la API de OpenAI puede ser relativamente largo, si la API no responde durante mucho tiempo, la solicitud HTTP mantendrá la conexión, lo que provocará un consumo adicional de recursos del sistema, por lo que esta API también ofrece soporte para callbacks asíncronos.

El flujo general es: cuando el cliente inicia la solicitud, se especifica un campo adicional `callback_url`, después de que el cliente inicia la solicitud de API, la API devolverá inmediatamente un resultado que contiene un campo de información `task_id`, que representa el ID de la tarea actual. Cuando la tarea se completa, el resultado de la imagen generada se enviará a la `callback_url` especificada por el cliente en formato JSON POST, que también incluye el campo `task_id`, de esta manera el resultado de la tarea se puede asociar a través del ID.

A continuación, veamos un ejemplo para entender cómo operar específicamente.

Primero, el callback de Webhook es un servicio que puede recibir solicitudes HTTP, los desarrolladores deben reemplazarlo con la URL de su propio servidor HTTP. Aquí, para facilitar la demostración, se utiliza un sitio web de muestra de Webhook público [https://webhook.site/](https://webhook.site/), al abrir este sitio se puede obtener una URL de Webhook, como se muestra en la imagen:

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

Copie esta URL y podrá usarla como Webhook, el ejemplo aquí es `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab`.

A continuación, podemos establecer el campo `callback_url` a la URL de Webhook anterior, al mismo tiempo que llenamos los parámetros correspondientes, como se muestra en el siguiente código:

```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": "Un lindo bebé nutria marina",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

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

Al hacer clic en ejecutar, se puede encontrar que se obtiene inmediatamente un resultado, como se muestra a continuación:

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

Después de un momento, podemos observar el resultado de la imagen generada en la URL de Webhook, el contenido es el siguiente:

```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": "Una encantadora imagen que muestra una joven nutria marina...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
```

Se puede ver que en el resultado hay un campo `task_id`, el campo `data` contiene el mismo resultado de generación de imágenes que la llamada sincrónica, a través del campo `task_id` se puede lograr la asociación de la tarea.

## Manejo de errores

Al llamar a la API, si se encuentra con un error, la API devolverá el código de error correspondiente y la información. Por ejemplo:

* `400 token_mismatched`：Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `400 api_not_implemented`：Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `401 invalid_token`：No autorizado, token de autorización inválido o faltante.
* `429 too_many_requests`：Demasiadas solicitudes, ha superado el límite de tasa.
* `500 api_error`：Error interno del servidor, algo salió mal en el servidor.

### Ejemplo de respuesta de error

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "la recuperación falló"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusión

A través de este documento, ha aprendido cómo utilizar la API de Generación de Imágenes de OpenAI para aprovechar fácilmente la función de generación de imágenes oficial de OpenAI DALL-E. Esperamos que este documento le ayude a integrar y utilizar mejor esta API. Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro equipo de soporte técnico.
