Skip to Content

Crear video

Envía una tarea de generación de video. La solicitud devuelve 202 Accepted inmediatamente con un id de tarea y una URL de consulta: la generación se ejecuta de forma asíncrona. Consulta la tarea o recibe un webhook, luego lee el resultado con Obtener estado del video.

POST https://api.ofox.ai/v1/videos

Parámetros de solicitud

ParámetroTipoObligatorioDescripción
modelstringSlug del modelo, por ejemplo google/veo-3.1 o bytedance/seedance-2.0
promptstringDescripción textual del video
durationintegerDuración del video en segundos
resolutionstring480p / 720p / 1080p / 1K / 2K / 4K
aspect_ratiostring16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 3:2 / 2:3 / 21:9 / 9:21
sizestringPixeles exactos WIDTHxHEIGHT (por ejemplo 1280x720), alternativa a resolution + aspect_ratio
frame_imagesarrayControl de fotogramas (imagen a video / primer y último fotograma). Presente ⇒ se trata como imagen a video. Ver abajo
input_referencesarrayGuía de sujeto / estilo (referencia a video), no anclas precisas de fotograma. Ver abajo
generate_audiobooleanValor predeterminado true en modelos que admiten salida de audio
seedintegerSemilla de generación determinística (no garantizada en todos los proveedores)
callback_urlstringURL de webhook para estado terminal; debe usar HTTPS (ver Webhooks)
providerobjectPassthrough específico del proveedor, ver Provider passthrough

Elemento de frame_images[]

Cada elemento fija un fotograma de la salida. frame_type es first_frame o last_frame.

{ "type": "image_url", "image_url": { "url": "https://example.com/first.jpg" }, "frame_type": "first_frame" }

Elemento de input_references[]

Pasa referencias de imagen / audio / video por type: guían el sujeto, el estilo y la consistencia, no anclas precisas de fotograma:

{ "type": "image_url", "image_url": { "url": "https://example.com/subject.jpg" } } { "type": "audio_url", "audio_url": { "url": "https://example.com/voice.mp3" } } { "type": "video_url", "video_url": { "url": "https://example.com/ref.mp4" } }
MediotypeCantidad máximaOtras restricciones
Imagenimage_url≤ 9
Audioaudio_url≤ 3≤ 15s por clip
Videovideo_url≤ 1

Superar cualquier límite devuelve 400 too_many_references (ver Errores).

frame_images e input_references son mutuamente excluyentes: una solicitud usa uno u otro, nunca ambos. Enviar ambos devuelve 400 references_conflict.

Modo de generación (implícito)

No existe un campo gen_mode. El modo se infiere a partir de los inputs que envías:

ModoDetectado cuando
text2videoNi frame_images ni input_references
img2videoframe_images con un first_frame
img2video_endframe_images con first_frame + last_frame
imgref2videoinput_references, solo imágenes
mixref2videoinput_references mezclando imagen / audio / video

Respuesta

202 Accepted: la tarea se acepta con status: "pending" y un polling_url:

{ "id": "9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718", "status": "pending", "polling_url": "https://api.ofox.ai/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718" }

Consulta polling_url (o espera un webhook) hasta que la tarea llegue a un estado terminal; ver Obtener estado del video.

Ejemplos de solicitud

Un solo esquema de /v1/videos cubre todos los modos de generación; el modo se elige implícitamente a partir de tus inputs. Cada ejemplo de abajo funciona tal cual.

Sin frame_images / input_references → texto a video.

Terminal
curl -X POST https://api.ofox.ai/v1/videos \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "google/veo-3.1", "prompt": "A golden retriever running on the beach at sunset", "duration": 5, "resolution": "1080p", "aspect_ratio": "16:9", "generate_audio": true }'

Opciones combinables

Los campos de abajo son ortogonales al modo de generación: agrega cualquiera de ellos a cualquier cuerpo de solicitud anterior.

Recibe un POST en tu endpoint cuando la tarea llegue a un estado terminal, en lugar de consultar.

{ "model": "google/veo-3.1", "prompt": "...", "callback_url": "https://your-app.example/webhooks/ofox-video" }

callback_url debe usar HTTPS. Consulta Webhooks para ver el payload y la firma.

Provider passthrough

Los parámetros específicos del proveedor pasan por provider.options.<slug>: solo el proveedor correspondiente los recibe. Parámetros como watermark no son compatibles con todos los modelos, por lo que viven en el passthrough del proveedor en lugar de ser campos de primer nivel (esto sigue la convención de provider-passthrough de OpenRouter). Las opciones de passthrough que acepta un modelo dependen de sus capacidades.

{ "model": "alibaba/wan-2.7", "prompt": "...", "provider": { "options": { "dashscope": { "watermark": false, "audio_setting": "..." } } } }
Last updated on