Nano Banana 2.1 API
Generate one image asynchronously per request. Supports text-to-image and image-to-image generation with your Seevio API key.
POST https://api.seevio.ai/v1/images/generationsCapacidades
| Función | Valores admitidos |
|---|---|
| Modos de generación | text-to-image, image-to-image |
| Resolución de salida | 1K, 2K, 4K |
| Relación de aspecto | auto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9, 4:1, 1:4, 8:1, 1:8 |
| Imágenes de referencia | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 30 MB. Text-to-image requires an empty array. |
| Prompt | Required non-empty prompt, up to 20000 characters. |
| Formato de salida | png, jpg |
Precios y créditos
Cada solicitud genera una imagen. Los créditos dependen de la resolución indicada abajo. Se reservan al aceptar la tarea, se cobran al completarla y se devuelven si falla.
| Resolución de salida | Precios y créditos |
|---|---|
| 1K | 2 créditos |
| 2K | 3 créditos |
| 4K | 4 créditos |
No se admite la idempotencia de solicitudes. Cada POST válido crea una nueva tarea facturable. Si el resultado de un envío no es seguro, consulta el taskId devuelto; volver a intentar el POST puede crear otra tarea.
Autenticación
Crea una clave de API en el panel de control. La clave completa se mostrará una sola vez. Almacénala de forma segura en tu servidor y envíala como Bearer token en cada petición.
URL base
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonDefine la variable de entorno SEEVIO_API_KEY antes de ejecutar estos ejemplos. Los ejemplos en JavaScript se ejecutan en tu servidor con Node.js; los de Python usan el paquete requests.
Cuerpo de la petición
| Campo | Tipo | Requerido | Descripción y restricciones |
|---|---|---|---|
model | string | Sí | ID del modelo. Para utilizar Nano Banana 2.1, establece este campo como nano-banana-2-1. |
callback_url | string | No | Endpoint público HTTPS para recibir callbacks POST en caso de éxito o fallo. No se permiten redes privadas ni localhost. Ejemplo: https://example.com/webhooks/seevio |
input | object | Sí | Ajustes de generación. Debe contener un prompt que no esté vacío. |
Parámetros de entrada
| Campo | Tipo | Requerido | Por defecto | Descripción y restricciones |
|---|---|---|---|---|
input.prompt | string | Sí | — | Required non-empty prompt, up to 20000 characters. Ejemplo: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | No | text-to-image | Para la edición de imágenes, establece generation_type como image-to-image y proporciona las image_urls. Todos los demás parámetros utilizan la misma especificación. Valores admitidos text-to-image | image-to-image |
input.image_urls | string[] | Condicional | [] | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 30 MB. Text-to-image requires an empty array. Ejemplo: ["https://example.com/teapot.png"] |
input.aspect_ratio | string | No | auto | Relación de aspecto Valores admitidos auto | 1:1 | 16:9 | 9:16 | 4:3 | 3:4 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9 | 4:1 | 1:4 | 8:1 | 1:8Ejemplo: 1:1 |
input.resolution | string | No | 2K | Utiliza una de las resoluciones de salida admitidas que se detallan aquí. Valores admitidos 1K | 2K | 4KEjemplo: 2K |
input.output_format | string | No | png | Valores admitidos png | jpgEjemplo: png |
La relación de aspecto (aspect ratio) se establece de forma predeterminada en auto. Cada solicitud genera exactamente una imagen.
Inicio rápido
Envía esta petición mínima, guarda el taskId recibido y usa el ejemplo de consulta de tarea más abajo. El valor de créditos en la respuesta de creación es el monto reservado.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana-2-1",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "text-to-image"
}
}'Ejemplo de respuesta de creación de tarea
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 3
}Texto a imagen
Generate one image asynchronously per request. Supports text-to-image and image-to-image generation with your Seevio API key.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana-2-1",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "text-to-image"
}
}'Imagen a imagen
Para la edición de imágenes, establece generation_type como image-to-image y proporciona las image_urls. Todos los demás parámetros utilizan la misma especificación.
Reemplaza las URL de ejemplo de example.com con tus propios archivos públicos accesibles mediante HTTPS. Estas URL de ejemplo ilustran el formato de la petición y no son archivos descargables.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana-2-1",
"input": {
"prompt": "Change the teapot to matte sage green. Preserve its shape and the studio lighting.",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "image-to-image",
"image_urls": [
"https://example.com/teapot.png"
]
}
}'Consultar una tarea
GET https://api.seevio.ai/v1/tasks/{taskId}Reemplaza el ID de ejemplo por el taskId obtenido al crear la tarea. Las consultas solo devuelven tareas que pertenecen al usuario de la clave API; los ID inaccesibles o desconocidos devuelven HTTP 404.
Realiza consultas cada 10 o 20 segundos como punto de partida, reduce la frecuencia si recibes un HTTP 429 y detente cuando el estado sea completed o failed. Para entornos de producción, se recomienda usar webhooks. Cada ejemplo de código abajo realiza una sola consulta.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Estado | Valores permitidos y requisitos |
|---|---|
| queued | Aceptada y en cola para procesamiento. |
| generating | Generación en curso. |
| completed | Finalizada correctamente. Descarga el archivo de data.results antes de que expire. |
| failed | Error al procesar. Revisa failed_reason y billing_status. |
| Campo | Tipo | Valores permitidos y requisitos |
|---|---|---|
| id | string | Identificador de la tarea. Corresponde al taskId de la respuesta de creación. |
| created_at | number | Fecha de creación de la tarea en formato de tiempo Unix (segundos). |
| model | string | El ID del modelo público utilizado para esta tarea. |
| billing_status | string | reserved, charged, refunded o refund_failed. |
| credits | number | Créditos reservados para la tarea. Este valor se mantiene tras un reembolso; revisa billing_status para conocer el estado final de la facturación. |
| failed_reason | string | null | Razón del fallo en tareas fallidas; de lo contrario null. Las respuestas de consulta fallidas omiten el objeto data. |
| failed_code | string | null | Código de error. Consulta failed_reason para más detalles. |
| data | object | Presente en consultas de tareas que no han fallado. Contiene los detalles de procesamiento y el resultado. |
| data.results | string[] | Lista de URL de imágenes; vacía antes de finalizar y tras caducar. |
| data.image_expires_at | string | null | Caducidad de las imágenes en ISO 8601, o null si no está disponible. |
| data.processing_time | number | null | Duración del procesamiento de la tarea en segundos si está disponible; de lo contrario, null. |
En cola
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-2-1",
"credits": 3,
"failed_code": null,
"status": "queued",
"billing_status": "reserved",
"failed_reason": null,
"data": {
"results": [],
"image_expires_at": null,
"processing_time": null
}
}Completada
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-2-1",
"credits": 3,
"failed_code": null,
"status": "completed",
"billing_status": "charged",
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/images/example.png"
],
"image_expires_at": "2026-10-12T00:00:00.000Z",
"processing_time": 12
}
}Fallida
Cuando la consulta devuelve status=failed, significa que el proceso de generación ha fallado. Consulte failed_reason para conocer el motivo del error y billing_status para saber si se ha realizado el reembolso. En este ejemplo, refunded indica que se han devuelto los créditos. El campo credits conserva el valor reservado originalmente y la respuesta no incluye data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-2-1",
"credits": 3,
"failed_code": "400",
"status": "failed",
"billing_status": "refunded",
"failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}Los enlaces de los resultados están disponibles durante 30 días tras su almacenamiento. Una vez transcurrido este plazo, el campo results aparecerá vacío.
Webhooks
Configura callback_url en la petición de creación para recibir un POST con formato JSON cuando la tarea se complete o falle. Responde con un código 2xx en menos de 15 segundos. Los envíos fallidos se reintentan; procesa los envíos repetidos de forma idempotente usando el ID de la tarea.
Tu endpoint de callback debe aceptar solicitudes POST con un cuerpo en formato JSON (Content-Type: application/json).
Crear una tarea con callback
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana-2-1",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "text-to-image"
},
"callback_url": "https://example.com/webhooks/seevio"
}'Las devoluciones de llamada (callbacks) utilizan la estructura de respuesta de consulta de tareas; las notificaciones de error con reembolso también incluyen credits_refunded en el nivel superior. Utiliza id para identificar la tarea y status para distinguir entre completadas y fallidas. Las notificaciones pueden repetirse: procésalas de forma idempotente por id y status. Las devoluciones de llamada no están firmadas; verifica la tarea mediante el endpoint de consulta autenticado. Los fallos en la entrega de la notificación de devolución no reembolsan una tarea que se haya completado correctamente.
Tarea completada: carga útil del callback exitosa
created_at es la fecha de creación del evento; task_created_at es la de la tarea, en segundos Unix. Los ejemplos muestran los campos recomendados; las respuestas pueden incluir campos adicionales.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana-2-1",
"credits": 3,
"failed_code": null,
"status": "completed",
"billing_status": "charged",
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/images/example.png"
],
"image_expires_at": "2026-10-12T00:00:00.000Z",
"processing_time": 12
},
"task_created_at": 1789171200
}Tarea fallida: carga útil del callback con error
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana-2-1",
"credits": 3,
"failed_code": "400",
"status": "failed",
"billing_status": "refunded",
"failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs.",
"task_created_at": 1789171200,
"credits_refunded": 3
}Ejemplo de receptor
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const imageUrls = callbackData.data.results;
// Save the image URLs and mark this task as completed in your application.
console.log(callbackData.id, imageUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}Este ejemplo de Next.js lee el cuerpo de la llamada JSON y procesa directamente las tareas completadas y fallidas. Te recomendamos implementar persistencia y deduplicación de ID de tareas en tu aplicación, así como encolar las tareas lentas antes de confirmar la recepción del callback.
Errores
Los errores HTTP contienen un objeto error con un código (code) y un mensaje (message). Una tarea aceptada con éxito puede fallar más tarde; consulta su estado o gestiona el callback de fallo.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Campo | Qué hacer |
|---|---|---|
| 400 | invalid_request | Corrige el JSON, el prompt faltante, el rango de parámetros o la URL del archivo multimedia antes de reintentar. |
| 401 | invalid_api_key | Verifica el Bearer token y asegúrate de que la clave API esté activa. |
| 402 | insufficient_credits | Añade créditos o reduce el costo de la tarea. La respuesta puede indicar la cantidad de créditos requeridos y disponibles. |
| 403 | forbidden | Revisa la restricción de cuenta detallada en el mensaje de error. |
| 404 | not_found | Verifica el ID de la tarea y que la clave pertenezca al usuario que la creó. |
| 429 | rate_limited | Espera a que transcurra el intervalo indicado en Retry-After antes de intentarlo de nuevo. |
| 500 | internal_error | Revisa el mensaje de error y los registros de la API. Reintenta con precaución; reenviar una petición de creación puede generar otra tarea facturable. |
Los errores utilizan error.code y error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. El error 402 insufficient_credits significa que tus créditos disponibles son insuficientes para procesar esta solicitud.
Límites de peticiones
Creación de tareas: cada clave de API permite de forma predeterminada un máximo de 100 solicitudes por minuto. Actualmente no están disponibles los límites de tarifa personalizados.
Consulta de tareas: cada clave de API permite de forma predeterminada un máximo de 120 solicitudes por minuto. Las solicitudes de consulta y las de creación de tareas se contabilizan de forma independiente.
Las solicitudes de creación de imágenes y vídeos comparten el mismo límite de velocidad (rate limit) de la clave API.
HTTP 429 incluye la cabecera Retry-After: 60 para creación y Retry-After: 5 para consultas. Usa un margen de espera y evita realizar consultas con demasiada frecuencia.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
}
}