# Gemini Native Format

## Generate Content (Gemini Format)

> Generates content using Google's native Gemini API format. This is a drop-in replacement for Google's \`generateContent\` endpoint — simply replace \`generativelanguage.googleapis.com\` with \`api.fastrouter.ai\` in your base URL and use your FastRouter API key.\
> \
> \*\*Full URL:\*\* \`POST <https://api.fastrouter.ai/v1/models/{model}:generateContent?key=YOUR\\_FASTROUTER\\_API\\_KEY\\`\\>
> \
> \*\*Authentication:\*\* Pass your FastRouter API key via the \`?key=YOUR\_API\_KEY\` query parameter (Google Gemini style).\
> \
> \*\*Request/Response format:\*\* Identical to Google's Gemini API. The request body uses \`contents\` (with \`parts\`) and \`generationConfig\`. The response includes \`candidates\` with generated content and \`usageMetadata\` with token counts.\
> \
> \*\*Cost tracking:\*\* The response \`usageMetadata\` object includes a \`cost\` field showing credits consumed.

```json
{"openapi":"3.1.0","info":{"title":"FastRouter API Reference","version":"1.0.0"},"tags":[{"name":"Gemini Native API","description":"Google Gemini native API format. Send requests using Google's native generateContent format with FastRouter authentication."}],"servers":[{"url":"https://api.fastrouter.ai","description":"Production API"}],"security":[{"keyQuery":[]}],"components":{"securitySchemes":{"keyQuery":{"type":"apiKey","in":"query","name":"key","description":"FastRouter API Key (Gemini style). Get yours at https://fastrouter.ai\n\nFormat: `?key=YOUR_API_KEY`"}},"responses":{"BadRequestError":{"description":"Bad Request - The request is malformed. This could be due to missing parameters, invalid formats, or CORS issues.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"UnauthorizedError":{"description":"Invalid Credentials - Your API key is invalid, disabled, or your OAuth session has expired. Check your credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"InsufficientCreditsError":{"description":"Insufficient Credits - Your account or API key has run out of credits. Add more credits and retry the request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"RateLimitError":{"description":"Rate Limited - You have exceeded your request limits (TPM/RPM). Slow down or increase your limits.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"InternalServerError":{"description":"Internal Error - Something went wrong on our side. Retry the request, and contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}}}},"paths":{"/v1/models/{model}:generateContent":{"post":{"operationId":"geminiGenerateContent","tags":["Gemini Native API"],"summary":"Generate Content (Gemini Format)","description":"Generates content using Google's native Gemini API format. This is a drop-in replacement for Google's `generateContent` endpoint — simply replace `generativelanguage.googleapis.com` with `api.fastrouter.ai` in your base URL and use your FastRouter API key.\n\n**Full URL:** `POST https://api.fastrouter.ai/v1/models/{model}:generateContent?key=YOUR_FASTROUTER_API_KEY`\n\n**Authentication:** Pass your FastRouter API key via the `?key=YOUR_API_KEY` query parameter (Google Gemini style).\n\n**Request/Response format:** Identical to Google's Gemini API. The request body uses `contents` (with `parts`) and `generationConfig`. The response includes `candidates` with generated content and `usageMetadata` with token counts.\n\n**Cost tracking:** The response `usageMetadata` object includes a `cost` field showing credits consumed.","parameters":[{"name":"model","in":"path","required":true,"schema":{"type":"string"},"description":"The Gemini model ID to use (e.g. gemini-2.5-pro, gemini-2.5-flash)."},{"name":"key","in":"query","required":true,"schema":{"type":"string"},"description":"FastRouter API key (Gemini style: pass as query parameter)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["contents"],"properties":{"contents":{"type":"array","description":"The conversation content to send to the model.","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","model"],"description":"The role of the content author."},"parts":{"type":"array","description":"The parts of the content.","items":{"type":"object","properties":{"text":{"type":"string","description":"Text content."}}}}}}},"generationConfig":{"type":"object","description":"Configuration options for content generation.","properties":{"temperature":{"type":"number","description":"Controls randomness. Range: 0.0 to 2.0."},"topP":{"type":"number","description":"Nucleus sampling parameter."},"topK":{"type":"integer","description":"Top-K sampling parameter."},"maxOutputTokens":{"type":"integer","description":"Maximum number of tokens to generate."},"stopSequences":{"type":"array","description":"Sequences that will stop generation.","items":{"type":"string"}},"candidateCount":{"type":"integer","description":"Number of response candidates to generate."},"responseMimeType":{"type":"string","description":"MIME type of the response (e.g. application/json for JSON mode)."}}},"safetySettings":{"type":"array","description":"Safety settings to control content filtering.","items":{"type":"object","properties":{"category":{"type":"string","description":"The safety category.","enum":["HARM_CATEGORY_HARASSMENT","HARM_CATEGORY_HATE_SPEECH","HARM_CATEGORY_SEXUALLY_EXPLICIT","HARM_CATEGORY_DANGEROUS_CONTENT"]},"threshold":{"type":"string","description":"The blocking threshold.","enum":["BLOCK_NONE","BLOCK_LOW_AND_ABOVE","BLOCK_MEDIUM_AND_ABOVE","BLOCK_ONLY_HIGH"]}}}},"systemInstruction":{"type":"object","description":"System instruction for the model.","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","description":"System instruction text."}}}}}}}}}}},"responses":{"200":{"description":"Successful response with generated content.","content":{"application/json":{"schema":{"type":"object","properties":{"candidates":{"type":"array","items":{"type":"object","properties":{"content":{"type":"object","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"}}}},"role":{"type":"string"}}},"finishReason":{"type":"string"},"safetyRatings":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"probability":{"type":"string"}}}}}}},"usageMetadata":{"type":"object","properties":{"promptTokenCount":{"type":"integer"},"candidatesTokenCount":{"type":"integer"},"totalTokenCount":{"type":"integer"},"cost":{"type":"number","description":"Credits consumed for this request."}}},"modelVersion":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"402":{"$ref":"#/components/responses/InsufficientCreditsError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"},"502":{"description":"Bad Gateway — failed to reach Google AI Studio.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"status":{"type":"string"}}}}}}}}}}}}}
```

## Stream Generate Content (Gemini Format)

> Generates content using Google's native Gemini API format with streaming. Returns Server-Sent Events (SSE) with incremental content chunks. This is a drop-in replacement for Google's \`streamGenerateContent\` endpoint.\
> \
> \*\*Full URL:\*\* \`POST <https://api.fastrouter.ai/v1/models/{model}:streamGenerateContent?key=YOUR\\_FASTROUTER\\_API\\_KEY\\`\\>
> \
> \*\*Authentication:\*\* Pass your FastRouter API key via the \`?key=YOUR\_API\_KEY\` query parameter (Google Gemini style).\
> \
> \*\*Streaming format:\*\* Returns SSE events with \`data:\` prefixed JSON objects. Each chunk contains partial \`candidates\` with generated content. The final chunk includes \`usageMetadata\` with token counts and a \`cost\` field.\
> \
> \*\*Cost tracking:\*\* The final streamed chunk's \`usageMetadata\` object includes a \`cost\` field showing credits consumed.

```json
{"openapi":"3.1.0","info":{"title":"FastRouter API Reference","version":"1.0.0"},"tags":[{"name":"Gemini Native API","description":"Google Gemini native API format. Send requests using Google's native generateContent format with FastRouter authentication."}],"servers":[{"url":"https://api.fastrouter.ai","description":"Production API"}],"security":[{"keyQuery":[]}],"components":{"securitySchemes":{"keyQuery":{"type":"apiKey","in":"query","name":"key","description":"FastRouter API Key (Gemini style). Get yours at https://fastrouter.ai\n\nFormat: `?key=YOUR_API_KEY`"}},"responses":{"BadRequestError":{"description":"Bad Request - The request is malformed. This could be due to missing parameters, invalid formats, or CORS issues.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"UnauthorizedError":{"description":"Invalid Credentials - Your API key is invalid, disabled, or your OAuth session has expired. Check your credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"InsufficientCreditsError":{"description":"Insufficient Credits - Your account or API key has run out of credits. Add more credits and retry the request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"RateLimitError":{"description":"Rate Limited - You have exceeded your request limits (TPM/RPM). Slow down or increase your limits.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}},"InternalServerError":{"description":"Internal Error - Something went wrong on our side. Retry the request, and contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer"}}}}}}}}}},"paths":{"/v1/models/{model}:streamGenerateContent":{"post":{"operationId":"geminiStreamGenerateContent","tags":["Gemini Native API"],"summary":"Stream Generate Content (Gemini Format)","description":"Generates content using Google's native Gemini API format with streaming. Returns Server-Sent Events (SSE) with incremental content chunks. This is a drop-in replacement for Google's `streamGenerateContent` endpoint.\n\n**Full URL:** `POST https://api.fastrouter.ai/v1/models/{model}:streamGenerateContent?key=YOUR_FASTROUTER_API_KEY`\n\n**Authentication:** Pass your FastRouter API key via the `?key=YOUR_API_KEY` query parameter (Google Gemini style).\n\n**Streaming format:** Returns SSE events with `data:` prefixed JSON objects. Each chunk contains partial `candidates` with generated content. The final chunk includes `usageMetadata` with token counts and a `cost` field.\n\n**Cost tracking:** The final streamed chunk's `usageMetadata` object includes a `cost` field showing credits consumed.","parameters":[{"name":"model","in":"path","required":true,"schema":{"type":"string"},"description":"The Gemini model ID to use (e.g. gemini-2.5-pro, gemini-2.5-flash)."},{"name":"key","in":"query","required":true,"schema":{"type":"string"},"description":"FastRouter API key (Gemini style: pass as query parameter)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["contents"],"properties":{"contents":{"type":"array","description":"The conversation content to send to the model.","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","model"],"description":"The role of the content author."},"parts":{"type":"array","description":"The parts of the content.","items":{"type":"object","properties":{"text":{"type":"string","description":"Text content."}}}}}}},"generationConfig":{"type":"object","description":"Configuration options for content generation.","properties":{"temperature":{"type":"number","description":"Controls randomness. Range: 0.0 to 2.0."},"topP":{"type":"number","description":"Nucleus sampling parameter."},"topK":{"type":"integer","description":"Top-K sampling parameter."},"maxOutputTokens":{"type":"integer","description":"Maximum number of tokens to generate."},"stopSequences":{"type":"array","description":"Sequences that will stop generation.","items":{"type":"string"}}}},"safetySettings":{"type":"array","description":"Safety settings to control content filtering.","items":{"type":"object","properties":{"category":{"type":"string","enum":["HARM_CATEGORY_HARASSMENT","HARM_CATEGORY_HATE_SPEECH","HARM_CATEGORY_SEXUALLY_EXPLICIT","HARM_CATEGORY_DANGEROUS_CONTENT"]},"threshold":{"type":"string","enum":["BLOCK_NONE","BLOCK_LOW_AND_ABOVE","BLOCK_MEDIUM_AND_ABOVE","BLOCK_ONLY_HIGH"]}}}},"systemInstruction":{"type":"object","description":"System instruction for the model.","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","description":"System instruction text."}}}}}}}}}}},"responses":{"200":{"description":"Streaming response with Server-Sent Events containing generated content chunks.","content":{"text/event-stream":{"schema":{"type":"object","description":"Each SSE event contains a JSON object with partial candidates and usage metadata.","properties":{"candidates":{"type":"array","items":{"type":"object","properties":{"content":{"type":"object","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"}}}},"role":{"type":"string"}}},"finishReason":{"type":"string"}}}},"usageMetadata":{"type":"object","properties":{"promptTokenCount":{"type":"integer"},"candidatesTokenCount":{"type":"integer"},"totalTokenCount":{"type":"integer"},"cost":{"type":"number","description":"Credits consumed for this request."}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"402":{"$ref":"#/components/responses/InsufficientCreditsError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"},"502":{"description":"Bad Gateway — failed to reach Google AI Studio.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"status":{"type":"string"}}}}}}}}}}}}}
```
