Generación de video
El video se genera de forma asíncrona: creas un job, consultas su estado hasta que termine y luego descargas el resultado. Generar un clip toma desde decenas de segundos hasta varios minutos. Entre los modelos de video están veo-3.1-generate-preview, veo-3.1-fast-generate-preview, seedance-2-0, kling-v3-0, grok-imagine-video-1-5 y wan-2-6-t2v; consulta la página de modelos para ver las duraciones, tamaños y precio de cada uno.
1. Crea un job
curl https://api.inferray.com/v1/videos \
-H "Authorization: Bearer $INFERRAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1-fast-generate-preview",
"prompt": "A paper boat drifting across a quiet pond at sunrise",
"seconds": 8,
"size": "1280x720"
}'
{
"id": "video_7f3a...",
"object": "video",
"model": "veo-3.1-fast-generate-preview",
"status": "queued",
"progress": 0,
"created_at": 1767225600,
"completed_at": null,
"error": null
}
| Campo | Qué hace |
|---|---|
model | Obligatorio. Un modelo de video. |
prompt | Obligatorio. Lo que debe mostrar el video. |
seconds | Duración. Cada modelo ofrece un conjunto fijo, por ejemplo 4, 6, 8 o 10. |
size | Tamaño de salida como widthxheight, entre los tamaños que ofrece el modelo. |
audio | false para un clip sin audio, en los modelos que admiten ambas opciones. Los clips sin audio suelen ser más baratos. |
image | Un primer fotograma para animar, en los modelos que admiten image-to-video. |
2. Consulta el estado
curl https://api.inferray.com/v1/videos/$VIDEO_ID \
-H "Authorization: Bearer $INFERRAY_API_KEY"
status pasa de queued a in_progress y termina como completed o failed (o expired). Consulta cada 10–20 segundos con backoff en lugar de hacerlo en un bucle continuo; las consultas son gratuitas.
3. Descarga el video
Una vez que el job esté en completed:
curl https://api.inferray.com/v1/videos/$VIDEO_ID/content \
-H "Authorization: Bearer $INFERRAY_API_KEY" \
--output video.mp4
Descárgalo pronto y guárdalo tú mismo; los videos terminados no se conservan indefinidamente. Volver a leer el estado o el contenido no genera un nuevo cobro.
En código
const headers = { Authorization: `Bearer ${process.env.INFERRAY_API_KEY}`, "Content-Type": "application/json" };
const base = "https://api.inferray.com/v1/videos";
let job = await (await fetch(base, {
method: "POST",
headers,
body: JSON.stringify({ model: "veo-3.1-fast-generate-preview", prompt: "A paper boat drifting across a pond", seconds: 8 }),
})).json();
while (job.status === "queued" || job.status === "in_progress") {
await new Promise((resolve) => setTimeout(resolve, 15_000));
job = await (await fetch(`${base}/${job.id}`, { headers })).json();
}
if (job.status !== "completed") throw new Error(job.error?.message ?? job.status);
const video = await fetch(`${base}/${job.id}/content`, { headers });
Propiedad y precios
Un ID de job pertenece al proyecto cuya key lo creó; las keys de otros proyectos reciben un 404. El video se cobra por segundo de salida, según la resolución y si tiene audio, y el precio se muestra en la página de cada modelo. Antes de que un job comience, tu saldo debe cubrir su precio estimado; un job que falla no se cobra.
Usa una Idempotency-Key al crear jobs, para que una solicitud reintentada devuelva el job que ya iniciaste en lugar de pagar por un segundo.