Voltar à documentação

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.

Nano AI API URL base: https://nanobnana.com

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.

http
Authorization: Bearer YOUR_API_KEY

Modelos e créditos

Defina o campo model com um dos valores abaixo. Qualquer outro valor é recusado com HTTP 400 e nada é cobrado.

valor de modelModeloTexto para vídeo (créditos)Imagem para vídeo (créditos)
veo3_fastVeo 3.1 Fast (padrão)2535
veo3Veo 3.1 Quality180180

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.

Corpo da requisiçãoJSON
prompt:string

Descrição em texto do vídeo a ser gerado.

model:opcionalstring

veo3_fast (alias veo3-fast) ou veo3. Qualquer outro valor retorna HTTP 400. Valor padrão veo3_fast.

image_urls:opcionalstring[]

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.

aspect_ratio:opcionalstring

16:9, 9:16 ou Auto. Auto recorta o vídeo de acordo com a imagem enviada. Valor padrão 16:9.

translation:opcionalboolean

Quando true, o prompt é traduzido para o inglês antes da geração. Valor padrão true.

watermark:opcionalstring

Texto da marca d’água adicionada ao vídeo.

callback_url:opcionalstring

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.

bash
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.

Parâmetros de consulta
task_id:string

O task_id retornado por POST /api/video/generate.

model:opcionalstring

Use veo3 para forçar a consulta de vídeo quando o task_id não segue o formato veo…bksv.

bash
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.

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