Claude Opus 5.5 já está disponível no SeedRouter
SeedRouter Docs

Nano Banana Pro (Gemini 3 Pro Image)

Gere e edite imagens com o Nano Banana Pro por um único endpoint assíncrono usando o corpo generateContent do Google: raciocínio integrado, saída 4K e 14 referências.

View Markdown

O Nano Banana Pro é o modelo Gemini 3 Pro Image do Google, feito para imagens profissionais e instruções complexas. Ele raciocina antes de desenhar, por isso as respostas informam tokens de raciocínio. Envie o corpo de requisição generateContent do Google com um campo model, guarde o identificador de tarefa retornado e consulte essa tarefa para obter a imagem pronta. As imagens de referência vão em contents como URLs fileData.

IDs de modelo

ID de modeloCanalCobrança
gemini-3-pro-imageStandardUm preço fixo por imagem entregue
gemini-3-pro-image-officialOfficialTarifas por token para entrada, saída de texto/raciocínio e saída de imagem

Os dois IDs aceitam os mesmos parâmetros. Veja os preços atuais na página do modelo.

Exemplo rápido

curl https://api.seedrouter.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-pro-image",
    "contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
    }
  }'

Endpoint

POST https://api.seedrouter.ai/v1/images/generations
CabeçalhoValor
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

O corpo é a requisição generateContent do Google com um acréscimo: model, porque este endpoint não traz o modelo no caminho. A resposta contém um identificador de tarefa, não a imagem pronta. Mantenha as chaves de API em código do servidor. Chamar /v1beta/models/...:generateContent diretamente não é suportado; use este endpoint.

Parâmetros

NomeTipoObrigatórioPadrãoObservações
modelstringSim—Um dos dois IDs de modelo acima.
contentsContent[]Sim—De 1 a 32 turnos. Cada um tem parts e um role opcional (user ou model); o último turno é user.
contents[].parts[].textstring——Uma parte de texto. É obrigatória pelo menos uma parte de texto.
contents[].parts[].fileDataobjectNão—{"mimeType": "...", "fileUri": "https://..."}; uma imagem de referência. Até 14 no total.
systemInstructionobjectNão—{"parts": [{"text": "..."}]}.
safetySettingsobject[]Não—Pares {"category", "threshold"}; veja abaixo.
generationConfig.responseModalitiesenum[]Nãotexto e imagem["IMAGE"] para só imagens, ou ["TEXT", "IMAGE"].
generationConfig.imageConfig.aspectRatioenumNãoProporção da imagem de entrada, senão 1:11:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9.
generationConfig.imageConfig.imageSizeenumNão1K1K, 2K, 4K. K maiúsculo.
generationConfig.candidateCountintegerNão1Só 1. Uma requisição retorna uma imagem.
generationConfig.temperaturenumberNãoPadrão do modeloDe 0 a 2.
generationConfig.topPnumberNãoPadrão do modeloDe 0 a 1.
generationConfig.topKintegerNãoPadrão do modelo1 ou mais.
generationConfig.seedintegerNão—Inteiro de 32 bits.
generationConfig.maxOutputTokensintegerNãoPadrão do modeloDe 1 a 32.768.
generationConfig.stopSequencesstring[]Não—Até 5.
generationConfig.mediaResolutionenumNãoPadrão do modeloMEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Define quantos tokens a mídia de entrada usa.
generationConfig.thinkingConfig.includeThoughtsbooleanNãofalseRetorna os resumos de raciocínio do modelo como output.thoughts.
generationConfig.responseFormat.imageobjectNão—mimeType: IMAGE_JPEG; delivery: INLINE; aspectRatio e imageSize como enums do Google, por exemplo ASPECT_RATIO_SIXTEEN_BY_NINE e IMAGE_SIZE_TWO_K, com as mesmas proporções e tamanhos de imageConfig. Não aceito por gemini-3-pro-image-official.

Categorias de segurança: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Limiares: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.

Campos desconhecidos são recusados. Ainda não disponíveis: grounding com a Pesquisa Google (tools) e conteúdo em cache; thinkingLevel não é documentado para este modelo. inlineData não é aceito; envie a mídia como URLs fileData. responseFormat.image.delivery aceita apenas INLINE: as imagens prontas sempre são retornadas como URLs hospedadas.

Tamanho de saída

imageSizeSaída 1:1Tokens de imagem
1K1024×10241.120
2K2048×20481.120
4K4096×40962.000

As outras proporções mantêm a mesma contagem de tokens; por exemplo, 16:9 em 1K dá 1376×768.

Modos

Não há parâmetro de modo separado nem endpoint de edição.

OperaçãoParâmetros
Texto para imagemuma parte de texto
Editar ou comporparte de texto + uma ou mais partes fileData
Edição em vários turnosturnos anteriores de user e model, depois um novo turno user (veja a nota abaixo)

Para continuar uma conversa, reconstrua o turno model a partir das output.parts da tarefa anterior, na mesma ordem: uma parte de texto vira {"text": ..., "thoughtSignature": ...} e uma parte de imagem vira {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Mantenha cada thoughtSignature exatamente como foi retornada: ela é a URL da assinatura que armazenamos para você (a assinatura de uma imagem 4K tem vários megabytes), e nós a restauramos antes que a requisição chegue ao modelo. Só são aceitas assinaturas dos resultados das suas próprias tarefas.

Editar com uma imagem de referência

curl https://api.seedrouter.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-pro-image",
    "contents": [{
      "role": "user",
      "parts": [
        {"text": "Turn this photo into a watercolor painting. Keep the composition."},
        {"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
      ]
    }]
  }'

Substitua a URL de exemplo por uma imagem sua acessível.

Entradas de mídia

Esta API aceita apenas referências por URL. inlineData em base64, URLs data: e envios multipart não são aceitos. O Playground envia os arquivos selecionados para o armazenamento antes de submeter as URLs deles.

As imagens de referência precisam ser URLs HTTP(S) públicas apontando para arquivos PNG, JPEG, WebP, HEIC ou HEIF, com menos de 50 MB cada e 100 MB no total. mimeType precisa corresponder ao arquivo. As URLs são baixadas durante o processamento; uma imagem inacessível faz a tarefa falhar, e tarefas que falham não são cobradas.

Fatores de custo

Consulte a seção de preços do modelo para as tarifas atuais. O gemini-3-pro-image cobra um preço fixo por imagem entregue, qualquer que seja o tamanho ou o prompt. O gemini-3-pro-image-official cobra pelo uso: tokens de entrada (texto e imagens de referência), tokens de saída de texto e raciocínio e tokens de saída de imagem, cada um com sua própria tarifa. O tamanho da imagem é o fator principal; veja a tabela acima.

Consulte as cobranças finais no histórico de uso da sua conta. Tarefas que falham não são cobradas.

Esquema de saída

O envio retorna uma referência de tarefa:

{
  "id": "task_...",
  "model": "gemini-3-pro-image",
  "status": "processing",
  "created_at": 1790310979
}

Consultar a tarefa

curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Consulte a cada poucos segundos até que status seja completed ou failed. Um tempo limite de rede durante a consulta não significa que a geração falhou: guarde o identificador da tarefa e retome a verificação. Não crie outra tarefa para acompanhar o progresso.

Exemplo completo de consulta

Execute isto após o exemplo de envio em Python acima.

import time

deadline = time.monotonic() + 600
while time.monotonic() < deadline:
    result = requests.get(
        f"https://api.seedrouter.ai/v1/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
        timeout=30,
    )
    result.raise_for_status()
    task = result.json()
    if task["status"] == "completed":
        for image in task["output"]["data"]:
            print(image["url"])
        break
    if task["status"] == "failed":
        raise RuntimeError(task["error"]["message"])
    time.sleep(3)
else:
    raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")

Tarefa concluída

{
  "id": "task_...",
  "model": "gemini-3-pro-image",
  "status": "completed",
  "created_at": 1790310979,
  "finished_at": 1790311001,
  "output": {
    "created": 1790310999,
    "data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
    "output_format": "jpeg",
    "usage": {
      "input_tokens": 27,
      "output_tokens": 1366,
      "total_tokens": 1393,
      "output_tokens_details": {"image_tokens": 1120, "text_tokens": 95, "reasoning_tokens": 151}
    }
  }
}
CampoSignificado
idGuarde este identificador para consultas posteriores.
statusprocessing, completed ou failed.
created_at, finished_atMarcas de tempo Unix em segundos.
output.data[].urlA URL da imagem gerada.
output.textTexto que o modelo retornou junto com a imagem, quando responseModalities inclui TEXT. Não inclui o raciocínio.
output.thoughtsOs resumos de raciocínio do modelo, quando includeThoughts é true. Imagens intermediárias que o modelo desenha enquanto raciocina não são entregues.
output.output_formatFormato real da imagem.
output.partsAs partes finais da resposta, em ordem, para a edição em vários turnos: {"text", "thoughtSignature"} ou {"image": <index into data>, "thoughtSignature"}. thoughtSignature é uma URL; envie-a de volta sem alterações.
output.usageUso de tokens. output_tokens conta a saída de texto, raciocínio e imagem; output_tokens_details.image_tokens é a parte da imagem.
errorErro estruturado em uma tarefa que falhou.

Streaming (streamGenerateContent) não é suportado; os resultados são entregues pela tarefa.

Erros

Requisições recusadas antes de a tarefa ser criada retornam um erro HTTP com um objeto error. Uma tarefa que falha após ser aceita retorna HTTP 200 na consulta, com status: "failed" e um objeto error. Uma imagem retida pelos filtros de segurança do modelo falha com content_policy_violation; uma resposta sem imagem falha com no_output.

Veja o catálogo de erros compartilhado para códigos, status HTTP e orientações de nova tentativa.

{
  "id": "task_...",
  "status": "failed",
  "error": {
    "code": 60001,
    "message": "The request was rejected by the content policy. Please revise the prompt or input images."
  }
}

Se o próprio envio atingir o tempo limite, verifique seu histórico de tarefas antes de enviar de novo: a primeira requisição pode ter sido aceita.

Dicas

  • Descreva o tema, o cenário, a iluminação e o estilo em frases completas.
  • Em uma edição, diga o que deve mudar e o que precisa ficar igual.
  • 2K custa os mesmos tokens de imagem que 1K; use 4K para imagens em tamanho de impressão.
  • Salve as imagens retornadas no seu próprio armazenamento quando precisar de uma cópia duradoura.

Relacionados