Volver a la documentación

API de generación de video

Crea tareas Veo 3.1 de texto a video e imagen a video con tu clave de API y consulta el resultado con el mismo endpoint /api/status que usas para imágenes.

Nano AI API URL base: https://nanobnana.com

Autenticación

Envía tu clave de API como token Bearer en cada solicitud. Usa la misma clave para crear una tarea y para consultar su estado. Puedes crear claves en la página API Keys de tu panel.

http
Authorization: Bearer YOUR_API_KEY

Modelos y créditos

Asigna al campo model uno de los valores siguientes. Cualquier otro valor se rechaza con HTTP 400 y no se cobra nada.

valor de modelModeloTexto a video (créditos)Imagen a video (créditos)
veo3_fastVeo 3.1 Fast (predeterminado)2535
veo3Veo 3.1 Quality180180

veo3-fast se acepta como alias de veo3_fast. Si omites model, se usa veo3_fast. El precio de imagen a video se aplica cuando image_urls contiene al menos una URL.

Crear una tarea de video

Valida la solicitud, cobra los créditos y devuelve un task_id. El video se genera de forma asíncrona: consulta /api/status o define callback_url para recibir el resultado.

Cuerpo de la solicitudJSON
prompt:string

Descripción en texto del video que quieres generar.

model:opcionalstring

veo3_fast (alias veo3-fast) o veo3. Cualquier otro valor devuelve HTTP 400. Valor predeterminado veo3_fast.

image_urls:opcionalstring[]

URL públicas de imágenes para imagen a video. Con 1 imagen, el video se construye en torno a ella. Con 2 imágenes, se usan como primer y último fotograma. También se acepta el alias imageUrls (camelCase). Si envías ambos campos, se usa image_urls.

aspect_ratio:opcionalstring

16:9, 9:16 o Auto. Auto recorta el video según la imagen subida. Valor predeterminado 16:9.

translation:opcionalboolean

Si es true, el prompt se traduce al inglés antes de generar. Valor predeterminado true.

watermark:opcionalstring

Texto de marca de agua que se añade al video.

callback_url:opcionalstring

URL pública que recibe una solicitud POST con el resultado final cuando termina la tarea.

Campos no admitidos

duration, resolution e image_url (en singular) no forman parte de esta API y se ignoran. La duración del video la decide el modelo. Envía las imágenes en un array image_urls.

bash
curl -X POST "https://nanobnana.com/api/video/generate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "The camera slowly pushes in as the city lights turn on at dusk",
    "model": "veo3_fast",
    "image_urls": ["https://example.com/first-frame.jpg"],
    "aspect_ratio": "16:9"
  }'
{
  "code": 200,
  "message": "success",
  "data": {
    "task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv"
  }
}

Consultar el estado de una tarea

Los ID de tareas de video empiezan por veo y terminan en bksv. /api/status los detecta automáticamente y devuelve la URL del video cuando la tarea termina.

Parámetros de consulta
task_id:string

El task_id que devolvió POST /api/video/generate.

model:opcionalstring

Usa veo3 para forzar la consulta de video si el task_id no sigue el formato veo…bksv.

bash
curl "https://nanobnana.com/api/status?task_id=veo24223f74e4f445ec9c4403b532cc328fbksv" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "code": 200,
  "message": "success",
  "data": {
    "task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv",
    "request": {
      "prompt": "The camera slowly pushes in as the city lights turn on at dusk",
      "model": "veo3_fast",
      "image_urls": [
        "https://example.com/first-frame.jpg"
      ],
      "aspect_ratio": "16:9"
    },
    "response": null,
    "status": "IN_PROGRESS",
    "status_code": 3,
    "status_text": "IN_PROGRESS",
    "consumed_credits": 35,
    "created_at": "2026-10-04 17:05:12",
    "model": "veo3"
  },
  "model": "veo3"
}

Valores de estado

  • IN_PROGRESS · status_code: 3 — el video todavía se está generando. Sigue consultando.
  • COMPLETED · status_code: 1 — el video está listo. response contiene la URL del video.
  • FAILED · status_code: 2 — la generación falló. error_message explica el motivo y los créditos se reembolsan automáticamente.

Cobros y reembolsos

  • Los créditos se cobran al crear la tarea, antes de que empiece la generación.
  • Si la solicitud de creación no devuelve HTTP 200, no existe ninguna tarea y los créditos cobrados se reembolsan de inmediato. La respuesta indica cuántos créditos se reembolsaron.
  • Si una tarea creada termina después en FAILED, sus créditos se reembolsan automáticamente y consumed_credits pasa a 0 en la respuesta de estado.

Ejemplo de consulta periódica

La generación de video suele tardar unos minutos. Consulta cada 10 segundos mientras status_code sea 3 y detente cuando sea 1 o 2.

javascript
async function waitForVideo(taskId) {
  while (true) {
    const res = await fetch(`https://nanobnana.com/api/status?task_id=${taskId}`, {
      headers: { Authorization: 'Bearer YOUR_API_KEY' }
    });
    const payload = await res.json();
    if (!res.ok) throw new Error(payload.message);

    const task = payload.data;
    if (task.status_code === 1) return task.response[0];
    if (task.status_code === 2) throw new Error(task.error_message || 'Video generation failed');

    await new Promise((resolve) => setTimeout(resolve, 10000));
  }
}

Callback

Si defines callback_url, enviaremos una solicitud POST con este JSON cuando la tarea termine o falle. La URL debe ser accesible desde internet.

{
  "code": 200,
  "message": "success",
  "data": {
    "request": {
      "prompt": "The camera slowly pushes in as the city lights turn on at dusk",
      "model": "veo3_fast",
      "image_urls": [
        "https://example.com/first-frame.jpg"
      ],
      "aspect_ratio": "16:9"
    },
    "response": [
      "https://example.com/generated-video.mp4"
    ],
    "status": "COMPLETED",
    "created_at": "2026-10-04 17:05:12"
  }
}

Errores frecuentes

{
  "code": 400,
  "message": "prompt is required",
  "data": null
}