تعلّم/بداية سريعة مع JavaScript

تحويل العملات في JavaScript وNode.js

اجلب أسعار صرف حية وحوّل المبالغ في JavaScript عبر واجهة fetch العامة. يعمل في Node 18+ وDeno وBun والمتصفحات الحديثة. لا مفتاح للبداية، و10,000 استدعاء شهريًا في الخطة المجانية.

ERexchangerate.dev·Jun 19, 2026·قراءة 5 دقائق

أسرع طريق إلى أسعار الصرف في JavaScript هو طلب GET إلى /v1/latest/USD عبر fetch. الاستجابة JSON بسيط بأسعار 31 عملة وحقلي حداثة، source وmarket_session. استدعاؤك الأول لا يحتاج مفتاح API.

نقاط أساسية
تعمل fetch العامة مباشرة في Node 18+ وDeno وBun والمتصفحات دون أي اعتماديات إضافية.
طلب GET واحد إلى /v1/latest/{base} يعيد أسعار 31 عملة، مع source وmarket_session.
مرّر مفتاحك بصيغة Authorization: Bearer exr_live_...، أو استخدم X-API-Key إذا تعذّر على منصتك ضبط Authorization.
الخطة المجانية 10,000 استدعاء شهريًا بمعدل 12 طلبًا في الدقيقة، دون بطاقة.
الأسعار إرشادية، للمرجعية والتحليل فقط، وليست تسعيرة تداول.

استدعاؤك الأول، دون مفتاح

في Node 18 أو أي متصفح حديث لديك fetch جاهزة. await واحدة تكفي لقراءة سعر اليورو:

javascript · no keycopy
const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", {
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rates.EUR);
console.log(data.sources.EUR, data.effective_at.EUR);
console.log(data.market_session);

الاستدعاءات المجهولة محدودة لكل عنوان IP، فانتقل إلى مفتاح مجاني قبل أن تتجاوز مرحلة التجربة السريعة.

أضف مفتاحًا ومعالجة للأخطاء

مرّر مفتاحك كرمز bearer في ترويسة Authorization. افحص res.ok وارمِ استثناء عند حالة سيئة كي تظهر الأخطاء مبكرًا:

javascript · authenticated call with error handlingcopy
// Node.js server only. Never put an account key in browser code.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");

async function getLatest(base = "USD") {
  const response = await fetch(`https://api.exchangerate.dev/v1/latest/${encodeURIComponent(base)}`, {
    headers: { Authorization: `Bearer ${KEY}` },
    redirect: "error",
    signal: AbortSignal.timeout(10_000),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
  return response.json();
}

const data = await getLatest("USD");
console.log(data.rates.GBP, data.effective_at.GBP);

ترويسة X-API-Key: exr_live_... مقبولة أيضًا، للمنصات التي لا تستطيع ضبط ترويسة Authorization (بعض بيئات serverless وZapier وأدوات no-code المماثلة).

حوّل مبلغًا

للتحويل المباشر استدعِ /v1/convert/{from}/{to}/{amount}. تعطيك الاستجابة السعر والمبلغ المحوّل في رحلة واحدة:

javascript · convert 100 USD to EURcopy
// Node.js server only.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");
const response = await fetch("https://api.exchangerate.dev/v1/convert/USD/EUR/100", {
  headers: { Authorization: `Bearer ${KEY}` },
  redirect: "error",
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rate, data.converted);

يعيد مسار التحويل حقلي source وmarket_session نفسيهما اللذين يعيدهما مسار latest، فتستطيع أن تعرض للمستخدمين فئة السعر وهل أسبوع التداول بين البنوك مفتوح.

افهم source وmarket_session

للعملة المعروضة، اقرأ sources[currency] لمعرفة نوع المصدر وeffective_at[currency] لمعرفة وقت الرصد. يلخص source البيانات الأقل حداثة في الاستجابة كلها. يصف market_session جلسة السوق، بينما يشير timestamp إلى وقت إنشاء الاستجابة لا إلى وقت رصد السعر.

قيمة الحقلما معناهامتى تتحرك
source: liveإجماع فوري مجمّعخلال اليوم (~60 ث)، أسبوع التداول
source: ecb_dailyالتثبيت المرجعي للبنك المركزي الأوروبيمرة كل يوم عمل (~16:00 CET)
source: fred_dailyالسلسلة اليومية للاحتياطي الفيدراليمرة كل يوم عمل
market_session: weekendسبت أو أحد (سوق ما بين البنوك مغلقة)التثبيتات المرجعية تحمل قيمة الجمعة؛ التغذية الحية لا تتحدث

يخبرك حقل data_updated_at بآخر مرة كُتب فيها السعر الأساسي. ويسجّل timestamp وقت بناء الاستجابة. معًا يتيحان لك تقرير كيفية التخزين المؤقت للقيمة وعرضها.

أسعار إرشادية فقط
تُنشر هذه الأسعار للمرجعية والتحليل والعرض. ليست تسعيرة تداول ويجب ألا تُستخدم لتسوية صفقة أو تحويل. تصرّح كل استجابة بذلك في حقل notice الخاص بها.

حدود الخطة المجانية

تُعاد الحصة الشهرية عند الساعة 00:00 UTC في اليوم الأول من كل شهر. عند تلقي 429، انتظر المدة المحددة في Retry-After قبل إعادة المحاولة.

  • 10,000 استدعاء شهريًا
  • 12 طلبًا في الدقيقة
  • دون بطاقة ائتمان
  • يغطي /v1/latest و/v1/convert و/v1/range و/v1/{date}/{base}
ER
exchangerate.dev
أدلة تكامل للمطورين.

تابع القراءة

Tutorialكيف تجلب أسعار الصرف في Pythonاقرأ
المزيد من المقارناتFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
تعلّمأسعار الصرف المرجعية للبنك المركزي الأوروبي، موضحةكيف تجلب أسعار الصرف في Pythonأسعار الصرف في Next.js وTypeScript
أسعار مباشرةEUR/USDGBP/USDUSD/JPY