Home
Softono
gemini-web-to-api

gemini-web-to-api

Open source MIT Go
236
Stars
77
Forks
4
Issues
3
Watchers
1 week
Last Commit

About gemini-web-to-api

✨Reverse-engineered API for Gemini web app. It can be used as a genuine API key from OpenAI, Gemini, and Claude.

Platforms

Web Self-hosted Docker

Languages

Go

Links

Gemini Logo

Release Go Version Docker GHCR License Maintained

Stars Issues PRs Welcome

Gemini Web To API πŸš€

Transforms Google Gemini web interface into a standardized REST API.
Access Gemini's power without API keys β€” just use your cookies!

[!NOTE] This project is intended for research and educational purposes only. Please use responsibly and refrain from any commercial use.

[!WARNING] This project is not affiliated with Google. It uses reverse-engineered web cookies and may not comply with Google's Terms of Service. Use at your own risk β€” the author assumes no responsibility for any account actions or data loss.


🎯 Why Gemini Web To API?

Problem: You want to use Google Gemini's latest models, but you don't have an API key or prefer not to use one.

Solution: Creates a local API server that:

  • βœ… Connects to Gemini's web interface using your browser cookies
  • βœ… Exposes OpenAI / Claude / Gemini-compatible API endpoints
  • βœ… No API keys needed β€” just cookies from your browser
  • βœ… Handles authentication and session management automatically

Use Cases:

  • Use Gemini without API keys
  • Test Gemini integration locally
  • Build applications leveraging Gemini's latest models
  • Develop with cookie-based authentication

⚑ Quick Start

🐳 Option A β€” Docker Run (no setup required)

No cloning needed β€” pull and run directly from the registry.

Step 1 β€” Get your cookies

[!WARNING] Keep these values secure and never share or commit them β€” they provide direct access to your Google account.

  1. Go to gemini.google.com and sign in
  2. Press F12 β†’ Application β†’ Storage β†’ Cookies
  3. Copy the values of __Secure-1PSID and __Secure-1PSIDTS

Step 2 β€” Run

docker run -d -p 4981:4981 \
  -e GEMINI_1PSID="your_psid_here" \
  -e GEMINI_1PSIDTS="your_psidts_here" \
  -e GEMINI_REFRESH_INTERVAL=30 \
  -e GEMINI_MAX_RETRIES=3 \
  -e APP_ENV=production \
  -e RATE_LIMIT_ENABLED=true \
  -e RATE_LIMIT_WINDOW_MS=60000 \
  -e RATE_LIMIT_MAX_REQUESTS=10 \
  -v ./cookies:/home/appuser/.cookies \
  --tmpfs /tmp:rw,size=512m \
  --tmpfs /home/appuser/.cache:rw,size=256m \
  --name gemini-web-to-api \
  --restart unless-stopped \
  ghcr.io/ntthanh2603/gemini-web-to-api:latest

Done! Jump to Test it. πŸŽ‰


πŸ› οΈ Option B β€” Build from source

Use this if you want to build for a specific architecture (amd64, arm64, etc.) or modify the source code.

Step 1 β€” Clone the repository

git clone https://github.com/ntthanh2603/gemini-web-to-api.git
cd gemini-web-to-api

Step 2 β€” Get your cookies and configure .env

[!WARNING] Keep these values secure and never commit your .env file β€” it contains credentials that provide access to your Google account.

  1. Go to gemini.google.com and sign in

  2. Press F12 β†’ Application β†’ Storage β†’ Cookies

  3. Copy the values of __Secure-1PSID and __Secure-1PSIDTS

  4. Create your .env from the example:

    cp .env.example .env
  5. Paste your cookie values into .env:

    GEMINI_1PSID=your_psid_here
    GEMINI_1PSIDTS=your_psidts_here
    GEMINI_REFRESH_INTERVAL=30
    GEMINI_MAX_RETRIES=3
    APP_ENV=production
    RATE_LIMIT_ENABLED=true
    RATE_LIMIT_WINDOW_MS=60000
    RATE_LIMIT_MAX_REQUESTS=10

Step 3 β€” Run

Pick whichever method suits your setup:

Method Command Requirements
🐳 Docker Compose docker compose up -d --build Docker
🐹 Go direct go run cmd/server/main.go Go 1.21+
⚑ Task (dev mode) task dev Task

Done! Jump to Test it. πŸŽ‰


βœ… Test it

curl -X POST http://localhost:4981/openai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "gemini-advanced", "messages": [{"role": "user", "content": "Hello!"}]}'

Your Gemini Web To API is running at http://localhost:4981 πŸŽ‰


✨ Features

  • πŸŒ‰ Universal AI Bridge: One server, three protocols (OpenAI, Claude, Gemini)
  • πŸ”Œ Drop-in Replacement: Works with existing OpenAI / Claude / Gemini SDKs
  • πŸ”„ Smart Session Management: Auto-rotates cookies to keep sessions alive
  • ⚑ High Performance: Built with Go and Fiber for speed
  • 🐳 Production Ready: Docker Compose support, Scalar UI, health checks
  • πŸ“ Well Documented: Interactive API docs at /docs

πŸ› οΈ Configuration

Environment Variables

Variable Required Default Description
GEMINI_1PSID βœ… Yes β€” Main session cookie from Gemini
GEMINI_1PSIDTS βœ… Yes β€” Timestamp cookie (prevents auth errors)
GEMINI_REFRESH_INTERVAL ❌ No 30 Cookie rotation interval (minutes)
GEMINI_MAX_RETRIES ❌ No 3 Max retry attempts when an API call fails
PORT ❌ No 4981 Server port
RATE_LIMIT_ENABLED ❌ No false Enable or disable rate limiting
RATE_LIMIT_WINDOW_MS ❌ No 60000 Rate limit time window in milliseconds
RATE_LIMIT_MAX_REQUESTS ❌ No 10 Maximum number of requests allowed per time window

Configuration Priority

  1. Environment Variables (highest priority)
  2. .env file
  3. Defaults (lowest priority)

πŸ§ͺ Usage Examples

OpenAI SDK (Python)

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:4981/openai/v1",
    api_key="not-needed"
)

response = client.chat.completions.create(
    model="gemini-advanced",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Claude SDK (Python)

from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(
    base_url="http://localhost:4981/claude",
    model="gemini-advanced",
    api_key="not-needed"
)

response = llm.invoke("Explain quantum computing")
print(response.content)

Gemini Native SDK (Python)

import google.generativeai as genai

genai.configure(
    api_key="not-needed",
    transport="rest",
    client_options={"api_endpoint": "http://localhost:4981/gemini"}
)

model = genai.GenerativeModel("gemini-advanced")
response = model.generate_content("Write a poem about coding")
print(response.text)

cURL

curl -X POST http://localhost:4981/openai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-advanced",
    "messages": [{"role": "user", "content": "What is AI?"}],
    "stream": false
  }'

More examples are available in the examples/ directory.


πŸ“˜ API Documentation

Once running, visit http://localhost:4981/docs for interactive API documentation powered by Scalar.

Scalar UI


🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


⭐ Star History

If you find this project useful, please consider giving it a star! ⭐


πŸ”— Links


Made with ❀️ by the Gemini Web To API team