معرفی
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فرمت درخواست
| فیلد | نوع | توضیح |
|---|---|---|
model | string | شناسه مدل. از لیست مدلها یا صفحه مدلها |
messages | array | آرایه پیامها با role و content |
stream | boolean | پاسخ تدریجی (SSE). پیشفرض: false |
max_tokens | integer | حداکثر توکن خروجی (اختیاری) |
temperature | number | خلاقیت پاسخ، از ۰ تا ۲ (اختیاری) |
tools | array | تعریف ابزار برای function calling (اختیاری) |
response_format | object | خروجی JSON ساختاریافته، بسته به مدل (اختیاری) |
reasoning | object | کنترل استدلال. مثال: { 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/transcriptionscurl -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/apiClaude 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برای مشاهده لیست کامل:
- API:
GET /api/chat/completions - وب: صفحه مدلها · OpenAI · Anthropic · DeepSeek · Gemini
- Playground: محیط آزمایش
اگر مدلی در کاتالوگ نباشد، خطای ۴۰۰ با پیام «مدل پشتیبانی نمیشود» دریافت میکنید.
اعتبار و هزینه
Kaya AI بر پایه اعتبار (Credit) کار میکند. قبل از هر درخواست، هزینه تخمینی رزرو و پس از پاسخ، مبلغ واقعی تسویه میشود.
- موجودی را در داشبورد ببینید
- شارژ اعتبار از پنل کاربری با پرداخت ریالی
- هزینه هر درخواست در تاریخچه مصرف ثبت میشود
- تاریخچه مصرف: /dashboard/usage
اگر اعتبار کافی نباشد، پاسخ 402 با پیام «اعتبار کافی نیست» برمیگردد و درخواست به مدل ارسال نمیشود.
محدودیت نرخ (Rate Limits)
| وضعیت | محدودیت | کد HTTP |
|---|---|---|
| موجودی عادی (≥ معادل ~۱ دلار) | ۶۰ درخواست در دقیقه | 429 |
| موجودی کم | ۱۰ درخواست در دقیقه | 429 |
محدودیت per-account است (نه per-key). در صورت 429، یک دقیقه صبر کنید یا با backoff دوباره تلاش کنید.
خطاها
خطاها به این شکل برمیگردند:
{
"error": {
"message": "توضیح خطا به فارسی",
"type": "invalid_request_error"
}
}| کد | type | علت رایج |
|---|---|---|
| 400 | invalid_request_error | مدل نامعتبر، بدنه JSON ناقص، پیام خالی |
| 401 | invalid_request_error | کلید API نامعتبر یا حذفشده |
| 402 | insufficient_quota | اعتبار کافی نیست |
| 429 | rate_limit_exceeded | بیش از حد درخواست در یک دقیقه |
| 502/503 | api_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