معرفی
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فرمت درخواست
| فیلد | نوع | توضیح |
|---|---|---|
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);تصمیمگیری ساختاریافته (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/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 است.
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برای مشاهده لیست کامل:
- 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 دوباره تلاش کنید. |
حساب و کلیدها (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