Gemini 3.7 Flash para 3.8 Flash: Guia de Migração de API

Migrar do Gemini 3.7 Flash para o 3.8 Flash: 9 mudanças na API com JSON de antes/depois, o erro de nível mínimo de pensamento, regras de call_id, orçamentos de token e rollback.

Ashley Goolam

Ashley Goolam

3 setembro 2026

Gemini 3.7 Flash para 3.8 Flash: Guia de Migração de API

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

O Google lançou o Gemini 3.8 Flash em 2 de setembro de 2026, três semanas após o 3.7 Flash, com o mesmo preço de lançamento e aproximadamente a mesma velocidade. O ID do modelo é gemini-3.8-flash, sem sufixo de pré-visualização, e o cartão do modelo o descreve como "baseado no Gemini 3.7 Flash". Assim, a maioria das equipes espera uma troca de uma linha. Para um prompt de chat simples, é isso. Para qualquer coisa que defina parâmetros de pensamento, ajuste a amostragem ou execute um ciclo de ferramentas, há nove coisas a verificar, e duas delas retornam erros que o 3.7 Flash nunca apresentou.

Este guia é essa lista de verificação, construída a partir da página do Google Novidades no Gemini 3.8 Flash e do guia do desenvolvedor do Gemini 3. Cada item tem um fragmento antes e depois para ambas as formas da API: a API de Interações, que o Google agora trata como o caminho principal, e o endpoint legado generateContent que a maioria do código do 3.7 Flash ainda usa. Cada fragmento pode ser colado no Apidog e enviado para o endpoint em tempo real antes de tocar na produção. Se você quiser primeiro uma visão geral do modelo, comece com o que é o Gemini 3.8 Flash.

Uma nota introdutória antes da lista. O Google afirma que o 3.8 Flash "trabalha mais" por design: em tarefas complexas, ele dá passos de raciocínio menores, verifica seu trabalho e chama ferramentas iterativamente. Essa é a fonte da maioria de seus ganhos e também a razão pela qual uma migração exige uma revisão do orçamento de tokens, não apenas uma diferença de configuração.

botão

O que muda e o que não muda

Área 3.7 Flash 3.8 Flash
ID do Modelo gemini-3.7-flash gemini-3.8-flash
Contexto / saída 1.048.576 / 65.536 Mesmo
Preço (intro até 31 de dezembro de 2026) $0.75 / $3.75 por 1M Mesmo, então $1.50 / $7.50 para ambos a partir de 1 de janeiro de 2027
Níveis de pensamento baixo, médio, alto Mesmo; minimal retorna um erro de validação; o padrão é medium
Tokens por tarefa linha de base +30% de tokens de saída em média (Artificial Analysis)
Resultados de função call_id + name Ambos necessários, impostos
Status de suporte "permanece totalmente suportado", sem data de descontinuação Atual

Fonte para as linhas de preço: a página de preços da API Gemini do Google, onde as linhas do 3.6, 3.7 e 3.8 Flash são idênticas.

Passo 0: decida se deve migrar

Nada força a migração. A publicação de lançamento do Google afirma que "o Gemini 3.7 Flash permanece totalmente suportado", e nenhuma data de descontinuação é publicada. O preço por token não mudou, então a única diferença de custo é o uso. A Artificial Analysis mediu o 3.8 Flash com pensamento elevado usando cerca de 48 mil tokens de saída por tarefa em seu índice, 30% a mais que o 3.7 Flash, o que moveu o custo por tarefa de $0.40 para $0.58 com taxas idênticas. Sua pontuação no índice subiu de 56 para 59, e a precisão no uso de ferramentas no τ³-Banking subiu 12 pontos para 45%.

Portanto, a troca é mais capacidade por tarefa por mais tokens por tarefa. Se sua carga de trabalho é curta, sensível à latência ou já está passando em suas avaliações no 3.7 Flash, você pode permanecer. A comparação completa entre 3.8 Flash e 3.7 Flash tem uma matriz de decisão por carga de trabalho. Se você for migrar, continue lendo.

Passo 1: troque o ID do modelo em ambas as formas

API de Interações (API principal do Google para Gemini 3.x):

{"model": "gemini-3.7-flash", "input": "..."}
{"model": "gemini-3.8-flash", "input": "..."}

generateContent Legado (ainda suportado, sem descontinuação):

POST /v1beta/models/gemini-3.7-flash:generateContent
POST /v1beta/models/gemini-3.8-flash:generateContent

SDK Python, ambos os caminhos:

client.interactions.create(model="gemini-3.8-flash", input=..., generation_config={"thinking_level": "medium"})
client.models.generate_content(model="gemini-3.8-flash", contents=..., config=types.GenerateContentConfig(thinking_config=types.ThinkingConfig(thinking_level="low")))

Se você nunca usou a API de Interações, o guia da API 3.8 Flash cobre ambas as formas de ponta a ponta; o passo a passo da API 3.7 Flash mais antigo cobria apenas generateContent, razão pela qual este guia mostra ambos.

A lista de verificação de migração de nove itens

Trabalhe estes itens em ordem. Os itens 1 a 4 são alterações de configuração que aparecem imediatamente. Os itens 5 e 6 afetam os ciclos de ferramentas e o estado multiturno. Os itens 7 a 9 são alterações de planejamento e mídia que você só detectará nos testes.

1. Mapeie thinking_level: "minimal" para "low"

Este é o que quebra primeiro. O 3.8 Flash aceita low, medium e high. Enviar minimal retorna um erro de validação. O padrão quando você não envia nada é medium. O Gemini 3 Pro padroniza para high, então não copie uma configuração Pro e presuma que ela corresponda.

Antes (3.7 Flash, Interações):

{"generation_config": {"thinking_level": "minimal"}}

Depois (3.8 Flash):

{"generation_config": {"thinking_level": "low"}}

Forma legada, depois:

{"generationConfig": {"thinkingConfig": {"thinkingLevel": "low"}}}

A documentação de pensamento do Google descreve low como a configuração de latência e medium como o padrão para código complexo e trabalho agêntico. Qual nível usar por rota é um artigo à parte; para fins de migração, low é o substituto direto para minimal.

2. Remova temperature, top_p e top_k

A orientação do Google para todos os modelos Gemini 3 é manter a temperatura em seu padrão de 1.0. Reduzi-la "pode causar loops ou degradação de desempenho". Muitas configurações do 3.7 Flash carregam uma temperature: 0.2 restante de gerações anteriores. Exclua as chaves de amostragem em vez de defini-las.

Antes:

{"generationConfig": {"temperature": 0.2, "topP": 0.9, "topK": 40}}

Depois:

{"generationConfig": {"thinkingConfig": {"thinkingLevel": "medium"}}}

Se você usou uma temperatura baixa para obter JSON repetível, use saídas estruturadas. Elas são suportadas no 3.8 Flash e fornecem uma resposta com formato de esquema sem tocar na amostragem.

3. Substitua thinking_budget por thinking_level

thinking_budget era um limite de tokens inteiro. thinking_level é uma enumeração de string. Não há mapeamento aritmético entre eles, então escolha o nível por intenção: rotas de latência recebem low, rotas padrão recebem medium, rotas mais difíceis de múltiplos passos recebem high.

Antes:

{"generationConfig": {"thinkingConfig": {"thinkingBudget": 4096}}}

Depois:

{"generationConfig": {"thinkingConfig": {"thinkingLevel": "low"}}}

Os tokens de pensamento ainda são cobrados como tokens de saída e relatados em usageMetadata.thoughtsTokenCount, então o controle de custo passa de um limite rígido para uma escolha de nível mais uma asserção em seus testes (consulte a seção de regressão abaixo).

4. Remova candidate_count

O Gemini 3 e posteriores não suportam múltiplos candidatos. Remova a chave e qualquer código que indexava candidates[1] ou além.

Antes:

{"generationConfig": {"candidateCount": 2}}

Depois:

{"generationConfig": {}}

Se você amostrava vários candidatos para escolher o melhor, o substituto no 3.8 Flash é um nível de pensamento mais alto, que faz a verificação dentro de uma única resposta.

5. Coloque call_id e name em cada resultado de função

Esta é a segunda quebra difícil. No 3.8 Flash, cada resultado de função que você envia de volta deve conter tanto o id da chamada quanto o name da função. O guia Gemini 3 do Google afirma para "garantir que todos os objetos FunctionResponse incluam call_id e name". O código que apenas ecoava o nome falhará na etapa de resultado da ferramenta.

API de Interações, depois:

{
  "previous_interaction_id": "<id da etapa function_call>",
  "input": [{
    "type": "function_result",
    "name": "get_weather",
    "call_id": "<id da etapa function_call>",
    "result": [{"type": "text", "text": "{\"temp_c\": 24}"}]
  }]
}

A etapa function_call do modelo fornece id, name e arguments; copie os dois primeiros diretamente de volta. Na forma legada, a parte functionResponse carrega o mesmo valor em um campo chamado id (correspondendo ao id na parte functionCall do modelo) junto com name e response. A referência de chamada de função do Google tem os exemplos canônicos, e o guia de chamada de função do 3.8 Flash percorre o ciclo completo de duas etapas, incluindo por que o 3.8 Flash chama ferramentas mais vezes por tarefa do que o 3.7 Flash.

6. Passe as assinaturas de pensamento de volta exatamente como recebidas

Os modelos Gemini 3 anexam assinaturas de pensamento às partes da resposta. Quando você constrói a próxima etapa, retorne cada parte inalterada, incluindo as assinaturas, para todos os tipos de partes, não apenas texto. Remover ou resserializá-las degrada a continuidade do modelo na próxima etapa.

A API de Interações remove esse trabalho quando você permite que o servidor mantenha o estado: passe previous_interaction_id e o Google mantém o histórico. Se você definir store: false para uma chamada sem estado, você será responsável pelo histórico novamente e deverá enviar os blocos de pensamento e as assinaturas de volta. Em generateContent legado, você sempre é responsável pelo histórico, então audite qualquer código que reconstrói o contents a partir de uma cópia truncada da última resposta.

7. Orçamente mais tokens por rota

Este item não tem erro a ser detectado, por isso é esquecido. O valor de +30% de tokens de saída da Artificial Analysis é uma média em seu índice com pensamento elevado. A própria formulação do Google é que o modelo "pode usar mais tokens em tarefas mais longas e complexas, por design" e que o uso aumenta "especialmente em níveis de esforço mais altos".

Planeje por rota, não globalmente:

Revise também o teto de 65.536 tokens de saída. Um prompt do 3.7 Flash que retornava 40k tokens com pensamento pode agora se aproximar do limite. Se você está modelando a fatura, a análise de preços do 3.8 Flash calcula os números por tarefa em todos os três níveis.

8. Teste media_resolution_high em PDFs versus vídeo

O 3.8 Flash aceita entrada de texto, imagem, vídeo, áudio e PDF. A configuração de resolução de mídia altera quantos tokens cada entrada de mídia consome, e o custo difere por tipo de mídia, então a mesma configuração que é barata em uma página de PDF pode ser cara em um vídeo longo. Não use uma configuração global de alta resolução do 3.7 Flash sem medir. Envie um PDF representativo e um vídeo representativo em cada resolução e compare usageMetadata.promptTokenCount entre eles.

9. Remova quaisquer chamadas de segmentação de imagem

A segmentação de imagem não é suportada nos modelos Gemini 3. Se um pipeline da era do 3.7 Flash ainda roteava a segmentação por um modelo Gemini mais antigo, esse caminho é separado desta migração; se um prompt pedisse ao 3.8 Flash por máscaras de segmentação, espere que ele falhe em vez de retornar uma saída utilizável. Geração de imagem, geração de áudio e a Live API também não são suportadas no 3.8 Flash, de acordo com a página do modelo.

Crie o plano de regressão no Apidog

Uma migração com duas alterações disruptivas e uma mudança no uso de tokens precisa de uma comparação repetível, não de um `curl` único. Aqui está a configuração que usamos no Apidog, que funciona porque o Apidog é um cliente de API e um executor de testes: ele envia as requisições, verifica as respostas e agenda a execução. Ele não executa o modelo.

Ambiente e variáveis. Crie um ambiente Gemini com GEMINI_API_KEY armazenada como uma variável secreta e uma variável MODEL. Use {{MODEL}} na URL da requisição generateContent e no campo model da requisição de Interações, para que a mesma requisição salva seja executada contra qualquer modelo.

Prompts dourados. Salve de 10 a 20 prompts que representam suas rotas reais: uma breve conversa de chat, uma extração de saída estruturada, uma chamada de função de duas etapas com uma ferramenta simulada, uma entrada de PDF e uma de vídeo. Cada um é uma requisição em um cenário de teste.

Asserções. Adicione três por requisição:

Lado a lado. Duplique o cenário, defina MODEL para gemini-3.7-flash em um e gemini-3.8-flash no outro, e execute ambos. Os relatórios de teste do Apidog mostram aprovação/falha por asserção e os corpos das respostas, então a diferença de token por prompt é visível em uma única visualização, em vez de ser reconstruída a partir de logs. Para o cenário de chamada de função, adicione uma asserção de que o call_id que você enviou de volta é igual ao id da function_call da etapa anterior.

Agende. Transforme o cenário do 3.8 Flash em uma execução agendada para que os tetos de token sejam verificados diariamente durante a janela de lançamento. O guia de testes de API agendados cobre a configuração. Se preferir acompanhar no aplicativo, baixe o Apidog e importe os fragmentos curl acima.

Rollback: mantenha o 3.7 Flash atrás de uma flag de configuração

Como o 3.7 Flash permanece totalmente suportado e compartilha o preço do 3.8 Flash, o rollback é barato: mantenha o ID do modelo na configuração, e não no código.

{"gemini_model": "gemini-3.8-flash", "gemini_fallback_model": "gemini-3.7-flash"}

Três regras tornam a flag segura:

FAQ

O Gemini 3.8 Flash custa mais que o 3.7 Flash? Não por token. Ambos custam $0.75 de entrada / $3.75 de saída por 1M até 31 de dezembro de 2026, e ambos sobem para $1.50 / $7.50 em 1º de janeiro de 2027. Por tarefa, o 3.8 Flash usa mais tokens por design; a Artificial Analysis mediu cerca de 30% mais tokens de saída em seu índice com pensamento elevado.

O que acontece se eu deixar thinking_level: "minimal" no lugar? A requisição falha com um erro de validação no 3.8 Flash. Substitua por low. O guia de níveis de pensamento explica o que cada nível restante faz e como medir a diferença.

Preciso migrar para a API de Interações para usar o 3.8 Flash? Não. generateContent é descrito como legado, mas permanece totalmente suportado sem data de descontinuação, e o 3.8 Flash funciona nele. A API de Interações adiciona estado de conversa do lado do servidor via previous_interaction_id, o que elimina a contabilidade de assinaturas de pensamento no item 6.

O 3.7 Flash está sendo descontinuado? O Google diz que ele "permanece totalmente suportado" e não publicou uma data de descontinuação. É isso que torna o rollback com flag de configuração viável.

Posso manter a mesma temperatura que ajustei para o 3.7 Flash? A recomendação do Google para todos os modelos Gemini 3 é deixar a temperatura em 1.0. Se você já estava sobrescrevendo no 3.7 Flash, esta migração é o momento de removê-la e verificar suas avaliações; saídas estruturadas são o caminho suportado para formas determinísticas.

Lance em etapas

A migração em si é pequena: uma mudança de ID, quatro exclusões ou renomeações de configuração, dois campos de loop de ferramentas e uma auditoria de assinatura. A parte que leva tempo é provar que o orçamento de tokens se mantém por rota, e isso é um problema de teste. Salve os prompts dourados, faça asserções no esquema e nos limites de tokens, execute o 3.7 e o 3.8 Flash lado a lado até que os números se estabilizem, e então ative a flag uma rota por vez. Se uma rota regredir, a flag a envia de volta para o 3.7 Flash sem alteração de código, e você mantém as rotas melhoradas.

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs