# الصلاحيات

الصلاحية إذن على نوع واحد من بيانات المتجر. تسجّل الصلاحيات التي يحتاجها تطبيقك في منصة المطورين، ويمكن لطلب التفويض أن يطلبها كلها أو بعضها. يحمل رمز الوصول الصلاحيات التي وافق عليها التاجر بالضبط.

## الصلاحيات التي يمكن للتطبيق طلبها[​](#الصلاحيات-التي-يمكن-للتطبيق-طلبها "رابط مباشر إلى الصلاحيات التي يمكن للتطبيق طلبها")

الأوصاف في هذا الجدول هي ما يقرؤه التاجر في شاشة الموافقة.

| الصلاحية              | الوصف                                                                              |
| --------------------- | ---------------------------------------------------------------------------------- |
| `analytics:read`      | الاطلاع على إحصائيات متجرك                                                         |
| `customers:read`      | الاطلاع على زبائنك وبياناتهم (الاسم، الهاتف، العنوان)                              |
| `delivery:send`       | إرسال طلباتك إلى شركة التوصيل                                                      |
| `landing_pages:read`  | الاطلاع على صفحات الهبوط                                                           |
| `landing_pages:write` | الاطلاع على صفحات الهبوط وإنشاؤها وتعديلها ونشرها                                  |
| `orders:read`         | عرض الطلبات (قراءة فقط، لا يمكنه إنشاء أو تعديل الطلبات)                           |
| `orders:write`        | إنشاء الطلبات وتعديلها                                                             |
| `pixels:read`         | الاطلاع على بيكسلات التتبع الإعلاني                                                |
| `pixels:write`        | الاطلاع على بيكسلات التتبع الإعلاني وإضافتها وتعديلها                              |
| `products:read`       | الاطلاع على منتجاتك                                                                |
| `products:write`      | الاطلاع على منتجاتك وإنشاؤها وتعديلها وحذفها                                       |
| `promos:read`         | الاطلاع على أكواد التخفيض                                                          |
| `promos:write`        | الاطلاع على أكواد التخفيض وإنشاؤها وتعديلها (هذا يغيّر الأسعار التي يدفعها زبائنك) |
| `shipping:read`       | الاطلاع على أسعار التوصيل وإعداداته                                                |
| `shipping:write`      | الاطلاع على أسعار التوصيل وتعديلها وربط شركات التوصيل أو فصلها                     |
| `store:read`          | الاطلاع على معلومات متجرك وإعداداته                                                |
| `store:write`         | الاطلاع على إعدادات متجرك وتصميمه وقالبه وتعديلها                                  |
| `whatsapp:read`       | الاطلاع على قوالب رسائل واتساب ورصيدك وسجل الرسائل المرسلة                         |
| `whatsapp:send`       | إرسال رسائل واتساب لزبائنك بخصوص طلباتهم (تُخصم كل رسالة من رصيد واتساب)           |

## قواعد صلاحيات التطبيقات[​](#قواعد-صلاحيات-التطبيقات "رابط مباشر إلى قواعد صلاحيات التطبيقات")

* لا يمكن تسجيل صلاحية على تطبيق أو منحها له إلا إذا كانت في الجدول أعلاه. أي صلاحية أخرى في طلب التفويض تفشل بـ `invalid_scope`.
* لا يمكن للتطبيقات طلب `ai:generate`. هذه الصلاحية تطلق عمليات توليد بالذكاء الاصطناعي تستهلك نقاط AI من رصيد التاجر.
* لا يمكن للتطبيقات طلب `usage:read` ولا `webhooks:read` ولا `webhooks:write`. يستقبل تطبيقك إشعارات `webhook` عبر عنوان `webhook` المسجّل في تطبيقك، لا عبر `/v1/webhooks`.
* غياب المعامل `scope` أو كونه فارغا يمنح كل الصلاحيات المسجّلة على التطبيق.
* اطلب أقل عدد ممكن من الصلاحيات. يرى التاجر في شاشة الموافقة سطرًا واحدًا لكل مورد قبل أن يوافق.

## نقاط الوصول التي تفتحها كل صلاحية[​](#نقاط-الوصول-التي-تفتحها-كل-صلاحية "رابط مباشر إلى نقاط الوصول التي تفتحها كل صلاحية")

هذه القائمة كما يصرّح بها وصف `OpenAPI`. بعض عمليات الكتابة تحتاج صلاحية القراءة أيضا: `POST /v1/orders` و `PATCH /v1/orders/{id}` و `POST /v1/orders/{id}/cancel` تحتاج `orders:read` و `orders:write`، و `POST /v1/products` و `PATCH /v1/products/{id}` تحتاج `products:read` و `products:write`، و `POST /v1/landing-pages` و `PATCH /v1/landing-pages/{id}` و `POST /v1/landing-pages/{id}/publish` تحتاج `landing_pages:read` و `landing_pages:write`. تُرجع هذه العمليات السجلّ بعد تعديله، وقراءته تتطلب صلاحية القراءة. من دون هذه الصلاحية تُنفَّذ الكتابة، ثم يُجاب الطلب بـ `403` مع رسالة مثل `Missing scope: orders:read`، وإعادة المحاولة بقيمة `Idempotency-Key` نفسها تُرجع رد `403` المخزّن. سجّل الصلاحيتين واطلبهما معًا.

| الصلاحية              | نقاط الوصول                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `analytics:read`      | `GET /v1/analytics`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `customers:read`      | `GET /v1/customers`, `GET /v1/customers/{id}`, `GET /v1/customers/{id}/orders`                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `delivery:send`       | `POST /v1/orders/{id}/send-to-delivery`                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `landing_pages:read`  | `GET /v1/landing-page-section-types`, `GET /v1/landing-pages`, `GET /v1/landing-pages/{id}`, `GET /v1/landing-pages/{id}/check`, `GET /v1/landing-pages/{id}/sections`, `GET /v1/landing-pages/generate/{id}`                                                                                                                                                                                                                                                                                        |
| `landing_pages:write` | `POST /v1/landing-pages`, `PATCH /v1/landing-pages/{id}`, `DELETE /v1/landing-pages/{id}`, `POST /v1/landing-pages/{id}/publish`, `POST /v1/landing-pages/{id}/sections`, `POST /v1/landing-pages/{id}/sections/batch`, `POST /v1/landing-pages/{id}/sections/reorder`, `PATCH /v1/landing-pages/{id}/sections/{section_id}`, `DELETE /v1/landing-pages/{id}/sections/{section_id}`                                                                                                                  |
| `orders:read`         | `GET /v1/orders`, `GET /v1/orders/{id}`                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `orders:write`        | `POST /v1/orders`, `PATCH /v1/orders/{id}`, `POST /v1/orders/{id}/cancel`                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `pixels:read`         | `GET /v1/pixels`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `pixels:write`        | `POST /v1/pixels`, `PATCH /v1/pixels/{id}`, `DELETE /v1/pixels/{id}`                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `products:read`       | `GET /v1/categories`, `GET /v1/categories/{id}`, `GET /v1/products`, `GET /v1/products/{id}`, `GET /v1/products/{id}/addons`, `GET /v1/products/{id}/offers`, `GET /v1/products/{id}/quantity-rules`, `GET /v1/products/{id}/stock`                                                                                                                                                                                                                                                                  |
| `products:write`      | `POST /v1/categories`, `POST /v1/categories/reorder`, `PATCH /v1/categories/{id}`, `DELETE /v1/categories/{id}`, `POST /v1/products`, `PATCH /v1/products/{id}`, `DELETE /v1/products/{id}`, `POST /v1/products/{id}/addons`, `POST /v1/products/{id}/images`, `PATCH /v1/products/{id}/images/{image_id}`, `DELETE /v1/products/{id}/images/{image_id}`, `POST /v1/products/{id}/offers`, `POST /v1/products/{id}/quantity-rules`, `POST /v1/products/{id}/stock`, `PUT /v1/products/{id}/variants` |
| `promos:read`         | `GET /v1/promo-codes`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `promos:write`        | `POST /v1/promo-codes`, `PATCH /v1/promo-codes/{id}`, `DELETE /v1/promo-codes/{id}`                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `shipping:read`       | `GET /v1/shipping/coverage`, `GET /v1/shipping/providers`, `GET /v1/shipping/rates`, `GET /v1/shipping/settings`, `GET /v1/wilayas`, `GET /v1/wilayas/{id}/communes`                                                                                                                                                                                                                                                                                                                                 |
| `shipping:write`      | `POST /v1/shipping/providers`, `POST /v1/shipping/providers/default`, `POST /v1/shipping/providers/test`, `DELETE /v1/shipping/providers/{provider}`, `POST /v1/shipping/rates`, `POST /v1/shipping/rates/sync`, `PATCH /v1/shipping/settings`                                                                                                                                                                                                                                                       |
| `store:read`          | `GET /v1/store`, `GET /v1/store/design`, `GET /v1/store/design/fields`, `GET /v1/store/home-sections`, `GET /v1/store/home-layout`, `GET /v1/themes`                                                                                                                                                                                                                                                                                                                                                 |
| `store:write`         | `PATCH /v1/store`, `PATCH /v1/store/design`, `PATCH /v1/store/home-sections`, `PUT /v1/store/home-layout`, `POST /v1/store/home-layout/sections`, `PATCH /v1/store/home-layout/sections/{id}`, `DELETE /v1/store/home-layout/sections/{id}`, `POST /v1/store/home-layout/reorder`, `POST /v1/store/theme`, `POST /v1/store/fast-checkout-theme`, `POST /v1/store/variant-style`                                                                                                                      |
| `whatsapp:read`       | `GET /v1/whatsapp/templates`, `GET /v1/whatsapp/balance`, `GET /v1/whatsapp/messages`                                                                                                                                                                                                                                                                                                                                                                                                                |
| `whatsapp:send`       | `POST /v1/orders/{id}/whatsapp`                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

الطلب `GET /v1/whoami` لا يحتاج أي صلاحية، والطلب `GET /v1/ping` لا يحتاج أي رمز. الاستدعاء الذي تنقصه الصلاحية اللازمة يجيب بـ `403` مع رمز الخطأ `forbidden` ورسالة تذكر الصلاحية، مثل `Missing scope: orders:read`.

## نقاط وصول مغلقة أمام رموز التطبيقات[​](#نقاط-وصول-مغلقة-أمام-رموز-التطبيقات "رابط مباشر إلى نقاط وصول مغلقة أمام رموز التطبيقات")

تجيب هذه النقاط بـ `403` مع الرسالة `Apps cannot use this endpoint` مهما كانت صلاحيات الرمز: `/v1/keys` و `/v1/webhooks` و `/v1/changes` و `POST /v1/changes/{id}/undo`. تبقى إدارة المفاتيح واشتراكات `webhook` وسجل التراجع بيد التاجر. أما نقطتا اتصال المساعدين `GET /v1/connection` و `POST /v1/connection/active-store` فتجيبان بـ `403` من دون `store:read` أو `store:write`، وبـ `404` في غير ذلك، لأن رمز التطبيق لم يُنشأ عبر اتصال مساعد.

## الصلاحيات وإشعارات `webhook`[​](#الصلاحيات-وإشعارات-webhook "رابط مباشر إلى الصلاحيات-وإشعارات-webhook")

كل حدث طلبية (`order.created`، `order.confirmed`، `order.processing`، `order.shipped`، `order.delivered`، `order.cancelled`، `order.returned`) يحمل اسم المشتري وهاتفه وعنوانه. لا يستقبل تثبيتك أحداث الطلبيات إلا إذا منح التاجر `orders:read`. أما الحدث `app.uninstalled` فيُرسل مهما كانت الصلاحيات. راجع [إشعارات Webhook](https://dzbuild.dev/ar/ar/webhooks.md).

## ما يراه التاجر[​](#ما-يراه-التاجر "رابط مباشر إلى ما يراه التاجر")

تجمع شاشة الموافقة الصلاحيات حسب المورد وتعرض سطرا واحدا لكل مورد: سطر الكتابة إذا طلب التطبيق الكتابة، وسطر القراءة في غير ذلك. يظهر السطر بلغة التاجر. تغيير الصلاحيات المسجّلة على التطبيق لا يغيّر الرموز الصادرة من قبل؛ يحصل المتجر على الصلاحيات الجديدة عندما يعيد التاجر تثبيت التطبيق.
