إذا سبق أن حاولت عرض سعر صرف Wise داخل منتجك الخاص، فالأرجح أنك اكتشفت أن واجهة أسعار الصرف من Wise ليست تمامًا ما توقّعته. تنشر Wise بيانات ممتازة فعلًا لسعر السوق الوسطي (mid-market rate) وتتيحها عبر نقطة نهاية REST — لكنها تقع خلف عملية اعتماد شركاء، وتعيش داخل واجهة مدفوعات لا واجهة بيانات سوق، والسعر الذي تحصل عليه ليس عمدًا السعر الذي سيدفعه مستخدمك.
يغطي هذا الدليل بالضبط ما تتيحه Wise، وكيف تصادق عليه، وما تُرجعه كل نقطة نهاية فعليًا، والقيود البنيوية الخمسة التي تحدد ما إذا كانت Wise المصدر المناسب لمشروعك. كما يجيب بصراحة عن السؤال الذي يطرحه معظم الناس فعليًا: إذا كنت تحتاج فقط إلى أسعار سوق وسطية موثوقة داخل تطبيق، فهل Wise هي الأداة المناسبة لهذه المهمة؟
ما هي واجهة أسعار الصرف من Wise حقًا
Wise شركة تحويل أموال. واجهتها البرمجية — تحت اسم Wise Platform — مبنية لتحريك المال: إنشاء عروض أسعار، تسجيل المستفيدين، تمويل التحويلات، تسوية الأرصدة، إصدار البطاقات. تظهر أسعار الصرف في تلك الواجهة لأنه لا يمكن تسعير تحويل من دونها، لا لأن Wise تبيع بيانات السوق.
هذا التأطير يفسّر تقريبًا كل مفاجأة يصطدم بها المطوّرون. الأسعار وحدة صغيرة داخل منصة مدفوعات، ومحصورة بمسارات العملات التي تخدمها Wise فعليًا.
ثلاث واجهات منفصلة، وثلاثة مسارات وصول مختلفة
أكبر مصدر للالتباس أن «واجهة أسعار Wise» تشير إلى ثلاثة أشياء مختلفة على الأقل:
GET /rates— نقطة نهاية أسعار الصرف. تُرجع سعر السوق الوسطي لدى Wise لزوج عملات، حاليًا أو تاريخيًا. هذا ما يقصده معظم الناس.POST /quotes— نقطة نهاية عروض الأسعار. تُرجع تحويلًا مُسعّرًا: السعر، الرسوم، وقت الوصول التقديري، وطابع انتهاء صلاحية السعر.GET /comparisons— نقطة نهاية المقارنة. تُرجع تقديرات السعر والسرعة لـ Wise ولمزودين وبنوك منافسة على مسار معيّن.
الثلاثة موثّقة في المرجع نفسه، وتستخدم أنظمة مصادقة مختلفة، وتجيب عن أسئلة شديدة الاختلاف. اختيار النقطة الخاطئة هو السبب المعتاد لسؤال «لماذا يختلف هذا السعر عمّا يعرضه wise.com؟».
كيف تحصل على صلاحية الوصول إلى بيانات أسعار Wise
لا يوجد مفتاح واجهة برمجية ذاتي الخدمة. ينقسم الوصول إلى مسارين:
شركاء المنصة. تنضم كشريك Wise Platform وتصادق عبر OAuth 2.0 (معرّف العميل وسرّه) للحصول على رمز وصول. يشير مرجع /rates إلى أن نقطة النهاية «تدعم فقط مصادقة Bearer للشركاء غير التابعين لبرنامج الإحالة»، باستخدام User Token أو Personal Token.
شركاء الإحالة (Affiliate). تنضم إلى برنامج الإحالة من Wise، ثم تراسل partnerwise@wise.com لطلب بيانات الاعتماد. تراجع Wise الطلب، وعند الموافقة تصدر بيانات اعتماد Basic auth تفتح نقطتي نهاية بالضبط: Exchange Rates List و Get Temporary Quote. لا شيء غير ذلك.
هنا مفترق الطريق. إذا كنت تبني موقع مقارنة، أو أداة لمدونة سفر، أو صفحة تسويقية لشركة تقنية مالية، فمسار الإحالة مصمّم لك تحديدًا. أما إذا كنت تبني ميزة داخل منتج — تسعيرًا متعدد العملات، أو فوترة، أو شاشة تحويل، أو تقريرًا داخليًا — فأنت تطلب من فريق شراكات المدفوعات اعتمادك للحصول على بيانات سوق، وهذا ليس ما يريده أي من الطرفين من تلك العلاقة.
لاحظ أيضًا أن Wise تثبّت إصدار الواجهة داخل مسار الرابط: الإنتاج هو https://api.wise.com/2026Q3/rates، وبيئة الاختبار https://api.wise-sandbox.com/2026Q3/rates. ولا تزال وثائق الإحالة القديمة تشير إلى /v1/rates على api.transferwise.com. وجود الإصدار داخل المسار يعني أن تكاملك يتقادم بصمت ما لم يتولَّ أحدهم مسؤولية الترقية.
استدعاء نقطة نهاية الأسعار في Wise
بمجرد حصولك على رمز الوصول، تكون نقطة النهاية نفسها نظيفة وحسنة التصميم. الوثائق تعرض أربع صيغ للاستدعاء:
# Latest rates for every supported currency
curl -X GET 'https://api.wise.com/2026Q3/rates' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# Latest rate for a single pair
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# Rate at a specific historical moment
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&time=2019-02-13T14:53:01' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# A time series, grouped by day, hour or minute
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&from=2019-02-13&to=2019-03-13&group=day' \
-H 'Authorization: Bearer <YOUR_TOKEN>'الاستجابة مصفوفة، بكائن واحد لكل فترة:
[
{
"rate": 1.166,
"source": "EUR",
"target": "USD",
"time": "2018-08-31T10:43:31+0000"
}
]تفصيلان يستحقان الإشارة. أولًا، يقبل group القيم day وhour وminute — والتاريخ على مستوى الدقيقة سخيّ بشكل غير معتاد ومفيد فعلًا للاختبار الرجعي. ثانيًا، الاستجابة دائمًا مصفوفة، حتى لزوج واحد، فحلّلها على هذا الأساس:
import requests
TOKEN = "<YOUR_TOKEN>"
BASE = "https://api.wise.com/2026Q3"
def wise_rate(source: str, target: str) -> float:
r = requests.get(
f"{BASE}/rates",
params={"source": source, "target": target},
headers={"Authorization": f"Bearer {TOKEN}"},
timeout=10,
)
r.raise_for_status()
payload = r.json()
if not payload:
raise LookupError(f"No rate returned for {source}/{target}")
return payload[0]["rate"] # array, even for one pair
print(wise_rate("EUR", "USD"))وثمة فخ آخر موثّق جيدًا في الممارسة: إذا أرسلت time مع from/to في الطلب نفسه، تغلب معاملات النطاق ويُتجاهل time. تسبّب ذلك في خلل طويل الأمد في عقدة Wise ضمن n8n لم يُصلح إلا برقعة في المصدر. أرسل أحدهما فقط، لا الاثنين معًا أبدًا.
سعر السوق الوسطي ليس السعر الذي يدفعه مستخدمك
تُرجع نقطة /rates لدى Wise سعر السوق الوسطي — نقطة المنتصف بين سعري الشراء والبيع في سوق ما بين البنوك. هذا هو السعر «الحقيقي»، وعليه تبني Wise تسويقها. وهو أيضًا، بحكم التعريف، سعر لا يتداول به أحد.
إذا كنت تريد معرفة تكلفة التحويل فعليًا، فأنت تحتاج إلى /quotes:
curl -X POST 'https://api.wise.com/2026Q3/quotes' \
-H 'Authorization: Bearer <YOUR_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"sourceCurrency": "GBP",
"targetCurrency": "USD",
"sourceAmount": 100
}'تحمل استجابة العرض الحقول التي يحتاجها منطق التسعير فعلًا: rate وrateType (مثل FIXED) وrateExpirationTime وتفصيل fee وfeePercentage ومصفوفة paymentOptions تتضمن estimatedDelivery لكل طريقة دفع. كما تُرجع notices — ومثال Wise الموثّق نفسه يحذّر من أن العميل يمكنه الاحتفاظ بثلاث تحويلات مفتوحة كحد أقصى بسعر مضمون قبل أن تنتقل التالية إلى السعر الحي.
النتيجة العملية: العرض كائن قصير العمر ذو حالة ومرتبط بتحويل بعينه، لا استعلام سعر يمكنك استطلاعه بشكل دوري. إذا كانت حالتك «عرض سعر اليوم بالدولار على صفحة التسعير»، فالعروض هي البنية الخاطئة والأسعار هي الصحيحة. وإذا كانت «إخبار المستخدم بدقة بما سيستلمه»، فالأسعار وحدها ستبالغ في التقدير. الخلط بين هذين هو مصدر شائع لفروق التقريب والتسوية التي وصفناها في دليلنا عن تقريب العملات والمنازل العشرية.
ما تُرجعه واجهة المقارنة فعليًا
نقطة نهاية المقارنة هي الجزء الأكثر إثارة للاهتمام والأكثر سوء فهم في المنصة. تُرجع تقديرات السعر والسرعة لكل مزوّد للبنوك وخدمات التحويل على مسار معيّن:
curl -X GET 'https://api.wise.com/2026Q3/comparisons?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=10000&filter=POPULAR'قبل أن تبني أي شيء فوقها، اقرأ ملاحظة المنهجية من Wise نفسها بعناية. تذكر Wise أنها تجمع الأسعار والرسوم المعلنة من مواقع طرف ثالث، وتحسب هامش كل مزوّد فوق سعر السوق الوسطي وقت الجمع، ثم تعيد تطبيق ذلك الهامش المخزّن على سعر السوق الوسطي الحالي لإنتاج الرقم الذي تستلمه. ويجري الجمع تقريبًا مرة كل ساعة.
بعبارة أخرى، أسعار المنافسين من هذه النقطة تقديرات مُنمذجة مشتقة من عمليات جمع ساعية، لا عروض حية. تقول Wise ذلك صراحة، وهذا يُحسب لها — لكنه يعني أن البيانات غير صالحة لأي استخدام يتعيّن فيه عليك تحمّل مسؤولية رقم المنافس. كما تقصر Wise التقديرات على الإيداع والسحب عبر التحويل المصرفي فقط، وتشير إلى أن كثيرًا من المزوّدين يسعّرون معاملات البطاقات والنقد بشكل مختلف تمامًا.
بنيويًا، الاستجابة غير مُطبَّعة: قد يُرجع المزوّد نفسه عدة عروض للزوج ذاته لأن السعر والسرعة يتغيران بحسب بلد الوجهة. تحصل على مصفوفة providers، لكل منها مصفوفة quotes، واختزال ذلك إلى رقم واحد لكل مزوّد مهمتك أنت لا مهمة الواجهة.
خمسة قيود ينبغي معرفتها قبل البناء على أسعار Wise
- الوصول علاقة تجارية لا تسجيل. اعتماد الإحالة أو انضمام المنصة يسبق كل استدعاء للأسعار. لا توجد لوحة تحكم تولّد فيها مفتاحًا في ثلاثين ثانية.
- التغطية تتبع مسارات التحويل. تدعم Wise العملات التي تستطيع تحريك الأموال بها. أما مزوّد البيانات المتخصص فيغطي العملات التي يستطيع تسعيرها، وهي مجموعة أوسع — تغطي Finexly أكثر من 170 عملة، بينها عملات لا يوجد لها ممر تحويل أصلًا.
- الأسعار وحدة واحدة داخل واجهة مدفوعات. حولها عروض الأسعار والمستفيدون واعرف عميلك والبطاقات وخطافات الويب. وهذا تكامل كبير وحسّاس أمنيًا يجب صيانته بينما كل ما أردته رقم واحد.
- لا حصة منشورة. يوثّق مرجع
/ratesاستجابة429لكنه لا ينشر حدًّا عامًا للطلبات، فتخطط للسعة في مواجهة سقف غير معلن. قارن ذلك بنموذج صريح يرسل الترويسات في كل استجابة. - عملتان لكل استدعاء. يقبل
/ratesقيمة واحدة لـsourceوأخرى لـtarget. تسعير صفحة بثماني عملات يعني ثمانية استدعاءات، أو جلب الجدول كاملًا والتصفية في العميل.
لا شيء من هذا عيب. هكذا تبدو واجهة مدفوعات حين تستخدمها كواجهة بيانات.
متى تكون Wise الخيار الصحيح ومتى لا تكون
| حالتك | الخيار الأفضل | السبب |
|---|---|---|
| موقع مقارنة أو محتوى إحالة «البنوك مقابل Wise» | واجهة المقارنة من Wise | المصدر الوحيد لهذه البيانات، ومسار الإحالة موجود لهذا تحديدًا |
| إرسال أموال فعليًا عبر Wise | Quotes + Transfers من Wise | تحتاج إلى كائن العرض المسعّر ذي الصلاحية المنتهية |
| عرض سعر Wise بعلامته التجارية لأن مستخدميك يطلبونه | /rates من Wise | نسبة العلامة التجارية هي الغاية كلها |
| تسعير متعدد العملات أو إتمام الشراء أو شاشة تحويل | واجهة عملات مخصّصة | تحتاج إلى اتساع وتغطية ومفتاح فوري وعقد بسيط |
| الفوترة والتحصيل وتقارير الإيرادات | واجهة عملات مخصّصة | تحتاج إلى سلسلة تاريخية مستقرة وأثر تدقيق |
| الاختبار الرجعي أو التحليلات | كلاهما | تاريخ Wise بالدقيقة قوي؛ وواجهة البيانات أسهل في الحصول عليها |
استخدام واجهة أسعار صرف مخصّصة بدلًا من ذلك
تقلب واجهة البيانات المفاضلة رأسًا على عقب: لا مكالمة انضمام، تغطية أوسع، حصة صريحة، واستجابة لا تحتوي شيئًا سوى السعر.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finexly.com/v1/rate?from=EUR&to=USD"{ "pair": "EUR_USD", "rate": 1.0852 }تسعير صفحة بعدة عملات يصبح رحلة واحدة بدل استدعاء لكل زوج:
const apiKey = process.env.FINEXLY_API_KEY;
async function priceTable(base, quotes) {
const q = quotes.map((c) => `${base}_${c}`).join(',');
const res = await fetch(`https://api.finexly.com/v1/convert?q=${q}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!res.ok) throw new Error(`Finexly ${res.status}`);
return res.json();
}
const rates = await priceTable('USD', ['EUR', 'GBP', 'JPY', 'CAD', 'AUD']);
// { "USD_EUR": { "rate": 0.9215 }, "USD_GBP": { "rate": 0.7892 }, ... }وحين تريد المبلغ المحوَّل لا المُضاعِف، دع الواجهة تتولى الحساب ليحدث التقريب في مكان واحد:
import requests
def convert(amount, src, dst, api_key):
r = requests.get(
"https://api.finexly.com/v1/convert-amount",
params={"from": src, "to": dst, "amount": amount},
headers={"Authorization": f"Bearer {api_key}"},
timeout=10,
)
r.raise_for_status()
return r.json()["result"]
print(convert(100, "USD", "EUR", "YOUR_API_KEY"))تحمل كل استجابة الترويسات X-RateLimit-Limit وX-RateLimit-Used وX-RateLimit-Units، فتصبح الحصة قابلة للملاحظة لا مستنتَجة. وتُحدَّث الأسعار كل دقيقة خلال ساعات السوق. تتيح الخطة المجانية 1,000 طلب شهريًا بمعدل 10 طلبات في الدقيقة، وتبدأ الخطط المدفوعة من 6.99 دولار شهريًا مقابل 3,500 طلب وتصل إلى 100,000 في خطة Professional — التفصيل الكامل في صفحة الأسعار.
ملاحظة سريعة عن الحجم: 1,000 طلب شهريًا تبدو قليلة حتى تستخدم التخزين المؤقت. مهمة مجدولة واحدة تحدّث جدول الأسعار كاملًا كل خمس عشرة دقيقة تستهلك نحو 2,900 استدعاء شهريًا؛ وكل ستين دقيقة نحو 730. التخزين المؤقت يحوّل حجم استدعاءاتك إلى دالة في الزمن لا في حركة المرور، وهذا ما يجعل خطة صغيرة قابلة للاستمرار عند أي حجم. الأنماط موضّحة في التخزين المؤقت ومعالجة الأخطاء لواجهات العملات.
الانتقال من /rates في Wise
إذا كنت تنقل تكاملًا قائمًا، فالمقابلة تكاد تكون واحدًا لواحد:
| Wise | المقابل | ملاحظة |
|---|---|---|
GET /rates | GET /v1/currencies ثم /v1/rate | /rates المجرّدة لدى Wise تُرجع كل شيء؛ اجلب قائمة العملات مرة واحدة |
GET /rates?source=X&target=Y | GET /v1/rate?from=X&to=Y | تُرجع كائنًا لا مصفوفة من عنصر واحد |
| عدة أزواج وعدة استدعاءات | GET /v1/convert?q=X_Y,X_Z | طلب واحد |
amount * rate يدويًا | GET /v1/convert-amount | التقريب يُعالج في الخادم |
نقطة تاريخية ?time= | نقطة نهاية تاريخية | تتطلب خطة مدفوعة؛ راجع دليل الأسعار التاريخية |
| رمز Basic أو OAuth | Authorization: Bearer | المفتاح من لوحة التحكم، بلا خطوة اعتماد |
أخيرًا: من فضلك لا تكشط wise.com. عدة عروض في أسواق الخدمات تقدّم ذلك بالضبط، وهي هشّة وملتبسة قانونيًا وتنكسر عند أول تغيير في بنية الصفحة. إذا كنت تحتاج رقم Wise تحديدًا، فاسلك مسار الإحالة واحصل عليه من الواجهة بالطريقة الصحيحة. وإذا كنت تحتاج رقمًا فحسب، فاستخدم واجهة مبنية لتقديمه. تتناول مقارنتنا لـواجهات العملات المجانية ودليل بدائل Frankfurter الخيارات التي لا تتطلب مفتاحًا بعمق أكبر.
الأسئلة الشائعة
هل واجهة أسعار الصرف من Wise مجانية؟ لا توجد تكلفة منشورة لكل طلب لنقطة الأسعار، لكن الوصول ليس مفتوحًا. يجب أن تكون شريك Wise Platform معتمدًا أو شريك إحالة معتمدًا، وهذا يعني طلبًا ومراجعة لا نموذج تسجيل. الكلفة في معظم المشاريع وقت لا مال.
هل يمكنني استخدام واجهة Wise دون حساب؟
لا. كلا المسارين الموثّقين يتطلبان بيانات اعتماد — رموز Bearer لشركاء المنصة، ومعرّف عميل وسرّ بمصادقة Basic لشركاء الإحالة. نقطة النهاية الوحيدة التي يخلو مثالها الموثّق من ترويسة التفويض هي /comparisons، وبناء حركة إنتاج على هذا الافتراض غير حكيم.
هل تُرجع واجهة Wise السعر ذاته المعروض على wise.com؟
تُرجع /rates سعر السوق الوسطي، وهو الرقم الذي تروّج له Wise. أما المبلغ الذي يستلمه العميل فعلًا فيأتي من /quotes ويتضمن رسوم Wise. إذا لم تتطابق أرقامك مع الموقع، فأنت شبه مؤكد تقارن سعرًا وسطيًا بعرض مسعّر.
إلى أي مدى تعود بيانات Wise التاريخية؟
تقبل نقطة النهاية طوابع from/to اعتباطية مع تجميع بـ day أو hour أو minute؛ ولا تنشر Wise في المرجع تاريخًا أقدم ثابتًا، فاختبر النطاق الذي تحتاجه تحديدًا بدل افتراض التغطية.
ما أفضل بديل لواجهة أسعار الصرف من Wise؟ يعتمد على ما تستبدله. لمقارنة أسعار المنافسين لا يوجد بديل — واجهة المقارنة من Wise فريدة. أما لأسعار السوق الوسطي داخل منتج، فواجهة بيانات عملات مخصّصة تمنحك تغطية أوسع ومفاتيح فورية وحصة صريحة. قارن الخيارات على صفحة مقارنة الواجهات لدينا.
هل يمكنني قانونًا عرض سعر Wise لمستخدميّ؟ إذا كنت شريك إحالة أو شريك منصة معتمدًا، فنعم، ضمن شروط تلك الاتفاقية. أما كشط الموقع العام للحصول على الأرقام نفسها فمسألة أخرى، ولا ننصح ببناء نشاط تجاري عليها.
هل أنت مستعد لتخطّي انضمام الشركاء والحصول على الأسعار مباشرة؟ احصل على مفتاح Finexly المجاني — دون بطاقة ائتمان. ابدأ بـ 1,000 طلب مجاني شهريًا عبر أكثر من 170 عملة، ولا ترقِّ إلا حين تنمو حركة مرورك. ويمكنك أيضًا تجربة الأسعار في المتصفح أولًا عبر محوّل العملات لدينا.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →