رفتن به محتوا
نمای کلی

نمای کلی

نقشه API: هر endpoint، شکل یک درخواست و یک خطا، نحوه پرداخت هزینه فراخوانی‌ها، و آنچه باید بدانید وقتی از SDK مربوط به OpenAI یا Anthropic می‌آیید.

Endpointها

هر endpoint زیر یک base URL قرار دارد و از طریق HTTPS ارائه می‌شود.

Base URL
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 هنوز چیزی درباره بدنه نمی‌گوید.

شکل خطا

خطا یک شیء JSON است که errorای دارد با type و message. /v1/messages آن را همان‌طور که SDKهای Anthropic انتظار دارند بسته‌بندی می‌کند؛ هر مسیر دیگر شکل OpenAI را به کار می‌برد.

{
  "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

Chat Completions

اگر از 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 برای کدنویسی