Gemini 3.1 Pro API

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

Model identity

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

Pricing

Unit Credits
Input 4 credits per 1,000,000 tokens
Output 24 credits per 1,000,000 tokens
Cached input 1 credit 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://img2vid.net/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://img2vid.net/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://img2vid.net/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 Img2Vid 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
)