generateContent
curl --request POST \
--url https://openp.ai/v1beta/models/{model}:generateContentimport requests
url = "https://openp.ai/v1beta/models/{model}:generateContent"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://openp.ai/v1beta/models/{model}:generateContent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://openp.ai/v1beta/models/{model}:generateContent",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://openp.ai/v1beta/models/{model}:generateContent"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://openp.ai/v1beta/models/{model}:generateContent")
.asString();require 'uri'
require 'net/http'
url = URI("https://openp.ai/v1beta/models/{model}:generateContent")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyGoogle Gemini
generateContent
POST /v1beta/models/:generateContent — the Gemini native protocol
POST
/
v1beta
/
models
/
{model}
:generateContent
generateContent
curl --request POST \
--url https://openp.ai/v1beta/models/{model}:generateContentimport requests
url = "https://openp.ai/v1beta/models/{model}:generateContent"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://openp.ai/v1beta/models/{model}:generateContent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://openp.ai/v1beta/models/{model}:generateContent",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://openp.ai/v1beta/models/{model}:generateContent"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://openp.ai/v1beta/models/{model}:generateContent")
.asString();require 'uri'
require 'net/http'
url = URI("https://openp.ai/v1beta/models/{model}:generateContent")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyThe Gemini native protocol, supporting multimodal input (image / PDF / audio / video) and function calling.
The response includes a
After executing, append a
Or use a model ID with the
Request
curl "https://openp.ai/v1beta/models/gemini-3.1-pro-preview:generateContent" \
-H "x-goog-api-key: $OPENPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [{"text": "Explain the Fourier transform"}]
}
],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 2048,
"topP": 0.95
}
}'
Path variables
| Variable | Description |
|---|---|
{model} | Gemini model ID, e.g. gemini-3.1-pro-preview |
Main fields
| Field | Type | Description |
|---|---|---|
contents | array | Conversation content, role is user / model |
systemInstruction | object | System prompt |
generationConfig.temperature | number | 0-2 |
generationConfig.topP | number | |
generationConfig.topK | integer | |
generationConfig.maxOutputTokens | integer | Maximum output |
generationConfig.candidateCount | integer | 1-8 |
generationConfig.stopSequences | array | |
generationConfig.responseMimeType | string | application/json enables structured output |
generationConfig.responseSchema | object | JSON Schema enforcement |
generationConfig.thinkingConfig | object | { thinkingBudget: 8000 } |
tools | array | Function / retrieval tools |
toolConfig | object | function_calling_config |
safetySettings | array | Safety filter levels |
parts types
{"role": "user", "parts": [
{"text": "Look at this image"},
{"inline_data": {"mime_type": "image/png", "data": "<base64>"}},
{"file_data": {"mime_type": "application/pdf", "file_uri": "https://..."}}
]}
Response
{
"candidates": [
{
"content": {
"role": "model",
"parts": [{"text": "The Fourier transform is..."}]
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [...]
}
],
"promptFeedback": {"safetyRatings": [...]},
"usageMetadata": {
"promptTokenCount": 15,
"candidatesTokenCount": 412,
"totalTokenCount": 427,
"cachedContentTokenCount": 0,
"thoughtsTokenCount": 0
}
}
finishReason: STOP / MAX_TOKENS / SAFETY / RECITATION / OTHER.
Function calling
{
"contents": [{"role": "user", "parts": [{"text": "Weather in Beijing"}]}],
"tools": [{
"functionDeclarations": [{
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}]
}]
}
functionCall:
{
"candidates": [{
"content": {"role": "model", "parts": [
{"functionCall": {"name": "get_weather", "args": {"city": "Beijing"}}}
]}
}]
}
functionResponse:
{"role": "user", "parts": [{
"functionResponse": {
"name": "get_weather",
"response": {"city": "Beijing", "temp": 18, "desc": "clear"}
}
}]}
Thinking mode
{
"contents": [{"role": "user", "parts": [{"text": "Prove Goldbach's conjecture"}]}],
"generationConfig": {
"thinkingConfig": { "thinkingBudget": 8000 }
}
}
-thinking suffix: gemini-2.5-pro-thinking.
Structured output
{
"contents": [{"role": "user", "parts": [{"text": "Return a user JSON"}]}],
"generationConfig": {
"responseMimeType": "application/json",
"responseSchema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"}
},
"required": ["name", "age"]
}
}
}