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

- هر درخواست به 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
- در سایت EZRate ثبتنام کنید و ایمیل خود را تأیید کنید.
- در پنل کاربری به بخش «کلیدهای API» بروید و «کلید جدید» بزنید. برای هر پروژه یک کلید جدا بسازید تا اگر یکی لو رفت، فقط همان را باطل کنید.
- اگر کلید فقط از سرور شما استفاده میشود، محدودیت IP را روی آدرس سرور بگذارید. این تنظیم ساده جلوی سوءاستفاده از کلید دزدیدهشده را میگیرد.
- کلید را در متغیر محیطی (مثلاً
EZRATE_KEY) ذخیره کنید، نه داخل کد و نه داخل مخزن گیت.

اولین درخواست: قیمت دلار، طلا، سکه و تتر
سادهترین راه آزمایش، دستور curl در ترمینال است. کلید خود را جایگزین کنید:
curl -H "X-API-Key: $EZRATE_KEY" \
"https://api.ezrate.me/v1/rates?symbols=usd,g18,emami,usdt&lang=fa"پاسخ چیزی شبیه این است (عددها نمونهاند؛ مقدار واقعی را در پاسخ خودتان میبینید):
{
"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="e=&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 استفاده کنید:
# ۱۰۰ دلار چند یورو است؟ (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 نمودار ساعتی بسازید. عمق تاریخچهٔ در دسترس به پلن شما بستگی دارد. برای بکتست، گزارشگیری و تحلیل، آموزش دیتای تاریخی قیمت دلار و طلا را ببینید.
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» آن را بردارد و سهمیهٔ شما را تمام کند. الگوی درست این است:
- سرور شما هر چند ده ثانیه یکبار نرخها را از EZRate میگیرد.
- پاسخ را در حافظه، فایل یا Redis نگه میدارد.
- صفحههای سایت، اپ یا ربات عدد را از سرور خود شما میخوانند.
با این الگو، تعداد درخواست به API ثابت میماند، چه سایت شما روزی صد بازدید داشته باشد چه صد هزار. آموزش عملی آن را در کش کردن API قیمت ارز با Redis و نکات امنیتی را در امنیت API Key در فرانتاند بخوانید.

مدیریت خطا و سهمیه
| کد | معنی | رفتار درست برنامه |
|---|---|---|
401 invalid_api_key | کلید نیامده، اشتباه است یا باطل شده | تلاش مجدد نکنید؛ به مدیر سیستم خبر دهید |
403 forbidden | IP یا دامنهٔ درخواست مجاز نیست | محدودیت 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») با لینک، هم شرط استفاده است و هم به اعتماد کاربر کمک میکند. انتشار مجدد خود داده بهصورت یک وبسرویس دیگر یا فروش آن مجاز نیست.

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


