Skip to main content
Neon Postgres Docs
current

Search documentation

Type to search this documentation.

On this pageOverview

Gemini API

The Gemini endpoint exposes the Google Gemini API through Neon AI Gateway. Use it when you're already working with the google genai SDK and want to keep your existing code. For most use cases, the cha...

The Gemini endpoint exposes the Google Gemini API through Neon AI Gateway. Use it when you're already working with the google-genai SDK and want to keep your existing code. For most use cases, the chat completions endpoint is simpler to set up and works with Gemini models via the OpenAI SDK.

Supported actions: :generateContent and :streamGenerateContent

Endpoint pattern: https://<branch-host>/gemini/v1beta/models/<model>:<action>

This endpoint is also reachable at the longer /ai-gateway/gemini/v1beta/models/<model>:<action> path. Both behave identically and neither is deprecated. See Shorter paths for the full list of aliases.

Set these environment variables. See Get started for how to obtain them.

Bash
NEON_AI_GATEWAY_TOKEN=nt_live_...
NEON_AI_GATEWAY_BASE_URL=https://br-winter-pond-aptw82ef-api.ai.c-2.us-east-2.aws.neon.tech

This endpoint accepts Google models only:

Model ID Notes
gemini-3-6-flash
gemini-3-5-flash
gemini-3-5-flash-lite
gemini-3-1-pro
gemini-3-1-flash-lite
gemini-3-flash

Sending a non-Google model ID returns 400 model "<model-id>" is not available on the gemini_generate_content endpoint, naming whichever model you sent. Use the chat completions endpoint if you want to call Gemini models alongside other providers from the same code.

TypeScript (google-genai)
import { GoogleGenAI } from '@google/genai';

const client = new GoogleGenAI({
  apiKey: 'placeholder',
  httpOptions: {
    baseUrl: `${process.env.NEON_AI_GATEWAY_BASE_URL}/gemini`,
    headers: {
      Authorization: `Bearer ${process.env.NEON_AI_GATEWAY_TOKEN}`,
    },
  },
});

const response = await client.models.generateContent({
  model: 'gemini-3-flash',
  contents: [{ role: 'user', parts: [{ text: 'What is Neon?' }] }],
});

console.log(response.text);
Python (google-genai)
from google import genai
from google.genai import types
import os

client = genai.Client(
    api_key='placeholder',
    http_options=types.HttpOptions(
        base_url=f"{os.environ['NEON_AI_GATEWAY_BASE_URL']}/gemini",
        headers={'Authorization': f"Bearer {os.environ['NEON_AI_GATEWAY_TOKEN']}"},
    ),
)

response = client.models.generate_content(
    model='gemini-3-flash',
    contents='What is Neon?',
)

print(response.text)
cURL
curl -X POST \
  "$NEON_AI_GATEWAY_BASE_URL/gemini/v1beta/models/gemini-3-flash:generateContent" \
  -H "Authorization: Bearer $NEON_AI_GATEWAY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "What is Neon?"}]}]
  }'
TypeScript (google-genai)
const stream = await client.models.generateContentStream({
  model: 'gemini-3-flash',
  contents: [{ role: 'user', parts: [{ text: 'Explain database branching.' }] }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.text ?? '');
}
Python (google-genai)
for chunk in client.models.generate_content_stream(
    model='gemini-3-flash',
    contents='Explain database branching.',
):
    print(chunk.text, end='', flush=True)

The gateway uses the model ID and action directly in the URL path. The google-genai SDK constructs this automatically from the base URL and model parameter:

base_url: https://<branch-host>/gemini
model:    gemini-3-flash
action:   generateContent or streamGenerateContent

→ https://<branch-host>/gemini/v1beta/models/gemini-3-flash:generateContent
→ https://<branch-host>/gemini/v1beta/models/gemini-3-flash:streamGenerateContent

When calling the REST API directly, the model ID and action must appear in the path as shown above.

Status Message Cause
400 Bad Request unknown model "<model-id>" Model ID not in the catalog
400 Bad Request model "<model-id>" is not available on the gemini_generate_content endpoint Non-Google model sent to this endpoint
404 Not Found unsupported gemini action Action other than generateContent or streamGenerateContent in URL
404 Not Found invalid gemini model path Malformed model:action segment in URL

For authentication, quota, and upstream errors, see Troubleshooting.

Join our Discord Server to ask questions or see what others are doing with Neon. For paid plan support options, see Support.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu