Pular para a documentação
Nesta página

Nano Banana 2.1 API

Generate one image asynchronously per request. Supports text-to-image and image-to-image generation with your Seevio API key.

POST https://api.seevio.ai/v1/images/generations

Recursos

RecursoValores suportados
Modos de geraçãotext-to-image, image-to-image
Resolução de saída1K, 2K, 4K
Proporção de telaauto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9, 4:1, 1:4, 8:1, 1:8
Imagens de referênciaPublic HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 30 MB. Text-to-image requires an empty array.
PromptRequired non-empty prompt, up to 20000 characters.
Formato de saídapng, jpg

Preços e créditos

Cada solicitação gera uma imagem. Os créditos dependem da resolução indicada abaixo. São reservados na aceitação, cobrados no sucesso e devolvidos em caso de falha.

Resolução de saídaPreços e créditos
1K2 créditos
2K3 créditos
4K4 créditos

Não há suporte para idempotência de requisições. Cada chamada POST válida cria uma nova tarefa faturável. Se o resultado de um envio for incerto, consulte o taskId retornado; reenviar o POST pode criar outra tarefa.

Autenticação

Crie uma chave de API no painel. A chave completa é exibida apenas uma vez. Guarde-a com segurança no seu servidor e envie-a como um token Bearer em cada requisição.

URL base

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Defina a variável de ambiente SEEVIO_API_KEY antes de rodar os exemplos. Os exemplos em JavaScript rodam no servidor com Node.js; os de Python utilizam a biblioteca requests.

Corpo da requisição

CampoTipoObrigatórioDescrição e restrições
model
stringSim

ID do modelo. Para usar o Nano Banana 2.1, defina este campo como nano-banana-2-1.

callback_url
stringNão

Endpoint HTTPS público para retornos assíncronos (POST) de conclusão ou falha. Redes privadas e localhost não são permitidos.

Exemplo: https://example.com/webhooks/seevio
input
objectSim

Configurações de geração. Deve conter uma descrição de texto (prompt) não vazia.

Parâmetros de entrada

CampoTipoObrigatórioPadrãoDescrição e restrições
input.prompt
stringSim—

Required non-empty prompt, up to 20000 characters.

Exemplo: A minimalist ceramic teapot on a stone pedestal, soft studio lighting
input.generation_type
stringNãotext-to-image

Para edição de imagem, defina generation_type como image-to-image e forneça as image_urls. Todos os outros parâmetros seguem a mesma estrutura padrão.

Valores suportados
text-to-image | image-to-image
input.image_urls
string[]Condicional[]

Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 30 MB. Text-to-image requires an empty array.

Exemplo: ["https://example.com/teapot.png"]
input.aspect_ratio
stringNãoauto

Proporção de tela

Valores suportados
auto | 1:1 | 16:9 | 9:16 | 4:3 | 3:4 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9 | 4:1 | 1:4 | 8:1 | 1:8
Exemplo: 1:1
input.resolution
stringNão2K

Utilize uma das resoluções de saída suportadas listadas aqui.

Valores suportados
1K | 2K | 4K
Exemplo: 2K
input.output_format
stringNãopng
Valores suportados
png | jpg
Exemplo: png

A proporção da imagem é definida como auto por padrão. Cada solicitação gera exatamente uma imagem.

Início rápido

Envie esta requisição simplificada, salve o taskId retornado e use o exemplo de consulta abaixo. O valor de créditos indicado na resposta de criação é o montante reservado.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "nano-banana-2-1",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  }
}'

Exemplo de resposta de criação de tarefa

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 3
}

Texto para imagem

Generate one image asynchronously per request. Supports text-to-image and image-to-image generation with your Seevio API key.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "nano-banana-2-1",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  }
}'

Imagem para imagem

Para edição de imagem, defina generation_type como image-to-image e forneça as image_urls. Todos os outros parâmetros seguem a mesma estrutura padrão.

Substitua as URLs de exemplo de media.com pelos seus próprios arquivos HTTPS públicos. Os links de exemplo servem apenas para ilustrar a estrutura da requisição e não representam arquivos reais para download.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "nano-banana-2-1",
  "input": {
    "prompt": "Change the teapot to matte sage green. Preserve its shape and the studio lighting.",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "image-to-image",
    "image_urls": [
      "https://example.com/teapot.png"
    ]
  }
}'

Consultar tarefa

GET https://api.seevio.ai/v1/tasks/{taskId}

Substitua o ID de exemplo pelo taskId recebido no retorno da criação. As consultas só retornam tarefas de propriedade do usuário associado à chave de API; IDs inexistentes ou de terceiros retornam HTTP 404.

Recomendamos consultar a cada 10 ou 20 segundos inicialmente, aplicar recuo (backoff) caso receba HTTP 429 e parar assim que o status for completed ou failed. Para produção, prefira webhooks. Cada exemplo abaixo executa uma consulta única.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusValores permitidos e requisitos
queuedAceito e aguardando na fila de processamento.
generatingGeração em andamento.
completedTarefa concluída com sucesso. Baixe o conteúdo em data.results antes do prazo de expiração.
failedTarefa falhou. Verifique os campos failed_reason e billing_status.
CampoTipoValores permitidos e requisitos
idstringIdentificador único da tarefa. Corresponde ao taskId retornado na criação.
created_atnumberData de criação da tarefa em timestamp Unix (segundos).
modelstringO ID do modelo público utilizado para esta tarefa.
billing_statusstringstatus do faturamento: reserved (reservado), charged (cobrado), refunded (reembolsado) ou refund_failed (falha no reembolso).
creditsnumberCréditos reservados para esta tarefa. Este valor é mantido mesmo após um reembolso; verifique o billing_status para saber o resultado financeiro final.
failed_reasonstring | nullMotivo da falha em tarefas malsucedidas; null nos demais casos. Consultas de tarefas com falha não retornam o objeto data.
failed_codestring | nullCódigo de erro. Consulte failed_reason para obter detalhes.
dataobjectPresente em consultas de tarefas que não falharam. Contém o resultado gerado e os detalhes de processamento.
data.resultsstring[]Lista de URLs das imagens; vazia antes da conclusão e após expirar.
data.image_expires_atstring | nullExpiração das imagens em ISO 8601, ou null se indisponível.
data.processing_timenumber | nullDuração do processamento da tarefa em segundos, quando disponível; caso contrário, null.

Na fila

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "nano-banana-2-1",
  "credits": 3,
  "failed_code": null,
  "status": "queued",
  "billing_status": "reserved",
  "failed_reason": null,
  "data": {
    "results": [],
    "image_expires_at": null,
    "processing_time": null
  }
}

Concluído

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "nano-banana-2-1",
  "credits": 3,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  }
}

Falhou

Quando a consulta retornar status=failed, significa que a geração falhou. Verifique o motivo em failed_reason e o resultado do estorno em billing_status. Neste exemplo, refunded indica que os créditos foram devolvidos. O campo credits mantém o valor original reservado, e a resposta não inclui data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "nano-banana-2-1",
  "credits": 3,
  "failed_code": "400",
  "status": "failed",
  "billing_status": "refunded",
  "failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}

Os links de resultado ficam disponíveis por 30 dias após o armazenamento. Após a expiração, o campo results ficará vazio.

Webhooks

Defina o callback_url na requisição de criação para receber um POST em JSON assim que a tarefa for concluída ou falhar. Responda com status 2xx em até 15 segundos. Envios malsucedidos serão reentados; trate as requisições de forma idempotente utilizando o ID da tarefa.

O seu endpoint de callback deve aceitar requisições POST com um corpo no formato JSON (Content-Type: application/json).

Criar tarefa contendo callback

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "nano-banana-2-1",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Os callbacks utilizam a estrutura de resposta da consulta de tarefas; as notificações de falha reembolsadas também incluem credits_refunded no nível superior. Utilize id para identificar a tarefa e status para distinguir as concluídas das malsucedidas. As notificações podem se repetir: processe-as de forma idempotente por id e status. Os callbacks não são assinados; verifique a tarefa usando o endpoint de consulta autenticado. Falhas de entrega não geram reembolso de tarefas concluídas com sucesso.

Tarefa concluída: payload de callback de sucesso

created_at indica a criação do evento; task_created_at indica a criação da tarefa, em segundos Unix. Os exemplos mostram os campos recomendados; as respostas podem incluir campos adicionais.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171212,
  "model": "nano-banana-2-1",
  "credits": 3,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  },
  "task_created_at": 1789171200
}

Falha na tarefa: payload de callback de erro

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171212,
  "model": "nano-banana-2-1",
  "credits": 3,
  "failed_code": "400",
  "status": "failed",
  "billing_status": "refunded",
  "failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs.",
  "task_created_at": 1789171200,
  "credits_refunded": 3
}

Exemplo de código receptor

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const imageUrls = callbackData.data.results;
    // Save the image URLs and mark this task as completed in your application.
    console.log(callbackData.id, imageUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Este exemplo em Next.js lê o corpo do callback em JSON e trata diretamente as tarefas concluídas e com falha. Recomendamos implementar persistência e eliminação de duplicidades por ID de tarefa na sua aplicação, além de enfileirar processos demorados antes de responder ao callback.

Erros

Erros de requisição retornam um objeto contendo code e message. Uma tarefa aceita com sucesso ainda pode falhar posteriormente durante o processamento; monitore seu status por consulta ou configure um callback de falha.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPCampoO que fazer
400invalid_request
Corrija a estrutura do JSON, prompts ausentes, intervalos de parâmetros ou URLs de mídia antes de tentar novamente.
401invalid_api_key
Verifique o token Bearer e se a chave de API continua ativa.
402insufficient_credits
Adicione créditos à conta ou reduza o custo da geração. A resposta pode indicar os saldos necessário e disponível.
403forbidden
Verifique a restrição aplicada à conta descrita na mensagem de erro.
404not_found
Confirme se o ID da tarefa está correto e se ela foi criada pela mesma chave de API utilizada.
429rate_limited
Aguarde o tempo indicado no cabeçalho Retry-After antes de realizar novas tentativas.
500internal_error
Examine a mensagem de erro e os logs da API. Reenvie com cautela; novas tentativas de criação geram novas cobranças.

Os erros usam error.code e error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. O erro 402 insufficient_credits significa que seus créditos disponíveis são insuficientes para esta requisição.

Limites de requisição

Criação de tarefas: por padrão, cada chave de API permite até 100 requisições por minuto. No momento, limites personalizados não estão disponíveis.

Consulta de tarefas: por padrão, cada chave de API permite até 120 requisições por minuto. As requisições de consulta e de criação de tarefas são contabilizadas separadamente.

As requisições de criação de imagem e vídeo compartilham o mesmo limite de taxa (rate limit) da chave de API.

Respostas com HTTP 429 incluem o cabeçalho Retry-After: 60 para criação e Retry-After: 5 para consultas. Implemente recuo gradual (backoff) e evite consultas mais frequentes do que o recomendado.

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded."
  }
}