Recommended endpoint
Minimal request
{
"model": "gemini-2.5-flash",
"contents": [
{
"role": "user",
"parts": [{ "text": "Get today's Shanghai weather." }]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_weather",
"description": "Fetch weather",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
]
}
]
}
cURL example
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [{ "text": "Get today'\''s Shanghai weather." }]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_weather",
"description": "Fetch weather",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
]
}
]
}'
Python example
import requests
response = requests.post(
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent",
headers={
"x-goog-api-key": "<GEMINI_API_KEY>",
"Content-Type": "application/json",
},
json={
"contents": [
{
"role": "user",
"parts": [{"text": "Get today's Shanghai weather."}],
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_weather",
"description": "Fetch weather",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
},
"required": ["city"],
},
}
]
}
],
},
)
print(response.json())
Node.js example
const response = await fetch(
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent",
{
method: "POST",
headers: {
"x-goog-api-key": process.env.GEMINI_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
contents: [
{
role: "user",
parts: [{ text: "Get today's Shanghai weather." }]
}
],
tools: [
{
functionDeclarations: [
{
name: "get_weather",
description: "Fetch weather",
parameters: {
type: "object",
properties: {
city: { type: "string" }
},
required: ["city"]
}
}
]
}
]
}),
}
);
console.log(await response.json());
Best practices
- Gemini function declarations need their own mapping layer
- If you enable multiple tool calls, the executor should support batch or chained execution
- Detailed descriptions matter more than short function names
