Volver al blog
Guía·23 de mayo de 2026·7 min de lectura

Inicio rápido de las API de Veo 3 y Sora — texto a video e imagen a video en cinco minutos

Tus primeras llamadas de generación de video con Veo 3 mediante una API al estilo de OpenAI: texto a video, imagen a video con control del primer y último fotograma, cargas de archivos y un ejemplo listo para producción en Python y Node. Veo 3 está disponible hoy; Sora está en la hoja de ruta para el mismo endpoint. Sin lista de espera ni facturación por proveedor.

Veo 3 y Sora sitúan el text-to-video en el mismo nivel de calidad en el que estaba el text-to-image hace dieciocho meses. El inconveniente: los proveedores restringen el acceso mediante listas de espera, limitaciones regionales y sistemas de facturación particulares que no encajan con el resto de tu stack de IA.

En Kunavo, el modelo de text-to-video disponible actualmente es Google Veo 3, servido mediante un único endpoint compatible con OpenAI: sin lista de espera, autenticación compatible con OpenAI, cobro por vídeo y resultados servidos desde una URL permanente. Sora (sora-2) está en la hoja de ruta: como el endpoint no depende del modelo, cambiar a él más adelante será cambiar una sola palabra, model. Esta guía pone en marcha tu primera llamada a Veo 3 en unos cinco minutos. Consulta la guía de la API de Sora para conocer el panorama completo.

Configuración

  1. Regístrate en kunavo.com/app/signup. Recarga desde $10 con pago por uso: suficiente para ejecutar varias veces cada ejemplo de esta guía, y tu saldo nunca caduca.
  2. Crea una clave en /app/keys. Empieza por sk-kn-.
  3. Expórtala: export KUNAVO_API_KEY=sk-kn-....

Text-to-video con Veo 3

Actualmente, Veo 3 es el mejor modelo de text-to-video del mercado para escenas cinematográficas: entiende el lenguaje de cámara (dolly, push-in, rack focus), mantiene una iluminación estable entre cortes y gestiona correctamente el movimiento a 24 fps. Las generaciones tardan de 30 segundos a unos minutos; la respuesta HTTP es síncrona: configura un tiempo de espera largo en el cliente.

text_to_video.py
import requests, os, time

KEY = os.environ["KUNAVO_API_KEY"]

resp = requests.post(
    "https://api.kunavo.com/v1/video/generations",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "model": "veo-3",
        "prompt": "A drone shot pulling back from a quiet mountain lake at dawn, mist rising off the water. Cinematic, 24fps, soft golden light.",
        "aspect_ratio": "16:9",
        "resolution": "1080p",
    },
    timeout=600,   # generations take 30s to several minutes
)
resp.raise_for_status()
data = resp.json()
print(data["data"][0]["url"])

duration (en segundos) define la duración del clip en los modelos con facturación por segundo: los modelos Seedance y el modelo Wan 2.7. Los modelos Veo lo ignoran; cada clip de Veo dura 8 segundos y se factura por vídeo.

La respuesta sigue el estilo de OpenAI: { data: [{ url: '...' }] }. La URL es permanente y se sirve desde files.kunavo.com; si necesitas alojamiento a largo plazo, descárgala una vez a tu propio almacenamiento.

Imagen a vídeo

Anclar el vídeo con una imagen suele ser la forma de obtener resultados de calidad de producción. Veo 3 admite dos modos de imagen:

  • image_mode: "frame": una sola imagen es el primer fotograma; dos imágenes son el primer y el último fotograma. Valor predeterminado para image_url.
  • image_mode: "reference": hasta 3 referencias de estilo para mantener la coherencia del personaje o el vestuario sin imponer fotogramas.
image_to_video.py
# image-to-video: pass an image_url to anchor the first frame.
resp = requests.post(
    "https://api.kunavo.com/v1/video/generations",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "model": "veo-3",
        "prompt": "She smiles, then walks out of frame to the left",
        "image_url": "https://files.kunavo.com/<your-upload>.jpg",
        "image_mode": "frame",      # one image => first frame
        "aspect_ratio": "9:16",     # vertical, mobile-native
    },
    timeout=600,
)
print(resp.json()["data"][0]["url"])

Si aún no tienes una URL pública para la imagen de referencia, envía los bytes a /v1/files y Kunavo alojará el archivo por ti en files.kunavo.com:

upload_anchor.py
# If you don't have a public URL, upload bytes; Kunavo hosts the file.
with open("anchor.jpg", "rb") as f:
    up = requests.post(
        "https://api.kunavo.com/v1/files",
        headers={"Authorization": f"Bearer {KEY}"},
        files={"file": f},
    )
image_url = up.json()["url"]   # permanent files.kunavo.com URL

Sora y otros modelos

La misma estructura de endpoint funciona con todos los modelos de vídeo del catálogo: pasa el slug correspondiente del modelo:

  • veo-3: cinematográfico, 1080p, compatible con image-to-video. Disponible ahora.
  • seedance-2, seedance-2-5: ByteDance, muy potente para el movimiento de personajes.

OpenAI Sora (sora-2) está en la hoja de ruta y todavía no se puede invocar en Kunavo. Como /v1/video/generations no depende del modelo, el día que llegue el único cambio en las llamadas anteriores será el campo model; hasta entonces, Veo 3 es el equivalente disponible en el mismo endpoint.

Consulta /models para ver la lista actual y el precio de cada modelo.

Desde Node / TypeScript

veo.mjs
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.KUNAVO_API_KEY,
  baseURL: "https://api.kunavo.com/v1",
});

// /v1/video/generations isn't in OpenAI's SDK shape, but the same auth
// header works — call it with fetch:
const resp = await fetch(
  "https://api.kunavo.com/v1/video/generations",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.KUNAVO_API_KEY}`,
    },
    body: JSON.stringify({
      model: "veo-3",
      prompt: "A red origami crane unfolding into a paper plane and flying away through a window",
      resolution: "1080p",
    }),
  },
);
const { data } = await resp.json();
console.log(data[0].url);

Modelo de precios

Los modelos de vídeo cobran por vídeo o por segundo de salida, no por token: los modelos Veo por vídeo, y cada clip dura 8 segundos; los modelos Seedance y Wan 2.7, por segundo. Kunavo publica la tarifa de cada modelo en /pricing. Un clip de 8 segundos de Veo 3 en 1080p cuesta $0.42. Las generaciones fallidas (4xx / 5xx) nunca se cobran.

Lista de comprobación para producción

  • Configura un tiempo de espera HTTP de 10 minutos. La pasarela consulta el proveedor durante un máximo de 540 s y devuelve 504 si el modelo sigue trabajando después de ese límite. Para trabajos muy largos, reintenta: las generaciones son idempotentes por prompt.
  • Persiste la URL del resultado. Aunque las URL de files.kunavo.com son permanentes, tu producto debe conservar su propia copia en un almacenamiento bajo tu control.
  • Gestiona los errores 429 con backoff. Los modelos de vídeo dependen de GPU; una breve contención es normal. Cuando está presente, se respeta el encabezado retry-after.
  • Usa una caché basada en el hash del prompt cuando sea razonable. Enviar el mismo prompt dos veces genera dos clips y se cobra dos veces: la pasarela no reutiliza ningún resultado anterior ni envía ningún seed al modelo.

Preguntas: contact@kunavo.com. El equipo detrás de la pasarela lee todos los correos y responde en un plazo de 24 horas.