cd ../back to blog
$Guide//June 4, 2026//7 min read

Guía rápida de la API de Veo 3 y Sora — texto a vídeo e imagen a vídeo en cinco minutos

Primeras llamadas de generación de vídeo con Veo 3 y Sora mediante una API estilo OpenAI: texto a vídeo, imagen a vídeo con control de primer y último fotograma, subida de archivos y ejemplos listos para producción en Python y Node. Sin lista de espera.

Veo 3 y Sora sitúan la generación de texto a vídeo en el mismo listón de calidad donde estaba el texto a imagen hace dieciocho meses. El inconveniente: ambos proveedores restringen el acceso tras listas de espera, limitaciones por región y flujos de facturación a medida que no encajan con el resto de tu stack de IA.

Esta guía recorre cómo hacer tu primera llamada a la API de Veo 3 y Sora a través de Brievio — los modelos genuinos, sin lista de espera, con autenticación compatible con OpenAI, facturados por segundo de vídeo generado y con resultados servidos desde una URL permanente. Tiempo total: unos cinco minutos.

Configuración

  1. Regístrate en brievio.com/app/signup. Recibes 2 $ de crédito al registrarte — suficiente para un par de clips de prueba de 5 segundos.
  2. Crea una clave en /app/keys. Empieza por sk-brievio-.
  3. Expórtala: export BRIEVIO_API_KEY=sk-brievio-....

Texto a vídeo con Veo 3

Veo 3 es actualmente el mejor modelo de texto a vídeo del mercado para planos cinematográficos — entiende el lenguaje de cámara (travelling, push-in, rack focus), produce una iluminación estable entre cortes y maneja correctamente el movimiento a 24fps. Las generaciones tardan de 30 segundos a unos minutos; la respuesta HTTP es síncrona — configura un timeout de cliente amplio.

text_to_video.py
import requests, os, time

KEY = os.environ["BRIEVIO_API_KEY"]

resp = requests.post(
    "https://api.brievio.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.",
        "duration": 8,
        "aspect_ratio": "16:9",
        "resolution": "1080p",
    },
    timeout=600,   # las generaciones tardan de 30 s a varios minutos
)
resp.raise_for_status()
data = resp.json()
print(data["data"][0]["url"])

La respuesta sigue el estilo de OpenAI: { data: [{ url: '...' }] }. La URL es permanente, servida desde files.brievio.com — descárgala una vez a tu propio almacenamiento si necesitas alojamiento a largo plazo. El clip es la salida genuina de Veo 3, no una copia recodificada ni con marca de agua.

Imagen a vídeo

Fijar el resultado con una imagen suele ser donde consigues una 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 primero + el último fotograma. Es el valor por defecto para image_url.
  • image_mode: "reference" — hasta 3 referencias de estilo para mantener la coherencia de personaje / vestuario sin forzar fotogramas.
image_to_video.py
# imagen a vídeo: pasa una image_url para fijar el primer fotograma.
resp = requests.post(
    "https://api.brievio.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.brievio.com/<your-upload>.jpg",
        "image_mode": "frame",      # una imagen => primer fotograma
        "duration": 6,
        "aspect_ratio": "9:16",     # vertical, nativo para móvil
    },
    timeout=600,
)
print(resp.json()["data"][0]["url"])

Si todavía no tienes una URL pública para tu imagen de anclaje, envía los bytes a /v1/files y Brievio aloja el archivo por ti en files.brievio.com:

upload_anchor.py
# Si no tienes una URL pública, sube los bytes; Brievio aloja el archivo.
with open("anchor.jpg", "rb") as f:
    up = requests.post(
        "https://api.brievio.com/v1/files",
        headers={"Authorization": f"Bearer {KEY}"},
        files={"file": f},
    )
image_url = up.json()["url"]   # URL permanente en files.brievio.com

Sora y otros modelos

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

  • veo-3 — cinematográfico, 1080p, admite imagen a vídeo.
  • sora-2 — Sora de OpenAI.
  • seedance-1-5-pro, seedance-2-0-pro — ByteDance, muy potentes en el movimiento de personajes.

Consulta /models para ver la lista en vivo y el precio por segundo de cada uno.

Desde Node / TypeScript

sora.mjs
import OpenAI from "openai";

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

// /v1/video/generations no está en la forma del SDK de OpenAI, pero el mismo
// header de autenticación funciona — llámalo con fetch:
const resp = await fetch(
  "https://api.brievio.com/v1/video/generations",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.BRIEVIO_API_KEY}`,
    },
    body: JSON.stringify({
      model: "sora-2",
      prompt: "A red origami crane unfolding into a paper plane and flying away through a window",
      duration: 5,
      resolution: "1080p",
    }),
  },
);
const { data } = await resp.json();
console.log(data[0].url);

Modelo de precios

Los modelos de vídeo facturan por segundo de salida, no por token. Brievio publica la tarifa por segundo en /pricing para cada modelo de vídeo — con un precio justo por debajo de la lista oficial. Un clip habitual de Veo 3 a 1080p de 8 segundos cuesta unos pocos céntimos. Las generaciones fallidas (4xx / 5xx) nunca se facturan.

Lista de comprobación para producción

  • Configura un timeout HTTP de 10 minutos. El gateway sondea el upstream hasta 540 s y devuelve un 504 si el modelo sigue trabajando pasado ese tiempo. Para trabajos muy largos, reintenta — las generaciones son idempotentes por prompt.
  • Guarda la URL del resultado. Aunque las URL de files.brievio.com son permanentes, tu producto debería tener su propia copia en el almacenamiento que tú controlas.
  • Gestiona los 429 con backoff. Los modelos de vídeo dependen de la GPU; una breve contención es normal. El header retry-after se respeta cuando está presente.
  • Cachea por hash del prompt si tiene sentido. El mismo prompt + seed + modelo devuelve un vídeo casi idéntico — pagar dos veces por él es un desperdicio.

Dudas: contact@brievio.com. El equipo detrás del gateway lee todos los correos y responde en menos de 24 horas.