سجل التغييرات
الواجهة البرمجية في مرحلة تجريبية. يجب أن تتبع مفاتيح API الشخصية متجراً ذا خطة Enterprise سارية، وإلا فكل نداء يُرجع 403؛ أما رموز التطبيقات المثبّتة فتعمل مع كل الخطط. وhttps://api.dzbuild.app هو المضيف الوحيد المدعوم.
v1.12 - 2026-10-28 (تجريبي)
- ✨ عائلات المتغيرات في DZBuild POS. برمز الصندوق، تُرجع
GET /v1/productsوGET /v1/products/{id}الحقلvariants: المجموعات ونمط المخزون وعنصراً لكل متغير معkeyوskuوbarcodeوالسعر والمخزون وexternal_idالخاص بالصندوق. وتأخذPOST /v1/products/batchكتلةvariantsوتُرجعvariantsمعprice_onlineلكل متغير. ويمكن لعنصر الدفعة أن يذكر فيidمنتج المتجر الذي يرتبط به، فلا يُنشأ من جديد منتج استورده الصندوق. انظر DZBuild POS. - ✨ مخزون كل متغير من الصندوق. تأخذ
POST /v1/inventory/adjustments/batchالقيمةtarget: "variant"معvariant_external_id، مع أربعة أخطاء عنصر جديدة:unknown_variantوvariant_goneوvariant_stock_modeوvariant_mismatch. - ✨ تحمل أحداث
inventory.level_changedوسطور طلبات الصندوقvariant_keyوvariant_external_id، وقيمتهماnullعلى مستوى المنتج. - ⚠️ لا تغيير للصندوق الذي لا يرسل كتلة
variants: تبقى متغيرات المنتج على المتجر كما هي، وما زالtarget: "product"على منتج له مخزون لكل متغير يُرجعvariant_product.
v1.10 - 2026-10-09 (تجريبي)
- ✨ DZBuild POS. يرتبط برنامج الصندوق المجاني على ويندوز بالمتجر عبر OAuth، مع الاكتشاف في
https://dzbuild.com/.well-known/oauth-authorization-server، ويستدعي نقاطه الخاصة برمز الصندوق:GET /v1/meوPOST /v1/devicesونبضات الاتصال وGET /v1/locationsوPOST /v1/locationsوPOST /v1/products/batchوPOST /v1/media/uploadsوPOST /v1/inventory/adjustments/batchوPOST /v1/pos/salesوPOST /v1/pos/sales/{sale_id}/refundsوPOST /v1/pos/closuresوPOST /v1/orders/{id}/claimوGET /v1/events. مسارات النسخ الاحتياطية الأربعة تُرجع501 not_implemented. مفاتيح API الشخصية ورموز التطبيقات تتلقى403على المسارات الخاصة بالصندوق. انظر DZBuild POS. - ✨ يُرجع
GET /v1/storeالحقولcurrency(DZD) وstock_deduction(on_createأوon_confirm) وplanوplan_limits. الخطة المدفوعة المنتهية تُقرأfree، وplan_limits.active_productsيكونnullعندما لا يكون للخطة حدّ. - ⚠️ لا تغيير في
POST /v1/productsعند حدّ الخطة: ما زالت تُرجع400 bad_requestبنفس الرسالة. الرمز الجديد402 product_limit_reachedخاص بنداء الدفعة من الصندوق.
v1.9 - 2026-10-08 (تجريبي)
- ✨ حقول شريط الشراء. يقبل
PATCH /v1/store/designالحقولbuybar_show_mobileوbuybar_show_qtyوfc_show_qtyوproduct_button_size(normalأوlarge) في كل الخطط: تُظهر شريط الشراء على الهاتف والكمية في الشريط وفي نموذج الطلب السريع أو تُخفيها، وتضبط حجم أزرار الشراء. انظر المتجر. - ✨ يُرجع
GET /v1/storeالحقولstore_themeوfast_checkout_themeوvariant_card_style، أي المفاتيح الثلاثة المستعملة، للقراءة فقط. - ✨ يعرض
GET /v1/themesقوالب الطلب السريع وأنماط المتغيرات فيfast_checkoutوvariant_styles، ولكل عنصر خطته وهل يستطيع المتجر استعماله وأيّها المستعمل. انظر القوالب. - ✨ كتابات التصميم والقوالب تُرجع
change_id. تحملPATCH /v1/store/designوPOST /v1/store/themeوPOST /v1/store/fast-checkout-themeوPOST /v1/store/variant-styleالرقم الذي ترسله إلىPOST /v1/changes/{id}/undo.
v1.8.1 - 2026-10-02 (تجريبي)
- ⚠️ حذف منتج تستعمله صفحة هبوط صار مرفوضاً بـ
409 product_in_use_by_landing_page. يذكر الخطأ الصفحات فيlanding_pages[]معidوtitleوslug. احذف صفحة الهبوط أولاً، أو اربطها بمنتج آخر عبرPATCH /v1/landing-pages/{id}، ثم احذف المنتج. انظر المنتجات.
v1.8 - 2026-09-28 (تجريبي)
- ✨ أقسام الصفحة الرئيسية. تقرأ
GET /v1/store/home-layoutأقسام الصفحة الرئيسية للمتجر وأنواع الأقسام التي يقبلها قالبه. تضيفPOST /v1/store/home-layout/sectionsقسماً، وتغيّرPATCHوDELETE /v1/store/home-layout/sections/{id}قسماً أو تحذفه، وتحدّدPOST /v1/store/home-layout/reorderالترتيب، وتستبدلPUT /v1/store/home-layoutالقائمة كلها. يمكن إضافة عشرة أنواع من الأقسام في كل قالب، منهاcategory-productsوbannerوfaqوvideo. إعدادات الصور تأخذ صورة رُفعت من لوحة التحكم: لا يمكن رفعها عبر الواجهة البرمجية بعد. تستعمل هذه النقاطstore:readوstore:write، فالمفاتيح الحالية تعمل معها. انظر أقسام الصفحة الرئيسية. - ✨ كل كتابة على تخطيط الصفحة الرئيسية يمكن التراجع عنها، بما فيها إضافة قسم. تحمل الاستجابة
change_idلـPOST /v1/changes/{id}/undo، التي تُرجع409 layout_changedإذا تغيّرت الصفحة من جديد منذ ذلك. - ⚠️ لكتابات تخطيط الصفحة الرئيسية ميزانيتها الخاصة: 30 في الدقيقة و5 في الوقت نفسه لكل متجر. انظر حدود المعدل.
v1.7 - 2026-09-26 (تجريبي)
- ✨ تطبيقات الأطراف الأخرى. يُثبَّت التطبيق على المتجر عبر OAuth ويستدعي الواجهة البرمجية برمز تثبيت، مع أي خطة. قد تتلقى نداءات التطبيق أربعة رموز
403جديدة، هيapp_uninstalledوapp_suspendedوapp_not_approvedوapp_plan_required، ولكل تثبيت حدّ خاص قدره 120 طلباً في الدقيقة يُفحص قبل حدّ المتجر. انظر الأخطاء. - ⚠️ تاريخ
expires_atللمفتاح صار مُطبَّقاً: بعد انقضائه يُرجع المفتاح401. - ⚠️ مفاتيح Copilot والموصلات لا تدير المفاتيح: تتلقى
403على/v1/keys. - ✨ المفاتيح الجديدة تحمل
analytics:read؛ أما المفاتيح الأقدم فتبقى على النطاقات التي أُنشئت بها. - ⚠️ webhooks الخاصة بـ API v1 صارت موقَّعة بسر كل webhook (
X-DZ-Signature: t=<ts>,v1=<hmac>)، والتسجيل يقبلhttps://فقط، و408و429يُعادان، وأي 4xx أو 3xx آخر ينتقل فوراً إلى قائمة الرسائل الميتة. الـ webhooks المسجّلة قبل ذلك تحتاج تسجيلاً جديداً. انظر التحقق من التواقيع. - ✨
PUTيقبلIdempotency-Keyاختيارياً، ومعه تنطبق قواعد إعادة التشغيل نفسها. - ⚠️ إعادة التشغيل idempotent تعمل على المضيفين معاً، وإعادة استعمال مفتاح بجسم مختلف تُرجع
422 idempotency_key_reuse. انظر التكرار الآمن. - ⚠️ لا يوجد طلب تمهيدي CORS: طلب
OPTIONSيتلقى401المعتاد، والواجهة البرمجية مخصّصة للنداءات من خادم إلى خادم فقط. - ⚠️ حالات الرفض تعبر الحافة كما هي: رد
403الخاص بالتطبيقات، أو429، منapi.dzbuild.appيصل بحالته ومحتواه الحقيقيين بدل401.
v1.6 - 2026-09-26 (تجريبي)
- ✨ رسائل واتساب عبر الواجهة البرمجية.
GET /v1/whatsapp/templatesيسرد قوالب رسائل الطلبات التي اعتمدتها المنصة مع حالة اعتمادها، وGET /v1/whatsapp/balanceيقرأ رصيد واتساب الخاص بالمتجر، وGET /v1/whatsapp/messagesيسرد الرسائل المرسلة للزبائن، وPOST /v1/orders/{id}/whatsappيرسل قالباً واحداً لزبون طلب معيّن ويخصمه من الرصيد. يجب أن تكون إضافة مرسل واتساب مفعّلة. النطاقان الجديدان هماwhatsapp:readوwhatsapp:send. انظر رسائل واتساب. - ⚠️ النطاقات تُجمَّد لحظة إنشاء المفتاح، فالمفتاح الذي أُنشئ قبل هذا الإصدار لا يملك النطاقين الجديدين: أنشئ مفتاحاً جديداً لاستعمالهما.
- ⚠️ إعادة المحاولة بعد
402 no_creditأو422تحتاجIdempotency-Keyجديداً. أول استجابة تُحفظ 24 ساعة وتُعاد للمفتاح نفسه والجسم نفسه، فشحن الرصيد أو تصحيح الطلب لا يغيّر شيئاً مع المفتاح القديم. - ✨ كل رسالة في
GET /v1/whatsapp/messagesتحمل الحقلbilling:chargedعندما يفوتر WhatsApp الرسالة، وfreeعندما يعود رصيدها إلى المحفظة، وnullما دامت النتيجة غير معروفة بعد.
v1.5 - 2026-09-23 (تجريبي)
- ⚠️ صارت إعادة محاولة تسليم الـ webhooks تتباعد (دقيقة، 5 دقائق، 30 دقيقة، ساعتان) وتتوقف بعد 5 محاولات فاشلة؛ وصار انتهاء المهلة وفشل DNS/TLS يُعاد بدل أن يُهجر.
v1.4 — 2026-09-05 (تجريبي)
- ✨ صار بالإمكان كتابة الطلبات.
POST /v1/ordersينشئ طلباً، وPATCH /v1/orders/{id}ينقل حالته، وPOST /v1/orders/{id}/cancelيلغيه، وPOST /v1/orders/{id}/send-to-deliveryيسلّم طرداً واحداً لشركة التوصيل الخاصة بالمتجر. النطاقان الجديدان هماorders:writeوdelivery:send. - ⚠️ النطاقات تُجمَّد لحظة إنشاء المفتاح، فالمفتاح القائم لا يكتسب النطاقين الجديدين: أنشئ مفتاحاً جديداً أو أعد ربط الموصل لاستعمالهما. والمفتاح المُنشأ من لوحة التحكم يحصل على
orders:write. أما المفاتيح المُنشأة من لوحة التحكم أو عبرPOST /v1/keysفلا تحصل أبداً علىdelivery:send، فلا تستطيع استدعاءsend-to-delivery. - ⚠️ التسليم لشركة التوصيل يحتاج دائماً تأكيداً صادراً من الخادم. النداء الأول يُرجع
409 confirmation_requiredمع رمز يُستعمل مرة واحدة وملخّص يذكر الزبون والهاتف والوجهة والمبلغ وشركة التوصيل؛ وهذا الرمز وحده يُرسل الطرد. القيمةconfirm: trueفي جسم الطلب غير مقبولة في هذه النقطة من أي مستدعٍ. والطلب المُرسَل سابقاً يُرفض بـ409 already_sent. - ⚠️ حساب مال الطلب صار من الخادم. قيمتا
shipping_costوpayment_feeالقادمتان من المستدعي تُتجاهلان: سعر التوصيل يأتي من جدول أسعار المتجر نفسه حسب الولاية ونوع التوصيل، وdiscountمسقوف بمجموع الطلب زائد التوصيل. أسعار المنتجات كانت تعمل هكذا أصلاً. - ✨
GET /v1/shipping/coverageيجيب هل تخدم شركة التوصيل المرتبطة بلديةً معيّنة، وهل لها مكتب في ولاية معيّنة، مع تاريخ تحديث بيانات الشركة نفسها. - ✨
GET /v1/shipping/providersصار يذكر أيضاً شركة توصيل مضبوطة مباشرة على المتجر لا مضافة من قائمة المزوّدين، إضافة إلىis_send_defaultوeconomic_availableوsynced_tierوstock_accountوauto_validateوcustom_name. لا تُرجَع بيانات الاعتماد ولا العناوين أبداً. - ✨
GET /v1/landing-pages/{id}/checkيذكر ما سيصطدم به الزبون في الصفحة: استمارة طلب بلا منتج، أو غياب استمارة الطلب، أو أكثر من واحدة، أو قسم يشير إلى منتج من متجر آخر. - ⚠️ نشر صفحة هبوط معطوبة مرفوض. نداء
PATCH /v1/landing-pages/{id}بـstatus: activeيفشل بـlanding_page_has_no_productعندما تكون الصفحة ستأخذ الطلبات بصفر. وتعديل صفحة منشورة أصلاً ما زال يعمل حتى يمكن إصلاحها. وكتابة قسم يذكرproduct_idمن متجر آخر تُرفض كخطأ تحقق. - ⚠️
PATCH /v1/landing-page-sections/{id}معreplace: trueصار يعيد وضع الإعدادات الافتراضية لنوع القسم تحت ما ترسله، فالمفتاح المحذوف يعود إلى قيمته الافتراضية بدل أن يختفي من الصفحة. - ✨
GET /v1/connectionيسرد المتاجر التي يغطيها ربط واحد وأيّها نشط، وPOST /v1/connection/active-storeينقل المؤشّر. المؤشّر ليس صلاحية: المتجر الذي لم يوافق عليه التاجر لا مفتاح له ولا يمكن اختياره.
v1.3 — 2026-08-13 (تجريبي)
- ✨ إدارة ذاتية للمفاتيح — أصبح بإمكان مالكي المتاجر على خطة Enterprise إنشاء مفاتيح API وإلغاؤها من لوحة التحكم عبر الإعدادات ← واجهة API (
/dashboard/api). تُعرض الأسرار مرة واحدة عند الإنشاء. - ⚠️ حد المعدل في الدقيقة يُطبَّق الآن لكل متجر، مشتركًا بين جميع مفاتيح المتجر (كان سابقًا لكل مفتاح). سقف Enterprise دون تغيير عند 600 طلب/دقيقة.
- ⚠️ يمكن للمتجر الآن الاحتفاظ بـ 3 مفاتيح نشطة كحد أقصى (بدلًا من 20)، عبر جميع طرق الإنشاء — لوحة التحكم و
POST /v1/keysوالمفاتيح الصادرة من الدعم. إلغاء مفتاح يحرّر مكانه.
v1.2 — 2026-08-13 (تجريبي)
- ⚠️ صارت الواجهة البرمجية حصرية لخطة Enterprise. لا تُوثَّق المفاتيح إلا ما دام متجرها على خطة Enterprise سارية؛ وكل خطة أخرى — وكذلك اشتراك Enterprise منتهي الصلاحية — تتلقى
403 forbidden(برسالةAPI access requires an active Enterprise plan). ولا تُصدَر المفاتيح الجديدة إلا لمتاجر Enterprise. أما المفاتيح الموجودة لدى متاجر غير Enterprise فتتوقف عن العمل فورًا دون أن تُحذف: تعود إلى العمل لحظة انتقال المتجر إلى Enterprise (أو تجديده)، دون أي إعادة إصدار. - ⚠️ أُلغيت خطط حدود المعدل القديمة Free / Pro / Unlimited. ويبقى سقف Enterprise عند 600 طلب/دقيقة لكل مفتاح دون سقف شهري؛ والتجاوزات الخاصة بالمتجر من الدعم تبقى سارية.
v1.1 — 2026-08-12 (تجريبي)
- ✨ صور المنتجات عبر الواجهة البرمجية —
POST /v1/products/{id}/imagesيضيف صورة من رابطhttpsعمومي (تتكفّل DZBuild بتنزيلها وتحسينها واستضافتها)، وPATCH .../images/{image_id}يضبط النص البديل وترتيب العرض والصورة الرئيسية، وDELETE .../images/{image_id}يحذف صورة. الروابط المكرّرة لا تُضاف مرتين، وأول صورة تصبح الرئيسية تلقائيًا، والحد الأقصى 20 صورة لكل منتج. - ✨
PUT /v1/products/{id}/variants— إنشاء وإدارة مجموعات الأنواع وخياراتها ومخزون التركيبات في نداء واحد (استبدال كامل). أصبحت الحقولprice_adjustmentوstockوskuوimage_idوshow_as_cardلكل خيار قابلة للكتابة، وتُضبط أعلام وضع المخزون نيابةً عنك. - ✨
GET /v1/products/{id}يُرجع الآن كتلةcombinationsإضافةً إلى حقول الخيارات الكاملة (price_adjustment،sku،show_as_card،sort_order،is_active) والنص البديلalt_textللصور. - ⚠️ تغيير مؤثّر: أصبح
primary_imageوimages[].urlيُرجعان روابط CDN كاملة بدل أسماء الملفات المجرّدة. إذا كان كودك يضيف البادئة يدويًا فاحذف ذلك المنطق.
v1.0.1 — 2026-05-02 (تجريبي)
- ✨
POST /v1/orders— إنشاء الطلبات عبر الواجهة البرمجية. مصمَّم للثيمات المخصصة والمتاجر بدون رأس وتطبيقات الجوال وأتمتة الموزّعين. تسعير سطور الطلب معتمد على الخادم؛ دعم كامل للمتغيرات؛ idempotent. - 📚 دليل جديد: الثيمات والواجهات المخصصة — بناء كامل من العرض إلى السلة إلى الـ checkout والـ webhooks.
- 📚 دليل جديد: للموزّعين — إدارة متاجر متعددة للعملاء، عمليات بالجملة، علامة بيضاء، نماذج فوترة.
- 📚 دليل جديد: إعداد البيئة و .env — تخزين آمن لبيانات الاعتماد عبر Node, Python, PHP, Go, Vercel, Cloudflare, AWS, Docker/K8s, GitHub Actions.
- 📚 توسيع مرجع
Orders— توثيق كامل للمتغيرات بما في ذلك المخزون لكل متغيّر، المخزون لكل تركيبة، المتغيرات المتدرجة، متغيرات الصورة-نص، عروض القطع المتعددة.
v1.0 — 2026-04-30 (تجريبي)
- 🎉 إطلاق نسخة تجريبية أولى.
- مصادقة وحد معدل وذاكرة قراءة مؤقتة، لكل مفتاح.
- نقاط نهاية قراءة للمتجر / المنتجات / الطلبات / العملاء / صفحات الهبوط.
- نقاط نهاية كتابة مع idempotency للمنتجات / الطلبات / صفحات الهبوط.
- استيعاب غير متزامن لـ
/v1/signupsو/v1/events(202 Accepted). - Webhooks صادرة مع إعادة محاولة تلقائية.