تخفیف‌های نمایش‌داده‌شده توسط خود ارائه‌دهندگان اصلی اعمال می‌شوند و بازه زمانی مشخصی ندارند. این تخفیف‌ها فقط روی مصرف (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
  • می‌توانید چند کلید برای یک حساب بسازید. همه به همان موجودی اعتبار متصل‌اند.
  • کلید لو رفته را از پنل غیرفعال کنید و کلید جدید بسازید.
  • کلید را فقط در سرور نگه دارید، نه در کد مرورگر.

شروع سریع

کلید را از پنل کلیدها بگیرید، سپس فقط 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 الزامی‌اند. از همان کلید و اعتبار استفاده می‌کند.

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

فرمت درخواست

فیلدنوعتوضیح
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);

Anthropic و 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 است.

استریم (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 دوباره تلاش کنید.

نمونه کد

همه نمونه‌ها از مدل 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