۱) شروع
آدرس پایه: https://ai.pycourse.ir/v1
احراز هویت: هدر Authorization: Bearer pyc_sk_live_… — کلید را در پنل (بخشِ «کلیدها») میسازی و فقط یک بار کامل میبینی.
آدرسِ پایه و نامِ مدل در مثالها از همین صفحه پر شده؛ هر مدلِ دیگری از فهرستِ پایین را هم میتوانی بگذاری. فهرستِ زندهی مدلها: GET https://ai.pycourse.ir/v1/models؛ توضیحِ هر سطح در صفحهی مدلها.
شروعِ سریع بهزودی
۱) در بخشِ «کلیدها» یک کلید بساز و کامل کپیاش کن. ۲) فراخوانیِ بالا را با همان کلید اجرا کن. ۳) تا وقتی به کلید اعتبار اختصاص ندادهای (در صفحهی «کلیدها» از کیف پولت به آن اعتبار بده) پاسخِ ۴۰۲ با insufficient_credit میگیری (نمونهاش پایین، در بخشِ خطاها). ۴) پس از اختصاصِ اعتبار، همین فراخوانی بدونِ هیچ تغییری پاسخِ واقعی میدهد. هر کلید فقط از اعتبارِ خودش خرج میکند.
پارامترها: model، messages (نقشهای system/user/assistant)، max_tokens (اگر ندهی ۱۰۲۴؛ سقفِ هر مدل را ببین)، stream، temperature، top_p، stop. پارامتر ناشناخته ۴۰۰ میدهد. مدلهای استدلالی ممکن است temperature، top_p یا stop را نپذیرند؛ در این صورت بیصدا کنار گذاشته میشوند و نامشان در هدرِ پاسخِ X-Pyc-Ignored-Params میآید (خطا نیست).
۲) مدلها و قیمتها بهزودی
قیمتگذاری بهزودی اعلام میشود. هر چه بیشتر مصرف کنی، هزینهی هر توکن کمتر میشود.
فهرستِ زندهی مدلها را با GET https://ai.pycourse.ir/v1/models میگیری.
هدرهای pyc و توکنِ استدلال
هدرهای درخواست (اختیاری): X-Pyc-Quality: max برای درخواستِ بهترین کیفیت از pyc-auto؛ X-Pyc-Max-Tier: lite|plus|pro برای سقفِ سطح (هزینهی مطمئن)؛ X-Pyc-Task: برچسب-کوتاه (حروفِ کوچک، عدد، «-» و «_»). مقدارِ نامعتبر ۴۰۰ میدهد. مدلِ صریح (مثلاً pyc-pro) هرگز عوض نمیشود.
هدرهای پاسخ: X-Pyc-Model-Used سطحِ واقعاً استفادهشده، X-Pyc-Ignored-Params پارامترهای کنارگذاشتهشده، و X-Request-Id برای پیگیری.
توکنِ استدلال: مدلهای استدلالی پیش از پاسخ «فکر میکنند»؛ این توکنها جزئی از completion_tokens (خروجی) هستند و در usage.completion_tokens_details.reasoning_tokens دیده میشوند. سقفِ max_tokens فقط به متنِ پاسخ اعمال میشود و برای استدلال حاشیهی جدا داریم؛ پس هزینهی خروجی ممکن است از طولِ متن بیشتر باشد. اگر متنِ پاسخ کاملاً خالی بماند هزینهای کسر نمیشود.
ظرفیت: اگر بودجهی روزانهی یک سطح یا سرویس تمام شود، پاسخِ ۵۰۳ با کدِ capacity_reached میگیری (رایگان). pyc-auto پیش از پر شدن، خودکار یک سطح پایینتر میآید.
۳) تخفیفِ حجمی و قاعدهی گردکردن
هرچه بیشتر مصرف کنی، ارزانتر میشود. قیمت بر پایهی مصرفِ تجمعیِ ماهانهی خودت (جدا برای هر مدل و جدا برای ورودی و خروجی) پلهپله پایین میآید؛ ماه از اولِ ماهِ میلادی به وقتِ تهران شروع میشود و صفر میشود.
جزئیاتِ پلهها و قیمتها همراهِ اعلامِ قیمتگذاری منتشر میشود.
درخواستِ ناموفق هزینه ندارد: خطای ارائهدهنده، timeout و درخواستهای ردشده (۴xx/۵xx) چیزی از اعتبارِ کلید کم نمیکنند. فقط اگر جریان (stream) را وسطِ راه قطع کنی، توکنهایی که تا آن لحظه تولید شده حساب میشود.
رزرو: پیش از هر درخواست، سقفِ هزینهاش (ورودی + max_tokens × قیمتِ خروجی) از موجودیِ قابلخرج «رزرو» میشود و پس از پاسخ، فقط هزینهی واقعی کسر و باقی آزاد میشود. پس max_tokens را بزرگتر از نیازت نگذار.
۴) Streaming (SSE)
با "stream": true پاسخ تکهتکه بهصورت text/event-stream میآید: هر خط data: {…}، تکهی آخر شاملِ usage و پایان با data: [DONE]. خطای پیش از شروعِ جریان با کدِ HTTP واقعی میآید؛ خطای وسطِ راه بهشکلِ یک event با کلیدِ error و آن درخواست رایگان است.
۵) Idempotency-Key
برای جلوگیری از کسرِ دوبار در تلاشِ دوباره (قطعِ شبکه، timeout سمتِ تو) هدر Idempotency-Key: یک-شناسه-یکتا بفرست (حروف/عدد/. _ : -، حداکثر ۱۲۰). اگر همان کلید برای همان API key دوباره بیاید، پاسخِ ۴۰۹ با request_id قبلی میگیری و هیچ هزینهی دوبارهای کم نمیشود. (پاسخِ قبلی را نگه نمیداریم؛ متنِ پرامپت و پاسخ هرگز ذخیره نمیشود.)
۶) خطاها
همهی خطاها یک قالبِ ثابت دارند: {"error": {"message": "…", "type": "…", "code": "…"}}. هدر X-Request-Id را برای پیگیری نگه دار.
نمونهی پاسخِ ۴۰۲ (اعتبارِ کافی نیست):
invalid_requestinvalid_api_keyinsufficient_creditkey_cap_exceededmodel_not_foundduplicate_requestrequest_too_largerate_limit_exceededprovider_errorservice_disabledcapacity_reachedprovider_timeout۷) امنیت
کلید را در متغیرِ محیطی نگه دار، برای هر پروژه کلیدِ جدا بساز، سقفِ ماهانه بگذار، و اگر لو رفت همان لحظه از پنل «ابطال» کن (ابطال فوری است و برگشت ندارد). ما فقط یک اثرِ یکطرفه (hash) از کلید نگه میداریم، پس گمشدنش قابلبازیابی نیست.