زرنرخ
پنل مدیریت دسترسی‌ها
زرنرخ
کلیدهای دسترسی
💰 قیمت‌ها
لاگ دسترسی
🧭 مسیرها
کاربران ادمین
🛰 API ورودی
🔔 تلگرام
🌐 روتینگ IP
🧮 مپینگ قیمت
تنظیمات
📖 راهنما

کلیدهای دسترسی کلاینت‌ها

نام کلاینتکلیدوضعیتمحدودیت (در دقیقه) انقضاIP مجازدرخواست‌هاآخرین استفاده

قیمت‌هایی که همین الان از منبع (mazanehamrah) گرفته می‌شوند. واحد: تومان. مقادیر هر ۳ ثانیه تازه می‌شوند.

قیمتِ خروجی که به کلاینت‌ها و سایت داده می‌شود. برای هر قلم می‌توانید اصلاح درصدی یا ثابت (تومان) روی خرید و فروش بگذارید (مقدار منفی = کاهش). قلم‌های بدون اصلاح، عیناً برابر مبدا خواهند بود.

لاگ دسترسی

زمانکلاینتIPمسیروضعیتنوعمرورگر/کلاینت

کاربران ادمین

نام کاربریساخته‌شدهآخرین ورود

تغییر رمز عبور

API ورودی (منبع قیمت)

—

این تنظیماتِ منبعِ بالادست است که سرویس از آن قیمت می‌گیرد. تغییرات بلافاصله (بدون ری‌استارت) اعمال می‌شوند.

وضعیت زندهٔ منبع

وضعیت آخرین poll—
خطاهای پیاپی—
backoff فعلی—
آخرین دریافت موفق—
آخرین تلاش—
آخرین خطا—
دادهٔ کهنه؟—
زمان اسنپ‌شات—

منبع دوم — زربها

—

زربها به هر حساب فقط یک درخواست موفق در هر ~۳۰ ثانیه می‌دهد. چون سایت zarnerkh.ir خودش با همان حساب از زربها می‌خواند، حالت پیش‌فرض «از فید سایت» است (بدون تداخل). حالت «مستقیم» فقط با حساب جداگانه‌ی زربها استفاده شود. داده‌ی زربها از GET /v1/zarbaha در دسترس است و در صورت فعال بودن گزینه‌ی پایین، کلیدهای بدون معادل در خروجی قدیمی (مثل Ons و Yuan) از آن پر می‌شوند.

وضعیت زندهٔ زربها

وضعیت—
حالت—
خطاهای پیاپی—
backoff فعلی—
آخرین دادهٔ معتبر—
آخرین تلاش—
آخرین خطا—
دادهٔ کهنه؟—
تعداد کلیدها—
نمونه—

مسیرهای عمومی API

هر مسیر را می‌توانید موقتاً غیرفعال کنید — درخواست‌ها با کد ۴۰۳ رد می‌شوند و تغییر بلافاصله (بدون ری‌استارت) اعمال می‌شود. آمار از لاگ دسترسی ۲۴ ساعت اخیر است. مسیر health قابل غیرفعال شدن نیست چون مانیتورینگ به آن وابسته است.

مسیر شرح کلید درخواست ۲۴س خطا ۲۴س آخرین استفاده فعال

اعلان تلگرام

—

وقتی دادهٔ منبع کهنه/قطع شود، سرویس به تلگرام شما پیام می‌دهد؛ برگشتنش را هم اعلام می‌کند و تا وقتی مشکل باقی است دوره‌ای یادآوری می‌کند.

وضعیت اعلان‌ها

پیکربندی شده؟—
تعداد پیام‌های ارسالی—
آخرین ارسال—
آخرین پیام—
آخرین خطا—

راهنما: در تلگرام بات جدید با @BotFather بسازید (/newbot)، توکن را اینجا بگذارید، به بات خودتان /start بدهید و Chat ID عددی‌تان را وارد کنید. برای گروه، بات را عضو گروه کنید و Chat ID گروه (منفی) را بگذارید.

روتینگ IP (سطح سرور)

مقصدهایی که باید به‌جای مسیر پیش‌فرض، از گیت‌وی داخلی مشخصی عبور کنند (مثل رنج تلگرام یا DNS کلادفلر). بعد از ذخیره، روت‌ها ظرف چند ثانیه روی کرنل اعمال و در ری‌بوت هم ماندگار می‌شوند. مسیر پیش‌فرض سرور هرگز دست نمی‌خورد.

افزودن سریع:
نام مقصد (IP یا CIDR) گیت‌وی (via) وضعیت فعال

مپینگ قیمت

در حال بارگذاری…

راهنمای کامل استفاده

⬇ دانلود Markdown ⬇ دانلود PDF

این سرویس، قیمت لحظه‌ای طلا، سکه و ارز را از منبع اصلی می‌گیرد، کلید منبع را سمت سرور مخفی نگه می‌دارد، تغییرِ قیمت را محاسبه می‌کند و خروجی تمیز و گروه‌بندی‌شده را از دو راه در اختیار کلاینت‌های شما می‌گذارد: REST (برای گرفتن اسنپ‌شات) و WebSocket (برای دریافت زندهٔ تغییرات). هر تعداد کلاینت هم وصل شوند، فشار روی منبع ثابت می‌ماند.

آدرس API عمومی: https://api.zarnerkh.ir
📌 معماری و مفهوم کلی

سرور با فاصله‌ای که در تب «API ورودی» تنظیم می‌شود (اکنون هر ۵ ثانیه) قیمت‌ها را از منبع اصلی (mazanehamrah) می‌خواند و در حافظه کش می‌کند. یک منبع دوم به نام «زربها» هم دارد که از فید سایت zarnerkh.ir تغذیه می‌شود (بخش «منبع دوم — زربها» در همین راهنما). کلاینت‌های شما به‌جای تماس مستقیم با منابع، به این سرویس وصل می‌شوند و با یک کلید دسترسی (که در همین پنل می‌سازید) داده می‌گیرند. مزایا:

  • کلیدِ منبعِ اصلی هرگز فاش نمی‌شود.
  • محدودیت نرخِ منبع رعایت می‌شود (هرچند کلاینت وصل شوند، فشار ثابت است).
  • برای هر کلاینت کلید جدا، با محدودیت و انقضای مستقل، و لاگ کامل.
[mazanehamrah] ──poll (تنظیم از پنل)──▶ [کش + محاسبهٔ change] ──┬─▶ REST  /v1/prices , /legacy/prices
   (کلید مخفی)                                                  ├─▶ WS    /ws , /legacy-ws
[زربها] ──فید WS سایت zarnerkh.ir──▶ [کش زربها] ────────────────┴─▶ REST  /v1/zarbaha  (+ تکمیل Ons/Yuan در legacy)
🚀 شروع سریع (۳ گام)
  1. به تب «کلیدهای دسترسی» بروید و روی «+ کلید جدید» بزنید؛ یک نام برای کلاینت بگذارید و کلید ساخته می‌شود (با zk_ شروع می‌شود).
  2. کلید را کپی کنید (روی خودِ کلید در جدول کلیک کنید).
  3. در برنامهٔ کلاینت، درخواست بزنید و کلید را در هدر X-API-KEY بفرستید:
curl -H "X-API-KEY: zk_YOUR_KEY" \
  https://api.zarnerkh.ir/v1/prices
🔑 مدیریت کلیدهای دسترسی

هر کلید برای یک کلاینت (سایت، اپ، ربات…) ساخته می‌شود و این تنظیمات را دارد:

  • نام کلاینت: فقط برای شناسایی خودتان.
  • وضعیت (فعال/غیرفعال): با یک کلیک می‌توانید کلید را موقتاً ببندید بدون حذف.
  • محدودیت در دقیقه: سقف تعداد درخواست هر دقیقه برای آن کلید (مثلاً ۱۲۰). بیشتر از این → خطای ۴۲۹.
  • انقضا: با تقویم شمسی یک تاریخ انتخاب کنید؛ بعد از آن کلید خودکار بی‌اثر می‌شود. خالی = بدون انقضا.
  • IP مجاز: اگر پر کنید، فقط از همان IPها کلید کار می‌کند (چند IP را با کاما جدا کنید). خالی = همه‌جا.

حذف کلید فوری و برگشت‌ناپذیر است؛ برای توقف موقت، بهتر است «غیرفعال» کنید.

🌐 REST API — گرفتن قیمت‌ها

روی همهٔ درخواست‌ها (به‌جز health) هدر X-API-KEY لازم است (یا پارامتر ?api_key=). واحد قیمت‌ها تومان است. CORS باز است (از مرورگر هم قابل استفاده).

مسیرتوضیح
GET /v1/healthسلامت سرویس (بدون کلید). خروجی: {ok, stale, uptime_s}
GET /v1/pricesهمهٔ قیمت‌ها، گروه‌بندی‌شده
GET /v1/prices/:groupفقط یک گروه: arz (ارز)، sekke (سکه)، abshodeh (آبشده)، parsian، noghre (نقره)
GET /v1/history?metric=&range=تاریخچهٔ یک متریک؛ range = 1d / 1w / 1m
GET /v1/history/metricsفهرست متریک‌های قابل استعلام تاریخچه
GET /v1/zarbahaقیمت‌های منبع دوم «زربها» — خروجی مسطح با High/Low روزانه و روند

نمونهٔ خروجی هر آیتم قیمت:

{
  "name": "دلار آمریکا آبی نقد",
  "group": "arz",
  "buy": 176500,          // قیمت خرید
  "sell": 174000,         // قیمت فروش
  "base": 175500,         // میانگین/مبنا
  "change": 500,          // تغییر نسبت به قبل
  "change_percent": 0.28,
  "dir": "up",            // up | down | same
  "updated_at": "2026-07-03T21:41:24+03:30"
}

نمونهٔ استفاده در جاوااسکریپت:

const r = await fetch('https://api.zarnerkh.ir/v1/prices/arz', {
  headers: { 'X-API-KEY': 'zk_YOUR_KEY' }
});
const data = await r.json();
console.log(data.group.items);
🔌 WebSocket — دریافت زنده

برای به‌روزرسانی لحظه‌ای (بدون نیاز به درخواست مکرر)، به WebSocket وصل شوید. کلید در query می‌آید. اول یک پیام snapshot (کل داده) می‌گیرید، سپس فقط updateهای تغییرکرده.

const ws = new WebSocket('wss://api.zarnerkh.ir/ws?api_key=zk_YOUR_KEY');
ws.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  if (msg.type === 'snapshot') { /* داده اولیه */ }
  if (msg.type === 'update')   { /* تغییرات زنده */ }
};
🔄 سازگاری با سایت قدیمی (Legacy)

برای سایت‌هایی که با اسکیمای قدیمی کار می‌کنند (مثل zarnerkh.ir) این دو مسیر خروجیِ مسطحِ سازگار می‌دهند:

  • GET /legacy/prices — اسنپ‌شات مسطح (کلیدهایی مثل Geram18، Mazane، Dollar…) با هدر X-API-KEY.
  • WS /legacy-ws — هَندشیک {type:"auth", username:"client", password:"<کلید>"}، سپس پاسخ {auth:"ok"} و پیام‌های {status, data, trends}.

در پنل سایت زرنرخ، این همان منبعِ «API جدید» است که با کاربر client و رمزِ برابرِ کلید API وصل می‌شود.

کلیدهایی که در منبع اصلی معادل ندارند (مثل Ons و Yuan) در صورت فعال بودن منبع دوم «زربها» از آن تکمیل می‌شوند (قابل خاموش‌کردن با تیک «تکمیل کلیدهای خالی» در تب «API ورودی»). تاریخچهٔ این کلیدها هم از همان لحظه در /v1/history ثبت می‌شود.

🥇 منبع دوم — زربها

در تب «API ورودی»، زیر کارت منبع اصلی، کارت «منبع دوم — زربها» هست: قیمت‌های زربها (کلیدهای مسطح با High/Low روزانه از ۹ صبح تهران و روند up/down) که حدوداً هر ۳۵ ثانیه تازه می‌شوند و از مسیر GET /v1/zarbaha (با کلید) در دسترس کلاینت‌ها هستند.

دو حالت دریافت:

  • از فید سایت (پیش‌فرض): اتصال WS به wss://zarnerkh.ir/ws/zarbaha — سایت zarnerkh.ir خودش با حساب زربها poll می‌کند و این سرویس فقط مشترکِ همان فید است. بدون مصرف سهمیهٔ اضافه.
  • مستقیم از API زربها: فقط وقتی حساب جداگانه دارید. زربها به هر حساب فقط یک درخواست موفق در هر ~۳۰ ثانیه می‌دهد؛ اگر دو poller با یک حساب بزنند، خطای «درخواست زودتر از تایمر ارسال شده» می‌گیرند. دکمهٔ «تست» در این حالت هم یک سهمیهٔ ~۳۰ ثانیه‌ای مصرف می‌کند.

تاریخچهٔ معماری (شهریور ۱۴۰۵): سرور پایتون قدیمی (gold-updater روی پورت 8443) بازنشسته شد؛ خواندن از زربها به داخل خود سایت zarnerkh.ir منتقل شد و آدرس قدیمی wss://price.zarnerkh.ir:8443 برای کلاینت‌های قدیمی (zarbord.ir، talayeroya و…) به‌صورت پروکسی nginx به فید جدید سایت زنده نگه داشته شده است. گواهی آن با certbot تمدید خودکار می‌شود. برای کلاینت‌های جدید، همان GET /v1/zarbaha یا فید سایت توصیه می‌شود.

curl -H "X-API-KEY: zk_YOUR_KEY" https://api.zarnerkh.ir/v1/zarbaha
// → { success, source:"zarbaha", mode, updated_at, stale, unit:"toman",
//     data:{ Geram18, Ons, Dollar, …, Geram18_High24h, Geram18_Low24h, Date, Time },
//     trends:{ Geram18:{prev,trend}, … } }   — غیرفعال/بدون داده → 503
📁 لاگ دسترسی

در تب «لاگ دسترسی» هر درخواست (REST یا WS) ثبت می‌شود: زمان، نام کلاینت، IP، مسیر، وضعیت (موفق/ردشده) و مرورگر/کلاینت. می‌توانید بر اساس کلاینت و وضعیت فیلتر کنید. برای عیب‌یابی (مثلاً چرا کلیدی رد می‌شود) بسیار مفید است.

👥 کاربران ادمین و رمز عبور
  • در تب «کاربران ادمین» می‌توانید برای همکاران، حسابِ ورود به پنل بسازید یا حذف کنید.
  • در تب «تنظیمات» رمز عبور خودتان را عوض کنید (حداقل ۸ کاراکتر). رمزها هش‌شده ذخیره می‌شوند.
🛡️ امنیت و عیب‌یابی
  • کلید را محرمانه نگه دارید. در کدِ سمت‌سرور بگذارید، نه جایی که کاربر ببیند (مگر کلیدِ مخصوصِ نمایشِ عمومی با محدودیت مناسب).
  • اگر کلیدی لو رفت، همان را غیرفعال/حذف و کلید جدید بسازید.
خطامعنی
۴۰۱کلید ارسال نشده یا نامعتبر است.
۴۰۳کلید غیرفعال/منقضی است یا IP مجاز نیست.
۴۲۹از محدودیتِ درخواست در دقیقه رد شده‌اید؛ کمی صبر کنید یا محدودیت کلید را بالا ببرید.