Video API
Uma API unificada de geração de vídeos compatível com o padrão OpenRouter Video Generation. Um único esquema cobre geração de texto para vídeo, imagem para vídeo, primeiro/último frame e geração guiada por referências. Envie uma tarefa de forma assíncrona e depois consulte por polling ou receba um webhook quando ela terminar.
Autenticação
Toda requisição carrega sua API key da ofox (formato sk-xxx…) no header HTTP:
Authorization: Bearer $OFOX_API_KEYcallback_url deve usar HTTPS. Destinos de webhook são validados contra SSRF — endereços privados, loopback e de metadados de nuvem são rejeitados. Um endereço não HTTPS ou interno falha na criação com 400 invalid_callback_url.
Início rápido
1. Envie uma tarefa
# Opcional: fixar um provedor. Se omitir, a plataforma faz o roteamento
# "provider": { "type": "byteplus" }
curl -X POST https://api.ofox.ai/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
}'A chamada retorna 202 imediatamente com uma URL de polling:
{
"id": "9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718",
"status": "pending",
"polling_url": "https://api.ofox.ai/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718"
}2. Consulte por polling até concluir
curl https://api.ofox.ai/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718 \
-H "Authorization: Bearer $OFOX_API_KEY"Continue consultando até status chegar a um estado terminal — completed, failed, cancelled ou expired. Não faça polling mais de uma vez por segundo; ou informe um callback_url ao criar a tarefa para receber um webhook em vez de usar polling. Veja Obter status do vídeo e Webhooks.
Endpoints
Este endpoint serve 12 modelos, que diferem em duração máxima, resolução, proporções e tarifa — veja a matriz completa em Modelos de vídeo.
Fixar um provedor
Um modelo de vídeo pode ser atendido por mais de um provedor. Passe provider.type no nível superior do corpo da requisição para fixar a tarefa em um deles:
{
"model": "bytedance/seedance-2.0-mini",
"prompt": "...",
"provider": { "type": "byteplus" }
}Sem esse campo, a tarefa é distribuída por peso. Os provedores disponíveis estão em Roteamento de provedores.
Preço por segundo
Os modelos de vídeo são cobrados por tempo, não por tokens. A entrada correspondente em pricing.video_pricing.tiers define a tarifa em USD por segundo conforme a resolução, o tipo de entrada e as opções de áudio. pricing.output_video_per_second é apenas o menor preço inicial do modelo. A estimativa é tarifa do nível × duração solicitada; após a conclusão, use usage.video_seconds e usage.video_cost da resposta como segundos cobrados e custo real. Em tarefas de vídeo para vídeo, os segundos cobrados podem incluir a duração do vídeo de entrada.