API de geração de vídeo
Crie tarefas Veo 3.1 de texto para vídeo e imagem para vídeo com sua chave de API e consulte o resultado no mesmo endpoint /api/status usado para imagens.
Autenticação
Envie sua chave de API como token Bearer em todas as requisições. Use a mesma chave para criar uma tarefa e consultar o status dela. Você pode criar chaves na página API Keys do seu painel.
Authorization: Bearer YOUR_API_KEYModelos e créditos
Defina o campo model com um dos valores abaixo. Qualquer outro valor é recusado com HTTP 400 e nada é cobrado.
| valor de model | Modelo | Texto para vídeo (créditos) | Imagem para vídeo (créditos) |
|---|---|---|---|
veo3_fast | Veo 3.1 Fast (padrão) | 25 | 35 |
veo3 | Veo 3.1 Quality | 180 | 180 |
veo3-fast é aceito como alias de veo3_fast. Sem model, é usado veo3_fast. O preço de imagem para vídeo vale quando image_urls tem pelo menos uma URL.
Criar uma tarefa de vídeo
Valida a requisição, cobra os créditos e retorna um task_id. O vídeo é gerado de forma assíncrona: consulte /api/status ou defina callback_url para receber o resultado.
Descrição em texto do vídeo a ser gerado.
veo3_fast (alias veo3-fast) ou veo3. Qualquer outro valor retorna HTTP 400. Valor padrão veo3_fast.
URLs públicas de imagens para imagem para vídeo. Com 1 imagem, o vídeo é criado em torno dela. Com 2 imagens, elas viram o primeiro e o último quadro. imageUrls (camelCase) também é aceito como alias. Se os dois campos forem enviados, vale image_urls.
16:9, 9:16 ou Auto. Auto recorta o vídeo de acordo com a imagem enviada. Valor padrão 16:9.
Quando true, o prompt é traduzido para o inglês antes da geração. Valor padrão true.
Texto da marca d’água adicionada ao vídeo.
URL pública que recebe uma requisição POST com o resultado final quando a tarefa termina.
Campos não suportados
duration, resolution e image_url (no singular) não fazem parte desta API e são ignorados. A duração do vídeo é definida pelo modelo. Envie as imagens em um array image_urls.
curl -X POST "https://nanobnana.com/api/video/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "The camera slowly pushes in as the city lights turn on at dusk",
"model": "veo3_fast",
"image_urls": ["https://example.com/first-frame.jpg"],
"aspect_ratio": "16:9"
}'{
"code": 200,
"message": "success",
"data": {
"task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv"
}
}Consultar o status da tarefa
IDs de tarefas de vídeo começam com veo e terminam com bksv. O /api/status os reconhece automaticamente e retorna a URL do vídeo quando a tarefa termina.
O task_id retornado por POST /api/video/generate.
Use veo3 para forçar a consulta de vídeo quando o task_id não segue o formato veo…bksv.
curl "https://nanobnana.com/api/status?task_id=veo24223f74e4f445ec9c4403b532cc328fbksv" \
-H "Authorization: Bearer YOUR_API_KEY"{
"code": 200,
"message": "success",
"data": {
"task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv",
"request": {
"prompt": "The camera slowly pushes in as the city lights turn on at dusk",
"model": "veo3_fast",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "16:9"
},
"response": null,
"status": "IN_PROGRESS",
"status_code": 3,
"status_text": "IN_PROGRESS",
"consumed_credits": 35,
"created_at": "2026-10-04 17:05:12",
"model": "veo3"
},
"model": "veo3"
}Valores de status
IN_PROGRESS·status_code: 3— o vídeo ainda está sendo gerado. Continue consultando.COMPLETED·status_code: 1— o vídeo está pronto. response contém a URL do vídeo.FAILED·status_code: 2— a geração falhou. error_message explica o motivo e os créditos são reembolsados automaticamente.
Cobrança e reembolsos
- Os créditos são cobrados quando a tarefa é criada, antes de a geração começar.
- Se a requisição de criação não retornar HTTP 200, nenhuma tarefa existe e os créditos cobrados são reembolsados na hora. A resposta informa quantos créditos foram reembolsados.
- Se uma tarefa criada terminar depois como FAILED, os créditos são reembolsados automaticamente e consumed_credits passa a 0 na resposta de status.
Exemplo de consulta periódica
A geração de vídeo costuma levar alguns minutos. Consulte a cada 10 segundos enquanto status_code for 3 e pare quando for 1 ou 2.
async function waitForVideo(taskId) {
while (true) {
const res = await fetch(`https://nanobnana.com/api/status?task_id=${taskId}`, {
headers: { Authorization: 'Bearer YOUR_API_KEY' }
});
const payload = await res.json();
if (!res.ok) throw new Error(payload.message);
const task = payload.data;
if (task.status_code === 1) return task.response[0];
if (task.status_code === 2) throw new Error(task.error_message || 'Video generation failed');
await new Promise((resolve) => setTimeout(resolve, 10000));
}
}Callback
Se você definir callback_url, enviaremos uma requisição POST com este JSON quando a tarefa terminar ou falhar. A URL precisa ser acessível pela internet.
{
"code": 200,
"message": "success",
"data": {
"request": {
"prompt": "The camera slowly pushes in as the city lights turn on at dusk",
"model": "veo3_fast",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "16:9"
},
"response": [
"https://example.com/generated-video.mp4"
],
"status": "COMPLETED",
"created_at": "2026-10-04 17:05:12"
}
}Erros comuns
{
"code": 400,
"message": "prompt is required",
"data": null
}