# Seller status in the seller app (2026-11-09)

Additive: no existing key changed. Server side: `App\Services\SellerStatus` (map in its docblock),
`docs/codebase/04-auth-users-sellers.md` §4.10g.

## Statuses

| `seller_status` | Arabic | Products shown to customers | Seller can sign in |
|---|---|---|---|
| `pending` | قيد الانتظار | no | yes |
| `active` | نشط | yes | yes |
| `rejected` | مرفوض | no | yes (can send the verification form again → `pending`) |
| `suspended` | موقوف مؤقتاً | no | yes |
| `banned` | محظور | no | no (login refused: "User is banned") |

## `GET api/v2/seller/shop/info` (signed-in seller)

New keys next to the old ones (filled for the shop's owner only; `''` for anyone else):

```json
{
  "seller_status": "suspended",
  "seller_status_text": "موقوف مؤقتاً",
  "seller_status_reason": "أسعار غير صحيحة",
  "seller_status_note": "30 منتج سعرهم أقل من الكلفة",
  "seller_status_until": "2026-11-20"
}
```

`seller_status_reason`, `_note` and `_until` are filled only while `rejected` or `suspended` (else `''`). The app should show
a banner like the web panel's while they are set: the text for the status, the reason, the note, and "until" when present;
for `rejected`, a button to the verification form.

## Notifications

The seller's notification list (`notification_text`) already carries the reason, so nothing is needed to show it:

- rejected: type `shop_verify_request_rejected`, text + "السبب: …";
- suspended: type `shop_suspended_seller`;
- active again after a suspension: `shop_reactivated_seller`; approved: `shop_verify_request_approved`.

`data` of these entries (`App\Notifications\ShopVerificationNotification`): `name`, `id` (shop id), `status`
(`approved` / `rejected` / `suspended`), `reason` (the reason and note as one line).

Warnings staff give a seller are internal and never sent to the app.
