Uttapen One endpoint for 400+ language models, billed in toman

Change base_url and nothing else. Toman wallet, API keys, real streaming, models from OpenAI, Anthropic, Google and DeepSeek.

To try it out, free models work without a top-up — up to 50 requests a day. A failed request costs nothing; only real usage leaves your wallet.

Not a developer? AI chat or Image and video studio

models in the catalogue
453
model makers
65
toman minimum top-up
100,000
The only line that changeshttps://api.uttapen.ir/v1
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)
}

The same code works with stream=True, tools and response_format with no further changes.

Models people actually use

Price per 1M tokens in toman, at today's rate.

All models →

453 models from 65 model makers, every one priced in toman.

One wallet, three ways in

An OpenAI-compatible API

Create a key, change base_url, and call any model from Python, Node, PHP or Go. Streaming, tools and JSON output work the way you already know.

from openai import OpenAI

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

Running WordPress?

The uttapen WordPress plugin brings these same models into your dashboard without a line of code: text editing, researched post drafts, a support widget that knows your site, and WooCommerce — paid from the same toman wallet.

Meet the WordPress plugin →

Images, video, music and speech on the same key

Generate images, short videos, music and speech in the studio or through the same API, from the same toman wallet, with the price of each output shown before you create it.

uttapen studio →
Image · video · music · speech

For everyone, no code at all

The same toman wallet, no key and no code — in the browser or the Android app.

AI chat

Ask, write, translate, send a photo and get an answer — in Persian or English, with the world's leading models.

Image and video studio

Describe what you want and get an image, a short video, music or a voice-over; you see the price of each piece before you make it.

uttapen for AndroidThe same chat and studio on your phone, with the same account and wallet.Get the app →

Made with the uttapen studio

Images, video, music and voice; tap any piece to see it large.

The whole showcase
Luxury Amber Perfume
Luxury Amber PerfumeProduct
0:05
Saffron Tahdig AdPhoto
Pink Urmia Lake
Pink Urmia LakePhoto
0:05
Cinematic Persian GardenCinematic
0:05
Abstract Liquid Shapes3D render
0:05
Rainy Tehran AlleyAnime
0:05
Wireless Earbuds TechProduct
Rainy Tehran Night
Rainy Tehran NightAnime
Desert Sustainable Architecture
Desert Sustainable ArchitectureArchitecture
0:06
Animated Persian MiniatureVideo
Baby Snow Leopard
Baby Snow LeopardImages
Si-o-se-pol Dusk
Si-o-se-pol DuskOil painting

Three steps to your first request

  1. 1

    Sign up with a mobile number

    An SMS code. No email, no international card.

  2. 2

    Top up the toman wallet

    A local payment gateway, with a payment receipt for every top-up.

  3. 3

    Create a key and change base_url

    The official OpenAI SDK; the rest of your code stays as it is.

You pay for the tokens you used
Every request is billed against the usage it actually reported. A failed request costs nothing, and every line is visible in your usage panel.
Prompts and answers are never stored
Only metadata: model, tokens, cost, timing. The text of an API request never reaches a log or a database.
Servers in Iran, models abroad
Panel, wallet and keys run inside Iran; model calls leave over a private route. No VPN, no foreign card.

Ready?

Sign up with a phone number, top up from 100,000 toman, key in 30 seconds.