uttapen

شروع سریع — اولین درخواست در ۵ دقیقه

ثبت‌نام با شماره موبایل، شارژ کیف پول تومانی، ساخت کلید sk-up و اولین فراخوانی مدل با SDK رسمی OpenAI در Python، Node و curl.

به‌روزرسانی: ۱۶ شهریور ۱۴۰۵

uttapen یک gateway سازگار با API رسمی OpenAI است. کدی که امروز با OpenAI کار می‌کند، با تغییر یک خط (base_url) به بیش از ۴۰۰ مدل وصل می‌شود و هزینهٔ هر درخواست از کیف پول تومانی‌ات کم می‌شود. این صفحه تو را از ثبت‌نام تا اولین پاسخ مدل می‌برد.

۱. ثبت‌نام با شماره موبایل

به صفحهٔ ورود برو و شماره موبایلت را وارد کن. یک کد یک‌بارمصرف پیامک می‌شود؛ همان کد را وارد کن. ثبت‌نام و ورود یکی است و حسابت با اولین تأیید ساخته می‌شود. بعداً می‌توانی در تنظیمات، رمز عبور هم بگذاری تا هر بار منتظر پیامک نمانی.

۲. شارژ کیف پول

از داشبورد ← کیف پول مبلغ را به تومان وارد کن و با درگاه زیبال پرداخت کن. حداقل شارژ ۵۰٬۰۰۰ تومان است. بعد از برگشت از درگاه، موجودی همان لحظه در حساب می‌نشیند و برای هر پرداخت فاکتور صادر می‌شود.

مدل‌های رایگان (شناسه با پسوند :free) بدون شارژ هم کار می‌کنند، ولی سقف روزانه و ظرفیت مشترک دارند. برای کار جدی، حداقل یک شارژ کوچک بکن تا با 402 روبه‌رو نشوی.

۳. ساخت کلید API

در داشبورد ← کلیدها دکمهٔ «کلید جدید» را بزن. یک نام بده (مثلاً local-dev) و بساز. کلید با پیشوند sk-up- فقط یک بار نمایش داده می‌شود؛ همان لحظه کپی‌اش کن و در فایل .env پروژه بگذار. اگر گمش کردی، کلید را لغو کن و یک کلید تازه بساز.

هر کلید می‌تواند سقف ماهانه (تومان)، فهرست مدل‌های مجاز، محدودیت نرخ و تاریخ انقضا داشته باشد. جزئیات در احراز هویت و کلیدها.

۴. اولین درخواست

آدرس پایه همیشه https://api.uttapen.ir/v1 است و شناسهٔ مدل به شکل provider/model نوشته می‌شود. نمونهٔ زیر با openai/gpt-5-mini است؛ هر مدل دیگری از فهرست مدل‌ها را می‌توانی جایش بگذاری.

curl https://api.uttapen.ir/v1/chat/completions \
  -H "Authorization: Bearer sk-up-…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5-mini",
    "messages": [{"role": "user", "content": "سلام! خودت را معرفی کن."}],
    "stream": true
  }'

اگر SDK نصب نیست:

pip install openai        # Python
npm install openai        # Node.js

کلید را در کد ننویس؛ از متغیر محیطی بخوان:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.uttapen.ir/v1",
    api_key=os.environ["UTTAPEN_API_KEY"],
)

resp = client.chat.completions.create(
    model="openai/gpt-5-mini",
    messages=[{"role": "user", "content": "سه مزیت Postgres را در سه خط بگو."}],
    max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

۵. پاسخ چه چیزی دارد

بدنهٔ پاسخ دقیقاً فرمت OpenAI است: id، model، choices[0].message.content، finish_reason و بلوک usage. دو چیز اضافه هم می‌بینی:

  • usage — تعداد توکن ورودی و خروجی که مدل برای همین درخواست گزارش کرده؛ مبنای شارژ همین مصرف واقعی است.
  • چند هدر با پیشوند X-Uttapen- روی پاسخ‌های غیراستریم:
X-Uttapen-Request-Id: 01a078dd-853e-7480-aa83-262d3239e6a2
X-Uttapen-Model: openai/gpt-5-mini
X-Uttapen-Cost-Toman: 6.659688
X-Uttapen-Balance-Toman: 97564.413809
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59

X-Uttapen-Request-Id را در گزارش خطا به ما بده؛ همان شناسه در لاگ و دفتر حساب ما ثبت شده است. در Python با client.chat.completions.with_raw_response.create(...) و در Node با .withResponse() به این هدرها می‌رسی.

مبلغ تومانی هر درخواست از روی مصرف واقعی که مدل گزارش می‌دهد حساب می‌شود، نه از برآورد ما. قبل از ارسال مبلغی موقتاً رزرو می‌شود و بعد از پاسخ، مبلغ نهایی کم و بقیه آزاد می‌شود. جزئیات در قیمت‌گذاری.

۶. اگر خطا گرفتی

وضعیتمعنیکار بعدی
401 invalid_api_keyکلید غلط، لغوشده یا منقضیکلید تازه بساز و .env را به‌روز کن
402 insufficient_balanceموجودی برای رزرو این درخواست کافی نیستکیف پول را شارژ کن یا max_tokens را کم کن
404 model_not_foundشناسهٔ مدل اشتباه استاز /v1/models یا صفحهٔ مدل‌ها شناسه را کپی کن
429 rate_limit_exceededبیش از سقف دقیقه‌ای کلیدRetry-After را رعایت کن

جدول کامل در خطاها و کدها.

قدم‌های بعدی