Skip to Content

Criar vídeo

Envie uma tarefa de geração de vídeo. A requisição retorna 202 Accepted imediatamente com um id da tarefa e uma URL de polling — a geração roda de forma assíncrona. Consulte a tarefa por polling ou receba um webhook, depois leia o resultado com Obter status do vídeo.

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

Parâmetros da requisição

ParâmetroTipoObrigatórioDescrição
modelstringSlug do modelo, por exemplo google/veo-3.1 ou bytedance/seedance-2.0
promptstringDescrição textual do vídeo
durationintegerDuração do vídeo em 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
sizestringPixels exatos WIDTHxHEIGHT (por exemplo 1280x720), uma alternativa a resolution + aspect_ratio
frame_imagesarrayControle de frames (imagem para vídeo / primeiro e último frame). Presente ⇒ tratado como imagem para vídeo. Veja abaixo
input_referencesarrayGuia de assunto / estilo (referência para vídeo), não âncoras precisas de frame. Veja abaixo
generate_audiobooleanPadrão true em modelos que suportam saída de áudio
seedintegerSeed de geração determinística (não garantida em todos os provedores)
callback_urlstringURL de webhook de estado terminal, deve usar HTTPS (veja Webhooks)
providerobjectRepasse específico do provedor, veja Repasse para provider

Elemento de frame_images[]

Cada elemento fixa um frame da saída. frame_type é first_frame ou last_frame.

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

Elemento de input_references[]

Envie referências de imagem / áudio / vídeo por type — elas guiam assunto, estilo e consistência, não âncoras precisas de frame:

{ "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" } }
MídiatypeMáximoOutras restrições
Imagemimage_url≤ 9
Áudioaudio_url≤ 3≤ 15s por clipe
Vídeovideo_url≤ 1

Exceder qualquer limite retorna 400 too_many_references (veja Erros).

frame_images e input_references são mutuamente exclusivos — uma única requisição usa um ou outro, nunca ambos. Enviar ambos retorna 400 references_conflict.

Modo de geração (implícito)

Não há campo gen_mode. O modo é inferido a partir dos inputs enviados:

ModoDetectado quando
text2videoNem frame_images nem input_references
img2videoframe_images com um first_frame
img2video_endframe_images com first_frame + last_frame
imgref2videoinput_references, apenas imagens
mixref2videoinput_references misturando imagem / áudio / vídeo

Resposta

202 Accepted — a tarefa é aceita com status: "pending" e um polling_url:

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

Consulte polling_url por polling (ou aguarde um webhook) até a tarefa chegar a um estado terminal — veja Obter status do vídeo.

Exemplos de requisição

Um único esquema de /v1/videos cobre todos os modos de geração; o modo é escolhido implicitamente a partir dos seus inputs. Cada exemplo abaixo roda como está.

Sem frame_images / input_references → texto para vídeo.

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 }'

Opções combináveis

Os campos abaixo são ortogonais ao modo de geração — adicione qualquer um deles a qualquer corpo de requisição acima.

Receba um POST no seu endpoint quando a tarefa chegar a um estado terminal, em vez de fazer polling.

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

callback_url deve usar HTTPS. Veja Webhooks para o payload e a assinatura.

Repasse para provider

Parâmetros específicos do provedor passam por provider.options.<slug> — apenas o provedor correspondente os recebe. Parâmetros como watermark não são suportados por todos os modelos, então ficam no repasse para provider em vez de campos de nível superior (isso segue a convenção de repasse para provider do OpenRouter). As opções de repasse aceitas por um modelo dependem das capacidades do modelo.

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