# Trainer API Documentation

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

Comprehensive API endpoints for **Trainer** 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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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}}/user/auth/login` | **Auth:** `Public`

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

**Request Body:**

```json
{
    "login": "ahmed.rashidi@bateel.dev",
    "password": "password",
    "phone_code": "20",
    "device_token": "fcm-token-here",
    "device_type": "ios",
    "guest_token": "{{guest_token}}"
}
```

**Payload & Validation Field Details:**

**Route:** `user.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 or Phone | `ahmed.rashidi@bateel.dev` | `required, string` |
| `password` | `string` | yes | Password | `password` | `required, string, min:6` |
| `phone_code` | `string` | no | Phone Code | `20` | `nullable, string, max:10` |
| `device_token` | `string` | no | Device Token | `fcm-token-here` | `nullable, string, max:500` |
| `device_type` | `enum (string)` | no | Device Type<br>**One of:** `ios` · `android` · `web` | `ios` | `nullable, in:ios,android,web` |
| `guest_token` | `string` | no | Guest token | `{{guest_token}}` | `nullable, string, max:128` |

**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
    }
}
```

---

### Forgot Password

**Method:** `POST` | **Endpoint:** `{{base_url}}/user/auth/forgot-password` | **Auth:** `Public`

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

**Request Body:**

```json
{
    "login": "ahmed.rashidi@bateel.dev"
}
```

**Payload & Validation Field Details:**

**Route:** `user.auth.forgot-password`
**Middleware:** `api, set_locale, cors`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `login` | `string` | yes | Email or Phone | `ahmed.rashidi@bateel.dev` | `required, 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"
    }
}
```

---

### Reset Password

**Method:** `POST` | **Endpoint:** `{{base_url}}/user/auth/reset-password` | **Auth:** `Public`

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

**Request Body:**

```json
{
    "token": "{{verification_token}}",
    "password": "12345678",
    "password_confirmation": "12345678"
}
```

**Payload & Validation Field Details:**

**Route:** `user.auth.reset-password`
**Middleware:** `api, set_locale, cors`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `token` | `string` | yes | Token | `{{verification_token}}` | `required, string` |
| `password` | `string` | yes | New Password | `12345678` | `required, string, min:8, confirmed` |
| `password_confirmation` | `string` | yes | Password confirmation | `12345678` | `required, same:password` |
| `password_confirmation` | `string` | yes | Password confirmation | `12345678` | `required, 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"
    }
}
```

---

### Resend Code

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/auth/resend-code` | **Auth:** `Public`

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

**Request Body:**

```json
{
    "verification_token": "{{verification_token}}"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.auth.resend-code`
**Middleware:** `api, set_locale, cors`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `verification_token` | `string` | yes | Verification Token | `{{verification_token}}` | `required, 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:04+00:00"
    }
}
```

---

### Forgot Password

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/auth/forgot-password` | **Auth:** `Public`

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

**Request Body:**

```json
{
    "login": "ahmed.rashidi@bateel.dev"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.auth.forgot-password`
**Middleware:** `api, set_locale, cors`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `login` | `string` | yes | Email or Phone | `ahmed.rashidi@bateel.dev` | `required, 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:04+00:00"
    }
}
```

---

### Reset Password

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/auth/reset-password` | **Auth:** `Public`

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

**Request Body:**

```json
{
    "token": "{{verification_token}}",
    "password": "12345678",
    "password_confirmation": "12345678"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.auth.reset-password`
**Middleware:** `api, set_locale, cors`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `token` | `string` | yes | Token | `{{verification_token}}` | `required, string` |
| `password` | `string` | yes | New Password | `12345678` | `required, string, min:8, confirmed` |
| `password_confirmation` | `string` | yes | Password confirmation | `12345678` | `required, same:password` |
| `password_confirmation` | `string` | yes | Password confirmation | `12345678` | `required, 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:04+00:00"
    }
}
```

---

### Logout

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/auth/logout` | **Auth:** `Bearer {{trainer_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:** `trainer.auth.logout`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:04+00:00"
    }
}
```

---

## Profile

### Show Profile Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/profile` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.profile.view`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Update Profile

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/profile` | **Auth:** `Bearer {{trainer_token}}`

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

**Request Body:**

```json
{
    "full_name": "Ahmed Al-Mansoor",
    "country_id": "{{country_id}}",
    "email": "user@example.com",
    "locale": "en",
    "gender": "male",
    "image": "{{media_hash}}"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.profile.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:edit_profile`

**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` |
| `country_id` | `integer` | no | Country id | `{{country_id}}` | `sometimes, nullable, integer, exists:countries,id` |
| `email` | `string` | no | Email | `user@example.com` | `sometimes, email, unique:users,email,"1",id` |
| `locale` | `string` | no | Locale | `en` | `nullable, string, max:10` |
| `gender` | `enum (string)` | no | Gender<br>**One of:** `male` · `female` | `male` | `sometimes, nullable, in:"male","female"` |
| `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:04+00:00"
    }
}
```

---

### Change Password Profile

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/profile/change-password` | **Auth:** `Bearer {{trainer_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:** `trainer.profile.change-password`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:04+00:00"
    }
}
```

---

### Change Phone Profile

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/profile/change-phone` | **Auth:** `Bearer {{trainer_token}}`

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

**Request Body:**

```json
{
    "phone": "1000000001",
    "phone_code": "20"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.profile.change-phone`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:edit_profile`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `phone` | `string` | yes | Phone | `1000000001` | `required, string, max:20, unique:users,phone,"1",id` |
| `phone_code` | `string` | no | Phone Code | `20` | `nullable, string, max:5` |

**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"
    }
}
```

---

### Confirm Change phone

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/profile/change-phone/confirm` | **Auth:** `Bearer {{trainer_token}}`

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

**Request Body:**

```json
{
    "token": "{{verification_token}}",
    "code": "1234"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.profile.change-phone.confirm`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:edit_profile`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `token` | `string` | yes | Verification Token | `{{verification_token}}` | `required, string` |
| `code` | `string` | yes | Verification Code | `1234` | `required, 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:04+00:00"
    }
}
```

---

## Pages

### Show Page Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/pages/:type` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `type` | `{{type_id}}` | Type ID |

**Payload & Validation Field Details:**

**Route:** `trainer.pages.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

## Settings

### Show Setting Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/settings` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.settings.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Update Setting

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/settings` | **Auth:** `Bearer {{trainer_token}}`

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

**Request Body:**

```json
{
    "allow_notifications": true,
    "locale": "en"
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.settings.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `allow_notifications` | `boolean` | no | Allow Notifications | `true` | `sometimes, boolean` |
| `locale` | `enum (string)` | no | Language<br>**One of:** `en` · `ar` | `en` | `sometimes, string, in:en,ar` |

**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"
    }
}
```

---

## Notifications

### Stream Notification

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/notifications/stream` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.notifications.stream`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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"
    }
}
```

---

### 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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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 {{trainer_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"
    }
}
```

---

## Statistics

### List All Statistics

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/statistics?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.statistics.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_statistics`

**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"
        }
    ]
}
```

---

## Dashboard

### Overview Dashboard

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/dashboard/overview` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.dashboard.overview`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_statistics`

**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"
    }
}
```

---

### Insights Dashboard

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/dashboard/insights` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.dashboard.insights`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_statistics`

**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"
    }
}
```

---

## Students

### List All Students

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/students?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.students.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_trainees`

**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"
        }
    ]
}
```

---

### Attendance Progress Student

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/students/attendance-progress` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.students.attendance-progress`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_attendance_progress`

**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"
    }
}
```

---

### Quizzes Student

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/students/quizzes` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.students.quizzes`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_exam_results`

**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 Quiz Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/students/quizzes/:quiz` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `quiz` | `{{quiz_id}}` | Quiz ID |

**Payload & Validation Field Details:**

**Route:** `trainer.students.quizzes.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_exam_results`

**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"
    }
}
```

---

### Export Student

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/students/export` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.students.export`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_trainees`

**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"
    }
}
```

---

## Trainees

### List All Trainees

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/trainees?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.trainees.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_trainees`

**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"
        }
    ]
}
```

---

### Attendance Progress Trainee

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/trainees/attendance-progress` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.trainees.attendance-progress`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_attendance_progress`

**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"
    }
}
```

---

### Quizzes Trainee

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/trainees/quizzes` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.trainees.quizzes`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_exam_results`

**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 Quiz Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/trainees/quizzes/:quiz` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `quiz` | `{{quiz_id}}` | Quiz ID |

**Payload & Validation Field Details:**

**Route:** `trainer.trainees.quizzes.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_exam_results`

**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"
    }
}
```

---

### Export Trainee

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/trainees/export` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.trainees.export`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_trainees`

**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"
    }
}
```

---

## Programs

### List All Programs

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_programs`

**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"
        }
    ]
}
```

---

### Stats Program

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/stats` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.programs.stats`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_programs`

**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 Program Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_programs`

**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"
    }
}
```

---

### Review Check Program

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/review-check` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.review-check`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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"
    }
}
```

---

### Submit For Review Program

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/submit-for-review` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.submit-for-review`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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"
    }
}
```

---

### List All Sessions

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/sessions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.sessions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_programs`

**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"
        }
    ]
}
```

---

### List All Materials

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/materials?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.materials.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_programs`

**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"
        }
    ]
}
```

---

### Ratings Program

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/ratings` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.ratings`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_program_ratings`

**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"
    }
}
```

---

### Create New Material

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/materials` | **Auth:** `Bearer {{trainer_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
{
    "file": "{{media_hash}}",
    "material_type": "pdf",
    "session_id": "{{session_id}}",
    "en": {
        "title": "Building Your First Model"
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.programs.materials.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `file` | `string` | yes | File | `{{media_hash}}` | `required, string, custom:MediaExists` |
| `material_type` | `string` | no | Material Type | `pdf` | `nullable, string, max:50` |
| `session_id` | `integer` | no | Session | `{{session_id}}` | `nullable, string, uuid` |
| `en.title` | `string` | no | Title (en) | `Building Your First Model` | `nullable, string, max:200` |
| `ar.title` | `string` | no | Title (ar) | `بناء نموذجك المالي الأول` | `nullable, string, max:200` |

**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:04+00:00"
    }
}
```

---

### Update Material

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/programs/materials/:material` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `material` | `{{material_id}}` | Material ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.programs.materials.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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"
    }
}
```

---

### Delete Material

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/trainer/programs/materials/:material` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `material` | `{{material_id}}` | Material ID |

**Payload & Validation Field Details:**

**Route:** `trainer.programs.materials.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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": []
}
```

---

### Join Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/sessions/:session/join` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.sessions.join`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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"
    }
}
```

---

### List All Attendance

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/sessions/:session/attendance?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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 |

**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:** `trainer.programs.sessions.attendance.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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"
        }
    ]
}
```

---

### Attendance Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/sessions/:session/attendance` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.sessions.attendance`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer`

**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:**

_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"
    }
}
```

---

### Trainees Program

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/trainees` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.trainees`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_program_trainees`

**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 Quiz Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/quiz` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.quiz.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_programs`

**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"
    }
}
```

---

### Update Quiz

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/programs/:program/quiz` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.quiz.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Show Timer Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/timer` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.timer.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_program_timer`

**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"
    }
}
```

---

### Start Timer

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/timer/start` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.timer.start`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_program_timer`

**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"
    }
}
```

---

### Stop Timer

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/timer/stop` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.timer.stop`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_program_timer`

**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"
    }
}
```

---

### Reset Password

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/timer/reset` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.timer.reset`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_program_timer`

**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"
    }
}
```

---

### List All Questions

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/programs/:program/questions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.questions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_programs`

**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"
        }
    ]
}
```

---

### Create New Question

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/questions` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.questions.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:04+00:00"
    }
}
```

---

### Reorder Question

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/programs/:program/questions/reorder` | **Auth:** `Bearer {{trainer_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:** `trainer.programs.questions.reorder`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:04+00:00"
    }
}
```

---

## Courses

### List All Courses

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
        }
    ]
}
```

---

### Stats Course

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/stats` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.courses.stats`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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 Course Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
    }
}
```

---

### Students Course

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course/students` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.students`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_course_trainees`

**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"
    }
}
```

---

### Ratings Course

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course/ratings` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.ratings`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_ratings`

**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 Lessons

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course/lessons?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.lessons.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
        }
    ]
}
```

---

### Reorder Lesson

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/lessons/reorder` | **Auth:** `Bearer {{trainer_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
{
    "lessons": [
        "00000000-0000-0000-0000-000000000000"
    ]
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.courses.lessons.reorder`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `lessons` | `array` | yes | Lessons | `["00000000-0000-0000-0000-000000000000"]` | `required, array, min:1` |
| `lessons.*` | `integer` | yes | Lesson | `00000000-0000-0000-0000-000000000000` | `required, string, uuid, distinct, exists:course_lessons,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:04+00:00"
    }
}
```

---

### Submit For Review Course

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/submit-for-review` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.submit-for-review`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Create New Video

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/lessons/video` | **Auth:** `Bearer {{trainer_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
{
    "duration_seconds": 900,
    "video": "{{media_hash}}",
    "completion_threshold": 80,
    "is_free_preview": true,
    "free_preview_from_seconds": 1,
    "free_preview_to_seconds": 1,
    "en": {
        "title": "Building Your First Model",
        "description": "A practical course covering financial modelling from first principles."
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.lessons.video.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `duration_seconds` | `integer` | no | Duration (seconds) | `900` | `nullable, integer, min:0` |
| `video` | `string` | no | Video | `{{media_hash}}` | `nullable, string, custom:MediaExists` |
| `completion_threshold` | `integer` | no | Completion Threshold | `80` | `nullable, integer, between:1,100` |
| `is_free_preview` | `boolean` | no | Free Preview | `true` | `sometimes, boolean` |
| `free_preview_from_seconds` | `integer` | conditional | Free Preview From (seconds) | `1` | `required_if:is_free_preview,true, integer, min:0` |
| `free_preview_to_seconds` | `integer` | conditional | Free Preview To (seconds) | `1` | `required_if:is_free_preview,true, integer, gt:free_preview_from_seconds` |
| `quiz_duration_minutes` | `string` | no | Quiz duration minutes | `null` | `prohibited` |
| `max_attempts` | `string` | no | Max attempts | `null` | `prohibited` |
| `pass_score` | `string` | no | Pass score | `null` | `prohibited` |
| `must_pass_to_continue` | `string` | no | Must pass to continue | `null` | `prohibited` |
| `show_result_immediately` | `string` | no | Show result immediately | `null` | `prohibited` |
| `en.title` | `string` | yes | Title (en) | `Building Your First Model` | `required, string, max:200` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `ar.title` | `string` | yes | Title (ar) | `بناء نموذجك المالي الأول` | `required, string, max:200` |
| `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:04+00:00"
    }
}
```

---

### Create New Quiz

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/lessons/quiz` | **Auth:** `Bearer {{trainer_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
{
    "quiz_duration_minutes": 30,
    "max_attempts": 3,
    "pass_score": 60,
    "must_pass_to_continue": true,
    "show_result_immediately": true,
    "en": {
        "title": "Building Your First Model",
        "description": "A practical course covering financial modelling from first principles."
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول",
        "description": "دورة عملية تغطي النمذجة المالية من الأساسيات حتى التطبيق."
    }
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.lessons.quiz.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `quiz_duration_minutes` | `integer` | no | Quiz Duration (minutes) | `30` | `nullable, integer, min:1` |
| `max_attempts` | `integer` | no | Max Attempts | `3` | `sometimes, integer, min:1` |
| `pass_score` | `number` | no | Pass Score | `60` | `nullable, numeric, between:0,100` |
| `must_pass_to_continue` | `boolean` | no | Must Pass To Continue | `true` | `sometimes, boolean` |
| `show_result_immediately` | `boolean` | no | Show Result Immediately | `true` | `sometimes, boolean` |
| `duration_seconds` | `string` | no | Duration seconds | `null` | `prohibited` |
| `video` | `string` | no | Video | `null` | `prohibited` |
| `completion_threshold` | `string` | no | Completion threshold | `null` | `prohibited` |
| `is_free_preview` | `string` | no | Is free preview | `null` | `prohibited` |
| `free_preview_from_seconds` | `string` | no | Free preview from seconds | `null` | `prohibited` |
| `free_preview_to_seconds` | `string` | no | Free preview to seconds | `null` | `prohibited` |
| `en.title` | `string` | yes | Title (en) | `Building Your First Model` | `required, string, max:200` |
| `en.description` | `string` | no | Description (en) | `A practical course covering financial modelling from first principles.` | `nullable, string` |
| `ar.title` | `string` | yes | Title (ar) | `بناء نموذجك المالي الأول` | `required, string, max:200` |
| `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:04+00:00"
    }
}
```

---

### List All Materials

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course/materials?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.materials.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
        }
    ]
}
```

---

### Create New Material

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/materials` | **Auth:** `Bearer {{trainer_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
{
    "file": "{{media_hash}}",
    "material_type": "pdf",
    "lesson_id": "{{lesson_id}}",
    "en": {
        "title": "Building Your First Model"
    },
    "ar": {
        "title": "بناء نموذجك المالي الأول"
    }
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.materials.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `file` | `string` | yes | File | `{{media_hash}}` | `required, string, custom:MediaExists` |
| `material_type` | `enum (string)` | yes | Material Type<br>**One of:** `pdf` · `image` | `pdf` | `required, enum:App\Enums\CourseMaterialType` |
| `lesson_id` | `integer` | no | Lesson | `{{lesson_id}}` | `nullable, string, uuid, exists:course_lessons,uuid` |
| `en.title` | `string` | no | Title (en) | `Building Your First Model` | `nullable, string, max:200` |
| `ar.title` | `string` | no | Title (ar) | `بناء نموذجك المالي الأول` | `nullable, string, max:200` |

**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:04+00:00"
    }
}
```

---

### List All Sessions

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course/sessions?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.sessions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
        }
    ]
}
```

---

### Join Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/sessions/:session/join` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |
| `session` | `{{session_id}}` | Session ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.sessions.join`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Attendance Session

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/sessions/:session/attendance` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `course` | `{{course_id}}` | Course ID |
| `session` | `{{session_id}}` | Session ID |

**Request Body:**

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

**Payload & Validation Field Details:**

**Route:** `trainer.sessions.attendance`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:**

_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 Timer Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/courses/:course/timer` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.timer.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_training_timer`

**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"
    }
}
```

---

### Start Timer

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/timer/start` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.timer.start`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_training_timer`

**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"
    }
}
```

---

### Stop Timer

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/timer/stop` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.timer.stop`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_training_timer`

**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"
    }
}
```

---

### Reset Password

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/courses/:course/timer/reset` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.timer.reset`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:use_training_timer`

**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"
    }
}
```

---

## Lessons

### Show Lesson Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/lessons/:lesson` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.lessons.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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 Lesson

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/trainer/lessons/:lesson` | **Auth:** `Bearer {{trainer_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:** `trainer.courses.lessons.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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": []
}
```

---

### Update Video

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/lessons/video/:lesson` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `lesson` | `{{lesson_id}}` | Lesson ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.lessons.video.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Update Quiz

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/lessons/quiz/:lesson` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `lesson` | `{{lesson_id}}` | Lesson ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.lessons.quiz.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### List All Questions

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

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `lesson` | `{{lesson_id}}` | Lesson 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:** `trainer.questions.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
        }
    ]
}
```

---

### Create New Question

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/lessons/:lesson/questions` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `lesson` | `{{lesson_id}}` | Lesson 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:** `trainer.questions.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:04+00:00"
    }
}
```

---

### Reorder Question

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/lessons/:lesson/questions/reorder` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `lesson` | `{{lesson_id}}` | Lesson ID |

**Request Body:**

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

**Payload & Validation Field Details:**

**Route:** `trainer.questions.reorder`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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:04+00:00"
    }
}
```

---

## Questions

### Update Question

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/questions/:question` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

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

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.questions.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Delete Question

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/trainer/questions/:question` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

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

**Payload & Validation Field Details:**

**Route:** `trainer.questions.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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": []
}
```

---

## Materials

### Update Material

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/materials/:material` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `material` | `{{material_id}}` | Material ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.materials.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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"
    }
}
```

---

### Delete Material

**Method:** `DELETE` | **Endpoint:** `{{base_url}}/trainer/materials/:material` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `material` | `{{material_id}}` | Material ID |

**Payload & Validation Field Details:**

**Route:** `trainer.materials.destroy`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer`

**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": []
}
```

---

## Sessions

### Show Session Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/sessions/:session` | **Auth:** `Bearer {{trainer_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:** `trainer.sessions.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, trainer.can:view_courses`

**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"
    }
}
```

---

## Consultations

### List All Consultations

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/consultations?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.consultations.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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"
        }
    ]
}
```

---

### Stats Consultation

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/consultations/stats` | **Auth:** `Bearer {{trainer_token}}`

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

**Payload & Validation Field Details:**

**Route:** `trainer.consultations.stats`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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 Consultation Details

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/consultations/:booking` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `booking` | `{{booking_id}}` | Booking ID |

**Payload & Validation Field Details:**

**Route:** `trainer.consultations.show`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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"
    }
}
```

---

### Join Consultation

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/consultations/:booking/join` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `booking` | `{{booking_id}}` | Booking ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.consultations.join`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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"
    }
}
```

---

### Finish Consultation

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/consultations/:booking/finish` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `booking` | `{{booking_id}}` | Booking ID |

**Request Body:**

```json
[]
```

**Payload & Validation Field Details:**

**Route:** `trainer.consultations.finish`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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"
    }
}
```

---

### Notes Consultation

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/consultations/:booking/notes` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `booking` | `{{booking_id}}` | Booking ID |

**Request Body:**

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

**Payload & Validation Field Details:**

**Route:** `trainer.consultations.notes`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `notes` | `string` | yes | 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:04+00:00"
    }
}
```

---

### Meeting Link Consultation

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/consultations/:booking/meeting-link` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `booking` | `{{booking_id}}` | Booking ID |

**Request Body:**

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

**Payload & Validation Field Details:**

**Route:** `trainer.consultations.meeting-link`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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:04+00:00"
    }
}
```

---

## Consultant offerings

### List All Consultant offerings

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/consultant-offerings?page=1&per_page=15&search=&sort[created_at]=desc&paginate=false&filters[is_active]=1` | **Auth:** `Bearer {{trainer_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:** `trainer.consultant-offerings.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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"
        }
    ]
}
```

---

### Update Consultant offering

**Method:** `PUT` | **Endpoint:** `{{base_url}}/trainer/consultant-offerings/:trainerConsultant` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainerConsultant` | `{{trainerConsultant_id}}` | TrainerConsultant ID |

**Request Body:**

```json
{
    "price": 49.99,
    "duration_minutes": 90
}
```

**Payload & Validation Field Details:**

**Route:** `trainer.consultant-offerings.update`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

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

**Field documentation:**
| Key | Type | Required | Description | Example | Validation Rules |
|---|---|---|---|---|---|
| `price` | `number` | no | Price | `49.99` | `sometimes, numeric, min:0` |
| `duration_minutes` | `integer` | no | Duration minutes | `90` | `sometimes, integer, min:1` |

**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 Slots

**Method:** `GET` | **Endpoint:** `{{base_url}}/trainer/consultant-offerings/:trainerConsultant/slots?from=2026-10-01&to=2026-10-31` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainerConsultant` | `{{trainerConsultant_id}}` | TrainerConsultant 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 |

**Payload & Validation Field Details:**

**Route:** `trainer.consultant-offerings.slots.index`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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)

**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"
        }
    ]
}
```

---

### Create New Slot

**Method:** `POST` | **Endpoint:** `{{base_url}}/trainer/consultant-offerings/:trainerConsultant/slots` | **Auth:** `Bearer {{trainer_token}}`

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

**Path Variables:**

| Key | Value | Description |
|---|---|---|
| `trainerConsultant` | `{{trainerConsultant_id}}` | TrainerConsultant ID |

**Request Body:**

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

**Payload & Validation Field Details:**

**Route:** `trainer.consultant-offerings.slots.store`
**Middleware:** `api, set_locale, cors, auth:api, active, user_type:trainer, user_type:trainer, trainer.can:view_consultations`

**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 | Dates item | `2026-11-04` | `date, after_or_equal:today` |
| `times` | `array` | yes | Times | `["09:00"]` | `required, array, min:1` |
| `times.*` | `string` | no | Times item | `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:04+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"
    }
}
```

---

## Certificates

### 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"
    }
}
```

---

