| نام کلاینت | کلید | وضعیت | محدودیت (در دقیقه) | انقضا | IP مجاز | درخواستها | آخرین استفاده |
|---|
قیمتهایی که همین الان از منبع (mazanehamrah) گرفته میشوند. واحد: تومان. مقادیر هر ۳ ثانیه تازه میشوند.
قیمتِ خروجی که به کلاینتها و سایت داده میشود. برای هر قلم میتوانید اصلاح درصدی یا ثابت (تومان) روی خرید و فروش بگذارید (مقدار منفی = کاهش). قلمهای بدون اصلاح، عیناً برابر مبدا خواهند بود.
| زمان | کلاینت | IP | مسیر | وضعیت | نوع | مرورگر/کلاینت |
|---|
| نام کاربری | ساختهشده | آخرین ورود |
|---|
این تنظیماتِ منبعِ بالادست است که سرویس از آن قیمت میگیرد. تغییرات بلافاصله (بدون ریاستارت) اعمال میشوند.
زربها به هر حساب فقط یک درخواست موفق در هر ~۳۰ ثانیه میدهد. چون سایت zarnerkh.ir خودش با همان حساب از زربها میخواند،
حالت پیشفرض «از فید سایت» است (بدون تداخل). حالت «مستقیم» فقط با حساب جداگانهی زربها استفاده شود.
دادهی زربها از GET /v1/zarbaha در دسترس است و در صورت فعال بودن گزینهی پایین، کلیدهای بدون معادل در خروجی قدیمی
(مثل Ons و Yuan) از آن پر میشوند.
هر مسیر را میتوانید موقتاً غیرفعال کنید — درخواستها با کد ۴۰۳ رد میشوند و تغییر بلافاصله (بدون ریاستارت) اعمال میشود. آمار از لاگ دسترسی ۲۴ ساعت اخیر است. مسیر health قابل غیرفعال شدن نیست چون مانیتورینگ به آن وابسته است.
| مسیر | شرح | کلید | درخواست ۲۴س | خطا ۲۴س | آخرین استفاده | فعال |
|---|
وقتی دادهٔ منبع کهنه/قطع شود، سرویس به تلگرام شما پیام میدهد؛ برگشتنش را هم اعلام میکند و تا وقتی مشکل باقی است دورهای یادآوری میکند.
راهنما: در تلگرام بات جدید با @BotFather بسازید (/newbot)، توکن را اینجا بگذارید، به بات خودتان /start بدهید و Chat ID عددیتان را وارد کنید. برای گروه، بات را عضو گروه کنید و Chat ID گروه (منفی) را بگذارید.
مقصدهایی که باید بهجای مسیر پیشفرض، از گیتوی داخلی مشخصی عبور کنند (مثل رنج تلگرام یا DNS کلادفلر). بعد از ذخیره، روتها ظرف چند ثانیه روی کرنل اعمال و در ریبوت هم ماندگار میشوند. مسیر پیشفرض سرور هرگز دست نمیخورد.
| نام | مقصد (IP یا CIDR) | گیتوی (via) | وضعیت | فعال |
|---|
این سرویس، قیمت لحظهای طلا، سکه و ارز را از منبع اصلی میگیرد، کلید منبع را سمت سرور مخفی نگه میدارد، تغییرِ قیمت را محاسبه میکند و خروجی تمیز و گروهبندیشده را از دو راه در اختیار کلاینتهای شما میگذارد: REST (برای گرفتن اسنپشات) و WebSocket (برای دریافت زندهٔ تغییرات). هر تعداد کلاینت هم وصل شوند، فشار روی منبع ثابت میماند.
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)
curl -H "X-API-KEY: zk_YOUR_KEY" \ https://api.zarnerkh.ir/v1/prices
هر کلید برای یک کلاینت (سایت، اپ، ربات…) ساخته میشود و این تنظیمات را دارد:
حذف کلید فوری و برگشتناپذیر است؛ برای توقف موقت، بهتر است «غیرفعال» کنید.
روی همهٔ درخواستها (بهجز 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 وصل شوید. کلید در 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') { /* تغییرات زنده */ }
};برای سایتهایی که با اسکیمای قدیمی کار میکنند (مثل zarnerkh.ir) این دو مسیر خروجیِ مسطحِ سازگار میدهند:
در پنل سایت زرنرخ، این همان منبعِ «API جدید» است که با کاربر client و رمزِ برابرِ کلید API وصل میشود.
کلیدهایی که در منبع اصلی معادل ندارند (مثل Ons و Yuan) در صورت فعال بودن منبع دوم «زربها» از آن تکمیل میشوند (قابل خاموشکردن با تیک «تکمیل کلیدهای خالی» در تب «API ورودی»). تاریخچهٔ این کلیدها هم از همان لحظه در /v1/history ثبت میشود.
در تب «API ورودی»، زیر کارت منبع اصلی، کارت «منبع دوم — زربها» هست: قیمتهای زربها (کلیدهای مسطح با High/Low روزانه از ۹ صبح تهران و روند up/down) که حدوداً هر ۳۵ ثانیه تازه میشوند و از مسیر GET /v1/zarbaha (با کلید) در دسترس کلاینتها هستند.
دو حالت دریافت:
تاریخچهٔ معماری (شهریور ۱۴۰۵): سرور پایتون قدیمی (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 مجاز نیست. |
| ۴۲۹ | از محدودیتِ درخواست در دقیقه رد شدهاید؛ کمی صبر کنید یا محدودیت کلید را بالا ببرید. |