POST /v1/video/generations
Endpoint assíncrono para geração de vídeo a partir de texto ou imagem. Suporta 31 modelos de 8 provedores diferentes (Google, OpenAI, ByteDance, Alibaba, Runway, MiniMax, xAI, HeyGen e FLUX).
Fluxo completo
- Envie
POST /v1/video/generationscom modelo e prompt - Receba um job ID e URL de polling (status
202) - Faça
GET /v1/video/generations/:ida cada 5–10 segundos - Quando
status: "completed", baixe o vídeo pela URL retornada
Request body
| Campo | Tipo | Obrigatório | Notas |
|---|---|---|---|
model | string | sim | ID do modelo de vídeo (ver tabela abaixo) |
prompt | string | sim | Descrição do vídeo desejado |
image_url | string | não | URL de imagem de referência (image-to-video) |
duration | number | não | Duração em segundos (default: modelo define) |
resolution | string | não | 720p, 1080p, 4k |
aspect_ratio | string | não | 16:9, 9:16, 1:1 |
Exemplo — submeter vídeo
bash
curl -X POST https://api.usetokia.com/v1/video/generations \
-H "Authorization: Bearer $TOKIA_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3-1-fast",
"prompt": "um gato feliz usando uma bandana do Brasil, cena ensolarada, câmera lenta",
"duration": 5,
"resolution": "720p"
}'Response (202 Accepted)
json
{
"id": "veo-3-1-fast--gen-abc123xyz",
"status": "pending",
"polling_url": "/v1/video/generations/veo-3-1-fast--gen-abc123xyz"
}Exemplo — consultar status
bash
curl https://api.usetokia.com/v1/video/generations/veo-3-1-fast--gen-abc123xyz \
-H "Authorization: Bearer $TOKIA_KEY"Response — em progresso
json
{
"id": "veo-3-1-fast--gen-abc123xyz",
"status": "pending",
"polling_url": "/v1/video/generations/veo-3-1-fast--gen-abc123xyz"
}Response — concluído
json
{
"id": "veo-3-1-fast--gen-abc123xyz",
"status": "completed",
"video_url": "https://storage.googleapis.com/.../0?X-Goog-Signature=...",
"urls": ["https://storage.googleapis.com/.../0?X-Goog-Signature=..."],
"expires_at": 1792421715,
"cost_brl": 2.85,
"polling_url": "/v1/video/generations/veo-3-1-fast--gen-abc123xyz"
}Modelos disponíveis
Todos os modelos usam o markup padrão da plataforma sobre o custo do provedor; o valor cobrado em reais vem em cost_brl quando o vídeo conclui. Preço em BRL calculado com câmbio do dia.
Em destaque
| Modelo | Provedor | Custo upstream (5s) | Preço Tokia (5s, ≈R$) | Resolução max | Áudio |
|---|---|---|---|---|---|
veo-3-1-fast | $0.40 | ~R$ 8,96 | 4K | Sim | |
veo-3-1 | $1.00 | ~R$ 22,40 | 4K | Sim | |
sora-2-pro | OpenAI | $1.50 | ~R$ 33,60 | 1080p | Sim |
seedance-2-5 | ByteDance | ~$0.50 | ~R$ 11,20 | 720p | Sim |
kling-v3-pro | Kuaishou | $0.56 | ~R$ 12,54 | 720p | Sim |
gen-4-5 | Runway | $0.60 | ~R$ 13,44 | 720p | Não |
hailuo-3-max | MiniMax | $0.25 | ~R$ 5,60 | 768p | Não |
wan-3-prime | Alibaba | $0.34 | ~R$ 7,62 | 1080p | Sim |
Todos os modelos
| ID Tokia | Nome | Provedor | Preço/s (USD) | Duração | Áudio |
|---|---|---|---|---|---|
heygen-video-1 | HeyGen Video | HeyGen | $0.02–0.06 | 5–15s | Não |
flux-video-edit | FLUX Video Edit | BFL | $0.03 | — | Não |
hailuo-3-max | Hailuo 3 Max | MiniMax | $0.05–0.08 | 5–15s | Não |
wan-3-prime | Wan 3.0 Prime | Alibaba | $0.068–0.28 | 2–30s | Sim |
wan-3 | Wan 3.0 | Alibaba | $0.05–0.20 | 2–30s | Sim |
avatar-iv | Avatar IV | HeyGen | $0.05 | — | Não |
flux-video-upscale | FLUX Upscale | BFL | $0.075–0.105 | — | Não |
seedance-2-mini | Seedance 2.0 Mini | ByteDance | ~$0.034 | 4–15s | Sim |
seedance-2-5 | Seedance 2.5 | ByteDance | ~$0.10 | 4–30s | Sim |
flux-3-video | FLUX.3 Video | BFL | $0.17–0.53 | 5–20s | Sim |
hailuo-3 | Hailuo 3 | MiniMax | $0.13 | 5–15s | Sim |
aleph-2 | Aleph 2.0 | Runway | $0.28 | — | Não |
gen-4-5 | Gen-4.5 Turbo | Runway | $0.12 | 2–10s | Não |
grok-imagine-video-1-5 | Grok Video 1.5 | xAI | $0.08–0.25 | 1–15s | — |
happyhorse-1-1 | HappyHorse 1.1 | Alibaba | $0.099–0.128 | 3–15s | — |
happyhorse-1-0 | HappyHorse 1.0 | Alibaba | $0.099–0.169 | 3–15s | — |
grok-imagine-video | Grok Video | xAI | $0.05–0.07 | 1–15s | — |
kling-v3-pro | Kling v3.0 Pro | Kuaishou | $0.112 | 3–15s | Sim |
kling-v3-std | Kling v3.0 Std | Kuaishou | $0.084 | 3–15s | Sim |
veo-3-1-fast | Veo 3.1 Fast | $0.08–0.30 | 4–8s | Sim | |
veo-3-1-lite | Veo 3.1 Lite | $0.03–0.08 | 4–8s | Sim | |
kling-video-o1 | Kling Video O1 | Kuaishou | $0.112 | 5, 10s | Sim |
hailuo-2-3 | Hailuo 2.3 | MiniMax | $0.082 | 6, 10s | Não |
wan-2-7 | Wan 2.7 | Alibaba | $0.10 | 2–10s | Sim |
seedance-2-0 | Seedance 2.0 | ByteDance | ~$0.067 | 4–15s | Sim |
seedance-2-0-fast | Seedance 2.0 Fast | ByteDance | ~$0.040 | 4–15s | Sim |
wan-2-6 | Wan 2.6 | Alibaba | $0.04–0.15 | 5, 10s | Sim |
seedance-1-5-pro | Seedance 1.5 Pro | ByteDance | ~$0.023 | 4–12s | Sim |
sora-2-pro | Sora 2 Pro | OpenAI | $0.30–0.50 | 4–20s | Sim |
veo-3-1 | Veo 3.1 | $0.20–0.60 | 4–8s | Sim | |
kling-fal | Kling Video (Fal) | Fal.ai | $0.065 | — | — |
Erros comuns
| Código | Significado | Ação |
|---|---|---|
| 400 | Campos obrigatórios faltando | Inclua model e prompt |
| 401 | API key inválida | Verifique sua chave em /dashboard/keys |
| 402 | Saldo insuficiente | Adicione saldo em /dashboard |
| 404 | Job não encontrado | Verifique o ID do job |
| 422 | Modelo não é de vídeo | Use GET /v1/models?category=video |
| 429 | Rate limit atingido | Aguarde o tempo indicado em retry-after |
| 502 | Erro do provedor upstream | Tente novamente ou use outro modelo |
Exemplo Python
python
import requests
import time
TOKIA_KEY = "sk-..."
BASE = "https://api.usetokia.com"
"""Submeter"""
r = requests.post(f"{BASE}/v1/video/generations", json={
"model": "seedance-2-0-fast",
"prompt": "cachorro golden retriever correndo na praia ao pôr do sol",
"duration": 5,
}, headers={"Authorization": f"Bearer {TOKIA_KEY}"})
job = r.json()
print(f"Job: {job['id']}")
"""Polling"""
while True:
r = requests.get(f"{BASE}/v1/video/generations/{job['id']}",
headers={"Authorization": f"Bearer {TOKIA_KEY}"})
status = r.json()
if status.get("status") == "completed":
print(f"Vídeo pronto: {status.get('video_url')}")
break
print(f"Status: {status.get('status')}...")
time.sleep(10)Exemplo Node.js
typescript
const TOKIA_KEY = "sk-...";
const BASE = "https://api.usetokia.com";
const submit = await fetch(`${BASE}/v1/video/generations`, {
method: "POST",
headers: {
Authorization: `Bearer ${TOKIA_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "veo-3-1-fast",
prompt: "paisagem montanhosa com nuvens passando em time-lapse",
duration: 5,
resolution: "1080p",
}),
});
const job = await submit.json();
console.log("Job:", job.id);
while (true) {
const poll = await fetch(`${BASE}/v1/video/generations/${job.id}`, {
headers: { Authorization: `Bearer ${TOKIA_KEY}` },
});
const status = await poll.json();
if (status.status === "completed") {
console.log("Vídeo pronto:", status.video_url);
break;
}
console.log("Status:", status.status);
await new Promise((r) => setTimeout(r, 10000));
}