GPT-5 vs Gemini 2.5 Pro

Both sit behind the same key and the same code on uttapen — the only thing that changes is the model string, so you can run each of them against your own workload without touching anything else.

FeatureGPT-5Gemini 2.5 Pro
ProviderOpenAIGoogle
Model idopenai/gpt-5google/gemini-2.5-pro
Context400,000 tokens1,048,576 tokens
Max output128,000 tokens65,536 tokens
Input / 1M tokens432,774 toman432,774 toman
Output / 1M tokens3,462,194 toman3,462,194 toman
≈ one 1,000-word request5,063 toman5,063 toman
Input caching43,277 toman / 1M43,277 toman / 1M
Image inputYesYes
File inputYesYes
Tool callingYesYes
JSON outputYesYes
Reasoning modeYesYes

Which one for what?

GPT-5

  • Multi-step problems, maths, and tracking down a bug
  • Whole documents or a codebase in a single request
  • Reading screenshots, invoices, and scanned forms
  • Agents that call your own APIs and database
5,063 toman per 1,000 words · Model page

Gemini 2.5 Pro

  • Multi-step problems, maths, and tracking down a bug
  • Whole documents or a codebase in a single request
  • Reading screenshots, invoices, and scanned forms
  • Agents that call your own APIs and database
5,063 toman per 1,000 words · Model page

Run both with the same code

Swap the model value between the two ids and send the same request twice; what each answer cost comes back in the X-Uttapen-Cost-Toman header.

curl https://api.uttapen.ir/v1/chat/completions \
  -H "Authorization: Bearer sk-up-…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5",
    "messages": [{"role": "user", "content": "Introduce yourself."}],
    "stream": true
  }'
from openai import OpenAI

client = OpenAI(
    base_url="https://api.uttapen.ir/v1",
    api_key="sk-up-…",
)

stream = client.chat.completions.create(
    model="openai/gpt-5",
    messages=[{"role": "user", "content": "Introduce yourself."}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.uttapen.ir/v1",
  apiKey: "sk-up-…",
});

const stream = await client.chat.completions.create({
  model: "openai/gpt-5",
  messages: [{ role: "user", content: "Introduce yourself." }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
<?php
// composer require openai-php/client guzzlehttp/guzzle
$client = OpenAI::factory()
    ->withBaseUri('https://api.uttapen.ir/v1')
    ->withApiKey('sk-up-…')
    ->make();

$result = $client->chat()->create([
    'model' => 'openai/gpt-5',
    'messages' => [['role' => 'user', 'content' => 'Introduce yourself.']],
]);
echo $result->choices[0]->message->content;
package main

import (
	"context"
	"fmt"

	"github.com/openai/openai-go"
	"github.com/openai/openai-go/option"
)

func main() {
	client := openai.NewClient(
		option.WithBaseURL("https://api.uttapen.ir/v1"),
		option.WithAPIKey("sk-up-…"),
	)
	resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
		Model:    "openai/gpt-5",
		Messages: []openai.ChatCompletionMessageParamUnion{openai.UserMessage("Introduce yourself.")},
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Choices[0].Message.Content)
}

model = "google/gemini-2.5-pro"

No API key yet? Create one →

Frequently asked

Which is cheaper, GPT-5 or Gemini 2.5 Pro?
GPT-5 is the cheaper of the two: one 1,000-word request costs about 5,063 toman.
Which one has the larger context window?
Gemini 2.5 Pro, with 1,048,576 tokens.
Can I use GPT-5 and Gemini 2.5 Pro with one API key?
Yes. An uttapen key reaches every model unless you gave it an allowed-models list, and each request is charged in toman to the same wallet; only the model value changes.

More comparisons: all pairs · model rankings · full catalogue

base_url = https://api.uttapen.ir/v1