محدودیتها
| محدودیت | رایگان | پرو | وقتی رد شد |
|---|---|---|---|
| درخواست در دقیقه (هر اپ) | ۶۰ | ۶۰۰ | 429 rate_limit_exceeded + Retry-After |
| سهمیهٔ روزانه (هر اپ) | ۳,۰۰۰ | ۲۰۰,۰۰۰ | 429 daily_quota_exceeded؛ صفر میشود در پایان روز به وقت تهران |
| درخواست در دقیقه (هر IP، پیش از احراز) | ۱٬۲۰۰ | 429 rate_limit_exceeded | |
| کلید اشتباه از یک IP | ۲۰ در ۱۰ دقیقه | 429 too_many_failed_attempts | |
| استریم همزمان (هر اپ) | — | ۲ | 429 too_many_streams |
| هشدار (هر اپ) | — | ۲۰ | 403 alert_limit_reached |
| نقاط تاریخچه در هر پاسخ | ۲,۰۰۰ | 400 too_many_points | |
| اپ برای هر حساب | ۱۰ | خطای پنل | |
هر درخواست (موفق یا نه، پس از احراز هویت) یک واحد از سهمیه است؛ preflightهای CORS حساب نمیشوند. هر بارگذاری و تازهسازی ویجت هم یک واحد است.
HTTP/1.1 429 Too Many Requests
Retry-After: 5
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
{ "error": { "code": "rate_limit_exceeded", "message": "محدودیت 60 درخواست در دقیقه برای این اپ. کمی صبر کنید.", "status": 429, "rpm": 60, "docs": "https://netarz.ir/docs/fx/errors#rate_limit_exceeded" } }
HTTP/1.1 429 Too Many Requests
X-Quota-Limit: 3000
X-Quota-Remaining: 0
X-Quota-Reset: 2026-09-05T20:29:59+00:00
{ "error": { "code": "daily_quota_exceeded", "message": "سهمیهٔ روزانهٔ این اپ (3000 درخواست) تمام شده است. با طرح پرو سهمیه چند ده برابر میشود.", "status": 429, "quota": 3000, "used": 3000, "plan": "free", "docs": "…" } }
الگوی درست
- کش کنید. نرخ هر ۵ دقیقه عوض میشود؛ یک کش ۱ تا ۵ دقیقهای سمت شما مصرف را دهها برابر کم میکند و کاربرانتان فرقی حس نمیکنند.
- یک درخواست بهجای چند تا.
/rates?codes=USD,EUR,AEDبهجای سه بار/rates/{code}. - برای زندهبودن، استریم. یک اتصال SSE در پرو = یک واحد سهمیه، بینهایت بهروزرسانی.
- به ۴۲۹ احترام بگذارید.
Retry-Afterرا بخوانید و با backoff نمایی دوباره تلاش کنید:
async function withRetry(fn, tries = 4) {
for (let i = 0; i < tries; i++) {
const res = await fn();
if (res.status !== 429) return res;
const wait = Number(res.headers.get("Retry-After") || 2 ** i) * 1000;
await new Promise(r => setTimeout(r, wait));
}
throw new Error("still rate limited");
}
امنیت
آنچه نِت اَرز انجام میدهد
- قفل دامنه: Origin/Referer مرورگر یا IP سرور، بهعلاوهٔ اثبات مالکیت دامنه — جزئیات.
- کلید هششده: فقط SHA-256 کلید ذخیره میشود؛ پس از ساخت، هیچکس (حتی پشتیبانی) کلید کامل را نمیبیند.
- ضد حدس کلید: جستوجوی کلید با هش ثابتزمان و مسدودسازی موقت IP بعد از ۲۰ کلید اشتباه.
- CORS محدود: هدر
Access-Control-Allow-Originفقط برای دامنههای خود اپ. - وبهوکهای امن: فقط https به آدرسهای عمومی (ضد SSRF)، امضای HMAC-SHA256 با timestamp، تلاش مجدد محدود.
- بدون کش مشترک:
Cache-Control: no-store, privateروی همهٔ پاسخها. - حداقل داده: فقط تعداد درخواستها به تفکیک روز و endpoint، آخرین IP و مبدأ نگه داشته میشود؛ بدنه یا پارامترهای درخواست ذخیره نمیشود.
- تعلیق و بازیابی: اپهای مشکوک (مثلاً درخواست از دامنههای متعدد ناهمخوان) ممکن است معلق شوند؛ دلیل در پاسخ
app_suspendedمیآید و از پنل تیکت بزنید.
آنچه شما انجام میدهید
- برای سرور، کلید در متغیر محیطی؛ برای فرانت، خیال راحت — ولی همچنان در ریپوی عمومی کامیت نکنید.
- دامنههای اضافی را حداقلی نگه دارید و از
*.example.comفقط وقتی واقعاً لازم است استفاده کنید. - IPهای مجاز را با محدودهٔ باریک تعریف کنید؛
0.0.0.0/0قفل را بیاثر میکند. - امضای وبهوک را همیشه بررسی کنید؛ بدون آن هر کسی میتواند به endpoint شما نرخ جعلی بفرستد.
- هر چند ماه کلید را بچرخانید و پس از ترک همکار یا پیمانکار حتماً.