Endpoints
Geração de vídeo
Gere vídeo com Veo 3.1, Sora 2 Pro, Kling e outros pela API assíncrona do api14: criar o job, consultar o status, baixar o resultado e entender a cobrança.
Teste no playgroundGere vídeo com Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo e mais. A geração de vídeo leva de dezenas de segundos a vários minutos, então roda como um job assíncrono: você cria um job, consulta o status e depois baixa o resultado.
| Etapa | Requisição |
|---|---|
| 1. Criar | POST /api/v1/videos |
| 2. Consultar | GET /api/v1/videos/{id} |
| 3. Baixar | GET /api/v1/videos/{id}/content?index=0 |
Criar um job
POST https://api14.com/api/v1/videos
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model | string | sim | Um id de modelo de vídeo, por exemplo google/veo-3.1-fast. |
prompt | string | sim | O que acontece no vídeo. |
duration | number | não | Duração em segundos. Por padrão, a primeira duração suportada pelo modelo. |
resolution | string | não | Por exemplo 720p, 1080p. Deve ser suportada pelo modelo. |
aspect_ratio | string | não | Por exemplo 16:9, 9:16. |
generate_audio | boolean | não | Gera uma trilha sonora quando suportado (padrão true). |
image | string | não | Primeiro quadro como URL ou URI data: (imagem para vídeo). |
Durações, resoluções e proporções suportadas por modelo: GET /videos/models (público) ou a página do modelo.
Verificação de saldo
Antes de o job ser enviado, o gateway estima seu preço como duração × o preço por segundo da resolução solicitada (e da opção de áudio). Se o seu saldo for menor que a estimativa, a requisição falha com 402 insufficient_balance e nada é iniciado.
Resposta
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
Consultar o job
GET https://api14.com/api/v1/videos/{id}
{
"id": "vid_01JABCDEF",
"status": "completed",
"generation_id": "gen-1791100000-abc",
"unsigned_urls": ["/api/v1/videos/vid_01JABCDEF/content?index=0"],
"usage": { "cost": 1.2 }
}
status | Significado |
|---|---|
queued | Aguardando o provedor. |
in_progress | Renderizando. |
completed | Concluído; unsigned_urls lista as saídas. |
failed, cancelled, expired | Terminou sem saída; veja error. Você não é cobrado. |
Consulte a cada 5–10 segundos. Somente a conta que criou o job pode lê-lo; outros ids retornam 404 not_found.
Baixar o resultado
GET https://api14.com/api/v1/videos/{id}/content?index=0
Retorna os bytes do vídeo (normalmente video/mp4) com a sua chave de API. As URLs de saída sempre apontam para o gateway, nunca para o provedor original. Se o arquivo não estiver pronto ou tiver expirado, você recebe content_unavailable.
Exemplo
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
"model": "google/veo-3.1-fast",
"prompt": "A drone shot over turquoise ocean waves at sunrise",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
await new Promise((r) => setTimeout(r, 5000));
job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);
Cobrança
Você é cobrado uma única vez, quando o job chega a completed, pelo custo real do provedor. Jobs com falha, cancelados e expirados são gratuitos. Os jobs também são concluídos em segundo plano, então um job que você nunca consulta ainda é liquidado e aparece em Uso.
Erros
| Status | Código | Quando |
|---|---|---|
| 402 | insufficient_balance | O saldo está abaixo do preço estimado do job. |
| 403 | plan_required | Seu plano não inclui modelos de vídeo. |
| 404 | model_not_found / not_found | Modelo desconhecido ou id de job que não é seu. |
| 502 | upstream_unavailable | Não foi possível ler o status; tente novamente. |
Veja Erros.