تخفیف‌های نمایش‌داده‌شده توسط خود ارائه‌دهندگان اصلی اعمال می‌شوند و بازه زمانی مشخصی ندارند. این تخفیف‌ها فقط روی مصرف (Usage) اعمال می‌شوند و هنگام خرید اعتبار اعمال نمی‌گردند. میزان تخفیف ممکن است در هر لحظه کاهش یابد؛ حتی در زمان تخفیف، درخواست‌ها ممکن است به ارائه‌دهندهٔ بدون تخفیف بروند و قیمت کامل محاسبه شود.

مستندات توسعه‌دهندگان

API Kaya AI

API سازگار با OpenAI برای تکمیل گفتگو. یک کلید، صدها مدل. پرداخت ریالی، بدون VPN.

معرفی

Kaya AI یک API سازگار با OpenAI برای تکمیل گفتگو (Chat Completions) است. برای Claude Code و SDK آنتروپیک هم endpoint جداگانه‌ای با فرمت Messages دارید. با یک کلید API به صدها مدل زبانی دسترسی دارید، بدون VPN و بدون پرداخت ارزی.

  • Base URL: https://kayaai.ir/api
  • سازگار با SDKهای OpenAI، LangChain، LiteLLM و هر کلاینت HTTP
  • سازگار با Anthropic Messages API برای Claude Code (ANTHROPIC_BASE_URL)
  • پرداخت اعتباری به ریال، بدون اشتراک ماهانه
  • پشتیبانی از استریم، ابزار (tools)، JSON mode و پارامترهای پیشرفته
  • کاتالوگ: OpenAI · Anthropic · DeepSeek · Gemini · وبلاگ

احراز هویت

ابتدا در پنل کاربری ثبت‌نام کنید، سپس از مدیریت کلیدهای API یک کلید بسازید. کلید فقط یک‌بار نمایش داده می‌شود؛ آن را در جای امن ذخیره کنید.

هر درخواست باید یکی از هدرهای زیر را داشته باشد:

Authorization: Bearer sk-llm-your-api-key
# یا برای Anthropic Messages / Claude Code:
x-api-key: sk-llm-your-api-key
  • می‌توانید چند کلید برای یک حساب بسازید. همه به همان موجودی اعتبار متصل‌اند.
  • کلید لو رفته را از پنل غیرفعال کنید و کلید جدید بسازید.
  • کلید را فقط در سرور نگه دارید، نه در کد مرورگر.

شروع سریع

ابزارهای آماده‌ای که هر روز استفاده می‌کنید (Cursor، Cline، Roo Code، Codex CLI، n8n و Claude Code) راهنمای اتصال اختصاصی دارند: آموزش اتصال به ابزارها

کلید را از پنل کلیدها بگیرید، سپس فقط baseURL / base_url را روی https://kayaai.ir/api بگذارید. مدل‌ها را از کاتالوگ انتخاب کنید.

from openai import OpenAI

client = OpenAI(
    api_key="sk-llm-your-api-key",
    base_url="https://kayaai.ir/api",
)

response = client.chat.completions.create(
    model="deepseek/deepseek-v4-flash",
    messages=[
        {"role": "system", "content": "شما یک دستیار هوشمند هستید."},
        {"role": "user", "content": "سلام! راهنمای اتصال سریع فعال شد."},
    ],
)

print(response.choices[0].message.content)

نصب: pip install openai

نمونه پاسخ موفق:

{
  "id": "gen-...",
  "object": "chat.completion",
  "model": "deepseek/deepseek-v4-flash",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "سلام! من خوبم، ممنون که پرسیدی."
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 18,
    "total_tokens": 30
  }
}

Endpointها

لیست مدل‌ها

GET https://kayaai.ir/api/chat/completions

پاسخ به فرمت OpenAI: { object: "list", data: [...] }

تکمیل گفتگو

POST https://kayaai.ir/api/chat/completions

بدنه JSON. فیلدهای model و messages الزامی‌اند.

Anthropic Messages

POST https://kayaai.ir/api/v1/messages

فرمت Anthropic برای Claude Code و SDK آنتروپیک. فیلدهای model، messages و max_tokens الزامی‌اند. از همان کلید و اعتبار استفاده می‌کند.

OpenAI Responses (Codex)

POST https://kayaai.ir/api/v1/responses

فرمت OpenAI Responses برای Codex CLI. فیلدهای model و input الزامی‌اند. راهنمای کامل در بخش OpenAI Codex (Responses).

Embeddings

GET https://kayaai.ir/api/embeddings
POST https://kayaai.ir/api/embeddings

تولید تصویر

GET https://kayaai.ir/api/images/generations
POST https://kayaai.ir/api/images/generations

متن به گفتار

GET https://kayaai.ir/api/audio/speech
POST https://kayaai.ir/api/audio/speech

گفتار به متن

GET https://kayaai.ir/api/audio/transcriptions
POST https://kayaai.ir/api/audio/transcriptions

تصمیم‌گیری ساختاریافته

GET https://kayaai.ir/api/decisions
POST https://kayaai.ir/api/decisions

فرمت درخواست

فیلدنوعتوضیح
modelstringشناسه مدل. از لیست مدل‌ها یا صفحه مدل‌ها
messagesarrayآرایه پیام‌ها با role و content
streambooleanپاسخ تدریجی (SSE). پیش‌فرض: false
max_tokensintegerحداکثر توکن خروجی (اختیاری)
temperaturenumberخلاقیت پاسخ، از ۰ تا ۲ (اختیاری)
toolsarrayتعریف ابزار برای function calling (اختیاری)
response_formatobjectخروجی JSON ساختاریافته، بسته به مدل (اختیاری)
reasoningobjectکنترل استدلال. مثال: { effort: "none" } برای مدل‌های پشتیبانی‌شده

پارامترهای استاندارد OpenAI Chat Completions پشتیبانی می‌شوند. مدل باید در کاتالوگ Kaya AI موجود باشد.

Embeddings

تبدیل متن (یا تصویر در مدل‌های multimodal) به بردار embedding. مناسب برای RAG، جستجوی معنایی و clustering.

GET https://kayaai.ir/api/embeddings
POST https://kayaai.ir/api/embeddings

فیلدهای الزامی: model, input

curl -X POST https://kayaai.ir/api/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "openai/text-embedding-3-small",
    "input": "The quick brown fox jumps over the lazy dog"
  }'
const response = await fetch('https://kayaai.ir/api/embeddings', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-llm-your-api-key',
  },
  body: JSON.stringify({
    model: 'openai/text-embedding-3-small',
    input: 'The quick brown fox jumps over the lazy dog',
  }),
});
const data = await response.json();
console.log(data.data[0].embedding.length);

تولید تصویر

تولید تصویر از توضیحات متنی با مدل‌های image generation.

GET https://kayaai.ir/api/images/generations
POST https://kayaai.ir/api/images/generations

فیلدهای الزامی: model, prompt

curl -X POST https://kayaai.ir/api/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "openai/gpt-image-1",
    "prompt": "a red panda astronaut floating in space",
    "aspect_ratio": "1:1"
  }'
const response = await fetch('https://kayaai.ir/api/images/generations', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-llm-your-api-key',
  },
  body: JSON.stringify({
    model: 'openai/gpt-image-1',
    prompt: 'a red panda astronaut floating in space',
    aspect_ratio: '1:1',
  }),
});
const data = await response.json();

متن به گفتار (TTS)

تبدیل متن به فایل صوتی. پاسخ باینری است (mp3 یا wav). مدل‌های Gemini TTS فقط pcm می‌پذیرند و سرور آن را به wav تبدیل می‌کند.

GET https://kayaai.ir/api/audio/speech
POST https://kayaai.ir/api/audio/speech

فیلدهای الزامی: model, input, voice

curl -X POST https://kayaai.ir/api/audio/speech \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  --output output.mp3 \
  -d '{
    "model": "openai/gpt-4o-mini-tts-2025-12-15",
    "input": "Hello! This is a text-to-speech test.",
    "voice": "alloy",
    "response_format": "mp3"
  }'
const response = await fetch('https://kayaai.ir/api/audio/speech', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-llm-your-api-key',
  },
  body: JSON.stringify({
    model: 'openai/gpt-4o-mini-tts-2025-12-15',
    input: 'Hello! This is a text-to-speech test.',
    voice: 'alloy',
    response_format: 'mp3',
  }),
});
const blob = await response.blob();

گفتار به متن (STT)

تبدیل فایل صوتی به متن. ورودی به صورت JSON با input_audio.data (base64) و input_audio.format.

GET https://kayaai.ir/api/audio/transcriptions
POST https://kayaai.ir/api/audio/transcriptions
curl -X POST https://kayaai.ir/api/audio/transcriptions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "openai/whisper-1",
    "input_audio": {
      "data": "<base64-encoded-audio>",
      "format": "wav"
    }
  }'
const response = await fetch('https://kayaai.ir/api/audio/transcriptions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-llm-your-api-key',
  },
  body: JSON.stringify({
    model: 'openai/whisper-1',
    input_audio: { data: base64Audio, format: 'wav' },
  }),
});
const data = await response.json();
console.log(data.text);

تصمیم‌گیری ساختاریافته (Decisions)

مدل‌هایی مثل typesafe/jev-1.13 به جای متن آزاد، پاسخ ساختاریافته برمی‌گردانند: انتخاب از چند گزینه، امتیاز مرتب، یا یک تصمیم بولی. این خانواده از endpoint اختصاصی OpenRouter Decisions استفاده می‌کند و با Chat Completions معمول سازگار نیست.
GET روی این مسیر کل کاتالوگ مدل‌های decisions را برمی‌گرداند؛ POST هر مدلی از همین کاتالوگ را می‌پذیرد، نه فقط یک مدل خاص.

GET https://kayaai.ir/api/decisions
POST https://kayaai.ir/api/decisions

برای سازگاری با SDKهای OpenRouter/TypeSafe، مسیر /api/alpha/decisions هم پذیرفته می‌شود.

فیلدهای الزامی: model, state, questions

curl -X POST https://kayaai.ir/api/decisions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "typesafe/jev-1.13",
    "state": {
      "ticket": "My checkout page shows a blank screen after I click Pay."
    },
    "questions": {
      "is_bug": {
        "type": "noul",
        "instructions": "Is the customer reporting a software defect?",
        "criteria": {
          "true": "The customer describes broken or unexpected product behavior.",
          "false": "The customer is asking a question or requesting a feature."
        }
      },
      "team": {
        "type": "choice",
        "instructions": "Which team should own this ticket?",
        "criteria": {
          "frontend": "Rendering, layout, or browser compatibility issues.",
          "payments": "Checkout, billing, or payment processing issues."
        }
      }
    }
  }'
const response = await fetch('https://kayaai.ir/api/decisions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-llm-your-api-key',
  },
  body: JSON.stringify({
    model: 'typesafe/jev-1.13',
    state: { ticket: 'My checkout page shows a blank screen after I click Pay.' },
    questions: {
      is_bug: {
        type: 'noul',
        instructions: 'Is the customer reporting a software defect?',
        criteria: {
          true: 'The customer describes broken or unexpected product behavior.',
          false: 'The customer is asking a question or requesting a feature.',
        },
      },
      team: {
        type: 'choice',
        instructions: 'Which team should own this ticket?',
        criteria: {
          frontend: 'Rendering, layout, or browser compatibility issues.',
          payments: 'Checkout, billing, or payment processing issues.',
        },
      },
    },
  }),
});
const data = await response.json();
console.log(data.answers);

Anthropic و Claude Code

راهنمای گام‌به‌گام نصب و تنظیم: آموزش استفاده از Claude Code در ایران بدون تحریم

اگر از Claude Code یا SDK آنتروپیک استفاده می‌کنید، درخواست‌ها را به آدرس زیر بفرستید:

https://kayaai.ir/api

Claude Code خودش مسیر POST /v1/messages را صدا می‌زند. مسیر OpenAI (/chat/completions) مثل قبل کار می‌کند و تغییری نکرده است.

اتصال Claude Code

این سه متغیر را در شل خود تنظیم کنید:

# ~/.bashrc or ~/.zshrc
export ANTHROPIC_BASE_URL="https://kayaai.ir/api"
export ANTHROPIC_AUTH_TOKEN="sk-llm-your-api-key"
export ANTHROPIC_API_KEY=""

# Optional: choose a model from the catalog (Gemini, Ling, Claude, ...)
# export ANTHROPIC_DEFAULT_SONNET_MODEL="google/gemini-2.5-flash"
# export ANTHROPIC_DEFAULT_OPUS_MODEL="anthropic/claude-opus-4"
# export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek/deepseek-v4-flash"

وقتی ANTHROPIC_AUTH_TOKEN را می‌گذارید، حتماً ANTHROPIC_API_KEY را خالی بگذارید. در غیر این صورت Claude Code ممکن است به سرور اصلی آنتروپیک وصل شود.

نمونه درخواست مستقیم

curl -X POST https://kayaai.ir/api/v1/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "anthropic/claude-sonnet-4",
    "max_tokens": 256,
    "messages": [
      {"role": "user", "content": "سلام"}
    ]
  }'

نکات مهم

  • کلید را با هدر Authorization: Bearer یا x-api-key بفرستید.
  • هر مدل چت از کاتالوگ قابل استفاده است. مثال: google/gemini-2.5-flash، inclusionai/ling-2.6-flash، anthropic/claude-sonnet-4.
  • برای مدل‌های Claude می‌توانید نام کوتاه هم بفرستید (مثل claude-sonnet-4-6). برای بقیه مدل‌ها شناسه کامل را از صفحه مدل‌ها کپی کنید.
  • در Claude Code برای انتخاب مدل از متغیرهایی مثل ANTHROPIC_DEFAULT_SONNET_MODEL استفاده کنید.
  • هزینه، محدودیت نرخ و ثبت مصرف دقیقاً مثل Chat Completions است.

OpenAI Codex (Responses)

راهنمای گام‌به‌گام نصب و تنظیم: راه‌اندازی OpenAI Codex CLI در ایران

اگر از OpenAI Codex CLI استفاده می‌کنید، می‌توانید آن را با همین کلید و اعتبار به Kaya AI وصل کنید. Codex با پروتکل Responses (POST /v1/responses) کار می‌کند که ما آن را با همین مسیر پیاده کرده‌ایم.

اتصال Codex CLI

این سه متغیر را در شل خود تنظیم کنید:

# ~/.bashrc or ~/.zshrc
export OPENAI_BASE_URL="https://kayaai.ir/api/v1"
export OPENAI_API_KEY="sk-llm-your-api-key"

# Codex uses the Responses API by default when OPENAI_BASE_URL is set.
# OPTIONAL: force the wire protocol in case you point at a plain chat URL:
# export OPENAI_WIRE_API="responses"

# Optional: pick a model from the catalog (defaults to a capable chat model)
# export OPENAI_MODEL="deepseek/deepseek-v4-flash"

وقتی OPENAI_BASE_URL مشخص شود، Codex به‌صورت خودکار از پروتکل Responses استفاده می‌کند. در صورت نیاز با OPENAI_WIRE_API="responses" آن را صریح کنید.

نمونه درخواست مستقیم

فیلد input می‌تواند رشته یا آرایه‌ای از آیتم‌های پیام باشد (فرمت استاندارد Responses):

curl -X POST https://kayaai.ir/api/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "deepseek/deepseek-v4-flash",
    "input": "سلام! فقط بنویس: تست موفق",
    "max_output_tokens": 256
  }'

آدرس کامل endpoint: https://kayaai.ir/api/v1/responses

نکات مهم

  • کلید را با هدر Authorization: Bearer بفرستید.
  • اعتبار، محدودیت نرخ و ثبت مصرف دقیقاً مثل Chat Completions و Messages است (پیش‌رزرو و تسویه بر اساس هزینه OpenRouter).
  • ویژگی‌های stateful مثل previous_response_id توسط OpenRouter پشتیبانی نمی‌شود؛ هر درخواست باید مستقل باشد.
  • برای انتخاب مدل از OPENAI_MODEL یا متغیر کدکس استفاده کنید؛ مدل باید در کاتالوگ باشد.

استریم (Streaming)

برای دریافت پاسخ به‌صورت تدریجی، stream: true بفرستید. پاسخ به فرمت Server-Sent Events (SSE) است.

curl -X POST https://kayaai.ir/api/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "deepseek/deepseek-v4-flash",
    "messages": [
      {"role": "user", "content": "سلام، چطوری؟"}
    ],
    "stream": true
  }'

هر خط با data: شروع می‌شود. پایان جریان:

data: [DONE]

نمونه خواندن استریم در Node.js:

const response = await fetch('https://kayaai.ir/api/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-llm-your-api-key',
  },
  body: JSON.stringify({
    model: 'deepseek/deepseek-v4-flash',
    messages: [{ role: 'user', content: 'یک داستان کوتاه بنویس' }],
    stream: true,
  }),
});

const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  buffer += decoder.decode(value, { stream: true });
  const lines = buffer.split('\n');
  buffer = lines.pop() || '';
  for (const line of lines) {
    if (!line.startsWith('data: ')) continue;
    const payload = line.slice(6).trim();
    if (payload === '[DONE]') break;
    const chunk = JSON.parse(payload);
    const delta = chunk.choices?.[0]?.delta?.content;
    if (delta) process.stdout.write(delta);
  }
}

برای دریافت usage در استریم، مانند OpenAI مقدار stream_options: { include_usage: true } را در درخواست بفرستید.

مدل‌ها

نمونه‌هایی از شناسه مدل:

deepseek/deepseek-v4-flash
openai/gpt-4o-mini
google/gemini-2.5-flash
minimax/minimax-m2.5

برای مشاهده لیست کامل:

اگر مدلی در کاتالوگ نباشد، خطای ۴۰۰ با پیام «مدل پشتیبانی نمی‌شود» دریافت می‌کنید.

اعتبار و هزینه

Kaya AI بر پایه اعتبار (Credit) کار می‌کند. قبل از هر درخواست، هزینه تخمینی رزرو و پس از پاسخ، مبلغ واقعی تسویه می‌شود.

اگر اعتبار کافی نباشد، پاسخ 402 با پیام «اعتبار کافی نیست» برمی‌گردد و درخواست به مدل ارسال نمی‌شود.

محدودیت نرخ (Rate Limits)

وضعیتمحدودیتکد HTTP
موجودی عادی (≥ معادل ~۱ دلار)۶۰ درخواست در دقیقه429
موجودی کم۱۰ درخواست در دقیقه429

محدودیت per-account است (نه per-key). در صورت 429، یک دقیقه صبر کنید یا با backoff دوباره تلاش کنید.

خطاها

خطاها به این شکل برمی‌گردند:

{
  "error": {
    "message": "توضیح خطا به فارسی",
    "type": "invalid_request_error"
  }
}
کدtypeعلت رایج
400invalid_request_errorمدل نامعتبر، بدنه JSON ناقص، پیام خالی
401invalid_request_errorکلید API نامعتبر یا حذف‌شده
402insufficient_quotaاعتبار کافی نیست
429rate_limit_exceededبیش از حد درخواست در یک دقیقه
502/503api_error / server_errorخطای موقت سرویس. با backoff دوباره تلاش کنید.

حساب و کلیدها (Account API)

با همان کلید API می‌توانید اطلاعات حساب، مصرف مدل‌ها و کلیدهای خود را به‌صورت برنامه‌نویسی‌شده مدیریت کنید. آدرس پایه:

https://kayaai.ir/api/account

احراز هویت با همان هدر Authorization: Bearer sk-llm-... انجام می‌شود (هدر x-api-key هم پذیرفته می‌شود). این سرویس فقط با کلید API کار می‌کند؛ نشست داشبورد پذیرفته نمی‌شود.

Endpointها

متد و مسیرتوضیحدسترسی
GET /api/accountاطلاعات حساب (نام، ایمیل، موبایل و وضعیت تأیید)، موجودی اعتبار و وضعیت کلید جاریهمه کلیدها
GET /api/account/usageخلاصه مصرف (کل درخواست‌ها، توکن‌ها، اعتبار مصرف‌شده) + تفکیک به‌ازای هر مدل + تاریخچه صفحه‌بندی‌شدههمه کلیدها
GET /api/account/keysفهرست کلیدهای حساب (فقط بخش ماسک‌شده؛ مقدار کامل کلید هرگز برگردانده نمی‌شود)کلید مدیریتی
GET /api/account/keys/{id}وضعیت یک کلید مشخص؛ خواندن کلید جاری با هر کلیدی مجاز استکلید جاری یا کلید مدیریتی
PATCH /api/account/keys/{id}ویرایش سقف مصرف (creditLimit)، انقضا (expiresAt) و فعال/غیرفعال (isActive)کلید مدیریتی
POST /api/account/keys/{id}/reset-quotaبازنشانی مصرف کلید در چرخه جاری (سقف تغییر نمی‌کند؛ اعتبار، تراکنش‌ها و تاریخچه دست‌نخورده می‌مانند)کلید مدیریتی

دسترسی «کلید مدیریتی»

به‌صورت پیش‌فرض هیچ کلیدی اجازه مدیریت کلیدها را ندارد و می‌تواند فقط اطلاعات حساب، مصرف و وضعیت خودش را بخواند. برای اجازه ویرایش، در صفحه کلیدهای API گزینه «اجازه مدیریت کلیدها از طریق API» را برای یک کلید روشن کنید.

  • کلید بدون این دسترسی به Endpointهای مدیریتی خطای 403 permission_error می‌گیرد.
  • دسترسی مدیریتی فقط از داشبورد قابل تغییر است؛ از طریق API نه قابل فعال‌شدن است و نه قابل واگذاری — پس یک کلید لو‌رفته نمی‌تواند سقف خودش را بردارد، انقضا را تمدید کند یا کلیدهای دیگر را غیرفعال کند.
  • هر کلید فقط به کلیدهای همان حساب دسترسی دارد؛ درخواست برای شناسه سایر حساب‌ها با 404 رد می‌شود.

نمونه: اطلاعات حساب

curl -s https://kayaai.ir/api/account \
  -H "Authorization: Bearer sk-llm-your-api-key"
{
  "account": {
    "id": "cm...",
    "name": "نام شما",
    "email": null,
    "phone": "0912...",
    "phoneVerified": true,
    "createdAt": "2026-01-01T00:00:00.000Z"
  },
  "credits": { "balance": 1200.5, "totalUsed": 42.25, "totalPurchased": 1500 },
  "key": {
    "id": "cm...",
    "name": "کلید تولیدی",
    "maskedKey": "sk-llm-1a2b...9f0e",
    "isActive": true,
    "isExpired": false,
    "canManageKeys": false,
    "expiresAt": null,
    "creditLimit": null,
    "limitUsed": 0,
    "creditLimitRemaining": null
  }
}
const res = await fetch('https://kayaai.ir/api/account', {
  headers: { Authorization: 'Bearer sk-llm-your-api-key' },
});
const { account, credits, key } = await res.json();

console.log(account.name, account.phone);
console.log('موجودی:', credits.balance);

نمونه: مصرف مدل‌ها

فیلترهای اختیاری: model (شناسه دقیق مدل)، from و to (بازه ISO-8601)، limit (۱ تا ۲۰۰، پیش‌فرض ۵۰) و offset.

curl -s "https://kayaai.ir/api/account/usage?model=deepseek/deepseek-v4-flash&limit=50&offset=0" \
  -H "Authorization: Bearer sk-llm-your-api-key"
{
  "filters": { "model": "deepseek/deepseek-v4-flash", "from": null, "to": null },
  "summary": {
    "totalRequests": 128,
    "successfulRequests": 126,
    "failedRequests": 2,
    "successRate": 98.44,
    "totalInputTokens": 152340,
    "totalOutputTokens": 98400,
    "totalCredits": 87.31,
    "byModel": [
      { "model": "deepseek/deepseek-v4-flash", "provider": "deepseek",
        "requests": 128, "inputTokens": 152340, "outputTokens": 98400, "credits": 87.31 }
    ]
  },
  "history": {
    "items": [
      { "id": "cm...", "model": "deepseek/deepseek-v4-flash", "provider": "deepseek",
        "requestType": "chat", "inputTokens": 540, "outputTokens": 320,
        "credits": 0.31, "status": "success", "createdAt": "2026-10-16T09:30:00.000Z" }
    ],
    "total": 128, "limit": 50, "offset": 0, "hasMore": true
  }
}
const res = await fetch(
  'https://kayaai.ir/api/account/usage?limit=20',
  { headers: { Authorization: 'Bearer sk-llm-your-api-key' } },
);
const { summary, history } = await res.json();

console.log(summary.totalRequests, summary.totalCredits);
summary.byModel.forEach((m) =>
  console.log(m.model, m.requests, m.credits)
);

نمونه: مدیریت کلیدها

ویرایش کلید با PATCH: هر فیلد اختیاری است، اما حداقل یکی باید ارسال شود. برای نامحدود کردن سقف، مقدار null بفرستید؛ برای انقضای نامحدود هم null.

curl -X PATCH https://kayaai.ir/api/account/keys/KEY_ID \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-manager-key" \
  -d '{
    "creditLimit": 500,
    "expiresAt": "2027-01-01T00:00:00.000Z",
    "isActive": true
  }'
curl -s https://kayaai.ir/api/account/keys \
  -H "Authorization: Bearer sk-llm-your-manager-key"
curl -X POST https://kayaai.ir/api/account/keys/KEY_ID/reset-quota \
  -H "Authorization: Bearer sk-llm-your-manager-key"

امنیت و محدودیت نرخ

  • پاسخ‌ها همیشه Cache-Control: no-store دارند و مقدار کامل کلیدها هرگز برگردانده نمی‌شود (فقط maskedKey). کلید کامل تنها یک‌بار، هنگام ساخت کلید در داشبورد، نمایش داده می‌شود.
  • محدودیت نرخ per-account: خواندن ۱۲۰ درخواست در دقیقه، تغییرات ۳۰ درخواست در دقیقه. پاسخ ۴۲۹ با هدر Retry-After
  • کلیدهای غیرفعال، منقضی یا حساب غیرفعال با 401 رد می‌شوند — دقیقاً مثل سایر Endpointها.
  • خطاها با ساختار {"error": {"message", "type"}} برمی‌گردند: 401 authentication_error، 403 permission_error، 400 invalid_request_error، 404 not_found_error و 429 rate_limit_error.

نمونه کد

همه نمونه‌ها از مدل deepseek/deepseek-v4-flash استفاده می‌کنند. برای شروع سریع‌تر بخش شروع سریع را ببینید.

curl -X POST https://kayaai.ir/api/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-llm-your-api-key" \
  -d '{
    "model": "deepseek/deepseek-v4-flash",
    "messages": [
      {"role": "user", "content": "سلام، چطوری؟"}
    ]
  }'

مدل‌های استدلالی (Reasoning)

برخی مدل‌ها (مثل MiniMax M2/M2.5) قبل از پاسخ نهایی، توکن‌های استدلال تولید می‌کنند. در پاسخ ممکن است فیلدهای reasoning و reasoning_details بیاید.

  • پاسخ کاربر در choices[0].message.content است، نه در reasoning
  • اگر max_tokens کم باشد، ممکن است همه توکن‌ها صرف استدلال شود و content برابر null باشد
  • برای مدل‌های پشتیبانی‌شده می‌توانید استدلال را کم کنید: { "reasoning": { "effort": "none" } }
  • برخی مدل‌ها استدلال اجباری دارند. در آن صورت effort: "none" خطا می‌دهد؛ max_tokens را بیشتر بگذارید

بهترین روش‌ها

  • کلید API را فقط در سرور نگه دارید، هرگز در frontend عمومی
  • برای پاسخ‌های طولانی از stream: true استفاده کنید
  • روی 429 و 5xx با exponential backoff retry کنید
  • مدل مناسب را از نظر سرعت/هزینه در صفحه مدل‌ها انتخاب کنید؛ مثلاً OpenAI، Anthropic، DeepSeek
  • راهنماهای کاربردی در وبلاگ
  • مصرف را در تاریخچه استفاده پیگیری کنید
  • برای production، موجودی کافی نگه دارید تا محدودیت ۱۰ req/min فعال نشود

سوالات متداول

آیا با OpenAI SDK کار می‌کند؟

بله. baseURL را روی https://kayaai.ir/api و API key را روی کلید Kaya AI بگذارید.

آیا Claude Code پشتیبانی می‌شود؟

بله. بخش «Anthropic و Claude Code» را ببینید. خلاصه: ANTHROPIC_BASE_URL را روی https://kayaai.ir/api بگذارید و کلید Kaya را در ANTHROPIC_AUTH_TOKEN قرار دهید.

آیا LangChain / LiteLLM پشتیبانی می‌شود؟

بله. هر ابزاری که OpenAI-compatible base URL بپذیرد با Kaya AI کار می‌کند.

چند کلید API می‌توانم بسازم؟

چند کلید برای environments مختلف (dev/staging/prod). همه به یک موجودی اعتبار متصل‌اند.

آیا session/cookie هم کار می‌کند؟

Playground از session پنل استفاده می‌کند. برای integration خارجی حتماً Bearer API key بفرستید.

پشتیبانی کجاست؟

از طریق صفحه تماس یا support@kayaai.ir