⚡ REST · JSON · رایگان

API توسعه‌دهندگان

دسترسی عمومی به قیمت لحظه‌ای بیش از ۱۰۰ ابزار مالی بازار ایران و جهان — بدون کلید، بدون ثبت‌نام. فقط درخواست بزنید و JSON بگیرید.

📘 شروع سریع

همه درخواست‌ها GET هستند و پاسخ application/json; charset=utf-8 برمی‌گردانند. آدرس پایه:

https://ibahoosham.ir/arzprice/w-api/...
# همه قیمت‌ها
curl https://ibahoosham.ir/arzprice/w-api/prices/

# فقط دسته طلا
curl https://ibahoosham.ir/arzprice/w-api/category/gold

# تاریخچه ۷ روزه دلار
curl "https://ibahoosham.ir/arzprice/w-api/history/?symbol=USD&range=7d"

🧪 کنسول API — Playground جدید v4.11

اندپوینت را انتخاب (یا مسیر دلخواه‌تان را بنویسید) و «اجرا» بزنید — پاسخ واقعی همین لحظه از سرور ارزپرایس برمی‌گردد:

پاسخ اینجا نمایش داده می‌شود — هنوز درخواستی زده نشده

💡 مسیرها نسبت به w-api/ هستند (مثلاً prices/ یا history/?symbol=USD&range=7d). این کنسول مستقیم از مرورگر شما به API وصل می‌شود — همان محدودیت نرخ ۱۲۰ درخواست/دقیقه اعمال می‌شود.

🧩 ویجت امبد برای سایت شما جدید v4.12

قیمت‌های زنده ارزپرایس را با دو خط کد در هر سایت یا وبلاگی نمایش دهید — iframe امن، ریسپانسیو و با به‌روزرسانی خودکار هر ۶۰ ثانیه. پیش‌نمایش واقعی همین‌جا (با همان لودر widget.js):

<script src="https://ibahoosham.ir/arzprice/widget.js" async></script>
<div data-arzprice-widget
     data-symbols="دلار آمریکا,یورو,بیت‌کوین"
     data-theme="dark"
     data-rows="6"
     data-height="420"></div>
پارامترمقادیرتوضیح
data-symbolsنام‌های ابزار با کامافارسی یا لاتین («دلار آمریکا» یا «USD») — خالی = انتخاب پیش‌فرض
data-themeauto | light | darkپوسته ویجت (پیش‌فرض: پوسته بازدیدکننده)
data-rows۱ تا ۱۲حداکثر ردیف‌ها (پیش‌فرض ۸)
data-titleمتن دلخواهعنوان هدر ویجت (پیش‌فرض «ارزپرایس»)
data-height۲۲۰ تا ۱۲۰۰ارتفاع iframe به پیکسل (پیش‌فرض ۴۲۰)

پیش‌نمایش مستقیم آدرس هم ممکن است: /arzprice/embed/?symbols=USD,EUR&theme=dark&rows=6 — فید RSS اخبار: /rss 📡

📚 اندپوینت‌های عمومی

اندپوینتتوضیح
w-api/prices/همه ابزارها (۱۰۰+) با قیمت، درصد تغییر، OHLC — کش ~۶۰ ثانیه
w-api/category/{cat}ابزارهای یک دسته — cat: gold · silver · currency · crypto · commodity · energy
w-api/instrument/{cat}/{slug}جزئیات یک ابزار + تنظیمات سئو
w-api/history/?symbol=&range=تاریخچه قیمت — range: 1h | 24h | 7d | 30d (حداکثر ۲۴۰ نقطه)
w-api/stats/آمار عمومی (تعداد کاربران، بازدید کل)
w-api/news/?cat=&limit=&page=جدید v4.15 — لینکدونی اخبار (فقط لینک، بدون محتوا) — cat: gold|silver|currency|crypto|commodity|energy یا خالی=همه؛ POST با توکن ادمین = به‌روزرسانی منابع
w-api/sitemap/لیست همه URL ها برای crawler ها
og/{cat}/{slug}.pngتصویر OG با قیمت لحظه‌ای (۱۲۰۰×۶۳۰) برای اشتراک‌گذاری

🎯 ساختار پاسخ w-api/prices/

{
  "ok": true,
  "count": 106,
  "items": [
    {
      "symbol": "USD",
      "name": "دلار آمریکا",
      "category": "currency",
      "price": 2643050,
      "unit": "rial",       // rial | usd
      "changePercent": -0.3,
      "high": 2646100, "low": 2643050, "open": 2643050,
      "timestamp": "2026-10-11T20:23:41",
      "emoji": "🇺🇸",
      "slug": "USD",
      "url": "https://ibahoosham.ir/arzprice/p/currency/USD"
    }
  ]
}
💡 واحد rial یعنی قیمت به ریال است (تومان = ریال ÷ ۱۰) و usd یعنی قیمت به دلار (ابزارهای جهانی مثل انس طلا و بیت‌کوین/USDT).

🔐 اندپوینت‌های نیازمند ورود

این‌ها با session کوکی مرورگر کاربر کار می‌کنند و برای استفاده مستقیم مناسب نیستند:

اندپوینتمتدتوضیح
w-api/favorites/GET / POSTلیست / toggle علاقه‌مندی‌ها (body: {"symbol":"USD"})
w-api/alerts/GET / POST / DELETEمدیریت آلارم قیمت (body: {"symbol","direction","target"}) — جدید v4.5: به‌جای target می‌توانید {"percent":3} بفرستید تا هدف از قیمت لحظه‌ای محاسبه شود
w-api/push-prefs/GET / POSTجدید v4.6 — تنظیمات اعلان‌ها: دسته‌های فعال {"cats":["gold","currency"]}، آستانه نوسان {"min_change_pct":3} و کلید هشدار خودکار {"volatility_on":true}
w-api/portfolio/GET / POST / DELETEبه‌روز v4.8 — سبد دارایی: GET دارایی‌ها با ارزش لحظه‌ای، جمع کل و سود/زیان (pnl_rial، pnl_pct، cost_rial)؛ جدید v4.8: GET ?history=1&days=30 تاریخچه روزانه ارزش سبد (points با ymd/label/total/cost/pnl/pnl_pct — برچسب تاریخ شمسی)؛ POST ثبت/به‌روزرسانی {"symbol","amount","note","buy_price"} (قیمت خرید اختیاری برای محاسبه سود/زیان؛ buy_price:null پاک می‌کند؛ کلید را نفرستید تا حفظ شود؛ amount=0 حذف)؛ جابه‌جایی تک‌ردیفی با {"action":"move","id":X,"dir":"up"|"down"} یا ترتیب کامل بعد از کشیدن‌ورهاکردن با {"action":"reorder","ids":[…]} (جدید v4.8)؛ DELETE ?id=
w-api/webhooks/GET / POST / DELETEv4.9 · ۳ رویداد v4.10 — مدیریت وب‌هوک: GET فهرست + ۳۰ تحویل اخیر؛ POST ثبت/ویرایش {"url","secret","symbols":[…],"min_change_pct":2,"active":true} یا {"action":"toggle","id","active"} یا {"action":"test","id"}؛ DELETE ?id= — سقف ۵ وب‌هوک؛ صفحه مدیریت: /webhooks

🪝 وب‌هوک‌ها (Webhooks) v4.9 · ۳ رویداد در v4.10

به‌جای polling، رویدادهای بازار را به‌صورت POST با JSON دریافت کنید: جابه‌جایی قیمت، نوسان مهم و آلارم کاربران. مدیریت وب‌هوک‌ها از صفحه /webhooks 🪝 (نیازمند ورود) — تا ۵ وب‌هوک برای هر حساب.

انواع رویداد (هدر X-ArzPrice-Event)

رویدادچه زمانی؟فیلترها
price_changeجابه‌جایی |۲۴ساعته| هر ابزار ≥ آستانه وب‌هوک شمادامنه ابزار + آستانه — حداکثر ۳ ابزار per hook per اجرا
volatilityموتور نوسان، ابزار منتخب کاربران (علاقه‌مندی‌ها) را پرچم‌گذاری کنددامنه ابزار + آستانه — حداکثر ۳ per اجرا؛ یک بار در روز per ابزار
alert_triggeredآلارم قیمتی هر کاربری به هدفش برسد (بالا/پایین)فقط دامنه ابزار (بدون آستانه) — حداکثر ۵ per اجرا؛ یک بار در روز per ابزار
testدکمه «⚡ تست» در صفحه مدیریت—
ویژگیمقدار
آستانه تغییر۰.۱٪ تا ۵۰٪ — تغییر ۲۴ ساعته هر ابزار مقایسه می‌شود (روی price_change و volatility)
دامنه ابزارهاهمه ابزارها یا حداکثر ۶۰ ابزار منتخب
Dedupهر رویداد+ابزار در هر روز (تقویم تهران) حداکثر یک ارسال
Retry (v4.11 · per-hook v4.12)خطای شبکه یا پاسخ ۵xx تا ۳ بار (پیش‌فرض) با وقفه نمایی (۰.۴ و ۱.۲ ثانیه) تکرار می‌شود؛ خطای ۴xx تکرار نمی‌شود — از v4.12 سقف تلاش هر وب‌هوک جداگانه قابل تنظیم است (۱ تا ۴، فیلد «حداکثر تلاش ارسال» در /webhooks) و تعداد تلاش‌ها در گزارش تحویل ثبت می‌شود
امنیتجدید v4.11: هدر X-ArzPrice-Signature: t=<unix>,v1=HMAC_SHA256("<t>.<body>", secret) (امضای زمان‌دار ضد replay) + هدر قدیمی X-ArzPrice-Signature-Body: sha256=HMAC_SHA256(body, secret) برای سازگاری گیرنده‌های قبلی — اگر secret ثبت کرده باشید
مهلت پاسخ۶ ثانیه per تلاش — پاسخ 2xx یعنی موفق؛ گزارش کامل در صفحه مدیریت
POST https://your-endpoint.example/hook
{
  "event": "price_change",
  "source": "arzprice",
  "symbol": "BTC/IRT",
  "name": "بیت کوین",
  "category": "crypto",
  "price": 219020000030,
  "price_fmt": "۲۱۹٬۰۲۰٬۰۰۰٬۰۳۰ ریال",
  "unit": "rial",
  "change_pct": -0.16,
  "direction": "down",
  "high": 21999779998, "low": 21901695369, "open": 21936648987,
  "instrument_url": "https://ibahoosham.ir/arzprice/p/crypto/btcirt",
  "sent_at": "2026-10-12T09:00:00Z"
}

تأیید امضا سمت شما — روش جدید زمان‌دار (توصیه‌شده؛ جلوگیری از replay attack):

// $body = file_get_contents('php://input');
$m = [];
if (!preg_match('/t=(\d+),v1=([a-f0-9]+)/', $_SERVER['HTTP_X_ARZPRICE_SIGNATURE'] ?? '', $m)) {
    http_response_code(401); exit;
}
// ۱) امضا معتبر؟  ۲) فاصله زمانی کمتر از ۵ دقیقه؟ (جلوگیری از replay)
$expected = hash_hmac('sha256', $m[1] . '.' . $body, $secret);
if (!hash_equals($expected, $m[2]) || abs(time() - (int)$m[1]) > 300) {
    http_response_code(401); exit; // امضا نامعتبر یا منقضی
}

روش قدیمی (بدون timestamp) هم همچنان روی هدر X-ArzPrice-Signature-Body ارسال می‌شود تا گیرنده‌های قبلی بدون تغییر کار کنند:

$expected = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($expected, $_SERVER['HTTP_X_ARZPRICE_SIGNATURE_BODY'] ?? '')) {
    http_response_code(401); exit; // امضا نامعتبر
}

نمونه رویداد alert_triggered:

{
  "event": "alert_triggered",
  "source": "arzprice",
  "hook_id": 1,
  "symbol": "BTC/IRT",
  "alert_id": 42,
  "condition": "above",
  "target_price": 7000000000,
  "target_price_fmt": "۷٬۰۰۰٬۰۰۰٬۰۰۰ ریال",
  "triggered_price": 7042000000,
  "triggered_price_fmt": "۷٬۰۴۲٬۰۰۰٬۰۰۰ ریال",
  "change_pct": 1.8,
  "instrument_url": "https://ibahoosham.ir/arzprice/p/crypto/btcirt",
  "sent_at": "2026-10-12T09:00:00Z"
}
💡 دکمه «⚡ تست» در صفحه /webhooks یک ارسال آزمایشی با همان هدرهای امضا می‌زند تا اتصال را قبل از تولید تست کنید (تست = یک تلاش، بدون retry). ارسال‌های واقعی هر ~۵ دقیقه با کرون انجام می‌شوند و خطای گذرا را تا ۳ بار با backoff تکرار می‌کنند — نمونه هر ۴ رویداد را در صفحه /webhooks ببینید.

⚖️ قواعد استفاده

• استفاده رایگان برای مصارف غیرتجاری با ذکر منبع «ارزپرایس» — برای تجاری با ما تماس بگیرید.
• محدودیت نرخ (جدید v4.5): GET حداکثر ۱۲۰ درخواست در دقیقه و درخواست‌های نوشتن حداکثر ۳۰ در دقیقه از هر IP — در صورت عبور، پاسخ 429 با هدر Retry-After می‌گیرید. پاسخ‌های قیمت از سمت ما ~۶۰ ثانیه کش می‌شوند، سمت خودتان هم کش کنید.
• داده‌ها «چنان‌که هست» ارائه می‌شوند؛ برای تصمیم‌های مالی به منابع رسمی هم مراجعه کنید.
• نسخه فعلی API: v4.39.0 — تغییرات ناسازگار با نسخه جدید اعلام می‌شوند.