نِت اَرز · مستندات API نرخ ارز
همهٔ مستندات
تابلوی نرخ مرجع تعاملی کلید رایگان

محدودیت‌ها و امنیت

محدودیت‌ها و امنیت API نرخ ارز: نرخ درخواست، سهمیهٔ روزانه، هدرهای X-Quota، قفل دامنه، حفاظت در برابر حدس کلید و SSRF، و چند توصیهٔ امنیتی.

base_url: https://netarz.ir/api/fx/v1 دلار امروز: ۲۷۳,۶۰۰ تومان به‌روزرسانی: 1405/06/30

محدودیت‌ها

محدودیترایگانپرووقتی رد شد
درخواست در دقیقه (هر اپ)۶۰۶۰۰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 نمایی دوباره تلاش کنید:
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 شما نرخ جعلی بفرستد.
  • هر چند ماه کلید را بچرخانید و پس از ترک همکار یا پیمانکار حتماً.