Video API
Una API unificada de generación de video compatible con el estándar OpenRouter Video Generation. Un solo esquema cubre generación de texto a video, imagen a video, primer/último fotograma y generación guiada por referencias. Envía una tarea de forma asíncrona; luego consulta su estado o recibe un webhook cuando termine.
| Función | Detalle |
|---|---|
| Base URL | https://api.ofox.io |
| Estilo de protocolo | Compatible con OpenRouter (envío asíncrono → consulta / webhook) |
| Modo de generación | Se infiere implícitamente: sin imágenes = texto a video · frame_images = imagen / primer-último fotograma · input_references = guiado por referencias |
| Entrega del resultado | Consulta con GET (protegida por límite de tasa) o webhook callback_url (firmado con HMAC, con reintentos) |
| Almacenamiento de video | URL original upstream (temporal) + espejo CDN opcional (URL firmada persistente) |
Autenticación
Cada solicitud lleva tu API Key de ofox (formato sk-xxx…) en el header HTTP:
Authorization: Bearer $OFOX_API_KEYcallback_url debe usar HTTPS. Los destinos de webhook se validan contra SSRF: se rechazan direcciones privadas, de bucle local y de metadatos cloud. Una dirección no HTTPS o interna falla al crear la tarea con 400 invalid_callback_url.
Quickstart
1. Envía una tarea
# Opcional: fijar un proveedor. Si lo omites, la plataforma enruta por ti
# "provider": { "type": "byteplus" }
curl -X POST https://api.ofox.io/v1/videos \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-2.5",
"prompt": "A golden retriever running on the beach at sunset",
"duration": 5,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": true
}'La llamada devuelve 202 inmediatamente con una URL de consulta:
{
"id": "9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718",
"status": "pending",
"polling_url": "https://api.ofox.io/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718"
}2. Consulta hasta que se complete
curl https://api.ofox.io/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718 \
-H "Authorization: Bearer $OFOX_API_KEY"Sigue consultando hasta que status llegue a un estado terminal: completed, failed, cancelled o expired. No consultes más de una vez por segundo, o pasa un callback_url al crear la tarea para recibir un webhook en lugar de consultar. Consulta Obtener estado del video y Webhooks.
Endpoints
| Método | Endpoint | Descripción |
|---|---|---|
POST | /v1/videos | Crear una tarea de video |
GET | /v1/videos/{id} | Obtener el estado y resultado de la tarea |
DELETE | /v1/videos/{id} | Cancelar una tarea |
Fijar un proveedor
Un modelo de vídeo puede estar servido por más de un proveedor. Pasa provider.type en el nivel superior del cuerpo de la petición para fijar la tarea a uno:
{
"model": "bytedance/seedance-2.0-mini",
"prompt": "...",
"provider": { "type": "byteplus" }
}Sin ese campo, la tarea se reparte con un peso. Los proveedores disponibles están en Enrutamiento de proveedores.
Precio por segundo
Los modelos de vídeo se facturan por tiempo, no por tokens. La entrada correspondiente de pricing.video_pricing.tiers define la tarifa en USD por segundo según la resolución, el tipo de entrada y las opciones de audio. pricing.output_video_per_second es solo el precio inicial más bajo del modelo. La estimación es tarifa del nivel × duración solicitada; al finalizar, usa usage.video_seconds y usage.video_cost de la respuesta como segundos facturados y coste real. En tareas de vídeo a vídeo, los segundos facturados pueden incluir la duración del vídeo de entrada.