Nano Banana Pro 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, 9:16, 16:9, 3:4, 4:3, 3:2, 2:3, 5:4, 4:5, 21:9 |
| Imágenes de referencia | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–8 images, each up to 30 MB. Text-to-image requires an empty array. |
| Prompt | Required non-empty prompt, up to 10000 characters. |
| Formato de salida | png, jpg |
Precios y créditos
Each image costs 4 credits, including all supported resolutions and formats. Credits are reserved on acceptance, settled on success and refunded on failure. Generation times out after 30 minutes; refund_failed means refund recovery is pending.
Request idempotency is not supported. Each valid POST creates a new billable task. If a submission outcome is uncertain, query the returned taskId; retrying POST can create another task.
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 Pro, establece este campo como nano-banana-pro. |
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 10000 characters. Ejemplo: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | No | text-to-image | For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract. Valores admitidos text-to-image | image-to-image |
input.image_urls | string[] | Condicional | [] | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–8 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 | 9:16 | 16:9 | 3:4 | 4:3 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9Ejemplo: 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 |
Aspect ratio defaults to auto. Unknown fields, including output quantity, are rejected. Each request generates exactly one image.
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-pro",
"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": 4
}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-pro",
"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
For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract.
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-pro",
"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 | Allowed values and requirements |
|---|---|
| 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. |
| Field | Tipo | Allowed values and requirements |
|---|---|---|
| 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. |
| 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 de procesamiento del proveedor en segundos si está disponible; de lo contrario null. |
En cola
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-pro",
"credits": 4,
"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-pro",
"credits": 4,
"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-pro",
"credits": 4,
"status": "failed",
"billing_status": "refunded",
"failed_reason": "Image generation failed."
}Result links are provided for 30 days after storage. After expiry, results is empty.
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-pro",
"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"
}'Callbacks use the task query response structure; refunded failure notifications also include top-level credits_refunded. Use id to identify the task and status to distinguish completed from failed. Notifications may repeat: process them idempotently by id and status. Callbacks are unsigned; verify the task with the authenticated query endpoint. Delivery failure does not refund a successful task.
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-pro",
"credits": 4,
"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-pro",
"credits": 4,
"status": "failed",
"billing_status": "refunded",
"failed_reason": "Image generation failed.",
"task_created_at": 1789171200,
"credits_refunded": 4
}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. |
Errors use error.code and error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. Insufficient provider balance is not a customer 402 error.
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.
Image and video creation requests share the same API key rate limit.
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."
}
}