FreeGeminiAPIConsoleConsole/docs/docsGitHubGitHub ↗
t+0mstrace start
REST interface for Gemini web · Node.js · ElysiaInterface REST para o Gemini web · Node.js · Elysia

REST access to Gemini,Acesso REST ao Gemini,without an SDK or a browser.sem SDK e sem navegador.

Free Gemini API is a thin HTTP proxy. It reproduces the StreamGenerate request issued by the Gemini web client, parses the response stream, and returns plain JSON. Built on Node.js and Elysia, with no Puppeteer, no headless browser, and no official SDK in the request path.A Free Gemini API é um proxy HTTP fino. Ela reproduz a requisição StreamGenerate emitida pelo cliente web do Gemini, faz o parse do stream de resposta e retorna JSON puro. Construída sobre Node.js e Elysia, sem Puppeteer, sem navegador headless e sem SDK oficial no caminho da requisição.

bash · live instance
$ TOKEN=$(curl -s -X POST \
    https://freegemini.felipeestrela.com.br/create-session \
    | jq -r .sessionToken)

$ curl -s https://freegemini.felipeestrela.com.br/chat \
    -H "Authorization: Bearer $TOKEN" \
    -d '{"prompt":"Explain streams in Node."}'

 awaiting response…
t+0ms→ 7.32s
PerformanceDesempenho

Response time compositionComposição do tempo de resposta

Breakdown of a single /chat call. All processing performed by this project (JWT verification, session lookup, prompt substitution and stream parsing) totals approximately 2.4 ms. The remainder is the upstream Gemini response. Framework choice affects the blue segments only.Composição de uma única chamada /chat. Todo o processamento realizado por este projeto (verificação do JWT, leitura da sessão, substituição do prompt e parse do stream) soma aproximadamente 2,4 ms. O restante é a resposta do Gemini. A escolha do framework afeta apenas os segmentos azuis.

operationoperaçãospanspandurationduração
POST /chat7.32 s
auth.verify_jwt1.0 ms
session.load · sqlite0.7 ms
payload.inject_prompt0.02 ms
gemini.StreamGenerate · upstreamupstream7.32 s
stream.parse · wrb.fr0.3 ms
session.save_cookies0.4 ms
this project ≈ 2.4 ms · upstream ≈ 7.3 seste projeto ≈ 2,4 ms · upstream ≈ 7,3 s0.03% attributable to this projectatribuível a este projeto
This projectEste projetoGoogle, upstreamGoogle, upstream

Measured server-side on 31 July 2026 using process.hrtime across six /chat calls. Each segment is a direct measurement rather than an estimate. StreamGenerate ranged from 3.9 s to 27.5 s and the chart shows the median; the internal steps varied negligibly. Sample size is six, so these figures are indicative and do not constitute a published benchmark. No load testing has been performed.Medição realizada no servidor em 31 de julho de 2026 com process.hrtime, em seis chamadas /chat. Cada segmento é uma medição direta, não uma estimativa. O StreamGenerate variou de 3,9 s a 27,5 s e o gráfico apresenta a mediana; os passos internos tiveram variação desprezível. A amostra é de seis execuções, portanto os valores são indicativos e não constituem benchmark publicado. Não foram realizados testes de carga.

spantopology
ArchitectureArquitetura

Request flowFluxo da requisição

The client does not communicate with Google directly. The proxy maintains session state (a signed JWT, a cookie jar and a captured request snapshot) and forwards each prompt upstream on the client's behalf.O cliente não se comunica diretamente com o Google. O proxy mantém o estado da sessão (um JWT assinado, um conjunto de cookies e um snapshot da requisição capturada) e encaminha cada prompt em nome do cliente.

client

ClientCliente

  • POST /create-session
  • POST /chat + prompt
  • Bearer <sessionToken>
free gemini api

ProxyProxy

  • verify JWT · load sessionverifica JWT · carrega sessão
  • substitute prompt in f.reqsubstitui o prompt no f.req
  • parse stream · persist cookiesparse do stream · persiste cookies
gemini web

StreamGenerateStreamGenerate

  • application/x-www-form-urlencoded
  • chunked response · wrb.frresposta chunked · wrb.fr
  • Set-Cookie on each responseSet-Cookie a cada resposta
4endpoints
API surfaceSuperfície da API

EndpointsEndpoints

POST/create-session

Issues one cookieless StreamGenerate request, retains the returned Set-Cookie values, persists the snapshot to SQLite and returns a signed JWT.Emite uma requisição StreamGenerate sem cookie, retém os valores de Set-Cookie retornados, persiste o snapshot em SQLite e retorna um JWT assinado.

~4.4 s · 1 req / 15 s per IP~4,4 s · 1 req / 15 s por IP
{ "ok": true,
  "sessionToken": "eyJhbGciOiJIUzI1NiIs…",
  "expiresInSeconds": 2700
}
POST/chat

Accepts a prompt, substitutes it into the captured f.req body, forwards the request using the session cookies and returns the parsed text. The token may be supplied in the Authorization header or the request body.Recebe um prompt, substitui-o no corpo f.req capturado, encaminha a requisição com os cookies da sessão e retorna o texto processado. O token pode ser informado no cabeçalho Authorization ou no corpo da requisição.

3.9 to 27.5 s observed · 30 req / min per IP · 20 000 character limit3,9 a 27,5 s observado · 30 req / min por IP · limite de 20 000 caracteres
{ "ok": true,
  "reply": "A stream is an abstraction for…"
}
GETPOST/session/status

Validates the token against the session store without contacting Google. Always returns HTTP 200; an expired session is reported in the response body rather than as a protocol error.Valida o token contra o armazenamento de sessões sem contatar o Google. Retorna sempre HTTP 200; uma sessão expirada é informada no corpo da resposta, não como erro de protocolo.

<5 ms · 60 req / min per IP<5 ms · 60 req / min por IP
{ "ok": true, "valid": false,
  "reason": "token_expired"
}
GET/docs·/openapi.json

Swagger UI backed by a static OpenAPI 3.0 specification. Authorise with a session token to execute requests directly from the browser.Swagger UI apoiado em uma especificação OpenAPI 3.0 estática. Autorize com um session token para executar requisições diretamente do navegador.

static specification, as @elysiajs/swagger is unreliable with the Node adapterespecificação estática, pois o @elysiajs/swagger é instável com o adapter Node
$ curl -s .../openapi.json | jq .info
{ "title": "Free Gemini API",
  "version": "1.0.0"
}
t+45mttl
LimitsLimites

Rate limits and session lifetimeRate limits e duração da sessão

Fixed windows per IP address, held in memory. Each limit is configurable through an environment variable, and a value of 0 disables it. After 45 minutes /chat returns SESSION_EXPIRED and a new session must be created.Janelas fixas por endereço IP, mantidas em memória. Cada limite é configurável por variável de ambiente, e o valor 0 o desativa. Após 45 minutos, /chat retorna SESSION_EXPIRED e uma nova sessão deve ser criada.

POST /create-session
RATE_LIMIT_CREATE_SESSION_INTERVAL_SEC
1 / 15 s
POST /chat
RATE_LIMIT_CHAT_PER_MINUTE
30 / min
GET · POST /session/status
RATE_LIMIT_STATUS_PER_MINUTE
60 / min
session lifetimeduração da sessão
SESSION_TTL_MINUTES
45 min
0spans
ScopeEscopo

Out of scopeFora do escopo

The following capabilities are intentionally not implemented. They are documented here so suitability can be assessed before integration.As capacidades a seguir não são implementadas por decisão de projeto. Estão documentadas aqui para que a adequação possa ser avaliada antes da integração.

browser.launch · puppeteer
no headless browser is used at any stage
files.upload
text prompts only; file and image uploads are not supported
history.append
conversation history is not retained between /chat calls
cookies.auto_refresh
the request template in src/config/gemini.js requires manual updates
genai.official_sdk
@google/genai is not used in the request path
notescope

Important noticesAvisos importantes

  • 01Independent project. Not affiliated with, endorsed by, or connected to Google.Projeto independente. Sem afiliação, endosso ou vínculo com o Google.
  • 02The service depends on an internal endpoint of gemini.google.com rather than a public documented API. Any change to that protocol will interrupt operation until the request template is updated.O serviço depende de um endpoint interno do gemini.google.com, não de uma API pública documentada. Qualquer alteração nesse protocolo interrompe o funcionamento até que o template da requisição seja atualizado.
  • 03No uptime target, automated test suite or support commitment is provided. The project was built as a study of the protocol and is published to be read as source.Não há meta de disponibilidade, suíte de testes automatizados ou compromisso de suporte. O projeto foi construído como estudo do protocolo e é publicado para ser lido como código-fonte.
  • 04For production workloads, use the official Google Gemini API.Para cargas de trabalho em produção, utilize a API oficial do Google Gemini.
t+7.32strace end

The complete source is available on GitHub.O código-fonte completo está disponível no GitHub.