ایزی ریت
ورود / ثبت‌نامورود

آموزش API قیمت ارز و طلا؛ راهنمای کامل وب‌سرویس نرخ لحظه‌ای برای توسعه‌دهندگان

آموزش API قیمت ارز از صفر: ساخت کلید، اولین درخواست، فیلدهای JSON، تبدیل ارز، تاریخچه، خطاها و بهترین روش اتصال سایت، اپ و ربات به نرخ بازار آزاد.

عرفان فضلی
· کارشناس توسعه و برنامه نویسی
انتشار ۲۷ مهر ۱۴۰۵، ۰۹:۰۰ · ۷ دقیقه مطالعه
آموزش API قیمت ارز و طلا؛ راهنمای کامل وب‌سرویس نرخ لحظه‌ای برای توسعه‌دهندگان
خلاصه در سه خط
  • هر درخواست به API قیمت ارز EZRate یک GET ساده به api.ezrate.me/v1 با کلید در هدر X-API-Key است و پاسخ JSON برمی‌گرداند.
  • قیمت‌ها به‌صورت پیش‌فرض تومان‌اند؛ با پارامتر quote می‌توانید ریال، دلار، تتر یا هر دارایی دیگری بگیرید.
  • برای سایت‌های پربازدید پاسخ را کش کنید، کلید را فقط سمت سرور نگه دارید و خطاهای 401، 403 و 429 را جداگانه مدیریت کنید.

اگر سایت فروشگاهی، اپلیکیشن، ربات تلگرام یا نرم‌افزار حسابداری شما به نرخ روز دلار، طلا، سکه یا تتر نیاز دارد، دو راه دارید: هر روز عددها را دستی وارد کنید یا آن‌ها را از یک وب‌سرویس بخوانید. این راهنما آموزش API قیمت ارز را از صفر شروع می‌کند؛ از ساختن کلید و اولین درخواست تا معماری درست برای سایتی که روزی ده‌ها هزار بازدید دارد.

★
پاسخ کوتاه
آدرس پایه https://api.ezrate.me/v1 است. کلید را در هدر X-API-Key بفرستید و مثلاً با GET /rates?symbols=usd,g18,emami,usdt قیمت دلار، طلای ۱۸، سکه امامی و تتر را در یک درخواست بگیرید. پاسخ JSON است و قیمت‌ها پیش‌فرض به تومان‌اند.

این مقاله صفحهٔ مرجع مجموعه‌ای از آموزش‌های فنی است. هر جا به جزئیات یک زبان یا ابزار رسیدیم، به آموزش اختصاصی همان موضوع لینک داده‌ایم تا این صفحه خوانا بماند. مشخصات رسمی و پلن‌ها هم همیشه در صفحهٔ API قیمت ارز به‌روز است.

وب‌سرویس قیمت ارز دقیقاً چه چیزی به شما می‌دهد؟

API قیمت ارز یک آدرس اینترنتی است که برنامهٔ شما به آن درخواست می‌فرستد و در جواب، نرخ‌ها را در قالبی ماشین‌خوان (JSON) می‌گیرد. تفاوت مهم وب‌سرویس‌ها نه در شکل JSON، بلکه در منشأ عددها است. نرخ EZRate از معاملات واقعی بازار آزاد جمع می‌شود: پیام‌های خرید و فروش کانال‌ها و گروه‌های معاملاتی، صرافی‌ها و بازارهای رمزارز هر دقیقه خوانده می‌شوند، نرخ‌های پرت کنار گذاشته می‌شوند و میانهٔ بقیه منتشر می‌شود. روش کامل در روش‌شناسی نرخ‌ها آمده است.

دستهنمونه نمادهاکاربرد رایج
ارزها (fiat)usd eur aed try gbp cny iqd afnفروشگاه، گردشگری، بازرگانی، حسابداری
طلا (gold)g18 g24 mesghal ounceطلافروشی، ماشین‌حساب قیمت طلا، تحلیل
سکه (coin)emami bahar nim rob geramiتابلو طلافروشی، محاسبهٔ حباب
رمزارز (crypto)usdt btc eth trx tonصرافی رمزارز، کیف پول، ربات معامله

فهرست کامل نمادها را همیشه از خود API بگیرید (GET /assets) و در کد ثابت ننویسید؛ دارایی‌های جدید بدون تغییر کد شما اضافه می‌شوند.

قدم اول: ساخت کلید API

  1. در سایت EZRate ثبت‌نام کنید و ایمیل خود را تأیید کنید.
  2. در پنل کاربری به بخش «کلیدهای API» بروید و «کلید جدید» بزنید. برای هر پروژه یک کلید جدا بسازید تا اگر یکی لو رفت، فقط همان را باطل کنید.
  3. اگر کلید فقط از سرور شما استفاده می‌شود، محدودیت IP را روی آدرس سرور بگذارید. این تنظیم ساده جلوی سوءاستفاده از کلید دزدیده‌شده را می‌گیرد.
  4. کلید را در متغیر محیطی (مثلاً EZRATE_KEY) ذخیره کنید، نه داخل کد و نه داخل مخزن گیت.
بخش کلیدهای API در پنل کاربری EZRate
ساخت کلید API از پنل کاربری

اولین درخواست: قیمت دلار، طلا، سکه و تتر

ساده‌ترین راه آزمایش، دستور curl در ترمینال است. کلید خود را جایگزین کنید:

bash
curl -H "X-API-Key: $EZRATE_KEY" \
  "https://api.ezrate.me/v1/rates?symbols=usd,g18,emami,usdt&lang=fa"

پاسخ چیزی شبیه این است (عددها نمونه‌اند؛ مقدار واقعی را در پاسخ خودتان می‌بینید):

json
{
  "data": [
    { "symbol": "usd", "code": "USD", "name": "دلار آمریکا", "category": "fiat",
      "market": "tehran", "buy": 0, "sell": 0, "change_pct": 0.12,
      "sources": 13, "low_sources": false, "updated_at": "…", "quote": "IRT" },
    { "symbol": "g18", "code": "G18", "name": "طلای ۱۸ عیار", "category": "gold", "…": "…" }
  ],
  "meta": { "as_of": "…", "freshness_sec": 60, "quote": "IRT" }
}

معنی فیلدهای مهم

فیلدمعنینکتهٔ استفاده
buy / sellنرخ خرید و فروش در واحد quoteبرای فروش به مشتری معمولاً sell ملاک است.
change_pctدرصد تغییر ۲۴ ساعتبرای رنگ سبز و قرمز و فلش جهت تغییر
sourcesتعداد منابعی که در محاسبه شرکت کرده‌اندهرچه بیشتر، عدد قابل‌اتکاتر
low_sourcesهشدار کم بودن منبعدر ساعت‌های خلوت؛ بهتر است کنار عدد نشان داده شود
updated_atزمان آخرین به‌روزرسانی همان نرخاگر خیلی قدیمی بود، به کاربر بگویید
meta.freshness_secتازگی داده در پلن شمافاصلهٔ درخواست‌ها را از این کمتر نکنید
!
هشدار
اعداد پیش‌فرض تومان هستند. اگر سیستم شما ریالی کار می‌کند، به‌جای ضرب دستی در ۱۰، quote=IRR بفرستید تا هم عدد درست برگردد و هم واحد در پاسخ ثبت شود.

مسیرهای اصلی API

مسیرکاربرد
GET /assets?category=فهرست دارایی‌ها و نمادها
GET /rates?symbols=&category=&quote=&lang=قیمت لحظه‌ای چند دارایی در یک درخواست
GET /rates/{symbol}یک دارایی با قیمتش در بازارهای مختلف (تهران، هرات، سلیمانیه و…)
GET /history/{symbol}?interval=1h|1d&from=&to=کندل‌های ساعتی یا روزانه برای نمودار و تحلیل
GET /convert?from=&to=&amount=&side=تبدیل مبلغ از یک دارایی به دیگری
GET /cross?base=&symbols=نرخ متقاطع، مثلاً یک دلار چند یورو و درهم است
GET /usageمصرف امروز و این ماه (از سهمیه کم نمی‌شود)

جزئیات ساختار پاسخ هر مسیر و همهٔ کدهای خطا در مرجع JSON و مسیرهای API (انگلیسی) آمده است.

تبدیل ارز و قیمت بر حسب دلار یا تتر

پارامتر quote واحد همهٔ قیمت‌های پاسخ را تعیین می‌کند: IRT (تومان)، IRR (ریال) یا نماد هر دارایی دیگری که تمایل دارید بر حسب آن قیمت ها را دریافت کنید. مثلاً quote=USDT قیمت همهٔ رمزارزها را بر حسب تتر می‌دهد و quote=usd قیمت طلا را به دلار بازار آزاد. برای تبدیل یک مبلغ مشخص از convert استفاده کنید:

bash
# ۱۰۰ دلار چند یورو است؟ (side: buy | sell | mid)
curl -H "X-API-Key: $EZRATE_KEY" \
  "https://api.ezrate.me/v1/convert?from=usd&to=eur&amount=100&side=mid"

در فروشگاه‌ها معمولاً side=sell منطقی‌تر است، چون شما کالا را با ارزی که باید از بازار بخرید قیمت می‌گذارید. در گزارش‌های تحلیلی mid (میانگین خرید و فروش) عدد منصفانه‌تری است.

تاریخچه و نمودار

مسیر history کندل OHLC (باز، بیشترین، کمترین، بسته) برمی‌گرداند. با interval=1d نمودار روزانه و با 1h نمودار ساعتی بسازید. عمق تاریخچهٔ در دسترس به پلن شما بستگی دارد. برای بک‌تست، گزارش‌گیری و تحلیل، آموزش دیتای تاریخی قیمت دلار و طلا را ببینید.

bash
curl -H "X-API-Key: $EZRATE_KEY" \
  "https://api.ezrate.me/v1/history/usd?interval=1d&from=2026-09-01&to=2026-10-01"

معماری درست: هرگز از مرورگر کاربر مستقیم API را صدا نزنید

رایج‌ترین اشتباه این است که برنامه‌نویس کلید را داخل جاوااسکریپت صفحه می‌گذارد. هر بازدیدکننده‌ای می‌تواند با کلید «View Source» آن را بردارد و سهمیهٔ شما را تمام کند. الگوی درست این است:

  1. سرور شما هر چند ده ثانیه یک‌بار نرخ‌ها را از EZRate می‌گیرد.
  2. پاسخ را در حافظه، فایل یا Redis نگه می‌دارد.
  3. صفحه‌های سایت، اپ یا ربات عدد را از سرور خود شما می‌خوانند.

با این الگو، تعداد درخواست به API ثابت می‌ماند، چه سایت شما روزی صد بازدید داشته باشد چه صد هزار. آموزش عملی آن را در کش کردن API قیمت ارز با Redis و نکات امنیتی را در امنیت API Key در فرانت‌اند بخوانید.

نمودار معماری اتصال سایت به API قیمت ارز با کش سمت سرور
جریان درست داده: API ← سرور شما و کش ← کاربران
✓
پیشنهاد
اگر فقط می‌خواهید قیمت را در سایت نمایش دهید و پردازشی روی عدد ندارید، اصلاً به API نیاز ندارید: ویجت‌های قیمت بدون کلید و با یک خط کد کار می‌کنند.

مدیریت خطا و سهمیه

کدمعنیرفتار درست برنامه
401 invalid_api_keyکلید نیامده، اشتباه است یا باطل شدهتلاش مجدد نکنید؛ به مدیر سیستم خبر دهید
403 forbiddenIP یا دامنهٔ درخواست مجاز نیستمحدودیت IP کلید را در پنل بررسی کنید
429 rate_limitedسهمیهٔ روزانه یا ماهانه تمام شدهتا meta.reset_at صبر کنید و آخرین نرخ کش‌شده را نشان دهید
5xx یا Timeoutمشکل موقت شبکه یا سروربا تأخیر افزایشی دوباره تلاش کنید

یک قانون طلایی: وقتی API در دسترس نیست، صفحهٔ شما نباید خالی شود. آخرین عدد معتبر را با برچسب زمان نشان دهید. الگوهای کامل در مدیریت خطا و Rate Limit در APIهای مالی آمده است.

آموزش‌ها بر اساس زبان و ابزار

این مجموعه برای هر محیط یک آموزش جدا دارد. هر کدام با همین مفاهیم شروع می‌کند و کد آمادهٔ اجرا می‌دهد:

محیطآموزش
پایتوندریافت قیمت دلار و تتر با پایتون
PHP و لاراولدریافت نرخ ارز در PHP و لاراول
React و Next.jsتابلو قیمت طلا و سکه با React
Node.js و تلگرامساخت ربات تلگرام قیمت ارز
فلاترساخت اپ قیمت ارز با فلاتر
وردپرسنمایش قیمت ارز در وردپرس
ووکامرسقیمت‌گذاری خودکار بر اساس دلار
اکسل و گوگل شیتقیمت لحظه‌ای طلا در اکسل
حسابداری و ERPتسعیر ارز در نرم‌افزار حسابداری

سایر موضوعات این مجموعه: اسکرپ سایت قیمت یا API، WebSocket یا REST، نرخ تتر برای صرافی‌های رمزارز، نرخ درهم، لیر و یورو، محاسبهٔ حباب سکه با API و خطرات وب‌سرویس‌های غیررسمی.

چک‌لیست قبل از انتشار پروژه

  • کلید فقط سمت سرور است و در مخزن کد ذخیره نشده است.
  • پاسخ‌ها کش می‌شوند و فاصلهٔ درخواست‌ها از freshness_sec پلن کمتر نیست.
  • واحد (تومان یا ریال) در همهٔ صفحه‌ها کنار عدد نوشته شده است.
  • زمان آخرین به‌روزرسانی کنار نرخ نمایش داده می‌شود.
  • خطاهای 401، 403 و 429 جدا مدیریت شده‌اند و صفحه در قطعی خالی نمی‌شود.
  • منبع نرخ (EZRate) با لینک ذکر شده است؛ شرط استفاده در شرایط API آمده است.

API قیمت ارز به درد چه کسب‌وکارهایی می‌خورد؟

هر جا عددی به نرخ ارز، طلا یا تتر وابسته است و هنوز کسی آن را دستی وارد می‌کند، جای یک اتصال API خالی است. رایج‌ترین سناریوهایی که در تیم‌های ایرانی دیده‌ایم:

کسب‌وکارمسئلهراه حل با API
فروشگاه کالای وارداتیقیمت محصولات با هر جهش دلار عقب می‌ماندقیمت تومانی از قیمت دلاری × نرخ روز، هر چند ساعت خودکار
طلافروشی آنلاینقیمت گرم طلا و سکه چند بار در روز تغییر می‌کندخواندن g18 و سکه‌ها و محاسبهٔ قیمت با اجرت در سایت
صرافی رمزارزقیمت تومانی تتر و رمزارزها مرجع می‌خواهدنرخ usdt و قیمت دلاری رمزارزها با quote=USDT
آژانس گردشگری و دانشجویینرخ یورو، لیر و درهم برای پیش‌فاکتورمسیر convert با سمت فروش
حسابداری و ERPتسعیر اسناد ارزی در پایان روزنرخ روزانه از history با interval=1d
رسانه و سایت خبرینمایش نرخ در هدر و صفحهٔ خبرویجت بدون کلید یا API با کش
ربات و کانال تلگرامارسال منظم نرخ‌هانرخ هر دقیقه در حافظه و ارسال زمان‌بندی‌شده

نرخ خرید، فروش یا میانه؛ کدام را استفاده کنیم؟

هر نرخ در API دو عدد دارد: buy قیمتی است که بازار از شما می‌خرد و sell قیمتی است که به شما می‌فروشد. فاصلهٔ این دو (اسپرد) در روزهای آرام کم و در روزهای پرنوسان بیشتر است. انتخاب درست به نقش شما در معامله بستگی دارد:

  • قیمت‌گذاری کالا یا خدمت: sell، چون برای تأمین دوبارهٔ ارز باید آن را از بازار بخرید.
  • ارزش‌گذاری دارایی‌ای که دارید (مثلاً موجودی ارزی شرکت): buy، چون اگر بفروشید همین را می‌گیرید.
  • گزارش، نمودار و تحلیل: میانهٔ دو عدد (side=mid در مسیر convert)، که عدد منصفانه‌تری است.

خطای رایج این است که در یک سیستم جایی buy و جای دیگر sell استفاده شود و گزارش‌ها با هم نخوانند. این تصمیم را یک‌بار بگیرید و در مستندات داخلی تیم بنویسید.

قیمت در بازارهای مختلف: تهران، هرات، سلیمانیه، دبی و استانبول

پیش‌فرض همهٔ نرخ‌ها بازار آزاد تهران است. اما دلار در بازارهای مرزی و منطقه‌ای هم معامله می‌شود و گاهی جهت بازار تهران را زودتر نشان می‌دهد. مسیر /rates/usd قیمت دلار را در همهٔ این بازارها کنار هم برمی‌گرداند و با پارامتر market می‌توانید فقط یک بازار را بخواهید. اگر با این بازارها آشنا نیستید، صفحه‌های دلار هرات، دلار سلیمانیه، دلار دبی و دلار استانبول را ببینید.

دقت داده: «تعداد منبع» را جدی بگیرید

برخلاف بسیاری از وب‌سرویس‌ها که فقط یک عدد می‌دهند، هر نرخ EZRate می‌گوید از چند منبع ساخته شده است. ساعت ۱۱ صبح یک روز کاری ممکن است ده‌ها منبع پشت نرخ دلار باشد، اما ساعت ۳ بامداد جمعه شاید چند منبع. وقتی low_sources برابر true است، نرخ قبلی حفظ شده و برچسب «کم‌منبع» دارد. در رابط کاربری خود این وضعیت را با یک نشانهٔ کوچک نشان دهید؛ کاربر حرفه‌ای قدرش را می‌داند.

اینکه چرا قیمت دلار در سایت‌ها و کانال‌های مختلف فرق دارد و EZRate چطور نرخ‌های پرت را کنار می‌گذارد، در علت تفاوت قیمت دلار در سایت‌ها و حذف داده‌های پرت در قیمت‌گذاری توضیح داده شده است.

زبان پاسخ و نام دارایی‌ها

با پارامتر lang=fa یا lang=en نام دارایی‌ها در پاسخ به همان زبان برمی‌گردد. در کد خود همیشه با symbol کار کنید و name را فقط برای نمایش به کاربر بگذارید؛ نام‌ها ممکن است برای خوانایی بهتر اصلاح شوند اما نماد ثابت می‌ماند.

شرایط استفاده و ذکر منبع

داده‌ها برای نمایش در محصولات شما مجازند، به شرط رعایت شرایط استفادهٔ API. نمایش منبع («نرخ‌ها: EZRate») با لینک، هم شرط استفاده است و هم به اعتماد کاربر کمک می‌کند. انتشار مجدد خود داده به‌صورت یک وب‌سرویس دیگر یا فروش آن مجاز نیست.

API قیمت ارز EZRate رایگان است؟
بله، پلن رایگان برای شروع و پروژه‌های کوچک وجود دارد. سهمیهٔ روزانه، تازگی داده و عمق تاریخچهٔ هر پلن در صفحهٔ API آمده است.
نرخ‌ها هر چند وقت یک‌بار به‌روز می‌شوند؟
نرخ‌ها هر دقیقه از معاملات بازار محاسبه می‌شوند. اینکه پاسخ API شما چقدر تازه باشد به پلن بستگی دارد و در فیلد meta.freshness_sec اعلام می‌شود.
می‌توانم قیمت را به ریال بگیرم؟
بله. پارامتر quote=IRR را بفرستید. پیش‌فرض تومان است.
قیمت دلار هرات یا سلیمانیه هم در API هست؟
بله. مسیر /rates/usd قیمت دلار را در بازارهای مختلف هم برمی‌گرداند و با پارامتر market می‌توانید یک بازار مشخص را بخواهید.
برای نمایش ساده در سایت هم باید API بگیرم؟
نه. برای نمایش، ویجت‌های قیمت بدون کلید و بدون برنامه‌نویسی کار می‌کنند. API برای وقتی است که می‌خواهید روی عدد محاسبه انجام دهید یا آن را در سیستم خود ذخیره کنید.
عرفان فضلی
من در حوزه توسعه نرم‌افزار و برنامه‌نویسی فعالیت می‌کنم و به طراحی و پیاده‌سازی راهکارهای کاربردی و بهینه علاقه‌مندم. تمرکز من بر توسعه قابلیت‌های جدید، بهبود عملکرد سیستم‌ها و حل چالش‌های فنی با استفاده از فناوری‌های روز است. در مسیر کاری خود تلاش می‌کنم با یادگیری مستمر و به‌کارگیری روش‌های نوین برنامه‌نویسی، محصولات نرم‌افزاری کارآمد، پایدار و قابل‌اعتماد توسعه دهم.
همهٔ مطالب نویسنده ←

نظرات (۰)

نظرها پس از تأیید نمایش داده می‌شوند؛ برای ارسال، ورود به حساب لازم است.

مطالب مرتبط

راهنما
راهنمای جامع شناخت بازار طلا و ارز در ایران؛ از عیار و مظنه تا تتر و صندوق طلا
داده و کشف قیمت
کشف قیمت دلار در بازار آزاد ایران؛ از معامله در بازار تا عدد روی صفحه
طلا و سکه
حباب طلا چیست؟ تفاوت قیمت واقعی و قیمت بازار طلا