Api
محدودیتهای نرخ و سهمیهها#
دو محافظ مستقل بر هر درخواست API v2 و MCP اعمال میشود:
- یک محدودکننده هجومی (burst limiter) سیلهای کوتاه را پیش از هر کار دیتابیس متوقف میکند.
- یک سهمیه تعداد درخواستهایی را که یک کاربر میتواند در روز و در ماه انجام دهد سقفگذاری میکند.
هر دو 429 با یک هدر Retry-After برمیگردانند، اما معنای متفاوتی دارند و باید متفاوت مدیریت شوند.
محدودکننده هجومی#
| خصوصیت | مقدار |
|---|---|
| پنجره | 60 ثانیه |
| حد | 60 درخواست |
| کلید | همان اعتبارنامه یکپارچهسازی |
| ترتیب | پیش از اعتبارسنجی شعبه و سهمیه بررسی میشود |
محدودکننده پیش از آنکه شمارندههای سهمیه لمس شوند بررسی میشود، بنابراین یک سیل نمیتواند ردیفهای سهمیه را قفل کند یا مصرف را تورم دهد. عبور از آن api_burst_limit_exceeded و یک تاخیر کوتاه تلاش دوباره برمیگرداند.
سهمیه#
| خصوصیت | مقدار |
|---|---|
| دامنه | به ازای هر کاربر، مشترک میان همه اعتبارنامههایش |
| پایه روزانه | 200 درخواست |
| پایه ماهانه | 2,000 درخواست |
| بازنشانی | آغاز روز و آغاز ماه در منطقه زمانی تجارت |
سهمیه یک بار به ازای هر درخواست شارژ میشود، پس از بررسی هجومی و پس از اعتبارسنجی شعبه، و فراخوانی /api/v2/context را هم دربر میگیرد. /api/v2/health شارژ نمیشود.
ضریبهای طرح#
| طرح | ضریب | روزانه | ماهانه |
|---|---|---|---|
| Free | 1× | 200 | 2,000 |
| Growth | 3× | 600 | 6,000 |
| Scale | 10× | 2,000 | 20,000 |
| Enterprise | 50× | 10,000 | 100,000 |
یک طرح زمانمحدود است. وقتی منقضی شود، طرح مؤثر بهصورت خودکار به Free برمیگردد، بنابراین یکپارچهسازیای که بر حدود Growth تکیه کرده بود دوباره 429 دریافت میکند.
پاسخهای محدودیت نرخ#
هجومی#
{
"error": {
"code": "api_burst_limit_exceeded",
"message": "Too many API requests in a short period.",
"retry_after_seconds": 17
}
}سهمیه#
{
"error": {
"code": "api_quota_exceeded",
"message": "The API request quota has been reached.",
"scope": "user",
"period": "day",
"limit": 200,
"used": 200,
"reset_at": "2026-11-01T00:00:00+04:30",
"retry_after_seconds": 18234
}
}هر دو Retry-After را بهصورت عدد صحیح ثانیه دربر دارند. بهجای یک تاخیر ثابت از آن استفاده کنید.
پایش مصرف#
GET /api/v2/context طرح مؤثر، ضریب، منطقه زمانی و مصرف فعلی را برمیگرداند:
| فیلد | معنا |
|---|---|
quota.plan | طرح مؤثر پس از قاعدههای انقضا |
quota.multiplier | ضریب اعمالشده بر حدود پایه |
quota.user.day | مصرف، حد، باقیمانده و زمان بازنشانی امروز |
quota.user.month | مصرف، حد، باقیمانده و زمان بازنشانی این ماه |
همان عددّها در کارت یکپارچهسازیها در تنظیمات هم ظاهر میشوند.
طراحی درون حدها#
| تکنیک | اثر |
|---|---|
همگامسازی شبانه با per_page=100 | درخواستهای کمتر به ازای هر رکورد |
| استفاده از پنجرههای تاریخی | مجموعههای نتیجه کوچکتر و قابل ازسرگیری |
| کش کردن context | یک فراخوانی در ساعت بهجای هر درخواست |
| کش کردن دادههای کاتالوگ | محصولات و موجودی کمتر از فروشها تغییر میکنند |
عقبنشینی در 429 | از سوزاندن سهمیه باقیمانده جلوگیری میکند |
| یک اعتبارنامه به ازای هر سیستم | مصرف را قابل انتساب میسازد |
سهمیه به ازای درخواست شارژ میشود، نه به ازای رشته، بنابراین یک صفحه بزرگ همیشه ارزانتر از بسیاری صفحه کوچک است.
چه چیزی شمرده نمیشود#
/api/v2/health.- درخواستهایی که محدودکننده هجومی پیش از سهمیهشارژی آنها را رد میکند.
- درخواستهای ردشده برای یک خطای دامنه شعبه: اعتبارسنجی پیش از شارژ سهمیه انجام میشود و درخواست بهصورت
scope_deniedثبت میگردد. - استفاده کارمندان از رابط وب.
نکات عملیاتی#
- درخواستهای ردشده همچنان برای حسابرسی در لاگ رویداد درخواست نوشته میشوند، بدون افزایش سهمیه.
last_used_atدر احراز هویت موفق بهروز میشود، نه در هر درخواست.- یک تغییر طرح از درخواست بعدی اعمال میشود؛ هیچ استحقاق کششدهای در توکن نیست.
- اگر دو یکپارچهسازی یک مالک مشترک داشته باشند، سهمیه را شریکاند. اگر جداسازی میخواهید مالکها را تقسیم کنید.