Getting started
Gemini protocol
The gateway accepts native Gemini generateContent paths; point google-genai's base_url at the gateway.
The native Gemini protocol uses POST /v1beta/models/{model}:generateContent (and
:streamGenerateContent for streaming).
curl
curl "https://api.tokrouter.dev/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: $TOKROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "Explain SSE in one sentence"}]}]
}'google-genai (Python)
import os
from google import genai
from google.genai import types
client = genai.Client(
api_key=os.environ["TOKROUTER_API_KEY"],
http_options=types.HttpOptions(base_url="https://api.tokrouter.dev"),
)
resp = client.models.generate_content(
model="gemini-3.8-flash",
contents="Explain SSE in one sentence",
)
print(resp.text)google-genai (TypeScript)
import { GoogleGenAI } from '@google/genai'
const ai = new GoogleGenAI({
apiKey: process.env.TOKROUTER_API_KEY!,
httpOptions: { baseUrl: 'https://api.tokrouter.dev' },
})
const resp = await ai.models.generateContent({
model: 'gemini-3.8-flash',
contents: 'Explain SSE in one sentence',
})
console.log(resp.text)Or just use the OpenAI protocol
If you prefer, call the same model through /v1/chat/completions with model: "gemini-3.8-flash" and
an OpenAI-shaped body. Both routes bill against the same key.
DashScope (Alibaba)
Alibaba's native path lives under /v1 with the official /api prefix removed:
curl https://api.tokrouter.dev/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer $TOKROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"input": {"messages": [{"role": "user", "content": "Hello"}]},
"parameters": {"result_format": "message"}
}'The official https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation maps to
https://api.tokrouter.dev/v1/services/aigc/text-generation/generation. Routing is decided by the
model field, so you do not change paths per vendor.