Sign up for new-member prices on your first plan

Gemini 3.1 Pro API

Buble exposes Gemini 3.1 Pro through the public chat model API as google/gemini-3.1-pro-preview.

Model identity

Field Value
Buble model key google/gemini-3.1-pro-preview
Runtime model id gemini-3.1-pro
Provider Google
Public capabilities Reasoning, image attachments, tool calling

Pricing

Unit Credits
Input 40 credits per 1,000,000 tokens
Output 280 credits per 1,000,000 tokens
Cached input 40 credits per 1,000,000 tokens

Model options

Option Type Default Values
reasoning_effort string medium none, low, medium, high

Set reasoning: true to enable reasoning. Pass the configured effort through options.reasoning_effort.

OpenAI-compatible example

curl https://buble.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $BUBLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.1-pro-preview",
    "messages": [
      {
        "role": "system",
        "content": "You are a careful multimodal analysis assistant."
      },
      {
        "role": "user",
        "content": "Compare the likely product risks and suggest next validation steps."
      }
    ],
    "reasoning": true,
    "options": {
      "reasoning_effort": "medium"
    },
    "max_completion_tokens": 800
  }'

Anthropic Messages-compatible example

curl https://buble.ai/api/v1/messages \
  -H "Authorization: Bearer $BUBLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.1-pro-preview",
    "system": "You are a careful multimodal analysis assistant.",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Compare the likely product risks and suggest next validation steps."
          }
        ]
      }
    ],
    "thinking": true,
    "options": {
      "reasoning_effort": "medium"
    },
    "max_tokens": 800
  }'

Gemini-compatible example

curl https://buble.ai/api/v1beta/models/google/gemini-3.1-pro-preview:generateContent \
  -H "Authorization: Bearer $BUBLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "systemInstruction": {
      "parts": [
        {
          "text": "You are a careful multimodal analysis assistant."
        }
      ]
    },
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "Compare the likely product risks and suggest next validation steps."
          }
        ]
      }
    ],
    "reasoning": true,
    "options": {
      "reasoning_effort": "medium"
    },
    "generationConfig": {
      "maxOutputTokens": 800
    }
  }'

For Gemini-compatible streaming, use /api/v1beta/models/google/gemini-3.1-pro-preview:streamGenerateContent.

SDK examples

The examples below use this page's Buble chat model key through the OpenAI-compatible Chat Completions SDK method. They assume you have already initialized the SDK client as shown in the Quickstart and imported the required language SDK types. Anthropic Messages and Gemini-compatible calls use the same model key; Gemini streaming must use the SDK's streamGenerateContent / stream_generate_content method.

JavaScript / TypeScript

const completion = await buble.chat.completions.create({
  model: 'google/gemini-3.1-pro-preview',
  messages: [
    {
      role: 'system',
      content: 'You are a careful multimodal analysis assistant.',
    },
    {
      role: 'user',
      content:
        'Compare the likely product risks and suggest next validation steps.',
    },
  ],
  reasoning: true,
  options: {
    reasoning_effort: 'medium',
  },
  max_completion_tokens: 800,
});

console.log(completion.choices?.[0]?.message?.content);

Python

completion = client.chat.completions.create(
    model="google/gemini-3.1-pro-preview",
    messages=[
        {"role": "system", "content": "You are a careful multimodal analysis assistant."},
        {"role": "user", "content": "Compare the likely product risks and suggest next validation steps."},
    ],
    reasoning=True,
    options={"reasoning_effort": "medium"},
    max_completion_tokens=800,
)

print(completion["choices"][0]["message"]["content"])

Go

completion, err := client.Chat.Completions.Create(ctx, buble.ChatRequest{
	"model": "google/gemini-3.1-pro-preview",
	"messages": []any{
		map[string]any{"role": "system", "content": "You are a careful multimodal analysis assistant."},
		map[string]any{"role": "user", "content": "Compare the likely product risks and suggest next validation steps."},
	},
	"reasoning":             true,
	"options": map[string]any{"reasoning_effort": "medium"},
	"max_completion_tokens": 800,
})
if err != nil {
	return err
}
fmt.Println(completion)

Rust

let completion = client.chat().completions().create(serde_json::json!({
    "model": "google/gemini-3.1-pro-preview",
    "messages": [
        { "role": "system", "content": "You are a careful multimodal analysis assistant." },
        { "role": "user", "content": "Compare the likely product risks and suggest next validation steps." }
    ],
    "reasoning": true,
    "options": { "reasoning_effort": "medium" },
    "max_completion_tokens": 800
})).await?;

Swift

let completion = try await client.chat.completions.create([
    "model": "google/gemini-3.1-pro-preview",
    "messages": [
        ["role": "system", "content": "You are a careful multimodal analysis assistant."],
        ["role": "user", "content": "Compare the likely product risks and suggest next validation steps."]
    ],
    "reasoning": true,
    "options": ["reasoning_effort": "medium"],
    "max_completion_tokens": 800
])

Dart / Flutter

final completion = await client.chat.completions.create({
  'model': 'google/gemini-3.1-pro-preview',
  'messages': [
    {'role': 'system', 'content': 'You are a careful multimodal analysis assistant.'},
    {'role': 'user', 'content': 'Compare the likely product risks and suggest next validation steps.'},
  ],
  'reasoning': true,
  'options': {'reasoning_effort': 'medium'},
  'max_completion_tokens': 800,
});

Elixir

{:ok, completion} =
  Buble.Chat.Completions.create(client, %{
    model: "google/gemini-3.1-pro-preview",
    messages: [
      %{role: "system", content: "You are a careful multimodal analysis assistant."},
      %{role: "user", content: "Compare the likely product risks and suggest next validation steps."}
    ],
    reasoning: true,
    options: %{reasoning_effort: "medium"},
    max_completion_tokens: 800
  })

Java

var completion = client.chat().completions().create(Map.of(
        "model", "google/gemini-3.1-pro-preview",
        "messages", List.of(
                Map.of("role", "system", "content", "You are a careful multimodal analysis assistant."),
                Map.of("role", "user", "content", "Compare the likely product risks and suggest next validation steps.")),
        "reasoning", true,
        "options", Map.of("reasoning_effort", "medium"),
        "max_completion_tokens", 800));

.NET

var completion = await client.Chat.Completions.CreateAsync(new Dictionary<string, object?>
{
    ["model"] = "google/gemini-3.1-pro-preview",
    ["messages"] = new[]
    {
        new Dictionary<string, object?> { ["role"] = "system", ["content"] = "You are a careful multimodal analysis assistant." },
        new Dictionary<string, object?> { ["role"] = "user", ["content"] = "Compare the likely product risks and suggest next validation steps." }
    },
    ["reasoning"] = true,
    ["options"] = new Dictionary<string, object?>
    {
        ["reasoning_effort"] = "medium"
    },
    ["max_completion_tokens"] = 800
});

PHP

$completion = $client->chat()->completions()->create([
    'model' => 'google/gemini-3.1-pro-preview',
    'messages' => [
        ['role' => 'system', 'content' => 'You are a careful multimodal analysis assistant.'],
        ['role' => 'user', 'content' => 'Compare the likely product risks and suggest next validation steps.'],
    ],
    'reasoning' => true,
    'options' => [
        'reasoning_effort' => 'medium',
    ],
    'max_completion_tokens' => 800,
]);

Ruby

completion = client.chat.completions.create(
  model: "google/gemini-3.1-pro-preview",
  messages: [
    { role: "system", content: "You are a careful multimodal analysis assistant." },
    { role: "user", content: "Compare the likely product risks and suggest next validation steps." }
  ],
  reasoning: true,
  options: {reasoning_effort: "medium"},
  max_completion_tokens: 800
)