نظرة عامة
يجمع Lume Exchange Rates مقارنة الأسعار والتحويل والسجل التاريخي للسفر والأسعار الدولية والمنتجات.
المصدر المهيأ هو مزود خارجي لأسعار الصرف. تتضمن الاستجابات المصدر ووقت النشر. العملات المتاحة مستمدة من البيانات الفعلية.
البدء السريع
اقرأ قائمة العملات ثم اختر anchor وtargets. أسماء الحقول والرموز موحدة في جميع اللغات.
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'const response = await fetch('/v1/quotes?anchor=USD&targets=EUR,JPY', {
credentials: 'same-origin'
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { meta, anchor, data } = await response.json();
console.log(anchor, meta.as_of, data);يستخدم مثال المتصفح الأصل نفسه. يحتاج الموقع الخاص إلى صلاحية؛ لا يتجاوز الرابط تسجيل الدخول.
الوصول والمصادقة
يخضع الوصول لصلاحيات الموقع وجلسة المتصفح. لا تتوفر بعد مفاتيح API للعملاء أو مصادقة Bearer للعملاء أو API عامة عبر الأصول. احتفظ بـ App ID لدى الخادم.
| المعامل | النوع | الوصف |
|---|---|---|
| Base URL | URL | https://lumeexchangerates.com |
| Content-Type | header | application/json |
| Customer API key | — | تستخدم هذه المعاينة المستضافة جلسة المتصفح المسجل دخوله. لم يبدأ إصدار مفاتيح API منفصلة للعملاء بعد. |
| Provider App ID | server secret | OPEN_EXCHANGE_RATES_APP_ID |
| CORS | same-origin | لا تُرسل حاليًا ترويسات تسمح بالوصول عبر الأصول. |
Authorization: Token مخصص لاتصال الخادم مع مزود خارجي لأسعار الصرف، وليس لمصادقة العملاء. افحص HTTP وContent-Type فقد يكون رفض الوصول HTML أو إعادة توجيه.
نقاط النهاية
| Method | Path | الوصف |
|---|---|---|
| GET | /v1/currencies | جميع الرموز ذات الأسعار الحالية مع أسماء المزود. تشمل العملات البديلة والمعادن المتاحة. |
| GET | /v1/quotes | رمز عملة الأساس؛ القيمة الافتراضية USD. يُقبل أي رمز متاح حاليًا لدى المزود. |
| GET | /v1/exchange | المبلغ الرقمي غير السالب المطلوب تحويله. |
| GET | /v1/history | استخدم /v1/history لأسعار يوم محدد و/v1/series لنطاق زمني. |
| GET | /v1/series | استخدم /v1/history لأسعار يوم محدد و/v1/series لنطاق زمني. |
| GET | /v1/candles | OHLC |
| GET | /v1/capabilities | التوفر |
| GET | /api/rates/latest | آخر سعر منشور |
| GET | /api/currencies | العملة |
| GET | /api/rates/history | الرسوم البيانية |
| GET | /api/rates/previous | يوم UTC السابق |
| POST | /api/convert | محول العملات |
/v1 للاستعلامات المختصرة؛ /api لأسعار الموقع والسجل والتحويل. تختلف القيم الافتراضية وصيغ الاستجابة.
GET /v1/currencies
جميع الرموز ذات الأسعار الحالية مع أسماء المزود. تشمل العملات البديلة والمعادن المتاحة.
المعامل: —
curl --request GET 'https://lumeexchangerates.com/v1/currencies'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"mode": "provider",
"source": "مزود خارجي لأسعار الصرف",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": [
{
"code": "USD",
"name": "United States Dollar"
},
{
"code": "EUR",
"name": "Euro"
},
{
"code": "JPY",
"name": "Japanese Yen"
}
]
}| المعامل | النوع | الوصف |
|---|---|---|
| data[].code | string | رمز بأحرف كبيرة؛ قد تتجاوز رموز الأصول البديلة ثلاثة أحرف أو تتضمن شرطة سفلية. |
| data[].name | string | اسم العملة من المزود، أو الرمز إذا لم يتوفر الاسم. |
GET /v1/quotes
رمز عملة الأساس؛ القيمة الافتراضية USD. يُقبل أي رمز متاح حاليًا لدى المزود.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| anchor | string | اختياري | USD | رمز عملة الأساس؛ القيمة الافتراضية USD. يُقبل أي رمز متاح حاليًا لدى المزود. |
| targets | string | اختياري | الكل | رموز العملات المستهدفة مفصولة بفواصل. احذف المعامل لإرجاع جميع الرموز المتاحة. |
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"mode": "provider",
"source": "مزود خارجي لأسعار الصرف",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"value": 0.9
},
{
"currency": "JPY",
"value": 150
}
]
}/v1/quotes?anchor=EUR&targets=USD,JPY يعيد وحدات الهدف لكل وحدة أساس. تُحذف التكرارات؛ الرموز الفارغة أو الصغيرة أو غير المتاحة تعيد 400.
| المعامل | النوع | الوصف |
|---|---|---|
| anchor | string | رمز عملة الأساس؛ القيمة الافتراضية USD. يُقبل أي رمز متاح حاليًا لدى المزود. |
| data[].currency | string | إلى |
| data[].value | number | rates[currency] / rates[anchor] |
GET /v1/exchange
المبلغ الرقمي غير السالب المطلوب تحويله.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| from | string | اختياري | USD | رمز العملة المصدر؛ القيمة الافتراضية USD. |
| to | string | اختياري | KRW | رمز العملة الهدف؛ القيمة الافتراضية KRW. |
| quantity | number | اختياري | 1 | المبلغ الرقمي غير السالب المطلوب تحويله. |
curl --request GET 'https://lumeexchangerates.com/v1/exchange?from=USD&to=EUR&quantity=100'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"mode": "provider",
"source": "مزود خارجي لأسعار الصرف",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": {
"from": "USD",
"to": "EUR",
"quantity": 100,
"rate": 0.9,
"result": 90
}
}/v1/exchange?from=USD&to=EUR&quantity=100. حدد from وto دائمًا؛ الوجهة الافتراضية لهذا المسار القديم KRW. القيم الفارغة والسالبة وNaN واللانهاية وتجاوز النتيجة تعيد 400.
| المعامل | النوع | الوصف |
|---|---|---|
| data.rate | number | rates[to] / rates[from] |
| data.result | number | quantity × rate |
GET /api/rates/latest
آخر سعر منشور
المعامل: —
curl --request GET 'https://lumeexchangerates.com/api/rates/latest'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"provider": "مزود خارجي لأسعار الصرف",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.9,
"JPY": 150
}
}
}| المعامل | النوع | الوصف |
|---|---|---|
| data.base | string | USD |
| data.rates | object | الأسعار المتاحة نسبة إلى USD؛ تحقق من الرموز في أحدث استجابة. |
| meta.provider_timestamp | integer | UTC · UNIX seconds |
| meta.published_at | string | ISO 8601 · UTC |
| meta.fetched_at | string | وقت جلب الخادم، وليس وقت نشر المزود. |
| meta.expected_interval_seconds | integer | seconds |
| meta.stale | boolean | true إذا تجاوز العمر max(3 × الفاصل المتوقع، 900 ثانية). |
| meta.lag_seconds | integer | الثواني منذ نشر المزود. |
| meta.persistent_storage | boolean | هل خدمة الجمع والتخزين الدائم متصلة. |
| meta.kind | string | latest_published | utc_daily |
GET /api/currencies
العملة
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| lang | string | اختياري | en | en / ko / ja / zh / es / hi / bn / de / fr / nl / pt / it / ru / vi / th / ar / id / ur |
curl --request GET 'https://lumeexchangerates.com/api/currencies?lang=en'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"provider": "مزود خارجي لأسعار الصرف",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": [
{
"code": "USD",
"name": "US Dollar"
},
{
"code": "EUR",
"name": "Euro"
}
]
}تُترجم الأسماء عبر Intl.DisplayNames. تحتفظ الأصول غير المعروفة برموزها. لا تُعاد إلا الرموز الحالية.
GET /api/rates/history
استخدم /v1/history لأسعار يوم محدد و/v1/series لنطاق زمني.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| from | string | اختياري | USD | من |
| to | string | اختياري | EUR | إلى |
| period | enum | اختياري | 1M | 1D | 1W | 1M | 3M | 1Y |
curl --request GET 'https://lumeexchangerates.com/api/rates/history?from=USD&to=EUR&period=1W'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"kind": "utc_daily",
"from": "USD",
"to": "EUR",
"period": "1W",
"provider": "مزود خارجي لأسعار الصرف",
"persistent_storage": false
},
"data": [
{
"time": "2026-01-01",
"value": 0.9
},
{
"time": "2026-01-02",
"value": 0.91
}
]
}يبدأ 1W قبل سبعة أيام؛ وتتبع 1M و3M و1Y التقويم. تنتهي البيانات اليومية بالأمس. تُضبط نهايات الأشهر والسنوات الكبيسة، وتُقسم الفترات الطويلة حسب الأشهر ثم تُرتب وتزال التكرارات.
| المعامل | النوع | الوصف |
|---|---|---|
| data[].time | string | integer | اليومي: YYYY-MM-DD (UTC). خلال اليوم: ثواني UNIX. |
| data[].value | number | rates[to] / rates[from] |
| meta.kind | string | utc_daily | intraday |
{
"meta": {
"kind": "intraday",
"persistent_storage": false
},
"data": []
}دون خدمة الجمع يعيد 1D الحالة HTTP 200 وقائمة فارغة؛ ليست خطأ أو بيانات دقيقة بدقيقة. قد تفشل عملة لم تكن متاحة في الفترة التاريخية.
GET /api/rates/previous
يوم UTC السابق
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| from | string | اختياري | USD | من |
| to | string | اختياري | EUR | إلى |
curl --request GET 'https://lumeexchangerates.com/api/rates/previous?from=USD&to=EUR'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"kind": "utc_daily",
"reference_date": "2026-01-01",
"reference_timestamp": "2026-01-01T23:59:59Z"
},
"data": {
"from": "USD",
"to": "EUR",
"rate": 0.9,
"rates": {
"USD": 1,
"EUR": 0.9
}
}
}المقارنة بيوم UTC السابق. reference_timestamp نهاية يوم منطقية، لا وقت نشر فعلي. النسبة: (الحالي − المرجع) / المرجع × 100.
POST /api/convert
محول العملات
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| Content-Type | header | مطلوب | application/json | application/json |
| amount | number | مطلوب | — | 0 ≤ amount ≤ 1e15; finite |
| from | string | مطلوب | — | من |
| to | string | مطلوب | — | إلى |
curl --request POST 'https://lumeexchangerates.com/api/convert' \
--header 'Content-Type: application/json' \
--data '{"amount":100,"from":"USD","to":"EUR"}'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"provider": "مزود خارجي لأسعار الصرف",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"amount": 100,
"from": "USD",
"to": "EUR",
"rate": 0.9,
"result": 90
}
}أرسل amount كرقم JSON؛ السلسلة "100" تعيد 400. يجب وجود الرموز في اللقطة الحالية. لا ينفذ المسار تحويل أموال أو تداولًا.
GET /v1/history
استخدم /v1/history لأسعار يوم محدد و/v1/series لنطاق زمني.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| date | YYYY-MM-DD | مطلوب | — | 1999-01-01 ≤ date ≤ UTC today |
| anchor | string | اختياري | USD | من |
| targets | CSV | اختياري | all | إلى |
curl --request GET 'https://lumeexchangerates.com/v1/history?date=2026-01-01&anchor=EUR&targets=USD,JPY'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"date": "2026-01-01",
"published_at": "2026-01-01T23:00:00Z",
"partial_day": false
},
"anchor": "EUR",
"data": [
{
"currency": "USD",
"value": 1.1
}
]
}| المعامل | النوع | الوصف |
|---|---|---|
| meta.partial_day | boolean | مرجع يومي بتوقيت UTC |
| meta.published_at | ISO 8601 UTC | آخر سعر منشور |
GET /v1/series
استخدم /v1/history لأسعار يوم محدد و/v1/series لنطاق زمني.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| start / end | YYYY-MM-DD | مطلوب | — | 1999-01-01 ≤ start ≤ end < UTC today; ≤ 366 days inclusive |
| anchor / targets | string / CSV | اختياري | USD / all | same as /v1/quotes |
curl --request GET 'https://lumeexchangerates.com/v1/series?start=2026-01-01&end=2026-01-07&anchor=USD&targets=EUR'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"start": "2026-01-01",
"end": "2026-01-02",
"timezone": "UTC",
"count": 2
},
"anchor": "USD",
"data": [
{
"date": "2026-01-01",
"rates": [
{
"currency": "EUR",
"value": 0.9
}
]
},
{
"date": "2026-01-02",
"rates": [
{
"currency": "EUR",
"value": 0.91
}
]
}
]
}تتطلب بيانات OHLC عبر /v1/candles صلاحية لدى المزود. تحقق من /v1/capabilities؛ يعتمد التوفر على الخطة المتصلة.
{
"timezone": "UTC",
"date_bounds": "inclusive",
"max_days": 366,
"upstream_chunk": "calendar_month"
}GET /v1/candles
تتطلب بيانات OHLC عبر /v1/candles صلاحية لدى المزود. تحقق من /v1/capabilities؛ يعتمد التوفر على الخطة المتصلة.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
| start | YYYY-MM-DDTHH:mm:00Z | مطلوب | — | UTC; completed period only; ≥ 2016-12-19 |
| period | enum | مطلوب | — | 1m | 5m | 15m | 30m | 1h | 12h | 1d | 1w | 1mo |
| anchor / targets | string / CSV | اختياري | USD / all | provider base / symbols |
curl --request GET 'https://lumeexchangerates.com/v1/candles?start=2026-01-01T00%3A00%3A00Z&period=1d&anchor=USD&targets=EUR'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"meta": {
"start": "2026-01-01T00:00:00Z",
"end": "2026-01-01T23:59:59Z",
"period": "1d"
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"open": 0.9,
"high": 0.92,
"low": 0.89,
"close": 0.91,
"average": 0.905
}
]
}{
"source": "provider_ohlc",
"synthetic": false,
"cross_rate_ohlc": false,
"max_age": {
"1m": "1h",
"5m": "24h",
"15m": "24h",
"30m": "32d",
"1h": "32d"
},
"alignment_minutes": {
"5m": 5,
"15m": 15,
"30m": 30,
"1h": 30,
"12h": 30,
"1d": 30
},
"calendar_alignment": {
"1w": "00:00 UTC",
"1mo": "YYYY-MM-01T00:00:00Z"
}
}GET /v1/capabilities
التوفر
المعامل: —
curl --request GET 'https://lumeexchangerates.com/v1/capabilities'القيم والتواريخ أمثلة وليست أسعارًا حالية. قد تُختصر القوائم؛ استخدم تجربة API للبيانات الفعلية.
{
"data": {
"latest": true,
"currencies": true,
"conversion": "latest_snapshot",
"historical": "verified_on_request",
"time_series": true,
"ohlc": false,
"refresh_interval_seconds": 300,
"customer_api_keys": false
}
}تتطلب بيانات OHLC عبر /v1/candles صلاحية لدى المزود. تحقق من /v1/capabilities؛ يعتمد التوفر على الخطة المتصلة.
البيانات والدقة
الأسعار إرشادية وليست عرضًا مصرفيًا أو سعر تنفيذ مضمونًا. يستخدم التحويل اللقطة نفسها، ويكون التقريب عند العرض أو التسوية.
rate = rates[to] / rates[from]
result = amount * rateتحافظ الأسعار على دقة الأعداد العشرية العائمة دون اقتطاع إلى منازل ثابتة. قرّب الأرقام عند العرض أو وفق سياستك المحاسبية فقط.
وحدة مصدر واحدة، بما فيها JPY. اضرب في 100 للعرض فقط عند الحاجة. راع أخطاء JavaScript الثنائية وحدد سياسة الكسور والتقريب للتسوية.
التاريخ والوقت
UNIX ثواني UTC، وISO يستخدم Z. قد يختلف تاريخ UTC عن المحلي. يعرض الموقع منطقة المتصفح؛ meta.timezone مجرد تلميح عرض.
| المعامل | النوع | الوصف |
|---|---|---|
| /v1 meta.as_of | ISO 8601 | YYYY-MM-DD | التوقيت المرجعي للمزود |
| /v1 meta.refresh_interval_seconds | integer | التخزين المؤقت |
| /v1 meta.currency_count | integer | تتوفر … عملة |
| /v1 meta.mode | provider | daily | مصدر البيانات |
| /api meta.published_at | ISO 8601 UTC | آخر سعر منشور |
| history data[].time | YYYY-MM-DD UTC | UNIX seconds | مرجع يومي بتوقيت UTC |
الأخطاء
| HTTP | code | الوصف |
|---|---|---|
| 400 | INVALID_CURRENCY / INVALID_INPUT / INVALID_CONVERSION / INVALID_JSON / INVALID_PERIOD | أدخل مبلغًا غير سالب |
| 405 | METHOD_NOT_ALLOWED | GET: /v1/*, /api/rates/*, /api/currencies; POST: /api/convert |
| 404 | NOT_FOUND | /api/rates/* |
| 422 | HISTORY_NOT_IN_PLAN / DATA_UNAVAILABLE | التوفر |
| 429 | RATE_LIMITED | /api/* · 90 / IP / minute |
| 404 | NOT_FOUND | Unknown /v1 endpoint |
| 422 | FEATURE_NOT_IN_PLAN / HISTORY_NOT_IN_PLAN / OHLC_NOT_IN_PLAN | التوفر |
| 400 | INVALID_DATE / INVALID_DATE_RANGE / INVALID_PERIOD / INCOMPLETE_PERIOD | أدخل مبلغًا غير سالب |
| 503 | PROVIDER_UNAVAILABLE / DATA_UNAVAILABLE / SERVICE_UNAVAILABLE | الأسعار غير متاحة. حاول مجددًا بعد قليل. |
{
"error": {
"code": "INVALID_CURRENCY",
"message": "Symbol not available in latest provider data"
}
}قد يغيب message. استخدم HTTP وerror.code. صحح المدخلات؛ عند 429 أو 503 المؤقت استخدم محاولات محدودة بتأخير أُسّي وعشوائي. لا يُضمن Retry-After.
الحدود والتخزين المؤقت
تُخزّن البيانات مؤقتًا والفاصل المهيأ خمس دقائق. /api: تسعون طلبًا في الدقيقة لكل IP، محليًا في Worker المباشر ومشتركًا مع Redis. لا يطبق /v1 حصص الخطط المستقبلية بعد.
Cache-Control: no-store يخص الاستجابة لا ذاكرة المزود بالخادم. أعد استخدام اللقطات حسب النشر. عند العطل قد تعود آخر لقطة صحيحة: افحص stale أو as_of. ذاكرة Worker غير دائمة.
{
"endpoints": [
"/v1/history",
"/v1/series",
"/v1/candles",
"/v1/capabilities"
],
"requests_per_ip_per_minute": 60,
"cache": "in_process",
"completed_history_cache_seconds": 3600,
"current_day_cache_seconds": 60
}التوفر
تتطلب بيانات OHLC عبر /v1/candles صلاحية لدى المزود. تحقق من /v1/capabilities؛ يعتمد التوفر على الخطة المتصلة.
تتطلب بيانات OHLC عبر /v1/candles صلاحية لدى المزود. تحقق من /v1/capabilities؛ يعتمد التوفر على الخطة المتصلة.
تجربة API
استدعِ API على هذا الموقع. يبقى مفتاح مزود البيانات على الخادم.
نفّذ الطلب لعرض استجابة JSON الفعلية.