مرجع الواجهة البرمجية
أعراف واجهة المنصّة: العنوان الأساسي، والمصادقة، وIdempotency-Key، والتصفّح، والحدود، والترويسات، والإصدارات، والأخطاء، وسياسة البيانات الشخصية.
- العنوان الأساسي
https://dukkan.one/platform-api/v1- الإصدار
1.0.0- OpenAPI
- مواصفة OpenAPI
في هذه الصفحة
هذه الصفحة تجمع الأعراف التي تنطبق على كل عملية في واجهة المنصّة؛ صفحات الموارد التي تليها مولَّدة من مواصفة OpenAPI نفسها التي يعمل بها الخادم. اقرأها مرة واحدة ثم عد إليها عند أي رقم.
العنوان الأساسي#
https://dukkan.one/platform-api/v1تعمل الواجهة على المضيف الرئيسي فقط؛ نطاقات واجهات المتاجر الفرعية والنطاقات المخصّصة تعيد 404. كل الاستجابات application/json مع Cache-Control: no-store.
المصادقة#
Authorization: Bearer YOUR_ACCESS_TOKENرمز وصول تطبيق من التفويض، مربوط بمتجر واحد وتثبيت واحد. كل عملية تتطلب نطاقاً فعلياً محدداً في مرجع النطاقات؛ غيابه يعيد 403. الرمز الغائب أو المنتهي أو الملغى يعيد 401، وكذلك فقدان العضو المانح وصوله إلى المتجر.
Idempotency-Key#
كل عملية تُنشئ أو تغيّر بيانات المتجر (PATCH /orders/{id}/status، POST /orders/{id}/fulfillments، PATCH /orders/{id}/fulfillments/{fulfillmentId}، POST /orders/{id}/refunds، POST /inventory/movements) تتطلب الترويسة:
Idempotency-Key: booking-6f1d2c3b-1- نص من 1 إلى 200 حرف، فريد لكل تثبيت. غيابه يعيد
400. - إعادة الطلب بالمفتاح نفسه والحمولة نفسها تعيد الاستجابة الأصلية بحالتها مع الترويسة
Idempotency-Replayed: true. - المفتاح نفسه بحمولة مختلفة يعيد
409برسالةIdempotency key was already used for a different request؛ والطلب الذي ما زال قيد التنفيذ يعيد409أيضاً. - تُحفظ الاستجابات المسجّلة 24 ساعة.
PUT /webhooks وDELETE /webhooks مستقلّان بطبيعتهما ولا يتطلبان المفتاح.
التصفّح#
تعيد القوائم { "data": [...], "next_cursor": "..." }:
| المعامل | القاعدة |
|---|---|
limit |
1–100، الافتراضي 50 |
cursor |
مبهم، حتى 512 حرفاً، من next_cursor السابق |
next_cursor |
null عند نهاية القائمة |
المؤشر مبنيّ على created_at الثابت، لذلك يبقى مستقراً أثناء التغييرات. للمزامنة التزايدية استخدم المرشّحات created_at_min وupdated_at_min (الطلبات) وupdated_at_min (المنتجات)، واحفظ آخر طابع زمني عالجته.
الحدود#
| الحد | القيمة |
|---|---|
| الطلبات لكل تثبيت | 180 في الدقيقة |
| عمليات الكتابة لكل تثبيت | ميزانية منفصلة أقل |
| حجم جسم الطلب | 64 KB؛ التجاوز يعيد 413 |
| الرموز غير الصالحة لكل عنوان IP | ميزانية منفصلة لصدّ التخمين |
التجاوز يعيد 429 برمز rate_limited وترويسة Retry-After بالثواني. انتظرها ثم أعد المحاولة؛ لا تعد المحاولة قبلها.
الترويسات#
| الترويسة | الاتجاه | المعنى |
|---|---|---|
Authorization |
طلب | Bearer + رمز الوصول |
Idempotency-Key |
طلب | مفتاح الكتابة الآمنة |
X-Request-Id |
استجابة | معرّف فريد لكل طلب؛ أرفقه في أي بلاغ دعم |
X-Dukkan-Api-Version |
استجابة | المراجعة المؤرّخة الحالية لـ v1، اليوم 2026-09-09 |
Idempotency-Replayed |
استجابة | true عندما تكون الاستجابة إعادة لنتيجة مسجّلة |
Retry-After |
استجابة | ثوانٍ حتى تجدّد الميزانية مع 429 |
الإصدارات#
v1في المسار هو العقد: لا يُحذف حقل ولا يتغيّر نوعه ضمنه أبداً.- التغييرات الإضافية (حقل جديد، موضوع جديد، قيمة تعداد جديدة) تُطلق كمراجعات مؤرّخة تظهر في
X-Dukkan-Api-Versionوتُسجَّل في سجل التغييرات. - تحمل حمولات Webhooks المراجعة نفسها في ترويستها و
api_version: "v1"في الغلاف. - تجاهل الحقول التي لا تعرفها، ولا تعتمد على ترتيب الحقول.
الأخطاء#
كل خطأ يحمل الغلاف نفسه:
{
"error": {
"code": "conflict",
"message": "Order cannot be fulfilled in its current status",
"request_id": "7d0c2b1a-5e4f-4a3b-8c9d-0e1f2a3b4c5d"
}
}| الحالة | code |
متى |
|---|---|---|
| 400 | invalid_request |
جسم أو معامل غير صالح، أو Idempotency-Key غائب، أو cursor تالف |
| 401 | unauthorized |
رمز غائب أو غير صالح أو منتهٍ أو ملغى |
| 403 | forbidden |
النطاق الفعلي المطلوب غائب |
| 404 | not_found |
المورد غير موجود في المتجر المربوط بالرمز |
| 409 | conflict |
انتقال حالة مرفوض، أو تعارض مخزون أو استرداد، أو تعارض Idempotency-Key |
| 413 | payload_too_large |
جسم أكبر من 64 KB |
| 429 | rate_limited |
تجاوز الميزانية؛ راجع Retry-After |
| 5xx | internal_error |
خطأ داخلي؛ الرسالة محجوبة، وrequest_id هو ما تبلّغ عنه |
message نص للبشر وقد يتغيّر؛ فرّع على code والحالة فقط. details كائن اختياري بتفاصيل التحقق.
سياسة البيانات الشخصية#
الواجهة خالية من بيانات العملاء افتراضياً. الحقلان customer وshipping_address يظهران في GET /orders/{id} فقط عندما يحمل التثبيت clients:read (المقيّد باتفاقية معالجة البيانات)، ولا يظهران في القوائم ولا في أي Webhook. كل استدعاء يُسجَّل في سجل نشاط التاجر بحالته وrequest_id. راجع مرجع النطاقات ومعالجة البيانات.
المال#
كل مبلغ كائن { amount_minor, currency, decimals }. اقرأ decimals من كل مبلغ؛ لا تستخدم جدول ISO. راجع المال بالوحدات الصغرى.