"المتجر" هو الحاوية الأعلى مستوى للمنتجات والطلبات والعملاء. كل مفتاح مرتبط بـ متجر واحد فقط. لا توجد طريقة لاستعلام متاجر تجار آخرين.
GET /v1/store
تُرجع ملف المتجر الذي ينتمي إليه المفتاح المنادي.
المصادقة: مفتاح منصة بصلاحية store:read. مفاتيح التاجر تحملها افتراضيًا؛ والمفتاح الذي لا يحملها يتلقى 403 forbidden (Missing scope: store:read).
تُخدَم حديثًا في كل نداء: يظهر تعديل لوحة التحكم في طلب GET التالي عبر api.dzbuild.app وعبر العنوان البديل dzbuild.com/api/v1/store.
الطلب
curl https://api.dzbuild.app/v1/store \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
{
"data": {
"id": 12345,
"name": "My Store",
"slug": "my-store",
"language": "ar",
"description": "Short tagline",
"logo": "/uploads/logos/12345/logo.webp",
"favicon": null,
"banner": null,
"theme": {
"primary_color": "#f59e0b",
"secondary_color": "#fbbf24",
"background_color": "#ffffff",
"font_family": "Cairo"
},
"store_theme": "starter",
"fast_checkout_theme": "classic",
"variant_card_style": "default",
"subdomain": "my-store.dzbuild.app",
"custom_domain": null,
"custom_domain_verified": false,
"public_url": "https://my-store.dzbuild.app",
"hide_branding": false,
"created_at": "2026-01-01 12:00:00"
},
"meta": { "request_id": "...", "api_version": "v1" }
}
مرجع الحقول
الحقل | النوع | ملاحظات |
| int | معرّف داخلي ثابت. يطابق |
| string | الاسم المعروض. يظهر في شريط واجهة المتجر والإيميلات. |
| string | معرّف صالح للروابط. يُستخدم في |
| enum |
|
| string|null | عبارة قصيرة. |
| string|null | مسار على |
| string|null | نفس المنطق. |
| string|null | نفس المنطق. |
| hex string | لون الأزرار والإبرازات الأساسي. |
| hex string | إبرازات ثانوية. |
| hex string | خلفية الصفحة. |
| string | الخط (الافتراضي |
| string | مفتاح قالب واجهة المتجر المستعمل، وهو نفسه |
| string | مفتاح قالب نموذج الطلب السريع، وهو |
| string | مفتاح نمط اختيار المتغيرات، وهو |
| string|null | النطاق الفرعي الصادر عن DZBuild. حاضر عادةً؛ ويكون |
| string|null | نطاق التاجر الخاص. يُعيَّن فقط إن أُضيف من لوحة التحكم. |
| bool |
|
| string|null | حيث يصل العملاء فعلًا: نطاق التاجر الخاص عندما يعمل بالكامل ويكون مضبوطًا كالعنوان الرئيسي للمتجر، وإلا فالنطاق الفرعي؛ ويكون |
| bool | إخفاء "Powered by DZBuild" في الواجهة. لخطة غير محدود. |
| timestamp | وقت إنشاء المتجر بتوقيت الجزائر (UTC+01:00). |
الأخطاء
HTTP | الكود | السبب |
401 |
| مفتاح خاطئ أو مفقود |
402 |
| استُنفدت حصة الطلبات الشهرية للمتجر — راجع حدود المعدل |
403 |
|
|
404 |
| حُذف المتجر أثناء استخدامك للمفتاح (نادر جدًا) |
429 |
| تجاوز الحد الدقيقي لهذا المتجر، وهو مشترك بين كل مفاتيحه؛ احترم |
PATCH /v1/store
تُحدّث هذه النقطة ملف إعدادات المتجر، بنفس حقول صفحة إعدادات المتجر في لوحة التحكم ما عدا رقم WhatsApp. لا يتغيّر إلا ما ترسله من حقول.
المصادقة: مفتاح منصة بصلاحية store:write. يتطلب Idempotency-Key.
الجسم
الحقل | النوع | ملاحظات |
| string | حتى 100 حرف. لا يمكن أن يكون فارغًا. |
| string | حتى 5000 حرف. |
| int|null | رقم ولاية من |
| string | حتى 100 حرف. |
| string | حتى 500 حرف. |
| string | حتى 20 حرفًا. |
| string|null | عنوان بريد إلكتروني صالح. القيمة |
| string|null | رمز التحقق من Google Search Console، حتى 100 حرف. القيمة |
| string|null | رمز التحقق من Bing Webmaster، حتى 100 حرف. القيمة |
تُحذف وسوم HTML من القيم النصية، ويُقصّ النص الأطول عند الحد. لا تشمل هذه النقطة slug ولا النطاق المخصص ولا الألوان؛ الألوان وباقي قيم التصميم تُعدَّل عبر PATCH /v1/store/design.
الطلب
curl -X PATCH https://api.dzbuild.app/v1/store \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: store-profile-1" \
-d '{"store_phone": "0550000000", "description": "Short tagline"}'
الاستجابة 200
{
"data": {
"updated": ["description", "store_phone"],
"values": {"description": "Short tagline", "store_phone": "0550000000"}
},
"meta": { "request_id": "...", "api_version": "v1" }
}
يُسجَّل التغيير ويمكن التراجع عنه عبر POST /v1/changes/{change_id}/undo؛ تجد رقمه عبر GET /v1/changes?entity=store.settings. وطلب GET /v1/store المُرسَل مباشرة بعد الكتابة يُرجع القيم الجديدة.
الأخطاء
HTTP | الكود | السبب |
400 |
| الجسم ليس JSON صالحًا، أو |
403 |
|
|
404 |
| حُذف المتجر. |
422 |
| الجسم لا يحتوي أيًّا من الحقول أعلاه. |
422 |
| حقلٌ قيمته كائن أو قائمة، أو |
422 |
|
|
422 |
|
|
422 |
| استُعمل نفس |
GET /v1/store/design
تُرجع تصميم المتجر: حقول صفحة التخصيص في لوحة التحكم (/dashboard/customize) الخاصة بالقالب الحالي للمتجر، مجمَّعة في الأقسام نفسها، مع القيمة الحالية لكل حقل. بعض القوالب تُخفي بعض هذه الحقول في تلك الصفحة، أما الواجهة البرمجية فتعرضها كلها.
المصادقة: مفتاح منصة بصلاحية store:read.
تُخدَم حديثًا عبر api.dzbuild.app، مثل GET /v1/store. وتحمل استجابة PATCH /v1/store/design أيضًا القيم المكتوبة في values.
الطلب
curl https://api.dzbuild.app/v1/store/design \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
يظهر قسمان، مع بعض حقولهما.
{
"data": {
"theme": "starter",
"plan": "enterprise",
"sections": [
{
"key": "theme",
"name": {"ar": "الألوان والخط", "fr": "Couleurs et Police"},
"plan_required": "free",
"page": "home",
"fields": [
{"key": "primary_color", "type": "color", "plan_required": "free", "writable": true, "locked": false, "value": "#f59e0b"},
{"key": "background_color", "type": "color", "plan_required": "pro", "writable": true, "locked": false, "value": "#ffffff"},
{"key": "font_family", "type": "select", "plan_required": "free", "writable": true, "locked": false, "value": "Cairo"}
]
},
{
"key": "productCard",
"name": {"ar": "بطاقة المنتج", "fr": "Carte produit"},
"plan_required": "free",
"page": "home",
"fields": [
{"key": "card_hide_price", "type": "switch", "plan_required": "free", "writable": true, "locked": false, "value": false},
{"key": "card_border_radius", "type": "select", "plan_required": "free", "writable": true, "locked": false, "allowed_values": ["0px", "8px", "16px", "24px"], "value": "16px"}
]
}
]
},
"meta": { "request_id": "...", "api_version": "v1" }
}
مرجع الحقول
الحقل | النوع | ملاحظات |
| string | مفتاح القالب الذي يستعمله المتجر. انظر القوالب. |
| string | الخطة التي تُحسب عليها الأقفال: |
| string | معرّف القسم، مثل |
| object | عنوان القسم كما تعرضه لوحة التحكم، بـ |
| string | الخطة التي تعرضها لوحة التحكم على القسم. |
| string |
|
| array | حقول القسم. قد تكون فارغة: بعض الأقسام، مثل |
| string | الاسم الذي ترسله في |
| string | عنصر التحكم في لوحة التحكم: |
| string | الخطة التي تعرضها لوحة التحكم على الحقل. |
| bool |
|
| bool |
|
| array | في الحقول ذات الخيارات المحددة فقط: القيم التي يقبلها الحقل. |
| any | القيمة الحالية. حقول |
GET /v1/store/design/fields
القائمة نفسها دون المفتاح value. استدعها قبل الكتابة لترى الحقول التي يعرضها قالب المتجر، والاسم الذي ترسله لكل حقل، والحقول التي تقفلها الخطة.
المصادقة: مفتاح منصة بصلاحية store:read. تُخدَم حديثًا عبر api.dzbuild.app، مثل GET /v1/store.
الطلب
curl https://api.dzbuild.app/v1/store/design/fields \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
يظهر القسمان الأخيران.
{
"data": {
"theme": "starter",
"plan": "enterprise",
"sections": [
{
"key": "customCss",
"name": {"ar": "CSS مخصّص", "fr": "CSS personnalisé"},
"plan_required": "enterprise",
"page": "all",
"fields": [
{"key": "custom_css", "type": "textarea", "plan_required": "enterprise", "writable": true, "locked": false}
]
},
{
"key": "customJs",
"name": {"ar": "JavaScript مخصّص", "fr": "JavaScript personnalisé"},
"plan_required": "enterprise",
"page": "all",
"fields": [
{"key": "custom_js", "type": "textarea", "plan_required": "enterprise", "writable": false, "locked": false}
]
}
]
},
"meta": { "request_id": "...", "api_version": "v1" }
}
الأخطاء
يُرجع GET /v1/store/design وGET /v1/store/design/fields نفس أخطاء GET /v1/store: 401 unauthorized و402 quota_exceeded و403 forbidden (Missing scope: store:read أو الخطة أو البايلوت) و404 not_found و429 rate_limited.
PATCH /v1/store/design
تُعدّل حقول التصميم: الألوان، والرأسية، والـ hero، وبطاقات المنتجات، وصفحة المنتج، ونصوص صفحة الطلب، والتذييل، وروابط التواصل الاجتماعي، والـ SEO وغيرها. لا يتغيّر إلا ما ترسله من حقول. الألوان وhide_branding تُضبط هنا، لا عبر PATCH /v1/store.
المصادقة: مفتاح منصة بصلاحية store:write. يتطلب Idempotency-Key.
الجسم
أرسل أي حقل يعرضه GET /v1/store/design/fields مع writable: true. وتُقبل أيضًا حقول التصميم التي لا يعرضها القالب الحالي: تُحفظ، ويستعملها القالب الذي يعرضها. والمفاتيح التي لا تعرفها الواجهة البرمجية تُتجاهل. تُنظَّف كل قيمة حسب نوعها:
النوع | أمثلة | ما يُحفظ |
تشغيل وإيقاف |
| أرسل |
لون |
| قيمة |
لون بديل |
| قيمة |
نص |
| تُحذف وسوم HTML ويُقصّ النص عند طول الحقل، مثل 255 حرفًا لـ |
رابط |
| رابط |
خيار محدد |
| إحدى قيم |
رقم |
| يبقى بين 4 و48. |
لبعض الحقول قواعدها الخاصة:
font_family: حروف لاتينية وأرقام ومسافات وشرطات. وأي شيء آخر يُحفظCairo. تقترح لوحة التحكمCairoوTajawalوAlmarai.button_style: تقترح لوحة التحكمroundedوsquareوpill.navbar_styleيقبلdefaultأوcenteredأوminimalأوtransparent؛ وnavbar_menu_styleيقبلdefaultأوpillsأوunderlineأوbuttons؛ وnavbar_logo_sizeيقبلsmallأوmediumأوlarge؛ وcart_icon_styleيقبلdefaultأوfilledأوoutlineأوminimal. هذه الحقول الأربعة لا تحملallowed_values، وأي قيمة أخرى ترفض الكتابة كلها بـ422 invalid_value.facebook_pixel_id: من 15 إلى 17 رقمًا، أو فارغ لمسحه.custom_css: لخطة Enterprise فقط. يُنظَّف قبل حفظه.
لشريط الشراء ونموذج الطلب في صفحات المنتجات أربعة حقول خاصة بهما. تستطيع كل الخطط كتابتها، وقيمها الافتراضية تُبقي الشكل الذي كان للمتجر قبل وجودها.
الحقل | القيم | ما يغيّره |
|
| القيمة |
|
| القيمة |
|
| القيمة |
|
| القيمة |
لا يملك قالب Digital نموذج طلب سريع: هناك لا يغيّر fc_show_qty شيئاً، وbuybar_show_mobile: false يُخفي شريط الهاتف بينما تبقى أزرار الشراء في الصفحة.
أقفال الخطط
الحقل الذي تقفله خطة المتجر لا يُكتب. يظهر في skipped مع السبب، ويُرجع النداء 200 رغم ذلك إذا كُتب حقل آخر. وإذا تُجووزت كل الحقول التي أرسلتها، يُرجع النداء 422 no_writable_fields.
السبب في | متى |
| حقل محجوز لخطة |
|
|
|
|
مفتاح التاجر تابع لمتجر على خطة Enterprise سارية، لذا لا يُقفل عليه أي حقل. وتنطبق الأقفال على رموز التطبيقات المثبّتة، التي تعمل مع كل الخطط.
الطلب
curl -X PATCH https://api.dzbuild.app/v1/store/design \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: store-design-1" \
-d '{"primary_color": "#0f766e", "show_hero": true, "hero_title": "New collection"}'
الاستجابة 200
{
"data": {
"updated": ["primary_color", "show_hero", "hero_title"],
"skipped": [],
"values": {"primary_color": "#0f766e", "show_hero": 1, "hero_title": "New collection"},
"change_id": 812
},
"meta": { "request_id": "...", "api_version": "v1" }
}
يذكر updated الحقول التي كُتبت، ويذكر values القيمة المحفوظة لكل منها بعد التنظيف. يكون skipped قائمة فارغة إذا لم يُتجاوز شيء، وإلا فكائنًا مثل {"hide_branding": "requires the unlimited plan"}.
يُسجَّل التغيير ويمكن التراجع عنه عبر POST /v1/changes/{change_id}/undo بقيمة change_id الموجودة في الاستجابة؛ وتكون null في الحالة النادرة التي تُحفظ فيها الكتابة دون سجلّ تراجع، ويعرض GET /v1/changes?entity=store.design التغييرات السابقة. ولا يستطيع رمز التطبيق المثبّت قراءة التغييرات ولا التراجع عنها (403 forbidden، Apps cannot use this endpoint). وطلب GET /v1/store/design المُرسَل مباشرة بعد الكتابة يُرجع القيم الجديدة.
الأخطاء
HTTP | الكود | السبب |
400 |
| الجسم ليس JSON صالحًا، أو |
403 |
|
|
404 |
| حُذف المتجر. |
413 |
| حجم الجسم أكبر من 1 MB. |
422 |
| الجسم لا يحتوي أي حقل تصميم، أو تُجووزت كل حقوله بسبب الخطة. |
422 |
| حقلٌ قيمته كائن أو قائمة، أو رُفضت قيمة، مثل |
422 |
| حقل رابط يستعمل بروتوكولًا غير |
422 |
|
|
422 |
| استُعمل نفس |
الاستجابة 422 لا تكتب شيئًا.