No dia 4 de maio de 2026, o Google anunciou oficialmente em seu blog: Event-driven webhooks are now available in Gemini API. Dois dias depois, em 6 de maio, às 10h (horário de Pequim), este e-mail do Google AI Studio chegou às caixas de entrada de desenvolvedores ao redor do mundo, marcando a disponibilidade total dos webhooks da Gemini API para todos os usuários.
Para muitas equipes que trabalham com Deep Research, geração de vídeos longos ou inferência em lote (batch) em larga escala, esta é uma atualização de nível de "infraestrutura" no verdadeiro sentido da palavra — não se trata de um novo modelo ou novos parâmetros, mas de uma mudança direta na forma como "conversamos com uma tarefa de IA de longa duração".
Este artigo, baseado em informações oficiais do Google e no Gemini Cookbook, detalha sistematicamente os tipos de eventos, as duas formas de configuração, o mecanismo de assinatura e verificação, além de fornecer exemplos de código. Também discutiremos o que isso significa para os desenvolvedores brasileiros.

O que são os webhooks da Gemini API: Entenda o webhook orientado a eventos
Os webhooks da Gemini API são, essencialmente, um conjunto de mecanismos de envio de eventos baseados em HTTP POST. Quando suas tarefas de batch, geração de vídeo ou diálogos assíncronos são concluídos, a Gemini API envia proativamente uma notificação JSON assinada para o endereço do servidor que você registrou previamente, em vez de exigir que você faça solicitações GET constantes para verificar o status da tarefa.
Esse design de "chamada reversa" não é novidade no desenvolvimento de software tradicional, mas é extremamente significativo no contexto de inferência de IA. O Deep Research, a geração de vídeos longos com Veo e a API de batch da Gemini frequentemente levam de minutos a horas para concluir uma única tarefa. Se continuássemos usando o método de polling (sondagem), o cliente precisaria manter conexões longas, temporizadores e lógica de recuperação de erros, o que aumentaria drasticamente os custos operacionais e o desperdício de cotas da API.
🎯 Entendimento rápido: Webhooks da Gemini API = transformar o "eu terminei?" (que o cliente pergunta repetidamente) em "eu terminei!" (que o servidor avisa proativamente). O desenvolvedor só precisa criar um endpoint de callback e aguardar a notificação. Equipes que utilizam serviços proxy de API como a APIYI (apiyi.com) para acessar a Gemini também podem aproveitar as notificações de webhook para reduzir as solicitações de polling em links internacionais, diminuindo significativamente a latência e o consumo de banda.
Vale notar que os webhooks da Gemini API enviam uma "carga útil leve" (thin payload) — eles informam o ID da tarefa, o status e o ponteiro de acesso ao arquivo de resultado (como output_file_uri), sem inserir diretamente dezenas de MB de vídeo ou milhares de linhas de saída de batch no corpo do POST. Este é um design intencional que reduz o custo de dados em caso de novas tentativas e torna o controle de permissões mais claro.
Por que os webhooks da Gemini API acabaram com a "era do polling"
Para entender o valor dos webhooks da Gemini API, primeiro precisamos entender o custo do polling (sondagem). Antes da chegada dos webhooks, um fluxo típico de tarefa em lote (Batch) era assim: enviar tarefa → obter ID da operação → usar setInterval para fazer um GET a cada 30 segundos → e não poder ir embora até que o status mudasse para SUCCEEDED. Esse processo funciona bem para uma única tarefa, mas se torna um pesadelo em um ambiente de produção.
A tabela abaixo compara o modo de polling com o modo de Webhook orientado a eventos, destacando os ganhos de migração enfatizados pelo Google em seu blog oficial.
| Dimensão de comparação | Modo de Polling Tradicional | Webhook Orientado a Eventos da Gemini API |
|---|---|---|
| Latência de notificação | Depende do intervalo de polling (comum: 10-60s) | Nível de milissegundos (push imediato ao fim da tarefa) |
| Consumo de cota de API | Cada polling conta na cota de leitura | O push é iniciado pelo Google, sem consumir cota do chamador |
| Complexidade do cliente | Requer temporizadores, máquinas de estado, retentativas | Apenas um endpoint HTTP POST + verificação de assinatura |
| Concorrência em larga escala | "Tempestade de polling" óbvia com milhares de tarefas | Pushes chegam de forma independente, fácil de escalar |
| Recuperação de falhas | O cliente precisa implementar por conta própria | Retentativa automática com recuo exponencial (até 24h) |
| Cenários ideais | Tarefas curtas, baixa concorrência | Tarefas longas, alta concorrência, pipelines de agentes |
Como mostra a tabela, os webhooks da Gemini API não servem apenas para "economizar código de polling"; eles efetivamente deslocam a responsabilidade da "orquestração de tarefas" do cliente para o servidor. Para equipes que executam fluxos de trabalho de agentes, o uso de Webhooks com Cloud Run, Cloud Functions ou serviços Serverless permite alcançar um modelo totalmente assíncrono e sem conexões persistentes.
💡 Migrando do Polling: Se o seu código atual é baseado em
GET /operations, migrar para o modo webhook exige apenas substituir o "loop de polling" por uma "rota de callback de eventos", com quase zero alterações na lógica de negócios. Ao acessar a Gemini API via APIYI (apiyi.com), as equipes podem conectar o endpoint do webhook diretamente à sua rede interna, mantendo as vantagens do modelo orientado a eventos e evitando a instabilidade de conexões transfronteiriças de longa duração.
Duas formas de configurar webhooks da Gemini API: Estática vs. Dinâmica
A Gemini API suporta dois métodos de registro, voltados para necessidades de "notificação global" e "roteamento por tarefa", respectivamente. Entender a diferença entre eles é crucial para sua estratégia de gerenciamento de chaves e verificação de assinaturas.

Webhook Estático: Assinatura de eventos globais em nível de projeto
O Webhook Estático é registrado uma vez via API WebhookService e entra em vigor para todos os eventos correspondentes no projeto. É ideal para cenários onde você deseja "transmitir sempre que qualquer tarefa for concluída", como encaminhar todos os eventos batch.succeeded para o Slack da equipe ou sincronizar todos os video.generated para seu próprio CMS ou armazenamento de objetos.
Quanto à assinatura, o Webhook Estático usa uma chave simétrica HMAC. O Google retorna um signing secret no momento da criação, e apenas uma vez — você deve salvá-lo imediatamente em um serviço de gerenciamento de chaves, caso contrário, terá que excluir e recriar a configuração.
Webhook Dinâmico: Roteamento refinado por solicitação
O Webhook Dinâmico é uma abordagem mais granular: a cada envio de tarefa, você especifica temporariamente uma URL no campo webhook_config, e o Google enviará os eventos daquela tarefa específica para o endereço indicado. É perfeito para cenários SaaS multilocatários (multi-tenant), onde as tarefas de diferentes clientes são enviadas para endpoints de callback distintos, garantindo um isolamento claro.
O Webhook Dinâmico também permite incluir o campo user_metadata na configuração (pares chave-valor arbitrários, como {"job_group": "nightly-eval"}), que o Google retornará inalterado durante o envio. Este é um design extremamente prático que elimina a necessidade de manter uma tabela de mapeamento extra de "tarefa → contexto de negócio".
Quanto à assinatura, o Webhook Dinâmico usa chaves públicas assíncronas JWKS (RS256). O endereço da chave pública é generativelanguage.googleapis.com/.well-known/jwks.json. Seu serviço só precisa buscar a chave pública para validação, sem a necessidade de armazenar chaves simétricas.
| Dimensão | Webhook Estático | Webhook Dinâmico |
|---|---|---|
| Método de registro | Registro único via API WebhookService | Especificado temporariamente em cada solicitação |
| Escopo | Todo o projeto | Tarefa única |
| Algoritmo de assinatura | Chave simétrica HMAC | Chave pública JWKS / RS256 |
| Gerenciamento de chaves | Retornado uma vez na criação, requer salvamento | Sem gerenciamento de chaves simétricas, via endpoint público |
| user_metadata | Não suportado | Suporta passagem de pares chave-valor |
| Cenários típicos | Notificações globais, integração Slack, arquivamento | Roteamento multilocatário, distribuição de resultados |
| Público recomendado | Pipelines unificados internos | Plataformas SaaS, serviços abertos |
🎯 Sugestão de escolha: Para processamento unificado dentro de uma equipe, prefira o Webhook Estático; para serviços abertos a clientes que exigem roteamento por locatário, prefira o Webhook Dinâmico. Se você utiliza o serviço proxy de API da APIYI (apiyi.com) para a Gemini API, ambos os modos podem ser usados nativamente; o cabeçalho de assinatura e o payload do evento são idênticos aos oficiais, sem barreiras adicionais para a migração.
Tutorial de Webhooks da API Gemini: Configuração em 5 linhas de código
Abaixo, apresento um código minimalista para você começar, desde a criação de um webhook estático até a verificação de assinatura, com o objetivo de colocar um ciclo fechado funcional em funcionamento em menos de 10 minutos.
Criando um Webhook orientado a eventos da API Gemini com o SDK Python
from google import genai
import os
client = genai.Client()
webhook = client.webhooks.create(
subscribed_events=["batch.succeeded", "video.generated"],
name="prod_global_notify",
uri="https://your-server.example.com/gemini/webhook",
)
# O signing_secret só é retornado uma vez, certifique-se de persistir imediatamente
os.environ["WEBHOOK_SIGNING_SECRET"] = webhook.new_signing_secret
Este código realiza duas tarefas: primeiro, registra um endpoint global que monitora eventos de conclusão de processamento em lote (batch) e geração de vídeo; segundo, armazena a chave de assinatura retornada pelo Google em uma variável de ambiente. Em ambientes de produção, é altamente recomendável salvar o segredo em um Gerenciador de Segredos (Secret Manager), Vault ou serviço similar, em vez de deixá-lo no código-fonte ou em logs.
Recebendo e verificando a assinatura com Node.js + Express
import express from "express";
import { Webhook } from "standardwebhooks";
const app = express();
const wh = new Webhook(process.env.WEBHOOK_SIGNING_SECRET);
app.post("/gemini/webhook", express.raw({ type: "*/*" }), (req, res) => {
try {
const event = wh.verify(req.body, req.headers);
console.log("evento:", event.type, "dados:", event.data);
res.status(200).send("ok");
} catch (e) {
res.status(400).send("assinatura inválida");
}
});
app.listen(8080);
Observe alguns pontos cruciais: use sempre express.raw para obter o fluxo de bytes original para a verificação da assinatura, caso contrário, o parsing JSON corromperá a assinatura; a resposta 2xx deve ser enviada em poucos segundos, e qualquer lógica pesada (escrita em banco de dados, chamadas a serviços downstream) deve ser delegada de forma assíncrona para uma fila; solicitações com timestamp superior a 5 minutos devem ser rejeitadas, seguindo as práticas recomendadas de defesa contra replay do Standard Webhooks.
🚀 Dica prática: Se o seu serviço estiver hospedado localmente e o endpoint do webhook precisar ser acessado diretamente pelo Google, recomendo expor o endpoint em nós externos ou nós de borda (CDN) e, em seguida, redirecionar para a rede interna. Alternativamente, utilize um serviço proxy de API como o APIYI (apiyi.com), que suporta tanto a invocação do modelo Gemini quanto o proxy de callback. Isso permite receber o push do webhook na camada de proxy e encaminhá-lo para a rede interna, eliminando uma camada de complexidade de NAT e SSL.
Visão geral dos tipos de eventos suportados pelos webhooks da API Gemini
Atualmente, os webhooks da API Gemini cobrem principalmente três categorias de eventos de mudança de estado de tarefas longas, cada uma correspondendo a um conjunto de campos de resultados. A tabela abaixo organiza a lista de eventos especificada no Cookbook oficial.

| Agrupamento de Eventos | Nome do Evento | Momento do Gatilho | Campos de Payload Principais |
|---|---|---|---|
| Batch API | batch.succeeded | Tarefa de lote concluída com sucesso | id, output_file_uri |
| Batch API | batch.failed | Falha na tarefa de lote | id, error |
| Batch API | batch.cancelled | Cancelamento pelo usuário | id |
| Batch API | batch.expired | TTL do lote expirado | id |
| Video Generation | video.generated | Geração de vídeo longa concluída | file_id, video_uri |
| Interactions API | interaction.requires_action | Requer resposta de chamada de ferramenta | id, required_action |
| Interactions API | interaction.completed | Diálogo assíncrono concluído | id, output |
| Interactions API | interaction.failed | Falha em qualquer etapa | id, error |
| Interactions API | interaction.cancelled | Cancelamento pelo usuário | id |
Cada payload de evento segue uma estrutura unificada: { "type": "batch.succeeded", "data": { "id": "...", "output_file_uri": "gs://..." } }. Esse formato "tipo + dados" é ideal para usar um roteador switch para processamento, direcionando diferentes eventos para pipelines de negócios distintos.
📌 Dica de arquitetura: Na implementação, recomendo usar a combinação de um endpoint de webhook + barramento de eventos interno (Pub/Sub, Kafka, Redis Stream), em vez de criar endpoints separados para cada tipo de evento. Isso não apenas segue o padrão "resposta 2xx rápida + processamento assíncrono" recomendado pelo Google, mas também facilita a escalabilidade horizontal. Ao utilizar o APIYI (apiyi.com) para invocar a API Gemini Batch e a geração de vídeo Veo, os tipos de eventos são idênticos aos oficiais, permitindo que você reutilize diretamente o mesmo código de roteamento.
Mecanismos de segurança e garantia de entrega dos webhooks da API Gemini
O design de segurança dos webhooks da API Gemini segue rigorosamente a especificação Standard Webhooks, um padrão de interoperabilidade entre plataformas mantido pela comunidade. Isso significa que, se você já integrou webhooks de serviços como Stripe, Svix ou Resend, poderá reutilizar seu código quase sem alterações.
Três cabeçalhos HTTP fundamentais
| Cabeçalho da requisição | Função | Uso recomendado |
|---|---|---|
| webhook-id | ID único do evento | Use como chave de idempotência para evitar processamento duplicado |
| webhook-timestamp | Timestamp de geração do evento (segundos) | Rejeite requisições com mais de 5 minutos para evitar ataques de replay |
| webhook-signature | Assinatura HMAC ou JWKS | Valide com um clique usando a biblioteca standardwebhooks |
Entrega "pelo menos uma vez" e estratégia de retentativa
O Google garante a entrega "pelo menos uma vez": seu endpoint receberá cada evento pelo menos uma vez, podendo recebê-lo múltiplas vezes. Qualquer operação de escrita subsequente deve ser tratada de forma idempotente; a solução preferencial é utilizar o webhook-id como chave única ao gravar em seu banco de dados ou cache.
Se o seu endpoint retornar um código diferente de 2xx, o Google tentará reenviar o evento repetidamente dentro de uma janela de 24 horas, utilizando uma estratégia de backoff exponencial. Isso significa que, mesmo que seu serviço sofra uma queda temporária, os eventos não serão perdidos — mas também implica que você não deve usar "processamento síncrono bloqueante" como resposta, pois respostas lentas serão interpretadas como falha.
Rotação de chaves de assinatura
A chave HMAC para Webhooks Estáticos suporta o modo REVOKE_PREVIOUS_SECRETS_AFTER_H24, permitindo validar simultaneamente as chaves antiga e nova durante um período de 24 horas. Este é o ponto crucial para a troca gradual de chaves em ambiente de produção: você pode gerar uma nova chave, distribuí-la para todos os nós e, após confirmar que todos a aceitam, invalidar a chave antiga, completando a rotação sem interrupções.
🔐 Dica de segurança: Todos os endpoints de webhook devem utilizar HTTPS, validar obrigatoriamente a assinatura, limitar o tamanho do corpo da requisição e implementar circuit breakers para chamadas lentas. Se você utiliza a APIYI (apiyi.com) para invocar a API Gemini e outros modelos simultaneamente, recomendamos centralizar todos os endpoints de webhook em um "gateway de eventos" unificado. Isso facilita a verificação de assinaturas, a desduplicação e o roteamento, permitindo que o backend distribua as cargas por modelo, o que é muito melhor para auditorias de conformidade e gestão de chaves.
Cenários de aplicação principais dos webhooks da API Gemini
Os webhooks da API Gemini não foram criados para todas as chamadas — o generateContent síncrono, que retorna em milissegundos, não precisa deles. O valor real reside em três tipos de tarefas de longa duração, que são os cenários destacados pelo blog oficial.
Agentes assíncronos de Deep Research
Tarefas de Deep Research geralmente levam de minutos a horas, envolvendo múltiplas rodadas de busca, chamadas de ferramentas e síntese de resumos. O evento interaction.requires_action dos webhooks se encaixa perfeitamente nesse fluxo de múltiplas etapas (multi-turn). Você pode receber callbacks em cada nó de ação e avançar para o próximo passo de forma assíncrona, em vez de manter um processo residente monitorando toda a sessão.
Inferência em lote com Batch API
A Batch API é a porta de entrada que o Gemini oferece para "milhares ou até centenas de milhares de comandos". Após o envio, você recebe um ID de tarefa imediatamente e, ao concluir, é notificado via evento batch.succeeded com o output_file_uri. Nesse modelo, a vantagem de custo dos webhooks é evidente — o polling tradicional de milhares de tarefas em lote esgotaria rapidamente sua cota de API.
Geração de vídeos longos (Veo)
Tarefas de geração de vídeos longos, como as do Veo, geralmente levam vários minutos, e não é viável manter o frontend carregando indefinidamente. Os webhooks permitem que você envie a tarefa e responda imediatamente ao usuário com "geração em andamento, notificaremos quando terminar", enviando a notificação real através do seu próprio sistema de push (WebSocket, APNs, SSE) assim que o processo for concluído.
🎯 Adaptação para o mercado local: Equipes que desenvolvem aplicações de vídeo com IA preocupam-se principalmente com duas questões: a estabilidade na chamada do Gemini Veo e a agilidade em receber a notificação de conclusão. Através de canais de proxy de API como a APIYI (apiyi.com), resolve-se o primeiro ponto; enquanto o mecanismo orientado a eventos dos webhooks da API Gemini resolve o segundo. A combinação de ambos resulta em um pipeline de vídeo longo robusto e pronto para produção.
Sugestão de decisão: Devo migrar imediatamente para os webhooks da API do Gemini?
Embora os webhooks pareçam ser superiores à sondagem (polling) em todos os aspectos, a decisão de migrar imediatamente depende da sua carga de trabalho atual. A matriz de decisão abaixo pode ajudá-lo a avaliar rapidamente.

| Seu Cenário | Recomendação de migração para webhooks da API Gemini |
|---|---|
Uso principal de chamadas síncronas generateContent |
Não necessário (webhook não cobre este cenário) |
| Uso ocasional de Batch, poucos tarefas por dia | Opcional, mas com pouco ganho |
| Grande volume de tarefas Batch, centenas ou mais por dia | Fortemente recomendado, elimina a "tempestade de polling" |
| Geração de vídeos longos com Veo | Fortemente recomendado, melhoria clara na experiência |
| Fluxos de trabalho de Deep Research / agentes | Fortemente recomendado, essencial para processamento assíncrono |
| Plataforma SaaS multi-inquilino | Fortemente recomendado, adaptação perfeita com Dynamic Webhook |
💡 Caminho de migração: Não precisa ser "tudo ou nada" — você pode começar usando webhooks em novos projetos, mantendo a sondagem nos antigos e substituindo gradualmente. As duas implementações do Google coexistem, e a interface
GET /operationsdo cliente continua funcionando. Se você pretende usar o APIYI (apiyi.com) para invocar outros modelos, aproveite esta oportunidade para unificar o barramento de eventos de todas as tarefas assíncronas, reduzindo o custo de manutenção de múltiplos sistemas de notificação.
Perguntas frequentes (FAQ) sobre webhooks da API Gemini
Os webhooks da API Gemini são pagos?
De acordo com o blog oficial, não há cobrança separada pelo envio do webhook em si; você paga apenas pelas tarefas da API Gemini enviadas (tokens, duração da geração de vídeo, volume de processamento Batch). O envio do webhook é iniciado pelo Google e não consome sua cota de chamadas de API.
Servidores locais podem receber webhooks da API Gemini diretamente?
Podem, desde que seu endpoint de retorno seja acessível pela rede do Google. Se o endpoint estiver totalmente implantado internamente e não tiver uma entrada pública, o Google não conseguirá enviar a notificação. A prática comum é colocar o endpoint em nós de borda ou gateways acessíveis internacionalmente e, em seguida, redirecionar para a rede interna; ou usar um serviço como o APIYI (apiyi.com), que suporta proxy de webhook, recebendo a notificação na camada de proxy antes de encaminhá-la para o seu sistema interno.
Os webhooks da API Gemini enviam notificações duplicadas? Como desduplicar?
Sim. O Google oferece entrega "pelo menos uma vez" (at-least-once). Qualquer oscilação momentânea na rede ou um erro 5xx ocasional no seu endpoint acionará uma nova tentativa. A prática padrão é usar o webhook-id no cabeçalho da requisição como uma chave de idempotência, verificando em seu banco de dados ou Redis se a mensagem já foi processada; se já, retorne 2xx imediatamente.
Webhooks estáticos e dinâmicos podem ser usados juntos?
Sim, e é recomendado. O padrão comum é: usar o Webhook Estático para "notificações globais de segurança" (por exemplo, todos os eventos de falha vão para um alerta) e, ao mesmo tempo, usar o Webhook Dinâmico em tarefas críticas para "roteamento exclusivo" (por exemplo, o resultado da geração de vídeo de um cliente VIP é enviado diretamente para o endpoint dele).
Como implantar webhooks da API Gemini em produção?
A arquitetura recomendada é: Gateway HTTPS → Middleware de verificação de assinatura → Retorno rápido 2xx → Fila de mensagens → Worker de backend para processamento assíncrono. Essa arquitetura suporta picos de tráfego de webhook e facilita o monitoramento, a reexecução e a auditoria. Se você já possui um gateway de chamadas de IA baseado no APIYI (apiyi.com), integrar o endpoint de webhook tornará tudo mais simples.
Qual a relação entre webhooks da API Gemini e Server-Sent Events (SSE)?
Ambos resolvem problemas diferentes. O SSE é uma conexão de longa duração "iniciada pelo cliente, com conteúdo transmitido pelo servidor", ideal para fluxos de tokens em tempo real; o Webhook é uma requisição curta "iniciada pelo servidor, enviando eventos entre servidores", ideal para notificações de conclusão de tarefas. Uma aplicação baseada em agentes frequentemente usa ambos: a camada de interação do usuário via SSE e as tarefas longas de backend via Webhook.
Resumo: O verdadeiro significado dos Webhooks orientados a eventos da API Gemini
Os webhooks da API Gemini parecem, à primeira vista, apenas uma atualização de conveniência técnica, mas, na essência, representam um posicionamento claro do Google sobre o futuro das aplicações de IA. A empresa sinaliza que o modelo dominante não será mais o padrão de "uma requisição, uma resposta" (chat), mas sim pipelines de agentes complexos que envolvem pesquisa profunda (Deep Research), vídeos longos e inferência em lote (Batch). Esse tipo de pipeline exige, por natureza, uma arquitetura orientada a eventos, e os webhooks apenas transferem essa responsabilidade da implementação do desenvolvedor para a camada da plataforma.
Para os desenvolvedores brasileiros, a chegada dos webhooks da API Gemini tem um significado adicional: ela alinha o Gemini às capacidades de engenharia de concorrentes como OpenAI e Anthropic (que já suportavam mecanismos similares). Isso significa que, independentemente do modelo escolhido, o paradigma de desenvolvimento para tarefas assíncronas está convergindo. Com o uso de um ponto de entrada unificado como o APIYI (apiyi.com), você pode centralizar as notificações de eventos do Gemini, Claude, GPT e outros em um único barramento de eventos, garantindo que o seu pipeline permaneça intacto, mesmo que você troque de modelo.
Se você está desenvolvendo aplicações de vídeo longo, geração de conteúdo em lote ou automação baseada em agentes, este é o momento ideal para migrar para os webhooks orientados a eventos. A tecnologia está madura, a documentação oficial está completa e as bibliotecas da comunidade permitem integração imediata. O custo marginal de começar agora ou daqui a uma semana é praticamente zero, mas os benefícios — como a eliminação do polling, a redução da latência e a economia de cota — são imediatos.
📚 Leitura recomendada: O blog oficial detalha o contexto do lançamento: blog.google; para a lista completa de eventos, campos de payload e exemplos de SDK, consulte o Gemini Cookbook: github.com/google-gemini/cookbook; para especificações de assinatura, verifique a documentação do Standard Webhooks: standardwebhooks. Se você precisa de um canal estável para a invocação do modelo Gemini, conheça o site oficial do APIYI: apiyi.com.
Autor: Equipe APIYI — Focada em práticas de engenharia de API para Modelos de Linguagem Grande e infraestrutura assíncrona, oferecendo serviço proxy de API unificado para Gemini, Claude e GPT. Saiba mais em apiyi.com.
