نمای کلی
نقشه API: هر endpoint، شکل یک درخواست و یک خطا، نحوه پرداخت هزینه فراخوانیها، و آنچه باید بدانید وقتی از SDK مربوط به OpenAI یا Anthropic میآیید.
Endpointها
هر endpoint زیر یک base URL قرار دارد و از طریق HTTPS ارائه میشود.
https://api.shannon-ai.com | اندپوینت | فرمت | برای چه کاری |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | یک گفتگو بفرستید، پاسخ بعدی را بگیرید. با streaming یا بدون آن. |
POST /v1/messages | Anthropic Messages | همان کار، با شکل درخواست و پاسخ SDKهای Anthropic. |
POST /v1/responses | OpenAI Responses | همان کار، با شکلهای Responses. این endpoint هیچ وضعیتی را نگه نمیدارد: گفتگو را با هر درخواست بفرستید. |
GET /v1/models | فهرست مدلهای OpenAI | مدلها را با پنجره زمینه، قیمتها و قابلیتها فهرست کنید. کلید نمیخواهد. |
POST /v1/tokenize | Shannon API | توکنهای یک متن یا یک درخواست چت را برای مدل open-weight میزبانیشده بشمارید. رایگان. |
POST /v1/messages/count_tokens | شمارش توکن Anthropic | توکنهای ورودی یک درخواست Messages را برای مدل open-weight میزبانیشده بشمارید. رایگان. |
سه endpointی که متن تولید میکنند به همان مدلها میرسند. endpointی را انتخاب کنید که کد شما از قبل فرمتش را به کار میبرد.
مبانی درخواست
| هدر | توضیحات |
|---|---|
Authorization: Bearer <key> | کلید API شما. روی هر endpoint بهجز GET /v1/models الزامی است، مگر اینکه x-api-key را بفرستید. |
x-api-key: <key> | همان کلید در هدری که SDKهای Anthropic میفرستند. روی هر endpoint خوانده میشود. |
Content-Type: application/json | روی هر POST الزامی است. بدون آن پاسخ 415 است. |
x-request-id: <your id> | اختیاری. شناسه دلخواه شما برای درخواست؛ در هدر پاسخ x-request-id برمیگردد. بدون آن، API یکی با 12 نویسه هگزادسیمال میسازد. |
- بدنه هر
POSTیک شیء JSON است، تا 32 MiB. - فیلدی که API نمیشناسد خطا ایجاد نمیکند و اثری ندارد. درخواستی که برای ارائهدهنده دیگری نوشته شده بهخاطر یک فیلد اضافه شکست نمیخورد.
- فیلد شناختهشدهای با نوع JSON نادرست، یا فیلد الزامیای که وجود ندارد، با
422پاسخ داده میشود. بدنهای که JSON معتبر نیست با400پاسخ داده میشود. modelیکی از شناسههای «مدلها و قیمتها» است. حروف بزرگ و کوچک اهمیتی ندارند.
پاسخ JSON است، یا وقتی درخواست stream را true بگذارد، جریانی از server-sent events. هر endpoint با فرمت خودش پاسخ میدهد. هر پاسخ هدر x-request-id دارد.
درخواست از چه بررسیهایی میگذرد
هر درخواست پیش از اجرای مدل با ترتیبی ثابت بررسی میشود. اولین بررسیای که شکست بخورد پاسخ میدهد، پس 401 هنوز چیزی درباره بدنه نمیگوید.
| بررسیشده، به این ترتیب | وضعیت در صورت شکست |
|---|---|
| کلید API | 401 |
| بدنه: اندازه، نوع محتوا، JSON، نوع فیلدها | 413 · 415 · 400 · 422 |
| شناسه مدل | 400 |
| محافظت در برابر هجوم درخواست: 120 درخواست در دقیقه برای هر حساب | 429 |
| موجودی: بودجه خروجی درخواست باید در آن جا شود | 429 |
شکل خطا
خطا یک شیء JSON است که errorای دارد با type و message. /v1/messages آن را همانطور که SDKهای Anthropic انتظار دارند بستهبندی میکند؛ هر مسیر دیگر شکل OpenAI را به کار میبرد.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} typeوmessageرا بخوانید.codeوparamفقط روی برخی خطاها وجود دارند: آنها را اختیاری در نظر بگیرید.paramهمیشهnullاست.- پس از شروع stream، وضعیت از قبل
200است. شکست آنگاه بهصورت یک فریم خطا داخل stream میرسد. - هر پاسخ خطا هدر
x-request-idرا دارد.
| وضعیت | نوع | زمان |
|---|---|---|
400 | invalid_request_error | بدنه JSON معتبر نیست، شناسه مدل ناشناخته است، یا مدل نوعی از ورودی را که فرستادهاید نمیپذیرد. |
401 | authentication_error | کلید وجود ندارد یا معتبر نیست. |
404 | not_found_error | مسیر وجود ندارد. |
405 | api_error | مسیر وجود دارد، متد نادرست است. |
413 | invalid_request_error | بدنه از 32 MiB بزرگتر است. |
415 | invalid_request_error | Content-Type برابر application/json نیست. |
422 | invalid_request_error | نوع JSON یک فیلد نادرست است یا یک فیلد الزامی وجود ندارد. |
429 | rate_limit_error | موجودی درخواست را پوشش نمیدهد، بیش از 120 درخواست در یک دقیقه رسیده، فراخوانیهای Shannon Coder بازه تمام شده، یا مدل مشغول است. پیام میگوید کدام. |
5xx | api_error | وضعیت 500، 502، 503 یا 504: درخواست معتبر بود و نتوانست پاسخ داده شود. دوباره بفرستید. 500 میتواند نوع server_error را داشته باشد. |
صورتحساب و موجودی
- برای هر حساب یک موجودی وجود دارد و چت و API آن را مشترک دارند: ابتدا سهمیه روزانه پلن امروز، سپس اعتبار خریداریشده. API سهمیه مخصوص خود را ندارد.
- درخواست بودجه خروجی خود را (
max_tokens، پیشفرض 4,096) رزرو میکند و سپس برای توکنهایی که واقعاً مصرف کرده، با قیمت مدل، محاسبه میشود. - هر پاسخ تعداد توکنهایش را در
usageگزارش میکند. صفحه «کلیدها و مصرف» موجودی و هزینه هر درخواست را نشان میدهد. - هر درخواست بهطور برابر پاسخ داده میشود. تنها محدودیت نرخ درخواست، محافظت در برابر هجوم درخواست است: 120 درخواست در دقیقه برای هر حساب. درخواستهایی که موازی فرستاده شوند در صف منتظر میمانند.
محدودیتها و موجودی مدلها و قیمتها کلیدها و مصرف
فیلدهایی که به مدل بستگی دارند
هر مدل همان درخواست را میپذیرد. چند فیلد فقط روی برخی مدلها اثر دارند؛ جدول میگوید کجا. صفحههای endpoint هر فیلد را فهرست میکنند.
| فیلد | توضیحات | اعمالشده توسط |
|---|---|---|
system | دستورالعملها برای مدل: در Chat Completions پیام system، در Messages system، در Responses instructions. | مدلهای open-weight میزبانیشده، shannon-1.6-*، shannon-2-*، shannon-coder-1 |
temperature | دمای نمونهبرداری. | مدلهای open-weight میزبانیشده، shannon-1.6-*، shannon-coder-1 |
top_p | نمونهبرداری هستهای (nucleus). | مدلهای open-weight میزبانیشده |
seed | یک seed ثابت برای نمونهبرداری. | مدلهای open-weight میزبانیشده |
stop | حداکثر 4 توالی توقف. | مدلهای open-weight میزبانیشده |
reasoning_effort | اینکه مدل پیش از پاسخ چقدر استدلال کند. در Responses reasoning.effort و در Messages thinking. | مدلهای open-weight میزبانیشده |
web_search | true به مدل اجازه میدهد برای این درخواست در وب جستجو کند. فیلدی از این API، روی Chat Completions و Messages. | مدلهای Shannon بهجز shannon-coder-1 |
max_tokens | بودجه خروجی. روی هر مدل مقداری را که از موجودی شما رزرو میشود تعیین میکند. | بهعنوان حد طول پاسخ: مدلهای open-weight میزبانیشده، shannon-1.6-*، shannon-coder-1 |
اگر از SDK مربوط به OpenAI میآیید
- base URL را روی
https://api.shannon-ai.com/v1و کلید را روی کلید Shannon خود بگذارید. فراخوانیهای Chat Completions و Responses آنگاه با SDK همانطور که هست کار میکنند. modelباید شناسه Shannon باشد. نام مدلِ ارائهدهنده دیگر، مانندgpt-4o، با400وunknown modelپاسخ داده میشود.- استدلال در فیلد جداگانهای میآید:
reasoning_contentدر کنارcontent، در پیام و در deltaهای stream. - stream همیشه
usageرا در آخرین chunk خود، همراهfinish_reason، دارد. - فراخوانی ابزار در stream بهصورت یک chunk با رشته کامل
argumentsمیرسد. - پاسخ یک choice دارد.
- مسیرهای API مربوط به OpenAI که در جدول بالا نیستند، مانند
/v1/embeddings، با404پاسخ داده میشوند.
اگر از SDK مربوط به Anthropic میآیید
- base URL را روی
https://api.shannon-ai.comبگذارید، بدون/v1، و کلید را روی کلید Shannon خود. SDK آن را بهصورتx-api-keyمیفرستد. modelباید شناسه Shannon باشد.max_tokensدر این API اختیاری است. مقدار پیشفرض آن 4,096 است.- پاسخ شامل بلوکهای محتوا از نوع
thinking،textوtool_useاست. بلوک اول همیشه متن نیست: بلوکها را از رویtypeانتخاب کنید. stop_reasonبرابرend_turnیاtool_useاست. stream مدل Shannon میتواند باmax_tokensهم پایان یابد.anthropic-versionوanthropic-betaپذیرفته میشوند، پس SDK بدون تغییر کار میکند. درخواست به آنها نیاز ندارد.- خطاها روی
/v1/messagesشکل Anthropic را دارند:{"type": "error", "error": {…}}.
ابزارهای کدنویسی که با این فرمتها کار میکنند به همین شکل تنظیم میشوند: base URL، کلید و یک شناسه Shannon بهعنوان مدل. ابزارهای CLI برای کدنویسی