Endpoints
Vídeo (trabajos asíncronos)
Crea un trabajo de vídeo con POST /videos, consulta su estado con GET /videos/{id} y descarga el resultado; incluye facturación y errores.
Pruébalo en el playgroundGenera vídeo con Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo y más. La generación de vídeo tarda desde decenas de segundos hasta varios minutos, así que funciona como un trabajo asíncrono: creas un trabajo, consultas su estado y luego descargas el resultado.
| Paso | Petición |
|---|---|
| 1. Crear | POST /api/v1/videos |
| 2. Consultar | GET /api/v1/videos/{id} |
| 3. Descargar | GET /api/v1/videos/{id}/content?index=0 |
Crear un trabajo
POST https://api14.com/api/v1/videos
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model | string | sí | Un id de modelo de vídeo, p. ej. google/veo-3.1-fast. |
prompt | string | sí | Qué ocurre en el vídeo. |
duration | number | no | Duración en segundos. Por defecto, la primera duración admitida por el modelo. |
resolution | string | no | p. ej. 720p, 1080p. Debe ser admitida por el modelo. |
aspect_ratio | string | no | p. ej. 16:9, 9:16. |
generate_audio | boolean | no | Genera una banda sonora donde se admita (por defecto true). |
image | string | no | Primer fotograma como URL o URI data: (imagen a vídeo). |
Duraciones, resoluciones y proporciones admitidas por modelo: GET /videos/models (público) o la página del modelo.
Comprobación de saldo
Antes de enviar el trabajo, la pasarela estima su precio como duración × el precio por segundo de la resolución solicitada (y de la opción de audio). Si tu saldo es inferior a la estimación, la petición falla con 402 insufficient_balance y no se inicia nada.
Respuesta
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
Consultar el trabajo
GET https://api14.com/api/v1/videos/{id}
{
"id": "vid_01JABCDEF",
"status": "completed",
"generation_id": "gen-1791100000-abc",
"unsigned_urls": ["/api/v1/videos/vid_01JABCDEF/content?index=0"],
"usage": { "cost": 1.2 }
}
status | Significado |
|---|---|
queued | Esperando al proveedor. |
in_progress | Renderizando. |
completed | Terminado; unsigned_urls lista las salidas. |
failed, cancelled, expired | Terminó sin salida; consulta error. No se te cobra. |
Consulta el estado cada 5-10 segundos. Solo la cuenta que creó el trabajo puede leerlo; otros ids devuelven 404 not_found.
Descargar el resultado
GET https://api14.com/api/v1/videos/{id}/content?index=0
Devuelve los bytes del vídeo (normalmente video/mp4) con tu clave de API. Las URL de salida siempre apuntan a la pasarela, nunca al proveedor. Si el archivo no está listo o ha caducado, recibes content_unavailable.
Ejemplo
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
"model": "google/veo-3.1-fast",
"prompt": "A drone shot over turquoise ocean waves at sunrise",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
await new Promise((r) => setTimeout(r, 5000));
job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);
Facturación
Se te cobra una sola vez, cuando el trabajo llega a completed, con el coste real del proveedor. Los trabajos fallidos, cancelados y caducados son gratuitos. Los trabajos también se completan en segundo plano, así que un trabajo que nunca consultas igualmente se liquida y aparece en Uso.
Errores
| Estado | Código | Cuándo |
|---|---|---|
| 402 | insufficient_balance | El saldo es inferior al precio estimado del trabajo. |
| 403 | plan_required | Tu plan no incluye modelos de vídeo. |
| 404 | model_not_found / not_found | Modelo desconocido, o el id del trabajo no es tuyo. |
| 502 | upstream_unavailable | No se pudo leer el estado; reintenta. |
Consulta Errores.