Developers
توثيق API
واجهة برمجة تطبيقات تُرجع نفس تفصيل الرسوم مثل الموقع، سطرًا بسطر، دون أي هامش خفي. تصف هذه الصفحة الاصطلاحات المشتركة بين كل نقطة نهاية، وتحدد بدقة ما هو مفتوح اليوم.
ما هو مفتوح اليوم
نقطة النهاية 1 مكشوفة فعليًا وقابلة للاستدعاء: التسعير. أما البقية 5 فمنشورة كعقد، بحيث يمكنك البناء قبل فتحها، وتحمل كل منها شارة صريحة.
نحن نوثق مسبقًا لأنه يساعد على التكامل. إيهامك بأنها موصولة لن يكون مفيدًا: كل نقطة نهاية تذكر حالتها، والاستجابات النموذجية لنقاط النهاية المفتوحة هي استجابات تم الحصول عليها فعليًا، وليست نماذج.
عنوان URL الأساسي والإصدارات
يوجد أساسان يتعايشان: الذي يجيب اليوم، وواجهة البرمجة ذات الإصدارات التي ستأتي مع المفاتيح المُصدرة.
- اليوم
- /api Live
- واجهة برمجة التطبيقات ذات الإصدارات
- /api/v1 Published contract, not open
الإصدار موجود في المسار، وليس في ترويسة: يجب أن يتحمل عنوان URL لصقه في تذكرة. التغيير الجذري — حقل محذوف، نوع مُغيَّر، دلالات مختلفة — يفتح إصدارًا جديدًا؛ ويستمر تقديم الإصدار السابق لمدة ستة أشهر على الأقل، مع الإعلان عن تاريخ انتهائه في سجل التغييرات. إضافة حقل ليس تغييرًا جذريًا: يجب على عميلك تجاهل الحقول التي لا يعرفها.
الاصطلاحات
تنطبق على كل نقطة نهاية، مفتوحة أو قادمة. معظمها موجود لسبب واحد: ألا نخسر سنتًا واحدًا أثناء النقل.
المبالغ هي سلاسل نصية، أو أعداد صحيحة للوحدات الصغرى
أبدًا رقم عائم. في JSON، 0.1 + 0.2 ليس 0.3، والمبلغ الكبير يفقد الوحدات الصغرى عند التسلسل. لذلك تُرسل مبالغ الوحدات الرئيسية كسلاسل نصية، والمبالغ الداخلية كأعداد صحيحة للوحدات الصغرى مع عددها العشري.
{
"net": "912.28",
"currency": "EUR",
"currencyDecimals": 2
}الكسور العشرية تعتمد على العملة
اليورو له منزلتان عشريتان، والفرنك الأفريقي والدونغ الفيتنامي ليس لهما أي منزلة عشرية. لا تقم بترميز "× 100" بشكل ثابت: اقرأ currencyDecimals، أو حقل الكسور العشرية من البيانات المرجعية.
{ "amount": "125000", "currency": "XOF", "currencyDecimals": 0 }مبالغ العملات المشفرة بالوحدات الأساسية
يُعاد الإيداع مع عدد كسوره العشرية: 8 للبيتكوين، و6 لـ USDT، و18 للإيثر. يمكن أن يوجد نفس الرمز بكسور عشرية مختلفة اعتمادًا على الشبكة: ثق بالحقل، وليس بذاكرتك.
{ "deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 } }الطوابع الزمنية
التواريخ بصيغة ISO 8601 UTC. استثناء واحد متعمد: rateAsOf هو طابع زمني يونكس بالمللي ثانية، لأنه يغذي حساب العمر، وليس عرضًا. يحمل تاريخ بيانات السوق، وليس تاريخ طلبك: هذا التمييز هو ما يجعل السعر القديم قابلًا للاكتشاف.
{ "rateAsOf": 1788356981608, "rateSource": "coingecko" }المعرّفات مستقرة
معرّف الأصل أو قناة الدفع أو البلد لا يتغير أبدًا ولا يُعاد تعيينه أبدًا. القناة المغلقة تحتفظ بمعرّفها الخاص، مع مرحلتها وسببها: يمكن لتكاملك أن يرى لماذا غادرت خياراتك، بدلاً من العثور على ثغرة.
الرسائل الموجهة للبشر ثنائية اللغة
يُعاد سبب الرفض بالفرنسية والإنجليزية في نفس الكائن. أنت تعرض ما يطابق مستخدمك، دون جدول ترجمة لتحتفظ به من جانبك.
{ "reason": { "fr": "…", "en": "…" } }الاستدعاء الأول
لا حاجة لمفتاح للتسعير. هذا الاستدعاء يعمل كما هو.
curl -sS -X POST https://fiatside.com/api/quote \
-H 'Content-Type: application/json' \
-d '{
"assetId": "usdt",
"railId": "sepa_instant",
"networkId": "tron",
"direction": "sell",
"amount": "1000"
}'{
"deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 },
"gross": "921.68",
"net": "912.28",
"currency": "EUR",
"currencyDecimals": 2,
"midRate": "0.92168430",
"effectiveRate": "0.91228000",
"totalCostBps": 102,
"lines": [
{ "code": "network", "amount": "1.11", "basis": "Cout reseau tron, preleve en USDT" },
{ "code": "spread", "amount": "8.29", "basis": "0.90 % du montant converti" }
],
"settlement": { "p50Minutes": 1, "p95Minutes": 12 },
"lockSeconds": 1800,
"rateAsOf": 1788356981608,
"rateSource": "mock",
"limitError": null
}حقل rateSource يوضح من أين جاء السعر. القيمة "mock" هي المصدر التنموي الحتمي، الذي لا يمكن تشغيله في الإنتاج: العملية ترفض البدء بدلاً من تسعير أسعار مجمدة.
الأقسام
- المصادقةكيف تتم حماية نقطة نهاية عرض السعر اليوم، وكيف سيتم إصدار المفاتيح، وقواعد التعامل مع مفتاح الإنتاج.
- عروض الأسعارنقطة نهاية عرض السعر، وتفصيل الرسوم سطرًا بسطر، وكيف تعود حدود التحويل في الاستجابة، ومدة بقاء السعر مقفلاً بمجرد إنشاء أمر.
- الأوامرإنشاء أمر، مفتاح عدم التكرار، عنوان الإيداع، مذكرة إلزامية على بعض الشبكات، وقراءة انتقالات الحالة.
- البيانات المرجعيةكتالوجات التحويل والأصول والبلدان، ومخطط حقل المستفيد الذي يتيح لك إنشاء نموذج الدفع الخاص بك، وترقيم المؤشر.
- الخطافاتالأحداث المُرسلة، توقيع HMAC-SHA256 على الجسم الخام، نافذة إعادة الإرسال، جدول إعادة المحاولة، ولماذا يجب أن يتم التحقق في وقت ثابت.
- الأخطاءكل رمز خطأ مع حالة HTTP الخاصة به، وما يعنيه بالضبط، وما يجب فعله حياله على جانب التكامل، وأيها يستحق إعادة المحاولة.
ما لن تفعله واجهة البرمجة
حدود واجهة البرمجة مفيدة لمعرفتها مثل قدراتها.
- لا مدفوعات لأطراف ثالثة. يجب أن يتطابق اسم المستفيد مع الهوية الموثقة لصاحب الطلب، وتتحقق قنوات الدفع الآن من الاسم مقابل الحساب.
- لا إنشاء حساب أو التحقق من الهوية عبر واجهة البرمجة. تلك الخطوات تحدث في تدفق يرى فيه المستخدم ما يقبله.
- لا مفتاح في معامل عنوان URL. عناوين URL تنتهي في السجلات وترويسات المُحيل والسجلات التاريخية: المفتاح الذي يُمرر بهذه الطريقة هو مفتاح يجب إبطاله.
- لا تخزين مؤقت لعرض السعر من جانبنا. الاستجابة تحمل Cache-Control: no-store، ويجب ألا يلتف تكاملك حولها: عرض السعر المخزن مؤقتًا هو سعر قديم يُقدم على أنه ثابت.
- لا نقطة نهاية لشراء العملات المشفرة. الخدمة تعمل في اتجاه واحد، من الأصول الرقمية إلى العملة القانونية.