# Admin API Documentation

**Version:** v42 — generated 2026-11-02 13:26:04 UTC

Comprehensive API endpoints for **Admin** users.

--- 

## Enums & Constants Reference

The Bateel API uses standardized PHP BackedEnums and strict choice values across request parameters and search filters:

| Enum / Constant | Backing Type | Allowed Values | Description / Labels | Related Fields & Search Filters |
|---|---|---|---|---|
| `Continent` | `string` | `africa`, `europe`, `asia`, `south_america`, `north_america`, `australia` | Continents for geographical classification | `filters[continent]`, `countries.continent` |
| `CourseMaterialType` | `string` | `pdf`, `image` | Material attachment format (Narrow bucket for icons) | `material_type`, `materials.material_type` |
| `EducationalDegree` | `string` | `high_school`, `diploma`, `bachelor`, `master`, `phd` | User educational qualification levels | `educational_degree`, auth registration |
| `FAQType` | `integer` | `1` (General), `2` (Trainer), `3` (User) | FAQ category target audience | `type`, `faqs.type` |
| `MediaType` | `string` | `image`, `video` | Core media asset format types | `type`, `media.type` |
| `NotificationScenario` | `string` | `user_registered`, `withdraw_request_created`, `withdraw_request_approved`, `withdraw_request_rejected` | System notification trigger scenarios | `scenario`, notification settings |
| `PaymentMethod` | `integer` | `1` (Wallet), `2` (Credit Card) | Transaction payment method codes | `payment_method`, payments / checkout |
| `SessionStatus` | `string` | `unscheduled`, `upcoming`, `running`, `completed` | Live session calendar status | `session.status`, live sessions index |
| `StaticPageType` | `string` | `about_us`, `privacy_policy`, `warranty_policy`, `return_policy`, `shipping_policy` | CMS static page system identifiers | `type`, static page endpoints |
| `TrainerType` | `string` | `educational`, `consultant`, `both` | Trainer specialization profile type | `trainer_type`, `trainers.trainer_type` |
| `UserType` | `string` | `super_admin`, `supervisor`, `trainer`, `user` | Core user global role classification | `user_type`, `filters[user_type]` |
| `VerificationToken` | `string` | `register`, `login-verify`, `forgot-password`, `change-phone`, `change-email` | OTP / Auth verification action scope | `type` in auth verification endpoints |
| `WithdrawStatus` | `integer` | `1` (Pending), `2` (Approved), `3` (Rejected) | Withdrawal request processing state | `status`, `withdrawals.status` |
| *Content Status* | `string` | `draft`, `pending_review`, `needs_revision`, `approved` | Program/Course publishing state | `content_status` |
| *Session Mode* | `string` | `online`, `onsite`, `hybrid` | Class session delivery format | `mode`, `attendance_mode` |
| *Quiz Question Type* | `string` | `multiple_choice`, `true_false` | Quiz question format | `question_type` |
| *Gender* | `string` | `male`, `female` | Gender selection | `gender` |

---

## Media

### List All Media

**Method:** `GET` | **Endpoint:** `{{base_host}}/media?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `shared.media.index`
**Middleware:** `auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Medium

**Method:** `POST` | **Endpoint:** `{{base_host}}/media` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

| Key | Type | Description | Example |
|---|---|---|---|
| `file` | `file` | File (Required). Rules: required, file, max:10240, mimes:jpg,jpeg,png,gif,webp,pdf,avi,mov,wmv,flv,mkv,mp4,mp3,wav, extensions:jpg,jpeg,png,gif,webp,pdf,avi,mov,wmv,flv,mkv,mp4,mp3,wav | `` |
| `collection` | `text` | Collection (Required). Rules: required, string, max:100, regex:/\A[A-Za-z0-9][A-Za-z0-9_-]*\z/ | `video` |

**Payload & Validation Field Details:**

**Route:** `shared.media.store`
**Middleware:** `auth:api, active`

**Payload:**
Send as `multipart/form-data`. Select a local file for fields marked as `file`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `file` | `file` | yes | File | `{{media_hash}}` | `required, file, max:10240, mimes:jpg,jpeg,png,gif,webp,pdf,avi,mov,wmv,flv,mkv,mp4,mp3,wav, extensions:jpg,jpeg,png,gif,webp,pdf,avi,mov,wmv,flv,mkv,mp4,mp3,wav` |
| `collection` | `string` | yes | Collection | `video` | `required, string, max:100, regex:/\A[A-Za-z0-9][A-Za-z0-9_-]*\z/` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "hash": "media-hash-uuid-12345",
        "url": "http://localhost:8000/storage/media/example.jpg",
        "mime_type": "image/jpeg",
        "size": 102400,
        "original_name": "photo.jpg"
    }
}
```

---

### Delete Medium

**Method:** `DELETE` | **Endpoint:** `{{base_host}}/media/:media_id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `media_id` | `{{media_id}}` | Media_id ID |

**Payload & Validation Field Details:**

**Route:** `shared.media.destroy`
**Middleware:** `auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Chunk Video

**Method:** `POST` | **Endpoint:** `{{base_host}}/media/videos/chunk` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

| Key | Type | Description | Example |
|---|---|---|---|
| `upload_id` | `text` | Upload id (Optional). Rules: sometimes, nullable, string, max:64, regex:/^[A-Za-z0-9\-]+$/ | `{{upload_id}}` |
| `chunk` | `file` | Chunk (Required). Rules: required, file, max:20480 | `` |
| `chunk_index` | `text` | Chunk index (Required). Rules: required, integer, min:0 | `0` |
| `total_chunks` | `text` | Total chunks (Required). Rules: required, integer, min:1, max:10000 | `4` |
| `file_name` | `text` | File name (Required). Rules: required, string, max:255 | `lecture-01.mp4` |
| `total_size` | `text` | Total size (Optional). Rules: sometimes, nullable, integer, min:1, max:2147483648 | `52428800` |
| `collection` | `text` | Collection (Optional). Rules: sometimes, nullable, string, max:100, regex:/\A[A-Za-z0-9][A-Za-z0-9_-]*\z/ | `video` |

**Payload & Validation Field Details:**

**Route:** `shared.media.videos.chunk`
**Middleware:** `auth:api, active, throttle:120,1`

**Payload:**
Send as `multipart/form-data`. Select a local file for fields marked as `file`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `upload_id` | `integer` | no | Upload id | `{{upload_id}}` | `sometimes, nullable, string, max:64, regex:/^[A-Za-z0-9\-]+$/` |
| `chunk` | `file` | yes | Chunk | `value` | `required, file, max:20480` |
| `chunk_index` | `integer` | yes | Chunk index | `0` | `required, integer, min:0` |
| `total_chunks` | `integer` | yes | Total chunks | `4` | `required, integer, min:1, max:10000` |
| `file_name` | `string` | yes | File name | `lecture-01.mp4` | `required, string, max:255` |
| `total_size` | `integer` | no | Total size | `52428800` | `sometimes, nullable, integer, min:1, max:2147483648` |
| `collection` | `string` | no | Collection | `video` | `sometimes, nullable, string, max:100, regex:/\A[A-Za-z0-9][A-Za-z0-9_-]*\z/` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Status Video

**Method:** `GET` | **Endpoint:** `{{base_host}}/media/videos/:upload_id/status` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `upload_id` | `{{upload_id}}` | Upload_id ID |

**Payload & Validation Field Details:**

**Route:** `shared.media.videos.status`
**Middleware:** `auth:api, active, throttle:120,1`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Cancel Video

**Method:** `DELETE` | **Endpoint:** `{{base_host}}/media/videos/:upload_id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `upload_id` | `{{upload_id}}` | Upload_id ID |

**Payload & Validation Field Details:**

**Route:** `shared.media.videos.cancel`
**Middleware:** `auth:api, active, throttle:120,1`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Auth

### Login

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/auth/login` | **Auth:** `Public`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "login": "admin@info.com",
    "password": "12345678"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.auth.login`
**Middleware:** `api, set_locale, cors`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `login` | `string` | yes | Email | `admin@info.com` | `required, string` |
| `password` | `string` | yes | Password | `12345678` | `required, string, min:6` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "name": "User Account",
        "email": "user@example.com",
        "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
        "verification_token": null
    }
}
```

---

### Logout

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/auth/logout` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "device_token": "fcm-token-here"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.auth.logout`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `device_token` | `string` | no | Device Token | `fcm-token-here` | `nullable, string, max:500` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Notifications

### Stream Notification

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/notifications/stream` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.notifications.stream`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### List All Notifications

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/notifications?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.notifications.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Notification

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/notifications/send` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "title": "Example Title",
    "body": "Example message body text.",
    "target": "broadcast",
    "user_ids": [
        "{{user_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.notifications.create`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `title` | `string` | yes | Title | `Example Title` | `required, string, max:200` |
| `body` | `string` | yes | Message Body | `Example message body text.` | `required, string, max:1000` |
| `target` | `enum (string)` | yes | Target<br>**One of:** `broadcast` · `targeted` | `broadcast` | `required, in:broadcast,targeted` |
| `user_ids` | `array` | conditional | User IDs | `["{{user_id}}"]` | `required_if:target,targeted, array, min:1` |
| `user_ids.*` | `integer` | yes | User ids item | `{{user_id}}` | `required, string, uuid, exists:users,uuid` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Stream Notification

**Method:** `GET` | **Endpoint:** `{{base_url}}/notifications/stream` | **Auth:** `Public`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `shared.notifications.stream`
**Middleware:** `api, set_locale, cors`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### List All Notifications

**Method:** `GET` | **Endpoint:** `{{base_url}}/notifications?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `shared.notifications.index`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:04+00:00"
        }
    ]
}
```

---

### Unread Count Notification

**Method:** `GET` | **Endpoint:** `{{base_url}}/notifications/unread-count` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `shared.notifications.unread-count`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### Read All Notification

**Method:** `PATCH` | **Endpoint:** `{{base_url}}/notifications/read-all` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "notification-uuid-1",
        "notification-uuid-2"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `shared.notifications.read-all`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `notification-uuid-1` | `not specified` |
| `ids.1` | `string` | no | Ids 1 | `notification-uuid-2` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### Read Notification

**Method:** `PATCH` | **Endpoint:** `{{base_url}}/notifications/:id/read` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{notification_id}}` | Id ID |

**Request Body:**

```json
{
    "ids": [
        "notification-uuid-1",
        "notification-uuid-2"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `shared.notifications.read`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `notification-uuid-1` | `not specified` |
| `ids.1` | `string` | no | Ids 1 | `notification-uuid-2` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### Mark All Read Notification

**Method:** `POST` | **Endpoint:** `{{base_url}}/notifications/mark-all-read` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `shared.notifications.mark-all-read`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### Clear All Notification

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/notifications/clear-all` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `shared.notifications.clear-all`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### Show Notification Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/notifications/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{notification_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `shared.notifications.show`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

### Delete Notification

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/notifications/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{notification_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `shared.notifications.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Stream Ticket Notification

**Method:** `POST` | **Endpoint:** `{{base_url}}/notifications/stream-ticket` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `shared.notifications.stream-ticket`
**Middleware:** `api, set_locale, cors, auth:api, active, throttle:20,1`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

## Profile

### Show Profile Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/profile` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.profile.view`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Profile

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/profile` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "full_name": "Ahmed Al-Mansoor",
    "email": "user@example.com",
    "phone": "1000000001",
    "phone_code": "20",
    "gender": "male",
    "birth_date": "2026-11-02",
    "locale": "en",
    "image": "{{media_hash}}"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.profile.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `full_name` | `string` | no | Full Name | `Ahmed Al-Mansoor` | `sometimes, string, max:100` |
| `email` | `string` | no | Email | `user@example.com` | `sometimes, email, unique:users,email,"1",id` |
| `phone` | `string` | no | Phone | `1000000001` | `sometimes, string, max:20` |
| `phone_code` | `string` | no | Phone code | `20` | `nullable, string, max:5` |
| `gender` | `enum (string)` | no | Gender<br>**One of:** `male` · `female` | `male` | `sometimes, in:male,female` |
| `birth_date` | `string` | no | Birth date | `2026-11-02` | `nullable, date` |
| `locale` | `string` | no | Locale | `en` | `nullable, string, max:10` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Change Password Profile

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/profile/change-password` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "current_password": "12345678",
    "password": "12345678",
    "password_confirmation": "12345678"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.profile.change-password`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `current_password` | `string` | yes | Current Password | `12345678` | `required, string` |
| `password` | `string` | yes | New Password | `12345678` | `required, string, min:8, confirmed` |
| `password_confirmation` | `string` | yes | Password confirmation | `12345678` | `required, same:password` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Settings

### List All Settings

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/settings?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.settings.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Update Setting

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/settings` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "settings": [
        {
            "key": "app_name",
            "value": "Bateel"
        }
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.settings.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `settings` | `array` | no | Settings | `[{"key":"app_name","value":"Bateel"}]` | `sometimes, array` |
| `settings.*.key` | `string` | no | Setting Key | `app_name` | `sometimes, string, max:100` |
| `settings.*.value` | `string` | no | Setting Value | `Bateel` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Faqs

### Bulk Delete Faq

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/faqs/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{faq_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.faqs.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{faq_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Faqs

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/faqs?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.faqs.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Faq

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/faqs` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "is_active": true,
    "type": "1",
    "en": {
        "question": "What are the prerequisites for this program?",
        "answer": "No prior experience is required. Suitable for beginners."
    },
    "ar": {
        "question": "ما هي متطلبات الدورة التدريبية؟",
        "answer": "لا توجد متطلبات سابقة، الدورة مناسبة لجميع المستويات."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.faqs.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `type` | `enum (integer)` | no | Type<br>**One of:** `1` · `2` · `3` · `4` | `1` | `sometimes, integer, enum:App\Enums\FAQType` |
| `en.question` | `string` | yes | Question (en) | `What are the prerequisites for this program?` | `required, string, max:500` |
| `en.answer` | `string` | yes | Answer (en) | `No prior experience is required. Suitable for beginners.` | `required, string, max:5000` |
| `ar.question` | `string` | yes | Question (ar) | `ما هي متطلبات الدورة التدريبية؟` | `required, string, max:500` |
| `ar.answer` | `string` | yes | Answer (ar) | `لا توجد متطلبات سابقة، الدورة مناسبة لجميع المستويات.` | `required, string, max:5000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Faq Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/faqs/:faq` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `faq` | `{{faq_id}}` | Faq ID |

**Payload & Validation Field Details:**

**Route:** `admin.faqs.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Faq

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/faqs/:faq` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `faq` | `{{faq_id}}` | Faq ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.faqs.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Faq

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/faqs/:faq` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `faq` | `{{faq_id}}` | Faq ID |

**Payload & Validation Field Details:**

**Route:** `admin.faqs.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Pages

### List All Pages

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/pages?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.pages.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Page

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/pages` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "type": "about_us",
    "is_active": true,
    "image": "{{media_hash}}",
    "en": {
        "title": "Building Your First Model",
        "content": "Module 1: model structure. Module 2: forecasting. Module 3: valuation."
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول",
        "content": "الوحدة الأولى: هيكل النموذج. الوحدة الثانية: التنبؤ. الوحدة الثالثة: التقييم."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.pages.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `type` | `enum (string)` | yes | Type<br>**One of:** `about_us` · `privacy_policy` · `shipping_policy` | `about_us` | `required, string, in:"about_us","privacy_policy","shipping_policy", unique:static_pages,type,NULL,id` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `en.title` | `string` | yes | Title (en) | `Building Your First Model` | `required, string, max:255` |
| `en.content` | `string` | yes | Content (en) | `Module 1: model structure. Module 2: forecasting. Module 3: valuation.` | `required, string` |
| `ar.title` | `string` | yes | Title (ar) | `بناء نموذجك المالي الأول` | `required, string, max:255` |
| `ar.content` | `string` | yes | Content (ar) | `الوحدة الأولى: هيكل النموذج. الوحدة الثانية: التنبؤ. الوحدة الثالثة: التقييم.` | `required, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Page Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/pages/:page` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `page` | `{{page_id}}` | Page ID |

**Payload & Validation Field Details:**

**Route:** `admin.pages.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Page

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/pages/:page` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `page` | `{{page_id}}` | Page ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.pages.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Sliders

### Bulk Delete Slider

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/sliders/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{slider_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.sliders.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{slider_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Sliders

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/sliders?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.sliders.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Slider

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/sliders` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "type": "home",
    "link": "https://bateel.dev",
    "sort_order": 0,
    "is_active": true,
    "image": "{{media_hash}}",
    "en": {
        "title": "Building Your First Model",
        "subtitle": "Example Title"
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول",
        "subtitle": "Example Title"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.sliders.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `type` | `string` | no | Type | `home` | `sometimes, string` |
| `link` | `string` | no | Link | `https://bateel.dev` | `nullable, url, max:500` |
| `sort_order` | `integer` | no | Sort Order | `0` | `nullable, integer` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `en.title` | `string` | yes | Title (en) | `Building Your First Model` | `required, string, max:255` |
| `en.subtitle` | `string` | no | Subtitle (en) | `Example Title` | `nullable, string, max:500` |
| `ar.title` | `string` | yes | Title (ar) | `بناء نموذجك المالي الأول` | `required, string, max:255` |
| `ar.subtitle` | `string` | no | Subtitle (ar) | `Example Title` | `nullable, string, max:500` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Slider Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/sliders/:slider` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `slider` | `{{slider_id}}` | Slider ID |

**Payload & Validation Field Details:**

**Route:** `admin.sliders.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Slider

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/sliders/:slider` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `slider` | `{{slider_id}}` | Slider ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.sliders.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Slider

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/sliders/:slider` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `slider` | `{{slider_id}}` | Slider ID |

**Payload & Validation Field Details:**

**Route:** `admin.sliders.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Our services

### Bulk Delete Our service

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/our-services/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{our_service_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.our-services.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{our_service_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Our services

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/our-services?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.our-services.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Our service

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/our-services` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "link": "https://bateel.dev",
    "sort_order": 0,
    "is_active": true,
    "image": "{{media_hash}}",
    "en": {
        "title": "Building Your First Model",
        "description": "A practical course covering financial modelling from first principles."
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.our-services.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `link` | `string` | no | Link | `https://bateel.dev` | `nullable, string, max:500` |
| `sort_order` | `integer` | no | Sort Order | `0` | `sometimes, integer` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `en.title` | `string` | yes | Title (en) | `Building Your First Model` | `required, string, max:255` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `nullable, string, max:1000` |
| `ar.title` | `string` | yes | Title (ar) | `بناء نموذجك المالي الأول` | `required, string, max:255` |
| `ar.description` | `string` | no | Description (ar) | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `nullable, string, max:1000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Our service Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/our-services/:our_service` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `our_service` | `{{our_service_id}}` | Our_service ID |

**Payload & Validation Field Details:**

**Route:** `admin.our-services.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Our service

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/our-services/:our_service` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `our_service` | `{{our_service_id}}` | Our_service ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.our-services.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Our service

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/our-services/:our_service` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `our_service` | `{{our_service_id}}` | Our_service ID |

**Payload & Validation Field Details:**

**Route:** `admin.our-services.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Categories

### Bulk Delete Category

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/categories/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{category_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.categories.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{category_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Categories

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/categories?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.categories.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Category

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/categories` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "parent_id": "{{parent_id}}",
    "is_active": true,
    "sort_order": 0,
    "image": "{{media_hash}}",
    "en": {
        "name": "Financial Modelling Fundamentals",
        "description": "A practical course covering financial modelling from first principles."
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.categories.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `parent_id` | `integer` | no | Parent Category | `{{parent_id}}` | `nullable, exists:categories,id` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `sort_order` | `integer` | no | Sort Order | `0` | `sometimes, required, integer, min:0, max:255` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:255` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `sometimes, nullable, string` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:255` |
| `ar.description` | `string` | no | Description (ar) | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `sometimes, nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Category Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/categories/:category` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `category` | `{{category_id}}` | Category ID |

**Payload & Validation Field Details:**

**Route:** `admin.categories.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Category

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/categories/:category` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `category` | `{{category_id}}` | Category ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.categories.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Category

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/categories/:category` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `category` | `{{category_id}}` | Category ID |

**Payload & Validation Field Details:**

**Route:** `admin.categories.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Programs

### Bulk Delete Program

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/programs/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{program_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{program_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Content Status Program

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/content-status` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "content_status": "draft"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.content-status`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `content_status` | `enum (string)` | yes | Content Status<br>**One of:** `draft` · `pending_review` · `needs_revision` · `approved` | `draft` | `required, in:"draft","pending_review","needs_revision","approved"` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Quiz Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/quiz` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.quiz.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Quiz

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/programs/:program/quiz` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.quiz.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### List All Questions

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/questions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.programs.questions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Question

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/questions` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "question_type": "multiple_choice",
    "question_text": "What is this?",
    "score": 1,
    "sort_order": 0,
    "options": [
        {
            "option_text": "value",
            "is_correct": true
        }
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.questions.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `question_type` | `enum (string)` | yes | Question Type<br>**One of:** `multiple_choice` · `true_false` | `multiple_choice` | `required, in:"multiple_choice","true_false"` |
| `question_text` | `string` | yes | Question Text | `What is this?` | `required, string` |
| `score` | `number` | no | Score | `1` | `sometimes, numeric, min:0.01, max:999` |
| `sort_order` | `integer` | no | Sort Order | `0` | `sometimes, integer, min:0` |
| `options` | `array` | yes | Options | `[{"option_text":"value","is_correct":true}]` | `required, array, min:2, max:10` |
| `options.*.option_text` | `string` | yes | Option Text | `value` | `required, string, max:255` |
| `options.*.is_correct` | `boolean` | yes | Is Correct | `true` | `required, boolean` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Reorder Question

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/questions/reorder` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "questions": [
        "What is this?"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.questions.reorder`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `questions` | `array` | yes | attributes.questions | `["What is this?"]` | `required, array, min:1` |
| `questions.*` | `integer` | yes | attributes.questions.* | `What is this?` | `required, string, uuid, distinct, exists:quiz_questions,uuid` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Question

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/programs/:program/questions/:question` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `question` | `{{question_id}}` | Question ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.questions.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Question

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/programs/:program/questions/:question` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `question` | `{{question_id}}` | Question ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.questions.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Review Check Program

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/review-check` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.review-check`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Approve Program

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/approve` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.approve`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Request Revision Program

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/request-revision` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "notes": "value"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.request-revision`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `notes` | `string` | yes | Revision Notes | `value` | `required, string, max:2000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### List All Programs

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.programs.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Program

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "category_id": "{{category_id}}",
    "trainer_id": "{{trainer_id}}",
    "attendance_mode": "online",
    "start_date": "2026-10-01",
    "duration_hours": 12,
    "capacity": 1,
    "has_quiz": true,
    "has_certificate": true,
    "certificate_attendance_threshold": 1,
    "content_status": "draft",
    "is_visible": true,
    "demo_video": "{{media_hash}}",
    "image": "{{media_hash}}",
    "training_timer_max_minutes": 240,
    "prices": [
        {
            "country_id": "{{country_id}}",
            "price": 49.99,
            "is_default": true
        }
    ],
    "en": {
        "name": "Financial Modelling Fundamentals",
        "description": "A practical course covering financial modelling from first principles.",
        "demo_text": "Watch a short preview covering the course structure and outcomes.",
        "goals": "Build a three-statement model and run a scenario analysis with confidence.",
        "content": "Module 1: model structure. Module 2: forecasting. Module 3: valuation.",
        "target_audience": "Accountants, financial analysts, and recent finance graduates.",
        "experience_level": "Intermediate",
        "subscription_terms": "Access remains available for twelve months from the enrolment date.",
        "certificate_terms": "Issued after completing 80% of the content and passing the final quiz.",
        "refund_policy": "Full refund available within 14 days if less than 20% is completed."
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.",
        "demo_text": "شاهد مقطعًا تعريفيًا يوضح محاور الدورة ومخرجاتها.",
        "goals": "بناء نموذج مالي متكامل وتنفيذ تحليل السيناريوهات بثقة.",
        "content": "الوحدة الأولى: هيكل النموذج. الوحدة الثانية: التنبؤ. الوحدة الثالثة: التقييم.",
        "target_audience": "المحاسبون والمحللون الماليون وحديثو التخرج في التخصصات المالية.",
        "experience_level": "متوسط",
        "subscription_terms": "يستمر الوصول إلى محتوى الدورة لمدة اثني عشر شهرًا من تاريخ الاشتراك.",
        "certificate_terms": "تصدر الشهادة بعد إكمال 80% من المحتوى واجتياز الاختبار النهائي.",
        "refund_policy": "يمكن الاسترداد الكامل خلال 14 يومًا إذا لم يتجاوز التقدم 20%."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `category_id` | `integer` | yes | Category | `{{category_id}}` | `required, string, uuid, exists:categories,uuid` |
| `trainer_id` | `file` | yes | Trainer | `{{trainer_id}}` | `required, string, uuid, exists:trainer_profiles,uuid` |
| `attendance_mode` | `enum (string)` | yes | Attendance Mode<br>**One of:** `online` · `onsite` · `hybrid` | `online` | `required, in:"online","onsite","hybrid"` |
| `start_date` | `string` | no | Start Date | `2026-10-01` | `nullable, date` |
| `duration_hours` | `integer` | yes | Duration (hours) | `12` | `required, integer, min:1` |
| `capacity` | `integer` | no | Capacity | `1` | `nullable, integer, min:1` |
| `has_quiz` | `boolean` | no | Has Quiz | `true` | `sometimes, boolean` |
| `has_certificate` | `boolean` | no | Has Certificate | `true` | `sometimes, boolean` |
| `certificate_attendance_threshold` | `integer` | no | Certificate Attendance Threshold (%) | `1` | `nullable, integer, min:1, max:100` |
| `content_status` | `enum (string)` | no | Content Status<br>**One of:** `draft` · `pending_review` · `needs_revision` · `approved` | `draft` | `sometimes, in:"draft","pending_review","needs_revision","approved"` |
| `is_visible` | `boolean` | no | Is Visible | `true` | `sometimes, boolean` |
| `demo_video` | `string` | no | Demo Video | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `image` | `string` | no | image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `training_timer_max_minutes` | `integer` | no | Training Timer Max Minutes | `240` | `nullable, integer, min:1` |
| `prices` | `array` | no | Prices | `[{"country_id":"{{country_id}}","price":49.99,"is_default":true}]` | `sometimes, array` |
| `prices.*.country_id` | `integer` | conditional | Country | `{{country_id}}` | `required_with:prices, distinct, custom:Closure` |
| `prices.*.price` | `number` | conditional | Price | `49.99` | `required_with:prices, numeric, min:0` |
| `prices.*.is_default` | `boolean` | no | Default Price | `true` | `sometimes, boolean` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:200` |
| `en.description` | `string` | no | En description | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `en.demo_text` | `string` | no | En demo text | `Watch a short preview covering the course structure and outcomes.` | `nullable, string` |
| `en.goals` | `string` | no | En goals | `Build a three-statement model and run a scenario analysis with confidence.` | `nullable, string` |
| `en.content` | `string` | no | En content | `Module 1: model structure. Module 2: forecasting. Module 3: valuation.` | `nullable, string` |
| `en.target_audience` | `string` | no | En target audience | `Accountants, financial analysts, and recent finance graduates.` | `nullable, string` |
| `en.experience_level` | `string` | no | En experience level | `Intermediate` | `nullable, string, max:100` |
| `en.subscription_terms` | `string` | no | En subscription terms | `Access remains available for twelve months from the enrolment date.` | `nullable, string` |
| `en.certificate_terms` | `string` | no | En certificate terms | `Issued after completing 80% of the content and passing the final quiz.` | `nullable, string` |
| `en.refund_policy` | `string` | no | En refund policy | `Full refund available within 14 days if less than 20% is completed.` | `nullable, string` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:200` |
| `ar.description` | `string` | no | Ar description | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `nullable, string` |
| `ar.demo_text` | `string` | no | Ar demo text | `شاهد مقطعًا تعريفيًا يوضح محاور الدورة ومخرجاتها.` | `nullable, string` |
| `ar.goals` | `string` | no | Ar goals | `بناء نموذج مالي متكامل وتنفيذ تحليل السيناريوهات بثقة.` | `nullable, string` |
| `ar.content` | `string` | no | Ar content | `الوحدة الأولى: هيكل النموذج. الوحدة الثانية: التنبؤ. الوحدة الثالثة: التقييم.` | `nullable, string` |
| `ar.target_audience` | `string` | no | Ar target audience | `المحاسبون والمحللون الماليون وحديثو التخرج في التخصصات المالية.` | `nullable, string` |
| `ar.experience_level` | `string` | no | Ar experience level | `متوسط` | `nullable, string, max:100` |
| `ar.subscription_terms` | `string` | no | Ar subscription terms | `يستمر الوصول إلى محتوى الدورة لمدة اثني عشر شهرًا من تاريخ الاشتراك.` | `nullable, string` |
| `ar.certificate_terms` | `string` | no | Ar certificate terms | `تصدر الشهادة بعد إكمال 80% من المحتوى واجتياز الاختبار النهائي.` | `nullable, string` |
| `ar.refund_policy` | `string` | no | Ar refund policy | `يمكن الاسترداد الكامل خلال 14 يومًا إذا لم يتجاوز التقدم 20%.` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Program Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Program

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/programs/:program` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Program

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/programs/:program` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Live Session

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/sessions/live` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.live`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Bulk Store Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/bulk` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "sessions": [
        {
            "mode": "online",
            "session_date": "2026-11-16",
            "start_time": "10:00:00",
            "duration_minutes": 90,
            "meeting_link": "https://meetings.example.com/bateel/session-1",
            "sort_order": 0,
            "en": {
                "location": "Riyadh Training Centre, Al Olaya"
            },
            "ar": {
                "location": "مركز التدريب بالرياض، حي العليا"
            }
        }
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.bulk-store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `sessions` | `array` | yes | Sessions | `[{"mode":"online","session_date":"2026-11-16","start_time":"10:00:00","duration_minutes":90,"meeting_link":"https://meetings.example.com/bateel/session-1","sort_order":0,"en":{"location":"Riyadh Training Centre, Al Olaya"},"ar":{"location":"مركز التدريب بالرياض، حي العليا"}}]` | `required, array, min:1` |
| `sessions.*.mode` | `enum (string)` | yes | Mode<br>**One of:** `online` · `onsite` | `online` | `required, in:"online","onsite"` |
| `sessions.*.session_date` | `string` | yes | Session Date | `2026-11-16` | `required, date` |
| `sessions.*.start_time` | `string` | yes | Start Time | `10:00:00` | `required, date_format:H:i` |
| `sessions.*.duration_minutes` | `integer` | yes | Duration (minutes) | `90` | `required, integer, min:1` |
| `sessions.*.meeting_link` | `string` | no | Meeting Link | `https://meetings.example.com/bateel/session-1` | `nullable, url` |
| `sessions.*.sort_order` | `integer` | no | Sort Order | `0` | `sometimes, integer` |
| `sessions.*.en.location` | `string` | no | Sessions item en location | `Riyadh Training Centre, Al Olaya` | `nullable, string, max:255` |
| `sessions.*.ar.location` | `string` | no | Sessions item ar location | `مركز التدريب بالرياض، حي العليا` | `nullable, string, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Attendance Session

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/:session/attendance` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `session` | `{{session_id}}` | Session ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.attendance`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Create New Attendance

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/:session/attendance` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `session` | `{{session_id}}` | Session ID |

**Request Body:**

```json
{
    "student_ids": [
        "{{student_id}}"
    ],
    "attended": true
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.attendance.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `student_ids` | `array` | yes | Students | `["{{student_id}}"]` | `required, array, min:1` |
| `student_ids.*` | `integer` | no | Student | `{{student_id}}` | `string, uuid, exists:users,uuid` |
| `attended` | `boolean` | no | Attended | `true` | `sometimes, boolean` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Attendance Summary Session

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/attendance-summary` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.attendance-summary`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### List All Sessions

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "mode": "online",
    "session_date": "2026-11-16",
    "start_time": "10:00:00",
    "duration_minutes": 90,
    "meeting_link": "https://meetings.example.com/bateel/session-1",
    "location": {
        "en": "value",
        "ar": "value"
    },
    "sort_order": 0,
    "en": {
        "location": "Riyadh Training Centre, Al Olaya"
    },
    "ar": {
        "location": "مركز التدريب بالرياض، حي العليا"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `mode` | `enum (string)` | yes | Mode<br>**One of:** `online` · `onsite` | `online` | `required, in:"online","onsite"` |
| `session_date` | `string` | yes | Session Date | `2026-11-16` | `required, date` |
| `start_time` | `string` | yes | Start Time | `10:00:00` | `required, date_format:H:i` |
| `duration_minutes` | `integer` | yes | Duration (minutes) | `90` | `required, integer, min:1` |
| `meeting_link` | `string` | no | Meeting Link | `https://meetings.example.com/bateel/session-1` | `nullable, url` |
| `location` | `string` | no | Location | `{"en":"value","ar":"value"}` | `nullable, string, max:255` |
| `sort_order` | `integer` | no | Sort Order | `0` | `sometimes, integer` |
| `en.location` | `string` | no | Location (en) | `Riyadh Training Centre, Al Olaya` | `nullable, string, max:255` |
| `location.en` | `string` | no | Location en | `value` | `nullable, string, max:255` |
| `ar.location` | `string` | no | Location (ar) | `مركز التدريب بالرياض، حي العليا` | `nullable, string, max:255` |
| `location.ar` | `string` | no | Location ar | `value` | `nullable, string, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Session Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/:session` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `session` | `{{session_id}}` | Session ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Session

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/:session` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `session` | `{{session_id}}` | Session ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Session

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/programs/:program/sessions/:session` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |
| `session` | `{{session_id}}` | Session ID |

**Payload & Validation Field Details:**

**Route:** `admin.programs.sessions.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Certificates

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/programs/:program/certificates?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.programs.certificates.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Certificate

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/certificates` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "user_id": "{{user_id}}"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.certificates.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `user_id` | `integer` | yes | Student | `{{user_id}}` | `required, string, uuid, exists:users,uuid` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Override Certificate

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/programs/:program/certificates/override` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `program` | `{{program_id}}` | Program ID |

**Request Body:**

```json
{
    "user_id": "{{user_id}}",
    "reason": "Manual adjustment by admin."
}
```

**Payload & Validation Field Details:**

**Route:** `admin.programs.certificates.override`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `user_id` | `integer` | yes | Student | `{{user_id}}` | `required, string, uuid, exists:users,uuid` |
| `reason` | `string` | yes | Reason | `Manual adjustment by admin.` | `required, string, min:10, max:1000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Certificates

### List All Certificates

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/certificates?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.certificates.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Certificate Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/certificates/:certificate` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `certificate` | `{{certificate_id}}` | Certificate ID |

**Payload & Validation Field Details:**

**Route:** `admin.certificates.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Status Certificate

**Method:** `PATCH` | **Endpoint:** `{{base_url}}/admin/certificates/:certificate/status` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `certificate` | `{{certificate_id}}` | Certificate ID |

**Request Body:**

```json
{
    "status": "valid",
    "reason": "Manual adjustment by admin."
}
```

**Payload & Validation Field Details:**

**Route:** `admin.certificates.status`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `status` | `enum (string)` | yes | Status<br>**One of:** `valid` · `revoked` | `valid` | `required, string, in:"valid","revoked"` |
| `reason` | `string` | conditional | Reason | `Manual adjustment by admin.` | `nullable, required_if:status,revoked, string, max:1000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Verify Certificate

**Method:** `GET` | **Endpoint:** `{{base_url}}/certificates/verify/:qr_token` | **Auth:** `Public`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `qr_token` | `{{qr_token_id}}` | Qr_token ID |

**Payload & Validation Field Details:**

**Route:** `shared.certificates.verify`
**Middleware:** `api, set_locale, cors`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

## Consultation types

### List All Consultation types

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/consultation-types?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.consultation-types.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Consultation type

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/consultation-types` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "is_visible": true,
    "image": "{{media_hash}}",
    "en": {
        "name": "Financial Modelling Fundamentals",
        "description": "A practical course covering financial modelling from first principles."
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.consultation-types.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `is_visible` | `boolean` | no | Is Visible | `true` | `sometimes, boolean` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:150` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:150` |
| `ar.description` | `string` | no | Description (ar) | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Consultation type Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/consultation-types/:consultation_type` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `consultation_type` | `{{consultation_type_id}}` | Consultation_type ID |

**Payload & Validation Field Details:**

**Route:** `admin.consultation-types.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Consultation type

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/consultation-types/:consultation_type` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `consultation_type` | `{{consultation_type_id}}` | Consultation_type ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.consultation-types.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Consultation type

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/consultation-types/:consultation_type` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `consultation_type` | `{{consultation_type_id}}` | Consultation_type ID |

**Payload & Validation Field Details:**

**Route:** `admin.consultation-types.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Trainer consultants

### List All Trainer consultants

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/trainer-consultants?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Trainer consultant

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/trainer-consultants` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "trainer_id": "{{trainer_id}}",
    "consultation_type_id": "{{consultation_type_id}}",
    "duration_minutes": 90,
    "is_available": true,
    "price": 49.99,
    "currency_country_id": 1,
    "prices": [
        {
            "country_id": "{{country_id}}",
            "price": 49.99,
            "is_default": true
        }
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `trainer_id` | `file` | yes | Trainer | `{{trainer_id}}` | `required, string, uuid, exists:trainer_profiles,uuid` |
| `consultation_type_id` | `integer` | yes | Consultation Type | `{{consultation_type_id}}` | `required, string, uuid, exists:consultation_types,uuid` |
| `duration_minutes` | `integer` | yes | Duration (minutes) | `90` | `required, integer, min:1` |
| `is_available` | `boolean` | no | Is Available | `true` | `sometimes, boolean` |
| `price` | `number` | conditional | Price | `49.99` | `required_with:currency_country_id, numeric, min:0, missing_with:prices` |
| `currency_country_id` | `integer` | conditional | Country | `1` | `required_with:price, missing_with:prices, custom:Closure` |
| `prices` | `array` | no | Prices | `[{"country_id":"{{country_id}}","price":49.99,"is_default":true}]` | `sometimes, array` |
| `prices.*.country_id` | `integer` | conditional | Country | `{{country_id}}` | `required_with:prices, distinct, custom:Closure` |
| `prices.*.price` | `number` | conditional | Price | `49.99` | `required_with:prices, numeric, min:0` |
| `prices.*.is_default` | `boolean` | no | Default Price | `true` | `sometimes, boolean` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Trainer consultant Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/trainer-consultants/:trainer_consultant` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainer_consultant` | `{{trainer_consultant_id}}` | Trainer_consultant ID |

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Trainer consultant

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/trainer-consultants/:trainer_consultant` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainer_consultant` | `{{trainer_consultant_id}}` | Trainer_consultant ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Trainer consultant

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/trainer-consultants/:trainer_consultant` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainer_consultant` | `{{trainer_consultant_id}}` | Trainer_consultant ID |

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Slots

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/trainer-consultants/:trainer_consultant/slots?from=2026-10-01&to=2026-10-31&paginate=true&per_page=15&page=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainer_consultant` | `{{trainer_consultant_id}}` | Trainer_consultant ID |

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `from` | `date` | `2026-10-01` | Only slots starting on/after this day (YYYY-MM-DD, inclusive) | Optional |
| `to` | `date` | `2026-10-31` | Only slots starting on/before this day (YYYY-MM-DD, inclusive, must be >= from) | Optional |
| `paginate` | `boolean` | `true` | Set to true to paginate (default: false) | Optional |
| `per_page` | `integer` | `15` | Items per page when paginated (max: 100) | Optional |
| `page` | `integer` | `1` | Page number when paginated | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.slots.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `from` — Only slots starting on/after this day (YYYY-MM-DD, inclusive) (optional)
- `to` — Only slots starting on/before this day (YYYY-MM-DD, inclusive, must be >= from) (optional)
- `paginate` — Set to true to paginate (default: false) (optional)
- `per_page` — Items per page when paginated (max: 100) (optional)
- `page` — Page number when paginated (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Slot

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/trainer-consultants/:trainer_consultant/slots` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainer_consultant` | `{{trainer_consultant_id}}` | Trainer_consultant ID |

**Request Body:**

```json
{
    "dates": [
        "2026-11-04"
    ],
    "times": [
        "09:00"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.slots.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `dates` | `array` | yes | Dates | `["2026-11-04"]` | `required, array, min:1` |
| `dates.*` | `string` | no | Date | `2026-11-04` | `date, after_or_equal:today` |
| `times` | `array` | yes | Times | `["09:00"]` | `required, array, min:1` |
| `times.*` | `string` | no | Time | `09:00` | `date_format:H:i` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Slot

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/trainer-consultants/:trainer_consultant/slots/:slot` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainer_consultant` | `{{trainer_consultant_id}}` | Trainer_consultant ID |
| `slot` | `{{slot_id}}` | Slot ID |

**Payload & Validation Field Details:**

**Route:** `admin.trainer-consultants.slots.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Consultation bookings

### List All Consultation bookings

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/consultation-bookings?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.consultation-bookings.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Consultation booking Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/consultation-bookings/:consultation_booking` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `consultation_booking` | `{{consultation_booking_id}}` | Consultation_booking ID |

**Payload & Validation Field Details:**

**Route:** `admin.consultation-bookings.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Meeting Link Consultation booking

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/consultation-bookings/:consultation_booking/meeting-link` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `consultation_booking` | `{{consultation_booking_id}}` | Consultation_booking ID |

**Request Body:**

```json
{
    "meeting_link": "https://meetings.example.com/bateel/session-1"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.consultation-bookings.meeting-link`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `meeting_link` | `string` | yes | Meeting Link | `https://meetings.example.com/bateel/session-1` | `required, url, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Admin

### POST api/v1/admin/consultation-bookings

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/consultation-bookings` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### POST api/v1/admin/consultation-bookings/{consultation_booking}

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/consultation-bookings/:consultation_booking` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `consultation_booking` | `{{consultation_booking_id}}` | Consultation_booking ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Courses

### Bulk Delete Course

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/courses/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{course_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{course_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Create New Recorded

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/recorded` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "has_quiz": true,
    "video_completion_threshold_default": 80,
    "cert_required_quiz_pass_percent": 70,
    "category_id": "{{category_id}}",
    "trainer_id": "{{trainer_id}}",
    "has_free_sample": true,
    "has_certificate": true,
    "is_visible": true,
    "content_status": "draft",
    "image": "{{media_hash}}",
    "demo_video": "{{media_hash}}",
    "cert_required_content_percent": 80,
    "training_timer_max_minutes": 240,
    "prices": [
        {
            "country_id": "{{country_id}}",
            "price": 49.99,
            "is_default": true
        }
    ],
    "en": {
        "name": "Financial Modelling Fundamentals",
        "description": "A practical course covering financial modelling from first principles.",
        "demo_text": "Watch a short preview covering the course structure and outcomes.",
        "target_audience": "Accountants, financial analysts, and recent finance graduates.",
        "requirements": "Comfortable with spreadsheets and basic accounting concepts.",
        "goals": "Build a three-statement model and run a scenario analysis with confidence.",
        "subscription_terms": "Access remains available for twelve months from the enrolment date.",
        "certificate_terms": "Issued after completing 80% of the content and passing the final quiz."
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.",
        "demo_text": "شاهد مقطعًا تعريفيًا يوضح محاور الدورة ومخرجاتها.",
        "target_audience": "المحاسبون والمحللون الماليون وحديثو التخرج في التخصصات المالية.",
        "requirements": "إلمام بالجداول الإلكترونية ومبادئ المحاسبة الأساسية.",
        "goals": "بناء نموذج مالي متكامل وتنفيذ تحليل السيناريوهات بثقة.",
        "subscription_terms": "يستمر الوصول إلى محتوى الدورة لمدة اثني عشر شهرًا من تاريخ الاشتراك.",
        "certificate_terms": "تصدر الشهادة بعد إكمال 80% من المحتوى واجتياز الاختبار النهائي."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.recorded.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `has_quiz` | `boolean` | no | Has Quiz | `true` | `sometimes, boolean` |
| `video_completion_threshold_default` | `integer` | no | Default Video Completion Threshold | `80` | `sometimes, integer, between:1,100` |
| `cert_required_quiz_pass_percent` | `integer` | no | Certificate Quiz Pass Percentage | `70` | `nullable, integer, between:0,100` |
| `max_seats` | `string` | no | Maximum Seats | `null` | `prohibited` |
| `category_id` | `integer` | no | Category | `{{category_id}}` | `nullable, string, uuid, exists:categories,uuid` |
| `trainer_id` | `file` | no | Trainer | `{{trainer_id}}` | `nullable, string, uuid, exists:trainer_profiles,uuid` |
| `has_free_sample` | `boolean` | no | Has Free Sample | `true` | `sometimes, boolean` |
| `has_certificate` | `boolean` | no | Has Certificate | `true` | `sometimes, boolean` |
| `is_visible` | `boolean` | no | Is Visible | `true` | `sometimes, boolean` |
| `content_status` | `enum (string)` | no | Content Status<br>**One of:** `draft` · `pending_review` · `needs_revision` · `approved` | `draft` | `sometimes, in:draft,pending_review,needs_revision,approved` |
| `image` | `string` | yes | Image | `{{media_hash}}` | `required, string, custom:MediaExists` |
| `demo_video` | `string` | no | Demo Video | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `cert_required_content_percent` | `integer` | no | Certificate Content Percentage | `80` | `nullable, integer, between:0,100` |
| `training_timer_max_minutes` | `integer` | no | Training Timer Max Minutes | `240` | `nullable, integer, min:1` |
| `prices` | `array` | no | Prices | `[{"country_id":"{{country_id}}","price":49.99,"is_default":true}]` | `sometimes, array` |
| `prices.*.country_id` | `integer` | conditional | Country | `{{country_id}}` | `required_with:prices, string, uuid, distinct, exists:countries,uuid` |
| `prices.*.price` | `number` | conditional | Price | `49.99` | `required_with:prices, numeric, min:0` |
| `prices.*.is_default` | `boolean` | no | Default Price | `true` | `sometimes, boolean` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:200` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `en.demo_text` | `string` | no | Demo Text (en) | `Watch a short preview covering the course structure and outcomes.` | `nullable, string` |
| `en.target_audience` | `string` | no | Target Audience (en) | `Accountants, financial analysts, and recent finance graduates.` | `nullable, string` |
| `en.requirements` | `string` | no | Requirements (en) | `Comfortable with spreadsheets and basic accounting concepts.` | `nullable, string` |
| `en.goals` | `string` | no | Goals (en) | `Build a three-statement model and run a scenario analysis with confidence.` | `nullable, string` |
| `en.subscription_terms` | `string` | no | Subscription Terms (en) | `Access remains available for twelve months from the enrolment date.` | `nullable, string` |
| `en.certificate_terms` | `string` | no | Certificate Terms (en) | `Issued after completing 80% of the content and passing the final quiz.` | `nullable, string` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:200` |
| `ar.description` | `string` | no | Description (ar) | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `nullable, string` |
| `ar.demo_text` | `string` | no | Demo Text (ar) | `شاهد مقطعًا تعريفيًا يوضح محاور الدورة ومخرجاتها.` | `nullable, string` |
| `ar.target_audience` | `string` | no | Target Audience (ar) | `المحاسبون والمحللون الماليون وحديثو التخرج في التخصصات المالية.` | `nullable, string` |
| `ar.requirements` | `string` | no | Requirements (ar) | `إلمام بالجداول الإلكترونية ومبادئ المحاسبة الأساسية.` | `nullable, string` |
| `ar.goals` | `string` | no | Goals (ar) | `بناء نموذج مالي متكامل وتنفيذ تحليل السيناريوهات بثقة.` | `nullable, string` |
| `ar.subscription_terms` | `string` | no | Subscription Terms (ar) | `يستمر الوصول إلى محتوى الدورة لمدة اثني عشر شهرًا من تاريخ الاشتراك.` | `nullable, string` |
| `ar.certificate_terms` | `string` | no | Certificate Terms (ar) | `تصدر الشهادة بعد إكمال 80% من المحتوى واجتياز الاختبار النهائي.` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Recorded

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/courses/recorded/:course` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.recorded.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Create New Live

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/live` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "max_seats": 25,
    "category_id": "{{category_id}}",
    "trainer_id": "{{trainer_id}}",
    "has_free_sample": true,
    "has_certificate": true,
    "is_visible": true,
    "content_status": "draft",
    "image": "{{media_hash}}",
    "demo_video": "{{media_hash}}",
    "cert_required_content_percent": 80,
    "training_timer_max_minutes": 240,
    "prices": [
        {
            "country_id": "{{country_id}}",
            "price": 49.99,
            "is_default": true
        }
    ],
    "en": {
        "name": "Financial Modelling Fundamentals",
        "description": "A practical course covering financial modelling from first principles.",
        "demo_text": "Watch a short preview covering the course structure and outcomes.",
        "target_audience": "Accountants, financial analysts, and recent finance graduates.",
        "requirements": "Comfortable with spreadsheets and basic accounting concepts.",
        "goals": "Build a three-statement model and run a scenario analysis with confidence.",
        "subscription_terms": "Access remains available for twelve months from the enrolment date.",
        "certificate_terms": "Issued after completing 80% of the content and passing the final quiz."
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.",
        "demo_text": "شاهد مقطعًا تعريفيًا يوضح محاور الدورة ومخرجاتها.",
        "target_audience": "المحاسبون والمحللون الماليون وحديثو التخرج في التخصصات المالية.",
        "requirements": "إلمام بالجداول الإلكترونية ومبادئ المحاسبة الأساسية.",
        "goals": "بناء نموذج مالي متكامل وتنفيذ تحليل السيناريوهات بثقة.",
        "subscription_terms": "يستمر الوصول إلى محتوى الدورة لمدة اثني عشر شهرًا من تاريخ الاشتراك.",
        "certificate_terms": "تصدر الشهادة بعد إكمال 80% من المحتوى واجتياز الاختبار النهائي."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.live.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `max_seats` | `integer` | yes | Maximum Seats | `25` | `required, integer, min:1` |
| `has_quiz` | `string` | no | Has Quiz | `null` | `prohibited` |
| `video_completion_threshold_default` | `string` | no | Default Video Completion Threshold | `null` | `prohibited` |
| `cert_required_quiz_pass_percent` | `string` | no | Certificate Quiz Pass Percentage | `null` | `prohibited` |
| `category_id` | `integer` | no | Category | `{{category_id}}` | `nullable, string, uuid, exists:categories,uuid` |
| `trainer_id` | `file` | no | Trainer | `{{trainer_id}}` | `nullable, string, uuid, exists:trainer_profiles,uuid` |
| `has_free_sample` | `boolean` | no | Has Free Sample | `true` | `sometimes, boolean` |
| `has_certificate` | `boolean` | no | Has Certificate | `true` | `sometimes, boolean` |
| `is_visible` | `boolean` | no | Is Visible | `true` | `sometimes, boolean` |
| `content_status` | `enum (string)` | no | Content Status<br>**One of:** `draft` · `pending_review` · `needs_revision` · `approved` | `draft` | `sometimes, in:draft,pending_review,needs_revision,approved` |
| `image` | `string` | yes | Image | `{{media_hash}}` | `required, string, custom:MediaExists` |
| `demo_video` | `string` | no | Demo Video | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `cert_required_content_percent` | `integer` | no | Certificate Content Percentage | `80` | `nullable, integer, between:0,100` |
| `training_timer_max_minutes` | `integer` | no | Training Timer Max Minutes | `240` | `nullable, integer, min:1` |
| `prices` | `array` | no | Prices | `[{"country_id":"{{country_id}}","price":49.99,"is_default":true}]` | `sometimes, array` |
| `prices.*.country_id` | `integer` | conditional | Country | `{{country_id}}` | `required_with:prices, string, uuid, distinct, exists:countries,uuid` |
| `prices.*.price` | `number` | conditional | Price | `49.99` | `required_with:prices, numeric, min:0` |
| `prices.*.is_default` | `boolean` | no | Default Price | `true` | `sometimes, boolean` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:200` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `en.demo_text` | `string` | no | Demo Text (en) | `Watch a short preview covering the course structure and outcomes.` | `nullable, string` |
| `en.target_audience` | `string` | no | Target Audience (en) | `Accountants, financial analysts, and recent finance graduates.` | `nullable, string` |
| `en.requirements` | `string` | no | Requirements (en) | `Comfortable with spreadsheets and basic accounting concepts.` | `nullable, string` |
| `en.goals` | `string` | no | Goals (en) | `Build a three-statement model and run a scenario analysis with confidence.` | `nullable, string` |
| `en.subscription_terms` | `string` | no | Subscription Terms (en) | `Access remains available for twelve months from the enrolment date.` | `nullable, string` |
| `en.certificate_terms` | `string` | no | Certificate Terms (en) | `Issued after completing 80% of the content and passing the final quiz.` | `nullable, string` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:200` |
| `ar.description` | `string` | no | Description (ar) | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `nullable, string` |
| `ar.demo_text` | `string` | no | Demo Text (ar) | `شاهد مقطعًا تعريفيًا يوضح محاور الدورة ومخرجاتها.` | `nullable, string` |
| `ar.target_audience` | `string` | no | Target Audience (ar) | `المحاسبون والمحللون الماليون وحديثو التخرج في التخصصات المالية.` | `nullable, string` |
| `ar.requirements` | `string` | no | Requirements (ar) | `إلمام بالجداول الإلكترونية ومبادئ المحاسبة الأساسية.` | `nullable, string` |
| `ar.goals` | `string` | no | Goals (ar) | `بناء نموذج مالي متكامل وتنفيذ تحليل السيناريوهات بثقة.` | `nullable, string` |
| `ar.subscription_terms` | `string` | no | Subscription Terms (ar) | `يستمر الوصول إلى محتوى الدورة لمدة اثني عشر شهرًا من تاريخ الاشتراك.` | `nullable, string` |
| `ar.certificate_terms` | `string` | no | Certificate Terms (ar) | `تصدر الشهادة بعد إكمال 80% من المحتوى واجتياز الاختبار النهائي.` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Live

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/courses/live/:course` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.live.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Publish Check Course

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/courses/:course/publish-check` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Payload & Validation Field Details:**

**Route:** `admin.courses.publish-check`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Publish Course

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/:course/publish` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.publish`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Unpublish Course

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/:course/unpublish` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.unpublish`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Approve Course

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/:course/approve` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.approve`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Request Revision Course

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/:course/request-revision` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
{
    "notes": "value"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.request-revision`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `notes` | `string` | yes | Revision Notes | `value` | `required, string, max:2000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### List All Lessons

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/courses/:course/lessons?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.courses.lessons.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### List All Sessions

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/courses/:course/sessions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.courses.sessions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/courses/:course/sessions` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
{
    "count": 4,
    "duration_minutes": 90,
    "mode": "online",
    "sort_order": 0
}
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.sessions.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `count` | `integer` | yes | Sessions Count | `4` | `required, integer, min:1, max:500` |
| `duration_minutes` | `integer` | yes | Duration (minutes) | `90` | `required, integer, min:1` |
| `mode` | `enum (string)` | no | Mode<br>**One of:** `online` · `onsite` | `online` | `sometimes, in:"online","onsite"` |
| `sort_order` | `integer` | no | Sort Order | `0` | `sometimes, integer` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Reorder Session

**Method:** `PATCH` | **Endpoint:** `{{base_url}}/admin/courses/:course/sessions/reorder` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.courses.sessions.reorder`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Completion Summary Course

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/courses/:course/completion-summary` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Payload & Validation Field Details:**

**Route:** `admin.courses.completion-summary`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### List All Courses

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/courses?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.courses.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Course Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/courses/:course` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Payload & Validation Field Details:**

**Route:** `admin.courses.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Course

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/courses/:course` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |

**Payload & Validation Field Details:**

**Route:** `admin.courses.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Lessons

### Show Lesson Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/lessons/:lesson` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `lesson` | `{{lesson_id}}` | Lesson ID |

**Payload & Validation Field Details:**

**Route:** `admin.lessons.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Sessions

### Update Session

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/sessions/:session` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `session` | `{{session_id}}` | Session ID |

**Request Body:**

```json
{
    "session_date": "2026-11-16",
    "start_time": "10:00:00",
    "meeting_link": "https://meetings.example.com/bateel/session-1",
    "sort_order": 0
}
```

**Payload & Validation Field Details:**

**Route:** `admin.sessions.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `session_date` | `string` | no | Session Date | `2026-11-16` | `sometimes, date_format:Y-m-d` |
| `start_time` | `string` | no | Start Time | `10:00:00` | `sometimes, date_format:H:i:s` |
| `meeting_link` | `string` | no | Meeting Link | `https://meetings.example.com/bateel/session-1` | `nullable, string, url, max:2048` |
| `sort_order` | `integer` | no | Sort Order | `0` | `sometimes, integer` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Unschedule Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/sessions/:session/unschedule` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `session` | `{{session_id}}` | Session ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.sessions.unschedule`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Session

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/sessions/:session` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `session` | `{{session_id}}` | Session ID |

**Payload & Validation Field Details:**

**Route:** `admin.sessions.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Books

### File Book

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/books/:book/file` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `book` | `{{book_id}}` | Book ID |

**Payload & Validation Field Details:**

**Route:** `admin.books.file`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto, throttle:60,1`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Bulk Delete Book

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/books/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{book_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.books.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{book_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Books

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/books?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[content_type]=digital_book&filters[category_id]={{category_id}}&filters[is_available]=1&country_id={{country_id}}` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[content_type]` | `string` | `digital_book` | Filter by content type: physical_book, digital_book, research | Optional |
| `filters[category_id]` | `integer` | `{{category_id}}` | Filter by category UUID or ID | Optional |
| `filters[is_available]` | `integer` | `1` | Filter by availability: 1 or 0 | Optional |
| `country_id` | `integer` | `{{country_id}}` | Pricing country ID for localized currency and prices | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.books.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[content_type]` — Filter by content type: physical_book, digital_book, research (optional)
- `filters[category_id]` — Filter by category UUID or ID (optional)
- `filters[is_available]` — Filter by availability: 1 or 0 (optional)
- `country_id` — Pricing country ID for localized currency and prices (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Book

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/books` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "content_type": "digital_book",
    "category_id": "{{category_id}}",
    "prices": [
        {
            "country_id": "{{country_id}}",
            "price": 49.99,
            "is_default": true
        }
    ],
    "is_visible": true,
    "is_available": true,
    "cover_image": "{{media_hash}}",
    "digital_file": "{{media_hash}}",
    "en": {
        "title": "Building Your First Model",
        "author": "Dr. Farooq Al-Bateel",
        "description": "A practical course covering financial modelling from first principles."
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول",
        "author": "د. فاروق البتيل",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.books.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `content_type` | `enum (string)` | yes | Content Type<br>**One of:** `physical_book` · `digital_book` · `research` | `digital_book` | `required, in:"physical_book","digital_book","research"` |
| `category_id` | `integer` | no | Category | `{{category_id}}` | `nullable, string, uuid, exists:categories,uuid` |
| `price` | `string` | no | Price | `null` | `prohibited` |
| `currency_country_id` | `integer` | no | Currency country id | `null` | `prohibited` |
| `prices` | `array` | yes | Prices | `[{"country_id":"{{country_id}}","price":49.99,"is_default":true}]` | `required, array, min:1` |
| `prices.*.country_id` | `integer` | conditional | Country | `{{country_id}}` | `required_with:prices, string, uuid, distinct, exists:countries,uuid,currency_code,"NOT_NULL"` |
| `prices.*.price` | `number` | conditional | Price | `49.99` | `required_with:prices, numeric, min:0, decimal:0,2` |
| `prices.*.is_default` | `boolean` | conditional | Default price | `true` | `required_with:prices, boolean` |
| `stock_quantity` | `string` | no | Stock | `null` | `prohibited` |
| `stock_adjustment` | `string` | no | Stock Adjustment | `null` | `prohibited` |
| `is_visible` | `boolean` | no | Is visible | `true` | `sometimes, boolean` |
| `is_available` | `boolean` | no | Is available | `true` | `sometimes, boolean` |
| `cover_image` | `string` | no | Cover Image | `{{media_hash}}` | `sometimes, string, custom:MediaExists` |
| `digital_file` | `string` | no | Digital File | `{{media_hash}}` | `sometimes, string, custom:MediaExists, custom:PrivateMediaFile` |
| `en.title` | `string` | yes | En title | `Building Your First Model` | `required, string, max:200` |
| `en.author` | `string` | no | En author | `Dr. Farooq Al-Bateel` | `nullable, string, max:150` |
| `en.description` | `string` | no | En description | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `ar.title` | `string` | yes | Ar title | `بناء نموذجك المالي الأول` | `required, string, max:200` |
| `ar.author` | `string` | no | Ar author | `د. فاروق البتيل` | `nullable, string, max:150` |
| `ar.description` | `string` | no | Ar description | `دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق.` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Book Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/books/:book` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `book` | `{{book_id}}` | Book ID |

**Payload & Validation Field Details:**

**Route:** `admin.books.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Book

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/books/:book` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `book` | `{{book_id}}` | Book ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.books.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Book

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/books/:book` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `book` | `{{book_id}}` | Book ID |

**Payload & Validation Field Details:**

**Route:** `admin.books.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Book orders

### List All Book Orders

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/book-orders?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[status]=placed` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[status]` | `enum` | `placed` | Filter by order status: placed, delivered, cancelled | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.book-orders.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[status]` — Filter by order status: placed, delivered, cancelled (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Book Order Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/book-orders/:order` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `order` | `{{order_id}}` | Order ID |

**Payload & Validation Field Details:**

**Route:** `admin.book-orders.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Book Order Status

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/book-orders/:order/status` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `order` | `{{order_id}}` | Order ID |

**Request Body:**

```json
{
    "status": "delivered"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.book-orders.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `status` | `enum (string)` | yes | Status<br>**One of:** `delivered` | `delivered` | `required, in:"delivered"` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Subscribers

### List All Subscribers

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/subscribers?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.subscribers.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Subscriber Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/subscribers/:subscriber` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `subscriber` | `{{subscriber_id}}` | Subscriber ID |

**Payload & Validation Field Details:**

**Route:** `admin.subscribers.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Subscriber

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/subscribers/:subscriber` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `subscriber` | `{{subscriber_id}}` | Subscriber ID |

**Payload & Validation Field Details:**

**Route:** `admin.subscribers.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Reviews

### List All Reviews

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reviews?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[rating]=5` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[rating]` | `integer` | `5` | Filter by star rating: 1 to 5 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.reviews.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[rating]` — Filter by star rating: 1 to 5 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Review Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reviews/:review` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `review` | `{{review_id}}` | Review ID |

**Payload & Validation Field Details:**

**Route:** `admin.reviews.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Review

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/reviews/:review/status` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `review` | `{{review_id}}` | Review ID |

**Request Body:**

```json
{
    "status": "visible"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.reviews.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `status` | `enum (string)` | yes | Status<br>**One of:** `visible` · `hidden` | `visible` | `required, in:"visible","hidden"` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Enrollments

### Users Enrollment

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/enrollments/users` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.enrollments.users`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Enrolled users

### List All Enrolled users

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/enrolled-users?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[status]=active&filters[user_type]=individual&from=2024-01-01&to=2024-12-31` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[status]` | `enum (string)` | `active` | Filter by status: active, pending, suspended, rejected | Optional |
| `filters[user_type]` | `enum (string)` | `individual` | Filter by user type (Enum: UserType: super_admin, supervisor, trainer, user) | Optional |
| `from` | `string` | `2024-01-01` | Filter from date (YYYY-MM-DD) | Optional |
| `to` | `string` | `2024-12-31` | Filter to date (YYYY-MM-DD) | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.enrolled-users.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[status]` — Filter by status: active, pending, suspended, rejected (optional)
- `filters[user_type]` — Filter by user type (Enum: UserType: super_admin, supervisor, trainer, user) (optional)
- `from` — Filter from date (YYYY-MM-DD) (optional)
- `to` — Filter to date (YYYY-MM-DD) (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

## Countries

### Bulk Delete Country

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/countries/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{country_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.countries.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{country_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Countries

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/countries?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1&filters[continent]=asia` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |
| `filters[continent]` | `enum (string)` | `asia` | Filter by continent (Enum: Continent: africa, europe, asia, south_america, north_america, australia) | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.countries.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)
- `filters[continent]` — Filter by continent (Enum: Continent: africa, europe, asia, south_america, north_america, australia) (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Country

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/countries` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "phone_code": "20",
    "phone_starting_number": "1000000001",
    "phone_length": "1000000001",
    "short_name": "EG",
    "continent": "africa",
    "is_active": true,
    "flag": "{{media_hash}}",
    "en": {
        "name": "Financial Modelling Fundamentals",
        "slug": "financial-modelling-fundamentals",
        "currency": "Egyptian Pound",
        "nationality": "Egyptian"
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "slug": "financial-modelling-fundamentals",
        "currency": "جنيه مصري",
        "nationality": "مصري"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.countries.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `phone_code` | `string` | yes | Phone Code | `20` | `required, max:5, unique:countries,phone_code,NULL,id` |
| `phone_starting_number` | `string` | yes | Phone Starting Number | `1000000001` | `required, max:10` |
| `phone_length` | `integer` | yes | Phone Length | `1000000001` | `required, integer, between:5,15` |
| `short_name` | `string` | yes | Short Name | `EG` | `required, string, max:10` |
| `continent` | `enum (string)` | yes | Continent<br>**One of:** `africa` · `europe` · `asia` · `south_america` · `north_america` · `australia` | `africa` | `required, in:"africa","europe","asia","south_america","north_america","australia"` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `flag` | `string` | no | Flag | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:255` |
| `en.slug` | `string` | no | Slug (en) | `financial-modelling-fundamentals` | `nullable, string, max:255` |
| `en.currency` | `string` | yes | Currency (en) | `Egyptian Pound` | `required, string, max:50` |
| `en.nationality` | `string` | no | Nationality (en) | `Egyptian` | `nullable, string, max:255` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:255` |
| `ar.slug` | `string` | no | Slug (ar) | `financial-modelling-fundamentals` | `nullable, string, max:255` |
| `ar.currency` | `string` | yes | Currency (ar) | `جنيه مصري` | `required, string, max:50` |
| `ar.nationality` | `string` | no | Nationality (ar) | `مصري` | `nullable, string, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Country Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/countries/:country` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `country` | `{{country_id}}` | Country ID |

**Payload & Validation Field Details:**

**Route:** `admin.countries.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Country

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/countries/:country` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `country` | `{{country_id}}` | Country ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.countries.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Country

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/countries/:country` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `country` | `{{country_id}}` | Country ID |

**Payload & Validation Field Details:**

**Route:** `admin.countries.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Governorates

### Bulk Delete Governorate

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/governorates/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{governorate_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.governorates.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{governorate_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Governorates

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/governorates?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1&filters[country_id]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |
| `filters[country_id]` | `integer` | `1` | Filter by country ID | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.governorates.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)
- `filters[country_id]` — Filter by country ID (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Governorate

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/governorates` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "country_id": "{{country_id}}",
    "lat": 30.0444,
    "lng": 31.2357,
    "is_active": true,
    "sort_order": 0,
    "en": {
        "name": "Financial Modelling Fundamentals",
        "slug": "financial-modelling-fundamentals"
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "slug": "financial-modelling-fundamentals"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.governorates.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `country_id` | `integer` | yes | Country | `{{country_id}}` | `required, exists:countries,id` |
| `lat` | `number` | no | Latitude | `30.0444` | `nullable, numeric, between:-90,90` |
| `lng` | `number` | no | Longitude | `31.2357` | `nullable, numeric, between:-180,180` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `sort_order` | `integer` | no | Sort Order | `0` | `nullable, integer` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:255` |
| `en.slug` | `string` | no | Slug (en) | `financial-modelling-fundamentals` | `nullable, string, max:255` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:255` |
| `ar.slug` | `string` | no | Slug (ar) | `financial-modelling-fundamentals` | `nullable, string, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Governorate Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/governorates/:governorate` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `governorate` | `{{governorate_id}}` | Governorate ID |

**Payload & Validation Field Details:**

**Route:** `admin.governorates.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Governorate

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/governorates/:governorate` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `governorate` | `{{governorate_id}}` | Governorate ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.governorates.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Governorate

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/governorates/:governorate` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `governorate` | `{{governorate_id}}` | Governorate ID |

**Payload & Validation Field Details:**

**Route:** `admin.governorates.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Regions

### Bulk Delete Region

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/regions/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{region_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.regions.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{region_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Regions

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/regions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1&filters[governorate_id]=1&filters[shipping_zone_id]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |
| `filters[governorate_id]` | `integer` | `1` | Filter by governorate ID | Optional |
| `filters[shipping_zone_id]` | `integer` | `1` | Filter by shipping zone ID | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.regions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)
- `filters[governorate_id]` — Filter by governorate ID (optional)
- `filters[shipping_zone_id]` — Filter by shipping zone ID (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Region

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/regions` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "governorate_id": "{{governorate_id}}",
    "shipping_zone_id": "{{shipping_zone_id}}",
    "lat": 30.0444,
    "lng": 31.2357,
    "is_active": true,
    "sort_order": 0,
    "en": {
        "name": "Financial Modelling Fundamentals",
        "slug": "financial-modelling-fundamentals"
    },
    "ar": {
        "name": "أساسيات النمذجة المالية",
        "slug": "financial-modelling-fundamentals"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.regions.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `governorate_id` | `integer` | yes | Governorate | `{{governorate_id}}` | `required, exists:governorates,id` |
| `shipping_zone_id` | `integer` | no | Shipping Zone | `{{shipping_zone_id}}` | `nullable, exists:shipping_zones,id` |
| `lat` | `number` | no | Latitude | `30.0444` | `nullable, numeric, between:-90,90` |
| `lng` | `number` | no | Longitude | `31.2357` | `nullable, numeric, between:-180,180` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `sort_order` | `integer` | no | Sort Order | `0` | `nullable, integer` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:255` |
| `en.slug` | `string` | no | Slug (en) | `financial-modelling-fundamentals` | `nullable, string, max:255` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:255` |
| `ar.slug` | `string` | no | Slug (ar) | `financial-modelling-fundamentals` | `nullable, string, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Region Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/regions/:region` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `region` | `{{region_id}}` | Region ID |

**Payload & Validation Field Details:**

**Route:** `admin.regions.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Region

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/regions/:region` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `region` | `{{region_id}}` | Region ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.regions.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Region

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/regions/:region` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `region` | `{{region_id}}` | Region ID |

**Payload & Validation Field Details:**

**Route:** `admin.regions.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Users

### List All Users

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/users?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[status]=active&filters[user_type]=individual&from=2024-01-01&to=2024-12-31` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[status]` | `enum (string)` | `active` | Filter by status: active, pending, suspended, rejected | Optional |
| `filters[user_type]` | `enum (string)` | `individual` | Filter by user type (Enum: UserType: super_admin, supervisor, trainer, user) | Optional |
| `from` | `string` | `2024-01-01` | Filter from date (YYYY-MM-DD) | Optional |
| `to` | `string` | `2024-12-31` | Filter to date (YYYY-MM-DD) | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.users.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[status]` — Filter by status: active, pending, suspended, rejected (optional)
- `filters[user_type]` — Filter by user type (Enum: UserType: super_admin, supervisor, trainer, user) (optional)
- `from` — Filter from date (YYYY-MM-DD) (optional)
- `to` — Filter to date (YYYY-MM-DD) (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New User

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/users` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "full_name": "Ahmed Al-Mansoor",
    "email": "user@example.com",
    "phone_code": "20",
    "country_id": "{{country_id}}",
    "phone": "1000000001",
    "password": "12345678",
    "gender": "male",
    "birth_date": "2026-11-02",
    "locale": "en",
    "is_active": true,
    "image": "{{media_hash}}"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.users.create`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `full_name` | `string` | yes | Full Name | `Ahmed Al-Mansoor` | `required, string, max:255` |
| `email` | `string` | yes | Email | `user@example.com` | `required, email, max:255, unique:users,email,NULL,id` |
| `phone_code` | `string` | no | Phone Code | `20` | `nullable, string, max:10` |
| `country_id` | `integer` | no | Country id | `{{country_id}}` | `sometimes, nullable, integer, exists:countries,id` |
| `phone` | `string` | no | Phone | `1000000001` | `nullable, string, max:20, unique:users,phone,NULL,id` |
| `password` | `string` | yes | Password | `12345678` | `required, nullable, string, min:8` |
| `gender` | `enum (string)` | no | Gender<br>**One of:** `male` · `female` | `male` | `nullable, string, in:male,female` |
| `birth_date` | `string` | no | Birth Date | `2026-11-02` | `nullable, date` |
| `locale` | `string` | no | Locale | `en` | `nullable, string, max:10` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show User Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/users/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{user_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.users.view`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update User

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/users/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{user_id}}` | Id ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.users.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete User

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/users/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{user_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.users.delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Toggle User Status

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/users/:id/toggle-active` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{user_id}}` | Id ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.users.toggle`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### History User

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/users/:id/history` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{user_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.users.history`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Section History

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/users/:id/history/:section` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{history_id}}` | Id ID |
| `section` | `{{section_id}}` | Section ID |

**Payload & Validation Field Details:**

**Route:** `admin.users.history.section`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Trainers

### List All Trainers

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/trainers?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.trainers.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Trainer

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/trainers` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "full_name": "Ahmed Al-Mansoor",
    "email": "user@example.com",
    "phone_code": "20",
    "country_id": "{{country_id}}",
    "phone": "1000000001",
    "password": "12345678",
    "gender": "male",
    "birth_date": "2026-11-02",
    "locale": "en",
    "is_active": true,
    "image": "{{media_hash}}",
    "trainer_type": "educational",
    "category_ids": [
        "{{category_id}}"
    ],
    "consultants": [
        {
            "consultation_type_id": "{{consultation_type_id}}",
            "price": 49.99,
            "currency_country_id": 1,
            "duration_minutes": 90,
            "is_available": true,
            "is_default": true
        }
    ],
    "permission_ids": [
        "{{permission_id}}"
    ],
    "en": {
        "bio": "Fifteen years advising finance teams across the GCC, with a focus on IFRS and reporting."
    },
    "ar": {
        "bio": "خمسة عشر عامًا من الخبرة في استشارات الإدارة المالية بدول الخليج مع تركيز على المعايير الدولية."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.trainers.create`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `full_name` | `string` | yes | Full Name | `Ahmed Al-Mansoor` | `required, string, max:255` |
| `email` | `string` | yes | Email | `user@example.com` | `required, email, max:255, unique:users,email,NULL,id` |
| `phone_code` | `string` | no | Phone Code | `20` | `nullable, string, max:10` |
| `country_id` | `integer` | no | Country id | `{{country_id}}` | `sometimes, nullable, integer, exists:countries,id` |
| `phone` | `string` | no | Phone | `1000000001` | `nullable, string, max:20, unique:users,phone,NULL,id` |
| `password` | `string` | yes | Password | `12345678` | `required, nullable, string, min:8` |
| `gender` | `enum (string)` | no | Gender<br>**One of:** `male` · `female` | `male` | `nullable, string, in:male,female` |
| `birth_date` | `string` | no | Birth Date | `2026-11-02` | `nullable, date` |
| `locale` | `string` | no | Locale | `en` | `nullable, string, max:10` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `trainer_type` | `enum (string)` | no | Trainer Type<br>**One of:** `educational` · `consultant` · `both` | `educational` | `sometimes, enum:App\Enums\TrainerType` |
| `category_ids` | `array` | no | Categories | `["{{category_id}}"]` | `sometimes, array` |
| `category_ids.*` | `integer` | no | Category | `{{category_id}}` | `string, uuid, exists:categories,uuid` |
| `consultants` | `array` | no | Consultants | `[{"consultation_type_id":"{{consultation_type_id}}","price":49.99,"currency_country_id":1,"duration_minutes":90,"is_available":true,"is_default":true}]` | `sometimes, array` |
| `consultants.*.consultation_type_id` | `integer` | conditional | Consultation Type | `{{consultation_type_id}}` | `required_with:consultants, string, uuid, exists:consultation_types,uuid` |
| `consultants.*.price` | `number` | conditional | Price | `49.99` | `required_with:consultants, numeric, min:0` |
| `consultants.*.currency_country_id` | `integer` | no | Currency Country | `1` | `nullable, custom:Closure` |
| `consultants.*.duration_minutes` | `integer` | no | Duration (minutes) | `90` | `sometimes, integer, min:1` |
| `consultants.*.is_available` | `boolean` | no | Is Available | `true` | `sometimes, boolean` |
| `consultants.*.is_default` | `boolean` | no | Consultants item is default | `true` | `sometimes, boolean` |
| `permission_ids` | `array` | no | Permissions | `["{{permission_id}}"]` | `sometimes, array` |
| `permission_ids.*` | `string` | yes | Permission | `{{permission_id}}` | `required, custom:Closure` |
| `en.bio` | `string` | no | Bio (en) | `Fifteen years advising finance teams across the GCC, with a focus on IFRS and reporting.` | `nullable, string, max:2000` |
| `ar.bio` | `string` | no | Bio (ar) | `خمسة عشر عامًا من الخبرة في استشارات الإدارة المالية بدول الخليج مع تركيز على المعايير الدولية.` | `nullable, string, max:2000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Trainer Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/trainers/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{trainer_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.trainers.view`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Trainer

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/trainers/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{trainer_id}}` | Id ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.trainers.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Trainer

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/trainers/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{trainer_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.trainers.delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Toggle Trainer Status

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/trainers/:id/toggle-active` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{trainer_id}}` | Id ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.trainers.toggle`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Statistics Trainer

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/trainers/:id/statistics` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{trainer_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.trainers.statistics`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Roles

### Bulk Delete Role

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/roles/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{role_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.roles.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{role_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Roles

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/roles?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.roles.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Role

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/roles` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "slug": "example-slug",
    "is_active": true,
    "parent_id": "{{parent_id}}",
    "permissions": [
        1
    ],
    "en": {
        "name": "Financial Modelling Fundamentals"
    },
    "ar": {
        "name": "أساسيات النمذجة المالية"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `admin.roles.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `slug` | `string` | yes | Slug | `example-slug` | `required, string, max:50, unique:roles,slug,NULL,id` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `parent_id` | `integer` | no | Parent Role | `{{parent_id}}` | `nullable, exists:roles,id` |
| `permissions` | `array` | no | Permissions | `[1]` | `nullable, array` |
| `permissions.*` | `integer` | no | Permission | `1` | `exists:permissions,id` |
| `en.name` | `string` | yes | Name (en) | `Financial Modelling Fundamentals` | `required, string, max:255` |
| `ar.name` | `string` | yes | Name (ar) | `أساسيات النمذجة المالية` | `required, string, max:255` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Role Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/roles/:role` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `role` | `{{role_id}}` | Role ID |

**Payload & Validation Field Details:**

**Route:** `admin.roles.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Role

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/roles/:role` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `role` | `{{role_id}}` | Role ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.roles.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Role

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/roles/:role` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `role` | `{{role_id}}` | Role ID |

**Payload & Validation Field Details:**

**Route:** `admin.roles.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Permissions

### List All Permissions

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/permissions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.permissions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

## Supervisors

### Bulk Delete Supervisor

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/supervisors/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{supervisor_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.supervisors.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{supervisor_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### List All Supervisors

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/supervisors?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.supervisors.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Supervisor

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/supervisors` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "full_name": "Ahmed Al-Mansoor",
    "email": "user@example.com",
    "phone": "1000000001",
    "password": "12345678",
    "is_active": true,
    "role_id": "{{role_id}}",
    "image": "{{media_hash}}"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.supervisors.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `full_name` | `string` | yes | Full Name | `Ahmed Al-Mansoor` | `required, string, max:255` |
| `email` | `string` | yes | Email | `user@example.com` | `required, email, max:255, unique:users,email,NULL,id` |
| `phone` | `string` | no | Phone | `1000000001` | `nullable, string, max:20, unique:users,phone,NULL,id` |
| `password` | `string` | yes | Password | `12345678` | `required, nullable, string, min:8` |
| `is_active` | `boolean` | no | Is Active | `true` | `sometimes, boolean` |
| `role_id` | `integer` | yes | Role | `{{role_id}}` | `required, exists:roles,id` |
| `image` | `string` | no | Image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Show Supervisor Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/supervisors/:supervisor` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `supervisor` | `{{supervisor_id}}` | Supervisor ID |

**Payload & Validation Field Details:**

**Route:** `admin.supervisors.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Supervisor

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/supervisors/:supervisor` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `supervisor` | `{{supervisor_id}}` | Supervisor ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.supervisors.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Supervisor

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/supervisors/:supervisor` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `supervisor` | `{{supervisor_id}}` | Supervisor ID |

**Payload & Validation Field Details:**

**Route:** `admin.supervisors.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Contact messages

### List All Contact messages

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/contact-messages?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_read]=0` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_read]` | `boolean` | `0` | Filter by read status: 0 or 1 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.contact-messages.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_read]` — Filter by read status: 0 or 1 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Show Contact message Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/contact-messages/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{contact_message_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.contact-messages.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Reply Contact message

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/contact-messages/:id/reply` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{contact_message_id}}` | Id ID |

**Request Body:**

```json
{
    "reply": "Thank you for reaching out. We will address your concern shortly."
}
```

**Payload & Validation Field Details:**

**Route:** `admin.contact-messages.reply`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `reply` | `string` | yes | Reply | `Thank you for reaching out. We will address your concern shortly.` | `required, string, max:5000` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Status Contact message

**Method:** `PATCH` | **Endpoint:** `{{base_url}}/admin/contact-messages/:id/status` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{contact_message_id}}` | Id ID |

**Request Body:**

```json
{
    "status": "new"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.contact-messages.status`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `status` | `enum (string)` | yes | Status<br>**One of:** `new` · `under_review` · `replied` · `closed` | `new` | `required, string, in:"new","under_review","replied","closed"` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Contact message

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/contact-messages/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{contact_message_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.contact-messages.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Feature flags

### List All Feature flags

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/feature-flags?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.feature-flags.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Feature flag

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/feature-flags` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "key": "new_checkout_flow",
    "is_enabled": true,
    "targeting_rules": [],
    "description": "Example content text"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.feature-flags.create`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `key` | `string` | yes | Key | `new_checkout_flow` | `required, string, max:100, unique:feature_flags,key,NULL,id` |
| `is_enabled` | `boolean` | no | Is Enabled | `true` | `sometimes, boolean` |
| `targeting_rules` | `array` | no | Targeting Rules | `[]` | `nullable, array` |
| `description` | `string` | no | Description | `Example content text` | `nullable, string` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Bulk Delete Feature flag

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/feature-flags/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{feature_flag_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.feature-flags.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{feature_flag_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Update Feature flag

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/feature-flags/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{feature_flag_id}}` | Id ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.feature-flags.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Feature flag

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/feature-flags/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{feature_flag_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.feature-flags.delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Toggle Feature flag Status

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/feature-flags/:id/toggle` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{feature_flag_id}}` | Id ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `admin.feature-flags.toggle`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No fields. Send an empty JSON object `{}`.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Partners

### List All Partners

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/partners?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.partners.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

### Create New Partner

**Method:** `POST` | **Endpoint:** `{{base_url}}/admin/partners` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "name": "Example Name",
    "url": "https://example.com",
    "image": "{{media_hash}}"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.partners.create`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `name` | `string` | yes | name | `Example Name` | `required, string` |
| `url` | `string` | no | url | `https://example.com` | `nullable, string` |
| `image` | `string` | no | image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_201 Created_
```json
{
    "status": "success",
    "message": "Data saved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Bulk Delete Partner

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/partners/bulk-delete` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Request Body:**

```json
{
    "ids": [
        "{{partner_id}}"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `admin.partners.bulk-delete`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Example payload is included in the request body. No FormRequest validation rules were detected.

| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `ids.0` | `string` | no | Ids 0 | `{{partner_id}}` | `not specified` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

### Show Partner Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/partners/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{partner_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.partners.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Update Partner

**Method:** `PUT` | **Endpoint:** `{{base_url}}/admin/partners/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{partner_id}}` | Id ID |

**Request Body:**

```json
{
    "name": "Example Name",
    "url": "https://example.com",
    "image": "{{media_hash}}"
}
```

**Payload & Validation Field Details:**

**Route:** `admin.partners.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
Send as `application/json`.

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `name` | `string` | no | name | `Example Name` | `sometimes, string` |
| `url` | `string` | no | url | `https://example.com` | `nullable, string` |
| `image` | `string` | no | image | `{{media_hash}}` | `nullable, string, custom:MediaExists` |

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Delete Partner

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/admin/partners/:id` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `id` | `{{partner_id}}` | Id ID |

**Payload & Validation Field Details:**

**Route:** `admin.partners.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Deleted successfully",
    "data": []
}
```

---

## Audit logs

### List All Audit logs

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/audit-logs?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&model=App\Models\User&actor_id=1&action=created&from=2024-01-01&to=2024-12-31` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `model` | `string` | `App\Models\User` | Filter by model class | Optional |
| `actor_id` | `integer` | `1` | Filter by actor user ID | Optional |
| `action` | `enum (string)` | `created` | Filter by action: created, updated, deleted | Optional |
| `from` | `string` | `2024-01-01` | Filter from date | Optional |
| `to` | `string` | `2024-12-31` | Filter to date | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.audit-logs.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `model` — Filter by model class (optional)
- `actor_id` — Filter by actor user ID (optional)
- `action` — Filter by action: created, updated, deleted (optional)
- `from` — Filter from date (optional)
- `to` — Filter to date (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

## Dashboard

### List All Dashboard

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/dashboard?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.dashboard.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:03+00:00"
        }
    ]
}
```

---

## Reports

### Courses Report

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reports/courses?page=1&per_page=15&search=&trainer_id={{trainer_id}}&course_type=live` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Match the course/program name (any locale) | Optional |
| `trainer_id` | `string` | `{{trainer_id}}` | Trainer uuid | Optional |
| `course_type` | `string` | `live` | live or recorded | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.reports.courses`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Match the course/program name (any locale) (optional)
- `trainer_id` — Trainer uuid (optional)
- `course_type` — live or recorded (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "current_page": 1,
        "data": [
            {
                "course_id": "00000000-0000-0000-0000-000000000001",
                "name": "Financial Management Essentials",
                "trainer": "Sara Al-Mansouri",
                "total_enrolled": 40,
                "completed": 10,
                "completion_rate": 25,
                "average_progress_percent": 61.5,
                "sessions_total": 8,
                "average_attendance_rate": 82.5
            }
        ],
        "per_page": 15,
        "total": 1,
        "last_page": 1
    }
}
```

---

### Programs Report

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reports/programs?page=1&per_page=15&search=&trainer_id={{trainer_id}}` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Match the course/program name (any locale) | Optional |
| `trainer_id` | `string` | `{{trainer_id}}` | Trainer uuid | Optional |

**Payload & Validation Field Details:**

**Route:** `admin.reports.programs`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Match the course/program name (any locale) (optional)
- `trainer_id` — Trainer uuid (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "current_page": 1,
        "data": [
            {
                "program_id": "00000000-0000-0000-0000-000000000001",
                "name": "Leadership Bootcamp",
                "trainer": "Sara Al-Mansouri",
                "total_enrolled": 40,
                "completed": 10,
                "completion_rate": 25,
                "average_progress_percent": 61.5,
                "sessions_total": 8,
                "average_attendance_rate": 82.5
            }
        ],
        "per_page": 15,
        "total": 1,
        "last_page": 1
    }
}
```

---

### Revenue Report

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reports/revenue` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.reports.revenue`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Transactions Report

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reports/revenue/transactions` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.reports.transactions`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

### Orders Report

**Method:** `GET` | **Endpoint:** `{{base_url}}/admin/reports/orders` | **Auth:** `Bearer {{admin_token}}`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `admin.reports.orders`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:super_admin,supervisor, rbac.auto`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:03+00:00"
    }
}
```

---

## Health

### List All Health

**Method:** `GET` | **Endpoint:** `{{base_url}}/health?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Public`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Query Parameters:**

| Key | Type | Value | Description | Supported |
|---|---|---|---|---|
| `page` | `integer` | `1` | Page number | Active |
| `per_page` | `integer` | `15` | Items per page (max: 100) | Optional |
| `search` | `string` | `` | Search term (searches across model searchable fields) | Optional |
| `sort[created_at]` | `string` | `desc` | Sort by field: asc or desc | Optional |
| `paginate` | `boolean` | `false` | Set to false to disable pagination | Optional |
| `filters[is_active]` | `boolean` | `1` | Filter by active status: 1 or 0 | Optional |

**Payload & Validation Field Details:**

**Route:** `shared.health.index`
**Middleware:** `api, set_locale, cors`

**Payload:**
No request body. Use the documented path and query parameters.

**Query parameters:**
- `page` — Page number (supported)
- `per_page` — Items per page (max: 100) (optional)
- `search` — Search term (searches across model searchable fields) (optional)
- `sort[created_at]` — Sort by field: asc or desc (optional)
- `paginate` — Set to false to disable pagination (optional)
- `filters[is_active]` — Filter by active status: 1 or 0 (optional)

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": [
        {
            "id": 1,
            "uuid": "00000000-0000-0000-0000-000000000001",
            "name": "Fitness & Strength Training 101",
            "is_active": true,
            "created_at": "2026-11-02T13:26:04+00:00"
        }
    ]
}
```

---

## Config

### Bootstrap Config

**Method:** `GET` | **Endpoint:** `{{base_url}}/config/bootstrap` | **Auth:** `Public`

**Headers:**
- `Accept: application/json`
- `Content-Type: application/json`
- `Accept-Language: {{locale}}`

**Payload & Validation Field Details:**

**Route:** `shared.config.bootstrap`
**Middleware:** `api, set_locale, cors`

**Payload:**
No request body. Use the documented path and query parameters.

**Response Format:**
```json
{ "status": "success", "message": "...", "data": {...} }
```

**Example Response:**

_200 OK_
```json
{
    "status": "success",
    "message": "Data retrieved successfully",
    "data": {
        "id": 1,
        "uuid": "00000000-0000-0000-0000-000000000001",
        "name": "Fitness & Strength Training 101",
        "is_active": true,
        "created_at": "2026-11-02T13:26:04+00:00"
    }
}
```

---

