Documentation Index
Fetch the complete documentation index at: https://docs.crazyrouter.com/llms.txt
Use this file to discover all available pages before exploring further.
Gemini Native Format
This page only documents Gemini Native behavior that was revalidated against Crazyrouter production on 2026-03-22.
Current primary example model:
Dedicated multimodal pages based on successful request patterns:
Endpoints
POST /v1beta/models/{model}:generateContent
POST /v1beta/models/{model}:streamGenerateContent
Authentication
Pass the API key through the URL parameter:
Basic text generation
curl "https://crazyrouter.com/v1beta/models/gemini-3-pro:generateContent?key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Explain machine learning in one sentence."
}
]
}
],
"generationConfig": {
"maxOutputTokens": 128
}
}'
Verified response shape:
{
"candidates": [
{
"content": {
"parts": [
{
"text": "...",
"thoughtSignature": "..."
}
]
}
}
]
}
Streaming generation
This recheck confirmed that streamGenerateContent returns incremental SSE output.
curl "https://crazyrouter.com/v1beta/models/gemini-3-pro:streamGenerateContent?key=YOUR_API_KEY&alt=sse" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Write one short sentence about AI."
}
]
}
]
}'
Observed SSE chunk shape:
data: {"candidates":[{"content":{"parts":[{"text":"...","thoughtSignature":"..."}]}}]}
Structured outputs
This production recheck confirmed that responseMimeType + responseSchema works:
curl "https://crazyrouter.com/v1beta/models/gemini-3-pro:generateContent?key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Return a JSON object with keys city and country for Tokyo."
}
]
}
],
"generationConfig": {
"responseMimeType": "application/json",
"responseSchema": {
"type": "object",
"properties": {
"city": {"type": "string"},
"country": {"type": "string"}
},
"required": ["city", "country"]
}
}
}'
Verified production output:
{"city":"Tokyo","country":"Japan"}
Google Search
This production recheck confirmed that the googleSearch tool works:
curl "https://crazyrouter.com/v1beta/models/gemini-3-pro:generateContent?key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Use Google Search to find one recent headline from a major technology news site."
}
]
}
],
"tools": [
{
"googleSearch": {}
}
]
}'
Verified fields include:
groundingMetadata.webSearchQueries
groundingMetadata.groundingChunks
groundingMetadata.groundingSupports
Thinking
This production recheck confirmed that thinkingConfig works:
curl "https://crazyrouter.com/v1beta/models/gemini-3-pro:generateContent?key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Which is larger, 9.11 or 9.9? Explain briefly."
}
]
}
],
"generationConfig": {
"thinkingConfig": {
"thinkingBudget": 256
},
"maxOutputTokens": 512
}
}'
Verified marker:
{
"usageMetadata": {
"thoughtsTokenCount": 120
}
}
Common generationConfig fields
| Field | Type | Description |
|---|
maxOutputTokens | integer | Maximum output tokens |
temperature | number | Sampling temperature |
responseMimeType | string | MIME type for structured outputs |
responseSchema | object | Structured output constraint |
thinkingConfig | object | Thinking mode configuration |
Gemini Native uses the contents[].parts[] structure rather than OpenAI-style messages. If you want an OpenAI-style route instead, use Gemini OpenAI-Compatible Format.
Related pages: