{
	"info": {
		"_postman_id": "93af0f8c-f9c8-4abd-a3a4-200736529321",
		"name": "Patient App API (api/patient)",
		"description": "Postman collection for the Laravel ERP's patient-facing API, aligned to the our_clinics mobile app contract (Backend Alignment Guide - Part 1).\n\nConventions:\n- All JSON request/response bodies use camelCase keys. A middleware (ConvertApiJsonCase) converts camelCase request keys to snake_case for Laravel validation, and converts snake_case response keys back to camelCase.\n- Every response uses a single envelope: `{ success, code, message, data, meta, errors }`. `data` is never a bare `null`/omitted key on success (empty object `{}` when there's nothing to return), and list fields are always `[]`, never `null`.\n- 401 is reserved strictly for a missing/invalid/expired bearer token. Business-rule failures (wrong password, validation, etc.) return 422 with `errors`.\n- Send `Accept-Language: ar` or `en` to control localized text (names, messages).\n- Every request below documents its own body/query fields in its description as a Required/Optional table, matching the field name exactly as sent over the wire (camelCase).\n- Auth: obtain `token` + `refreshToken` from Register or Login; this collection auto-saves both into collection variables via each request's Tests script. Protected endpoints use `Authorization: Bearer {{token}}` (set at the collection level). When `token` expires (60 min), call `Refresh Token` to rotate it — it also auto-saves the new pair.",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"auth": {
		"type": "bearer",
		"bearer": [
			{
				"key": "token",
				"value": "{{token}}",
				"type": "string"
			}
		]
	},
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"exec": [
					""
				]
			}
		}
	],
	"variable": [
		{
			"key": "base_url",
			"value": "http://erp.local/api/patient",
			"type": "string"
		},
		{
			"key": "locale",
			"value": "ar",
			"type": "string"
		},
		{
			"key": "token",
			"value": "",
			"type": "string"
		},
		{
			"key": "refresh_token",
			"value": "",
			"type": "string"
		},
		{
			"key": "doctor_id",
			"value": "1",
			"type": "string"
		},
		{
			"key": "clinic_profile_id",
			"value": "1",
			"type": "string"
		},
		{
			"key": "booking_id",
			"value": "1",
			"type": "string"
		},
		{
			"key": "record_id",
			"value": "1",
			"type": "string"
		},
		{
			"key": "notification_id",
			"value": "1",
			"type": "string"
		},
		{
			"key": "page_type",
			"value": "about",
			"type": "string"
		}
	],
	"item": [
		{
			"name": "Auth",
			"item": [
				{
					"name": "Register",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"email\": \"omnia.test@example.com\",\n  \"phone\": \"01012345678\",\n  \"password\": \"Passw0rd!\",\n  \"passwordConfirmation\": \"Passw0rd!\",\n  \"birthDate\": \"1995-04-12\",\n  \"gender\": \"female\",\n  \"job\": \"Teacher\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/register",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"register"
							]
						},
						"description": "201 on success with `token`+`refreshToken`+`user`. 422 if email/phone already used or validation fails.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| email | required | string (email) | max 255, must be unique |\n| phone | optional | string | max 50, must be unique, must match `^(010\\|011\\|012\\|015)[0-9]{8}$` |\n| password | required | string | must satisfy the app's password policy (`Password::defaults()`, min 8 chars) |\n| passwordConfirmation | required | string | must match `password` (Laravel `confirmed` rule) |\n| birthDate | optional | date (YYYY-MM-DD) | must be before today |\n| gender | optional | string | one of: `male`, `female` |\n| job | optional | string | max 150 |"
					},
					"event": [
						{
							"listen": "test",
							"script": {
								"type": "text/javascript",
								"exec": [
									"if (pm.response.code === 201) {",
									"    const body = pm.response.json();",
									"    pm.collectionVariables.set('token', body.data.token);",
									"    pm.collectionVariables.set('refresh_token', body.data.refreshToken);",
									"}",
									"pm.test('status is 201 or 422', () => [201, 422].includes(pm.response.code));"
								]
							}
						}
					],
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"email\": \"omnia.test@example.com\",\n  \"phone\": \"01012345678\",\n  \"password\": \"Passw0rd!\",\n  \"passwordConfirmation\": \"Passw0rd!\",\n  \"birthDate\": \"1995-04-12\",\n  \"gender\": \"female\",\n  \"job\": \"Teacher\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/register",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"register"
									]
								},
								"description": "201 on success with `token`+`refreshToken`+`user`. 422 if email/phone already used or validation fails.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| email | required | string (email) | max 255, must be unique |\n| phone | optional | string | max 50, must be unique, must match `^(010\\|011\\|012\\|015)[0-9]{8}$` |\n| password | required | string | must satisfy the app's password policy (`Password::defaults()`, min 8 chars) |\n| passwordConfirmation | required | string | must match `password` (Laravel `confirmed` rule) |\n| birthDate | optional | date (YYYY-MM-DD) | must be before today |\n| gender | optional | string | one of: `male`, `female` |\n| job | optional | string | max 150 |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {\n        \"token\": \"1|abcdEXAMPLEtokenXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n        \"refreshToken\": \"rt_9f8e7d6c5b4a3210example\",\n        \"tokenType\": \"Bearer\",\n        \"user\": {\n            \"id\": 12,\n            \"name\": \"Omnia Abdallah\",\n            \"phone\": null,\n            \"email\": \"omnia.test@example.com\",\n            \"address\": null,\n            \"avatarUrl\": null,\n            \"birthDate\": \"1995-04-12\",\n            \"gender\": \"female\",\n            \"job\": \"Teacher\",\n            \"hasMedicalProfile\": false,\n            \"createdAt\": \"2026-09-20T10:15:00+03:00\"\n        }\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - email already used",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"email\": \"omnia.test@example.com\",\n  \"phone\": \"01012345678\",\n  \"password\": \"Passw0rd!\",\n  \"passwordConfirmation\": \"Passw0rd!\",\n  \"birthDate\": \"1995-04-12\",\n  \"gender\": \"female\",\n  \"job\": \"Teacher\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/register",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"register"
									]
								},
								"description": "201 on success with `token`+`refreshToken`+`user`. 422 if email/phone already used or validation fails.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| email | required | string (email) | max 255, must be unique |\n| phone | optional | string | max 50, must be unique, must match `^(010\\|011\\|012\\|015)[0-9]{8}$` |\n| password | required | string | must satisfy the app's password policy (`Password::defaults()`, min 8 chars) |\n| passwordConfirmation | required | string | must match `password` (Laravel `confirmed` rule) |\n| birthDate | optional | date (YYYY-MM-DD) | must be before today |\n| gender | optional | string | one of: `male`, `female` |\n| job | optional | string | max 150 |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"email\": [\n            \"The email has already been taken.\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Login",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"password\": \"Passw0rd!\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/login",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"login"
							]
						},
						"description": "200 on success with `token`+`refreshToken`+`user`. 422 (not 401) on wrong credentials. 429 after 5 failed attempts within 60s for the same identifier+IP.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string | accepts either an email OR a phone number, despite the field name |\n| password | required | string | |"
					},
					"event": [
						{
							"listen": "test",
							"script": {
								"type": "text/javascript",
								"exec": [
									"if (pm.response.code === 200) {",
									"    const body = pm.response.json();",
									"    pm.collectionVariables.set('token', body.data.token);",
									"    pm.collectionVariables.set('refresh_token', body.data.refreshToken);",
									"}",
									"pm.test('status is 200 or 422', () => [200, 422].includes(pm.response.code));"
								]
							}
						}
					],
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"password\": \"Passw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/login",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"login"
									]
								},
								"description": "200 on success with `token`+`refreshToken`+`user`. 422 (not 401) on wrong credentials. 429 after 5 failed attempts within 60s for the same identifier+IP.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string | accepts either an email OR a phone number, despite the field name |\n| password | required | string | |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"token\": \"2|efghEXAMPLEtokenYYYYYYYYYYYYYYYYYYYYYYYYYYYY\",\n        \"refreshToken\": \"rt_1a2b3c4d5e6f7890example\",\n        \"tokenType\": \"Bearer\",\n        \"user\": {\n            \"id\": 12,\n            \"name\": \"Omnia Abdallah\",\n            \"phone\": \"01012345678\",\n            \"email\": \"omnia.test@example.com\",\n            \"address\": \"12 Tahrir St, Cairo\",\n            \"avatarUrl\": \"http://erp.local/uploads/avatars/omnia.jpg\",\n            \"birthDate\": \"1995-04-12\",\n            \"gender\": \"female\",\n            \"job\": \"Teacher\",\n            \"hasMedicalProfile\": true,\n            \"createdAt\": \"2026-06-01T09:00:00+03:00\"\n        }\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - wrong credentials (not 401)",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"password\": \"Passw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/login",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"login"
									]
								},
								"description": "200 on success with `token`+`refreshToken`+`user`. 422 (not 401) on wrong credentials. 429 after 5 failed attempts within 60s for the same identifier+IP.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string | accepts either an email OR a phone number, despite the field name |\n| password | required | string | |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"INVALID_CREDENTIALS\",\n    \"message\": \"بيانات الدخول غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Too Many Requests",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"password\": \"Passw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/login",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"login"
									]
								},
								"description": "200 on success with `token`+`refreshToken`+`user`. 422 (not 401) on wrong credentials. 429 after 5 failed attempts within 60s for the same identifier+IP.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string | accepts either an email OR a phone number, despite the field name |\n| password | required | string | |"
							},
							"status": "Too Many Requests",
							"code": 429,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"TOO_MANY_REQUESTS\",\n    \"message\": \"عدد كبير من المحاولات، يرجى المحاولة لاحقاً\",\n    \"data\": null,\n    \"meta\": {\n        \"retryAfter\": 42\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Refresh Token",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"refreshToken\": \"{{refresh_token}}\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/refresh-token",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"refresh-token"
							]
						},
						"description": "No bearer token needed - the refresh token itself is the credential. Single-use: rotates to a new access+refresh pair and revokes the old refresh token. 401 if the refresh token is missing/expired/already used.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| refreshToken | required | string | the refresh token issued by Register/Login/a previous Refresh call |"
					},
					"event": [
						{
							"listen": "test",
							"script": {
								"type": "text/javascript",
								"exec": [
									"if (pm.response.code === 200) {",
									"    const body = pm.response.json();",
									"    pm.collectionVariables.set('token', body.data.accessToken);",
									"    pm.collectionVariables.set('refresh_token', body.data.refreshToken);",
									"}"
								]
							}
						}
					],
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"refreshToken\": \"{{refresh_token}}\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/refresh-token",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"refresh-token"
									]
								},
								"description": "No bearer token needed - the refresh token itself is the credential. Single-use: rotates to a new access+refresh pair and revokes the old refresh token. 401 if the refresh token is missing/expired/already used.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| refreshToken | required | string | the refresh token issued by Register/Login/a previous Refresh call |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"accessToken\": \"3|ijklEXAMPLEtokenZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\",\n        \"refreshToken\": \"rt_0f1e2d3c4b5a6978example\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Unauthorized - invalid/expired refresh token",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"refreshToken\": \"{{refresh_token}}\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/refresh-token",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"refresh-token"
									]
								},
								"description": "No bearer token needed - the refresh token itself is the credential. Single-use: rotates to a new access+refresh pair and revokes the old refresh token. 401 if the refresh token is missing/expired/already used.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| refreshToken | required | string | the refresh token issued by Register/Login/a previous Refresh call |"
							},
							"status": "Unauthorized",
							"code": 401,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"انتهت صلاحية الجلسة، يرجى تسجيل الدخول مرة أخرى\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Forgot Password",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"email\": \"omnia.test@example.com\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/forgot-password",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"forgot-password"
							]
						},
						"description": "Always returns 200 regardless of whether the email exists, so the response never leaks which emails are registered.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string (email) | |"
					},
					"response": [
						{
							"name": "Success (always 200)",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/forgot-password",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"forgot-password"
									]
								},
								"description": "Always returns 200 regardless of whether the email exists, so the response never leaks which emails are registered.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string (email) | |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم إرسال رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Too Many Requests",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/forgot-password",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"forgot-password"
									]
								},
								"description": "Always returns 200 regardless of whether the email exists, so the response never leaks which emails are registered.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string (email) | |"
							},
							"status": "Too Many Requests",
							"code": 429,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"TOO_MANY_REQUESTS\",\n    \"message\": \"عدد كبير من المحاولات، يرجى المحاولة لاحقاً\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Reset Password",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"token\": \"paste-token-from-reset-email\",\n  \"password\": \"NewPassw0rd!\",\n  \"passwordConfirmation\": \"NewPassw0rd!\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/reset-password",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"reset-password"
							]
						},
						"description": "422 with `errors.token` when the token is invalid/expired. Revokes all existing sessions/tokens for the user on success.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string (email) | |\n| token | required | string | the reset token from the emailed reset link |\n| password | required | string | must satisfy the password policy |\n| passwordConfirmation | required | string | must match `password` |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"token\": \"paste-token-from-reset-email\",\n  \"password\": \"NewPassw0rd!\",\n  \"passwordConfirmation\": \"NewPassw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/reset-password",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"reset-password"
									]
								},
								"description": "422 with `errors.token` when the token is invalid/expired. Revokes all existing sessions/tokens for the user on success.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string (email) | |\n| token | required | string | the reset token from the emailed reset link |\n| password | required | string | must satisfy the password policy |\n| passwordConfirmation | required | string | must match `password` |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم إعادة تعيين كلمة المرور بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - invalid/expired token",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"email\": \"omnia.test@example.com\",\n  \"token\": \"paste-token-from-reset-email\",\n  \"password\": \"NewPassw0rd!\",\n  \"passwordConfirmation\": \"NewPassw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/reset-password",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"reset-password"
									]
								},
								"description": "422 with `errors.token` when the token is invalid/expired. Revokes all existing sessions/tokens for the user on success.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| email | required | string (email) | |\n| token | required | string | the reset token from the emailed reset link |\n| password | required | string | must satisfy the password policy |\n| passwordConfirmation | required | string | must match `password` |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"token\": [\n            \"رابط إعادة التعيين غير صالح أو منتهي الصلاحية\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Get Profile",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/profile",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"profile"
							]
						},
						"description": "Requires `Authorization: Bearer {{token}}`. No body/query params.\n\nReturns the authenticated user object directly as `data` (not wrapped in a `user` key). Includes `birthDate`, `job`, `avatarUrl`."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/profile",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile"
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`. No body/query params.\n\nReturns the authenticated user object directly as `data` (not wrapped in a `user` key). Includes `birthDate`, `job`, `avatarUrl`."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 12,\n        \"name\": \"Omnia Abdallah\",\n        \"phone\": \"01012345678\",\n        \"email\": \"omnia.test@example.com\",\n        \"address\": \"12 Tahrir St, Cairo\",\n        \"avatarUrl\": \"http://erp.local/uploads/avatars/omnia.jpg\",\n        \"birthDate\": \"1995-04-12\",\n        \"gender\": \"female\",\n        \"job\": \"Teacher\",\n        \"hasMedicalProfile\": true,\n        \"createdAt\": \"2026-06-01T09:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Unauthorized - missing/invalid/expired token",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/profile",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile"
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`. No body/query params.\n\nReturns the authenticated user object directly as `data` (not wrapped in a `user` key). Includes `birthDate`, `job`, `avatarUrl`."
							},
							"status": "Unauthorized",
							"code": 401,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"يجب تسجيل الدخول أولاً\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Update Profile",
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"phone\": \"01098765432\",\n  \"email\": \"omnia.updated@example.com\",\n  \"address\": \"12 Tahrir St, Cairo\",\n  \"dateOfBirth\": \"1995-04-12\",\n  \"gender\": \"female\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/profile",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"profile"
							]
						},
						"description": "Requires `Authorization: Bearer {{token}}`.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| phone | required | string | max 50, must be unique (ignoring the current user) |\n| email | optional | string (email) | max 255, must be unique (ignoring the current user) |\n| address | optional | string | max 1000 |\n| dateOfBirth | optional | date (YYYY-MM-DD) | must be before today |\n| gender | optional | string | one of: `male`, `female` |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "PUT",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"phone\": \"01098765432\",\n  \"email\": \"omnia.updated@example.com\",\n  \"address\": \"12 Tahrir St, Cairo\",\n  \"dateOfBirth\": \"1995-04-12\",\n  \"gender\": \"female\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/profile",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile"
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| phone | required | string | max 50, must be unique (ignoring the current user) |\n| email | optional | string (email) | max 255, must be unique (ignoring the current user) |\n| address | optional | string | max 1000 |\n| dateOfBirth | optional | date (YYYY-MM-DD) | must be before today |\n| gender | optional | string | one of: `male`, `female` |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 12,\n        \"name\": \"Omnia Abdallah\",\n        \"phone\": \"01098765432\",\n        \"email\": \"omnia.updated@example.com\",\n        \"address\": \"12 Tahrir St, Cairo\",\n        \"avatarUrl\": null,\n        \"birthDate\": \"1995-04-12\",\n        \"gender\": \"female\",\n        \"job\": \"Teacher\",\n        \"hasMedicalProfile\": true,\n        \"createdAt\": \"2026-06-01T09:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - phone already used",
							"originalRequest": {
								"method": "PUT",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"phone\": \"01098765432\",\n  \"email\": \"omnia.updated@example.com\",\n  \"address\": \"12 Tahrir St, Cairo\",\n  \"dateOfBirth\": \"1995-04-12\",\n  \"gender\": \"female\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/profile",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile"
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| phone | required | string | max 50, must be unique (ignoring the current user) |\n| email | optional | string (email) | max 255, must be unique (ignoring the current user) |\n| address | optional | string | max 1000 |\n| dateOfBirth | optional | date (YYYY-MM-DD) | must be before today |\n| gender | optional | string | one of: `male`, `female` |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"phone\": [\n            \"The phone has already been taken.\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Upload Avatar",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "formdata",
							"formdata": [
								{
									"key": "avatar",
									"type": "file",
									"src": []
								}
							]
						},
						"url": {
							"raw": "{{base_url}}/profile/photo",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"profile",
								"photo"
							]
						},
						"description": "multipart/form-data. Requires `Authorization: Bearer {{token}}`.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| avatar | required | file (image) | max 2048 KB |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "avatar",
											"type": "file",
											"src": []
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/profile/photo",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile",
										"photo"
									]
								},
								"description": "multipart/form-data. Requires `Authorization: Bearer {{token}}`.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| avatar | required | file (image) | max 2048 KB |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم تحديث الصورة الشخصية بنجاح\",\n    \"data\": {\n        \"id\": 12,\n        \"name\": \"Omnia Abdallah\",\n        \"phone\": \"01098765432\",\n        \"email\": \"omnia.updated@example.com\",\n        \"address\": \"12 Tahrir St, Cairo\",\n        \"avatarUrl\": \"http://erp.local/uploads/avatars/64f1c2b3a4d5e.jpg\",\n        \"birthDate\": \"1995-04-12\",\n        \"gender\": \"female\",\n        \"job\": \"Teacher\",\n        \"hasMedicalProfile\": true,\n        \"createdAt\": \"2026-06-01T09:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - avatar missing/invalid",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "avatar",
											"type": "file",
											"src": []
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/profile/photo",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile",
										"photo"
									]
								},
								"description": "multipart/form-data. Requires `Authorization: Bearer {{token}}`.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| avatar | required | file (image) | max 2048 KB |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"avatar\": [\n            \"The avatar field is required.\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Change Password",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"currentPassword\": \"Passw0rd!\",\n  \"password\": \"NewPassw0rd!\",\n  \"passwordConfirmation\": \"NewPassw0rd!\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/change-password",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"change-password"
							]
						},
						"description": "Revokes all other refresh tokens/sessions on success, keeping only the current one active.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| currentPassword | required | string | must match the user's current password |\n| password | required | string | must satisfy the password policy |\n| passwordConfirmation | required | string | must match `password` |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"currentPassword\": \"Passw0rd!\",\n  \"password\": \"NewPassw0rd!\",\n  \"passwordConfirmation\": \"NewPassw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/change-password",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"change-password"
									]
								},
								"description": "Revokes all other refresh tokens/sessions on success, keeping only the current one active.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| currentPassword | required | string | must match the user's current password |\n| password | required | string | must satisfy the password policy |\n| passwordConfirmation | required | string | must match `password` |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم تغيير كلمة المرور بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - current password incorrect",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"currentPassword\": \"Passw0rd!\",\n  \"password\": \"NewPassw0rd!\",\n  \"passwordConfirmation\": \"NewPassw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/change-password",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"change-password"
									]
								},
								"description": "Revokes all other refresh tokens/sessions on success, keeping only the current one active.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| currentPassword | required | string | must match the user's current password |\n| password | required | string | must satisfy the password policy |\n| passwordConfirmation | required | string | must match `password` |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"currentPassword\": [\n            \"كلمة المرور الحالية غير صحيحة\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Delete Account",
					"request": {
						"method": "DELETE",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"password\": \"Passw0rd!\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/profile/delete",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"profile",
								"delete"
							]
						},
						"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| password | required | string | must match the user's current password, as a confirmation step |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "DELETE",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"password\": \"Passw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/profile/delete",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile",
										"delete"
									]
								},
								"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| password | required | string | must match the user's current password, as a confirmation step |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم حذف حسابك بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - password incorrect",
							"originalRequest": {
								"method": "DELETE",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"password\": \"Passw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/profile/delete",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile",
										"delete"
									]
								},
								"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| password | required | string | must match the user's current password, as a confirmation step |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"password\": [\n            \"كلمة المرور الحالية غير صحيحة\"\n        ]\n    }\n}"
						},
						{
							"name": "Conflict - has booking history",
							"originalRequest": {
								"method": "DELETE",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"password\": \"Passw0rd!\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/profile/delete",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"profile",
										"delete"
									]
								},
								"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| password | required | string | must match the user's current password, as a confirmation step |"
							},
							"status": "Conflict",
							"code": 409,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"CONFLICT\",\n    \"message\": \"لا يمكن حذف حسابك لوجود حجوزات سابقة مرتبطة به\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Logout",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/logout",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"logout"
							]
						},
						"description": "No body/query params. Revokes only the current access token + its paired refresh token."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/logout",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"logout"
									]
								},
								"description": "No body/query params. Revokes only the current access token + its paired refresh token."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم تسجيل الخروج بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Logout All",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/logout-all",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"logout-all"
							]
						},
						"description": "No body/query params. Revokes every access token + refresh token for the user (all devices)."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/logout-all",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"logout-all"
									]
								},
								"description": "No body/query params. Revokes every access token + refresh token for the user (all devices)."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تم تسجيل الخروج بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Home",
			"item": [
				{
					"name": "Get Home",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/home",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"home"
							]
						},
						"description": "Public. No body/query params. Returns 5 sections in `data`: `banners`, `specialties`, `topDoctors`, `clinics`, `offers`. Each is always an array (`[]` when empty, never `null`)."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/home",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"home"
									]
								},
								"description": "Public. No body/query params. Returns 5 sections in `data`: `banners`, `specialties`, `topDoctors`, `clinics`, `offers`. Each is always an array (`[]` when empty, never `null`)."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"banners\": [\n            {\n                \"id\": 1,\n                \"title\": \"Summer Health Checkup\",\n                \"subtitle\": \"Book now and save 20%\",\n                \"imageUrl\": \"http://erp.local/uploads/banners/summer.jpg\",\n                \"actionTarget\": \"offers\"\n            }\n        ],\n        \"specialties\": [\n            {\n                \"id\": 1,\n                \"name\": \"Dermatology\",\n                \"slug\": \"dermatology\",\n                \"description\": \"Skin, hair, and nail care\",\n                \"iconUrl\": \"http://erp.local/uploads/specialties/derma.png\",\n                \"doctorsCount\": 0\n            }\n        ],\n        \"topDoctors\": [\n            {\n                \"id\": 1,\n                \"name\": \"Dr. Ahmed Hassan\",\n                \"imageUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n                \"specialtyName\": \"Dermatology\",\n                \"specialtyId\": 1,\n                \"clinicName\": \"BST Clinics - Nasr City\",\n                \"clinicId\": 1,\n                \"experienceYears\": 12,\n                \"rating\": 4.8,\n                \"reviewsCount\": 34,\n                \"fee\": 350,\n                \"supportsOnlineConsultation\": true,\n                \"nextAvailableSlot\": \"2026-09-21 10:00\"\n            }\n        ],\n        \"clinics\": [\n            {\n                \"id\": 1,\n                \"name\": \"BST Clinics - Nasr City\",\n                \"imageUrl\": \"http://erp.local/uploads/clinics/nasr-city.jpg\",\n                \"address\": \"5 Abbas El Akkad St\",\n                \"city\": \"Cairo\",\n                \"rating\": 4.6,\n                \"reviewsCount\": 120,\n                \"doctorsCount\": 8\n            }\n        ],\n        \"offers\": [\n            {\n                \"id\": 1,\n                \"title\": \"20% Off First Visit\",\n                \"description\": \"Valid for new patients only\",\n                \"imageUrl\": null,\n                \"discountPercentage\": 20,\n                \"price\": 280,\n                \"priceBeforeDiscount\": 350,\n                \"validUntil\": \"2026-10-31\"\n            }\n        ]\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Lookups",
			"item": [
				{
					"name": "Specialties",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/lookups/specialties",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"lookups",
								"specialties"
							]
						},
						"description": "Public. No body/query params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/lookups/specialties",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"lookups",
										"specialties"
									]
								},
								"description": "Public. No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Dermatology\",\n            \"slug\": \"dermatology\",\n            \"description\": \"Skin, hair, and nail care\",\n            \"iconUrl\": \"http://erp.local/uploads/specialties/derma.png\",\n            \"doctorsCount\": 6\n        },\n        {\n            \"id\": 2,\n            \"name\": \"Cardiology\",\n            \"slug\": \"cardiology\",\n            \"description\": \"Heart and blood vessels\",\n            \"iconUrl\": \"http://erp.local/uploads/specialties/cardio.png\",\n            \"doctorsCount\": 3\n        }\n    ],\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Clinics",
			"item": [
				{
					"name": "List Clinics",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/clinics?branchId=1",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"clinics"
							],
							"query": [
								{
									"key": "branchId",
									"value": "1"
								}
							]
						},
						"description": "Public.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| branchId | optional | integer | filters clinics belonging to a specific branch |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/clinics?branchId=1",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"clinics"
									],
									"query": [
										{
											"key": "branchId",
											"value": "1"
										}
									]
								},
								"description": "Public.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| branchId | optional | integer | filters clinics belonging to a specific branch |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"BST Clinics - Nasr City\",\n            \"branch\": {\n                \"id\": 1,\n                \"name\": \"Nasr City Branch\"\n            },\n            \"logoUrl\": \"http://erp.local/uploads/clinics/nasr-city-logo.jpg\",\n            \"coverImageUrl\": \"http://erp.local/uploads/clinics/nasr-city-cover.jpg\",\n            \"description\": \"A modern multi-specialty clinic in the heart of Nasr City.\",\n            \"whatsapp\": \"01000000000\",\n            \"workingHours\": \"Sat-Thu 9:00 AM - 9:00 PM\",\n            \"avgRating\": 4.6\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 15,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Doctors",
			"item": [
				{
					"name": "List Doctors",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/doctors?specialtyId=1&branchId=1&q=",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"doctors"
							],
							"query": [
								{
									"key": "specialtyId",
									"value": "1"
								},
								{
									"key": "branchId",
									"value": "1"
								},
								{
									"key": "q",
									"value": "",
									"description": "free-text search"
								}
							]
						},
						"description": "Public. Paginated (standard Laravel `page` query param also accepted).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| specialtyId | optional | integer | filter by specialty |\n| branchId | optional | integer | filter by branch |\n| q | optional | string | free-text search on doctor name |\n| page | optional | integer | standard Laravel pagination page number |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors?specialtyId=1&branchId=1&q=",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors"
									],
									"query": [
										{
											"key": "specialtyId",
											"value": "1"
										},
										{
											"key": "branchId",
											"value": "1"
										},
										{
											"key": "q",
											"value": "",
											"description": "free-text search"
										}
									]
								},
								"description": "Public. Paginated (standard Laravel `page` query param also accepted).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| specialtyId | optional | integer | filter by specialty |\n| branchId | optional | integer | filter by branch |\n| q | optional | string | free-text search on doctor name |\n| page | optional | integer | standard Laravel pagination page number |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Dr. Ahmed Hassan\",\n            \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n            \"specialty\": {\n                \"id\": 1,\n                \"name\": \"Dermatology\"\n            },\n            \"yearsExperience\": 12,\n            \"averageRating\": 4.8\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 15,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Doctor Details",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/doctors/{{doctor_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"doctors",
								"{{doctor_id}}"
							]
						},
						"description": "Public. No body params.\n\n**Path params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctor (in URL) | required | integer | doctor id |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors/{{doctor_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors",
										"{{doctor_id}}"
									]
								},
								"description": "Public. No body params.\n\n**Path params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctor (in URL) | required | integer | doctor id |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Dr. Ahmed Hassan\",\n        \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n        \"bio\": \"Consultant dermatologist with 12 years of experience.\",\n        \"qualifications\": \"MBBCh, MSc Dermatology\",\n        \"yearsExperience\": 12,\n        \"specialty\": {\n            \"id\": 1,\n            \"name\": \"Dermatology\"\n        },\n        \"averageRating\": 4.8,\n        \"clinics\": [\n            {\n                \"clinicProfileId\": 1,\n                \"name\": \"BST Clinics - Nasr City\",\n                \"branch\": {\n                    \"id\": 1,\n                    \"name\": \"Nasr City Branch\"\n                },\n                \"avgRating\": 4.6,\n                \"prices\": [\n                    {\n                        \"serviceType\": \"visit\",\n                        \"totalPrice\": 350\n                    },\n                    {\n                        \"serviceType\": \"online\",\n                        \"totalPrice\": 250\n                    }\n                ],\n                \"schedule\": [\n                    {\n                        \"dayOfWeek\": \"saturday\",\n                        \"label\": \"Morning\",\n                        \"startTime\": \"10:00\",\n                        \"endTime\": \"14:00\"\n                    }\n                ]\n            }\n        ],\n        \"reviews\": [\n            {\n                \"id\": 5,\n                \"doctorRating\": 5,\n                \"doctorComment\": \"Very professional and on time.\",\n                \"clinicRating\": 4,\n                \"clinicComment\": \"Clean and easy to find.\",\n                \"patientName\": \"Sara\",\n                \"createdAt\": \"2026-08-10T14:30:00+03:00\"\n            }\n        ]\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Not Found - inactive doctor or no active clinics",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors/{{doctor_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors",
										"{{doctor_id}}"
									]
								},
								"description": "Public. No body params.\n\n**Path params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctor (in URL) | required | integer | doctor id |"
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Doctor Reviews",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/doctors/{{doctor_id}}/reviews",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"doctors",
								"{{doctor_id}}",
								"reviews"
							]
						},
						"description": "Public. Paginated (10 per page, fixed).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| page | optional | integer | standard Laravel pagination page number |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors/{{doctor_id}}/reviews",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors",
										"{{doctor_id}}",
										"reviews"
									]
								},
								"description": "Public. Paginated (10 per page, fixed).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| page | optional | integer | standard Laravel pagination page number |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 5,\n            \"doctorRating\": 5,\n            \"doctorComment\": \"Very professional and on time.\",\n            \"clinicRating\": 4,\n            \"clinicComment\": \"Clean and easy to find.\",\n            \"patientName\": \"Sara\",\n            \"createdAt\": \"2026-08-10T14:30:00+03:00\"\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 10,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Doctor Available Slots",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/doctors/{{doctor_id}}/clinics/{{clinic_profile_id}}/slots?date=2026-09-20",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"doctors",
								"{{doctor_id}}",
								"clinics",
								"{{clinic_profile_id}}",
								"slots"
							],
							"query": [
								{
									"key": "date",
									"value": "2026-09-20"
								}
							]
						},
						"description": "Requires `Authorization: Bearer {{token}}`. Returns open H:i slot strings for that doctor+clinic pairing on the given date.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or a future date |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors/{{doctor_id}}/clinics/{{clinic_profile_id}}/slots?date=2026-09-20",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors",
										"{{doctor_id}}",
										"clinics",
										"{{clinic_profile_id}}",
										"slots"
									],
									"query": [
										{
											"key": "date",
											"value": "2026-09-20"
										}
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`. Returns open H:i slot strings for that doctor+clinic pairing on the given date.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or a future date |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"date\": \"2026-09-20\",\n        \"slots\": [\n            \"10:00\",\n            \"10:30\",\n            \"11:00\",\n            \"11:30\"\n        ]\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - date in the past",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors/{{doctor_id}}/clinics/{{clinic_profile_id}}/slots?date=2026-09-20",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors",
										"{{doctor_id}}",
										"clinics",
										"{{clinic_profile_id}}",
										"slots"
									],
									"query": [
										{
											"key": "date",
											"value": "2026-09-20"
										}
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`. Returns open H:i slot strings for that doctor+clinic pairing on the given date.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or a future date |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"date\": [\n            \"The date field must be a date after or equal to today.\"\n        ]\n    }\n}"
						},
						{
							"name": "Not Found - doctor not assigned to this clinic",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/doctors/{{doctor_id}}/clinics/{{clinic_profile_id}}/slots?date=2026-09-20",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"doctors",
										"{{doctor_id}}",
										"clinics",
										"{{clinic_profile_id}}",
										"slots"
									],
									"query": [
										{
											"key": "date",
											"value": "2026-09-20"
										}
									]
								},
								"description": "Requires `Authorization: Bearer {{token}}`. Returns open H:i slot strings for that doctor+clinic pairing on the given date.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or a future date |"
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Offers",
			"item": [
				{
					"name": "Active Offers",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/offers/active?branchId=&specialtyId=",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"offers",
								"active"
							],
							"query": [
								{
									"key": "branchId",
									"value": ""
								},
								{
									"key": "specialtyId",
									"value": ""
								}
							]
						},
						"description": "Public.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| branchId | optional | integer | filter offers to one branch |\n| specialtyId | optional | integer | filter offers to one specialty |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/offers/active?branchId=&specialtyId=",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"offers",
										"active"
									],
									"query": [
										{
											"key": "branchId",
											"value": ""
										},
										{
											"key": "specialtyId",
											"value": ""
										}
									]
								},
								"description": "Public.\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| branchId | optional | integer | filter offers to one branch |\n| specialtyId | optional | integer | filter offers to one specialty |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"title\": \"20% Off First Visit\",\n            \"description\": \"Valid for new patients only\",\n            \"imageUrl\": null,\n            \"discountPercentage\": 20,\n            \"price\": 280,\n            \"priceBeforeDiscount\": 350,\n            \"validUntil\": \"2026-10-31\"\n        }\n    ],\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Bookings",
			"item": [
				{
					"name": "Create Booking",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"doctorId\": {{doctor_id}},\n  \"clinicProfileId\": {{clinic_profile_id}},\n  \"type\": \"visit\",\n  \"date\": \"2026-09-20\",\n  \"time\": \"10:30\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/bookings",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"bookings"
							]
						},
						"description": "422 if the slot is already taken or the doctor has no active price for that service type.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorId | required | integer | must exist |\n| clinicProfileId | required | integer | must exist |\n| type | required | string | one of: `visit`, `online` |\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `10:30` |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"doctorId\": {{doctor_id}},\n  \"clinicProfileId\": {{clinic_profile_id}},\n  \"type\": \"visit\",\n  \"date\": \"2026-09-20\",\n  \"time\": \"10:30\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings"
									]
								},
								"description": "422 if the slot is already taken or the doctor has no active price for that service type.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorId | required | integer | must exist |\n| clinicProfileId | required | integer | must exist |\n| type | required | string | one of: `visit`, `online` |\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `10:30` |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"type\": \"visit\",\n        \"scheduledAt\": \"2026-09-20T10:30:00+03:00\",\n        \"durationMinutes\": 20,\n        \"price\": 350,\n        \"status\": \"pending\",\n        \"doctor\": {\n            \"id\": 1,\n            \"name\": \"Dr. Ahmed Hassan\",\n            \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n            \"specialty\": \"Dermatology\"\n        },\n        \"clinicProfile\": {\n            \"id\": 1,\n            \"name\": \"BST Clinics - Nasr City\",\n            \"branch\": \"Nasr City Branch\"\n        },\n        \"cancelledAt\": null,\n        \"cancelReason\": null,\n        \"rescheduledFromId\": null,\n        \"medicalRecordAvailable\": false,\n        \"reviewSubmitted\": false,\n        \"followup\": null\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Medical Profile Required",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"doctorId\": {{doctor_id}},\n  \"clinicProfileId\": {{clinic_profile_id}},\n  \"type\": \"visit\",\n  \"date\": \"2026-09-20\",\n  \"time\": \"10:30\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings"
									]
								},
								"description": "422 if the slot is already taken or the doctor has no active price for that service type.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorId | required | integer | must exist |\n| clinicProfileId | required | integer | must exist |\n| type | required | string | one of: `visit`, `online` |\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `10:30` |"
							},
							"status": "Precondition Required",
							"code": 428,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"MEDICAL_PROFILE_REQUIRED\",\n    \"message\": \"يرجى إكمال ملفك الطبي أولاً\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - slot already taken",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"doctorId\": {{doctor_id}},\n  \"clinicProfileId\": {{clinic_profile_id}},\n  \"type\": \"visit\",\n  \"date\": \"2026-09-20\",\n  \"time\": \"10:30\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings"
									]
								},
								"description": "422 if the slot is already taken or the doctor has no active price for that service type.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorId | required | integer | must exist |\n| clinicProfileId | required | integer | must exist |\n| type | required | string | one of: `visit`, `online` |\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `10:30` |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"This slot is no longer available.\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "My Bookings",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/bookings/mine?status=",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"bookings",
								"mine"
							],
							"query": [
								{
									"key": "status",
									"value": ""
								}
							]
						},
						"description": "Paginated (10 per page, fixed).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| status | optional | string | filters to one booking status (e.g. `pending`, `confirmed`, `cancelled`) |\n| page | optional | integer | standard Laravel pagination page number |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/bookings/mine?status=",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"mine"
									],
									"query": [
										{
											"key": "status",
											"value": ""
										}
									]
								},
								"description": "Paginated (10 per page, fixed).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| status | optional | string | filters to one booking status (e.g. `pending`, `confirmed`, `cancelled`) |\n| page | optional | integer | standard Laravel pagination page number |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"type\": \"visit\",\n            \"scheduledAt\": \"2026-09-20T10:30:00+03:00\",\n            \"durationMinutes\": 20,\n            \"price\": 350,\n            \"status\": \"confirmed\",\n            \"doctor\": {\n                \"id\": 1,\n                \"name\": \"Dr. Ahmed Hassan\",\n                \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n                \"specialty\": \"Dermatology\"\n            },\n            \"clinicProfile\": {\n                \"id\": 1,\n                \"name\": \"BST Clinics - Nasr City\",\n                \"branch\": \"Nasr City Branch\"\n            },\n            \"cancelledAt\": null,\n            \"cancelReason\": null,\n            \"rescheduledFromId\": null,\n            \"medicalRecordAvailable\": false,\n            \"reviewSubmitted\": false,\n            \"followup\": null\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 10,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Booking Details",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/bookings/{{booking_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"bookings",
								"{{booking_id}}"
							]
						},
						"description": "No body/query params — `booking` id is in the URL and must belong to the authenticated patient."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}"
									]
								},
								"description": "No body/query params — `booking` id is in the URL and must belong to the authenticated patient."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"type\": \"visit\",\n        \"scheduledAt\": \"2026-09-20T10:30:00+03:00\",\n        \"durationMinutes\": 20,\n        \"price\": 350,\n        \"status\": \"confirmed\",\n        \"doctor\": {\n            \"id\": 1,\n            \"name\": \"Dr. Ahmed Hassan\",\n            \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n            \"specialty\": \"Dermatology\"\n        },\n        \"clinicProfile\": {\n            \"id\": 1,\n            \"name\": \"BST Clinics - Nasr City\",\n            \"branch\": \"Nasr City Branch\"\n        },\n        \"cancelledAt\": null,\n        \"cancelReason\": null,\n        \"rescheduledFromId\": null,\n        \"medicalRecordAvailable\": false,\n        \"reviewSubmitted\": false,\n        \"followup\": null\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Forbidden - not this patient's booking",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}"
									]
								},
								"description": "No body/query params — `booking` id is in the URL and must belong to the authenticated patient."
							},
							"status": "Forbidden",
							"code": 403,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"FORBIDDEN\",\n    \"message\": \"غير مصرح لك بتنفيذ هذا الإجراء\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Not Found - booking does not exist",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}"
									]
								},
								"description": "No body/query params — `booking` id is in the URL and must belong to the authenticated patient."
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Cancel Booking",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"reason\": \"Schedule conflict\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/bookings/{{booking_id}}/cancel",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"bookings",
								"{{booking_id}}",
								"cancel"
							]
						},
						"description": "422 once inside the configured cancellation window (default 24h before the appointment).\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| reason | optional | string | max 500 |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"reason\": \"Schedule conflict\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/cancel",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"cancel"
									]
								},
								"description": "422 once inside the configured cancellation window (default 24h before the appointment).\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| reason | optional | string | max 500 |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"type\": \"visit\",\n        \"scheduledAt\": \"2026-09-20T10:30:00+03:00\",\n        \"durationMinutes\": 20,\n        \"price\": 350,\n        \"status\": \"cancelled\",\n        \"doctor\": {\n            \"id\": 1,\n            \"name\": \"Dr. Ahmed Hassan\",\n            \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n            \"specialty\": \"Dermatology\"\n        },\n        \"clinicProfile\": {\n            \"id\": 1,\n            \"name\": \"BST Clinics - Nasr City\",\n            \"branch\": \"Nasr City Branch\"\n        },\n        \"cancelledAt\": \"2026-09-19T08:00:00+03:00\",\n        \"cancelReason\": \"Schedule conflict\",\n        \"rescheduledFromId\": null,\n        \"medicalRecordAvailable\": false,\n        \"reviewSubmitted\": false,\n        \"followup\": null\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - cancellation window passed",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"reason\": \"Schedule conflict\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/cancel",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"cancel"
									]
								},
								"description": "422 once inside the configured cancellation window (default 24h before the appointment).\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| reason | optional | string | max 500 |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"The cancellation window for this booking has passed.\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Forbidden - not this patient's booking",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"reason\": \"Schedule conflict\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/cancel",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"cancel"
									]
								},
								"description": "422 once inside the configured cancellation window (default 24h before the appointment).\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| reason | optional | string | max 500 |"
							},
							"status": "Forbidden",
							"code": 403,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"FORBIDDEN\",\n    \"message\": \"غير مصرح لك بتنفيذ هذا الإجراء\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Reschedule Booking",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"date\": \"2026-09-22\",\n  \"time\": \"11:00\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/bookings/{{booking_id}}/reschedule",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"bookings",
								"{{booking_id}}",
								"reschedule"
							]
						},
						"description": "422 once inside the configured reschedule window (default 12h before the appointment). Cancels the original and creates a new booking.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `11:00` |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"date\": \"2026-09-22\",\n  \"time\": \"11:00\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/reschedule",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"reschedule"
									]
								},
								"description": "422 once inside the configured reschedule window (default 12h before the appointment). Cancels the original and creates a new booking.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `11:00` |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 2,\n        \"type\": \"visit\",\n        \"scheduledAt\": \"2026-09-22T11:00:00+03:00\",\n        \"durationMinutes\": 20,\n        \"price\": 350,\n        \"status\": \"pending\",\n        \"doctor\": {\n            \"id\": 1,\n            \"name\": \"Dr. Ahmed Hassan\",\n            \"photoUrl\": \"http://erp.local/uploads/doctors/ahmed.jpg\",\n            \"specialty\": \"Dermatology\"\n        },\n        \"clinicProfile\": {\n            \"id\": 1,\n            \"name\": \"BST Clinics - Nasr City\",\n            \"branch\": \"Nasr City Branch\"\n        },\n        \"cancelledAt\": null,\n        \"cancelReason\": null,\n        \"rescheduledFromId\": 1,\n        \"medicalRecordAvailable\": false,\n        \"reviewSubmitted\": false,\n        \"followup\": null\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - reschedule window passed",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"date\": \"2026-09-22\",\n  \"time\": \"11:00\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/reschedule",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"reschedule"
									]
								},
								"description": "422 once inside the configured reschedule window (default 12h before the appointment). Cancels the original and creates a new booking.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| date | required | date (YYYY-MM-DD) | must be today or later |\n| time | required | string (H:i) | e.g. `11:00` |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"The reschedule window for this booking has passed.\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Review Booking",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"doctorRating\": 5,\n  \"doctorComment\": \"Very professional and on time.\",\n  \"clinicRating\": 4,\n  \"clinicComment\": \"Clean and easy to find.\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/bookings/{{booking_id}}/review",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"bookings",
								"{{booking_id}}",
								"review"
							]
						},
						"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorRating | required | integer | 1 to 5 |\n| doctorComment | optional | string | max 2000 |\n| clinicRating | required | integer | 1 to 5 |\n| clinicComment | optional | string | max 2000 |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"doctorRating\": 5,\n  \"doctorComment\": \"Very professional and on time.\",\n  \"clinicRating\": 4,\n  \"clinicComment\": \"Clean and easy to find.\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/review",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"review"
									]
								},
								"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorRating | required | integer | 1 to 5 |\n| doctorComment | optional | string | max 2000 |\n| clinicRating | required | integer | 1 to 5 |\n| clinicComment | optional | string | max 2000 |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {\n        \"id\": 9,\n        \"doctorRating\": 5,\n        \"doctorComment\": \"Very professional and on time.\",\n        \"clinicRating\": 4,\n        \"clinicComment\": \"Clean and easy to find.\",\n        \"patientName\": \"Omnia\",\n        \"createdAt\": \"2026-09-20T12:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - booking not completed yet",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"doctorRating\": 5,\n  \"doctorComment\": \"Very professional and on time.\",\n  \"clinicRating\": 4,\n  \"clinicComment\": \"Clean and easy to find.\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/review",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"review"
									]
								},
								"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorRating | required | integer | 1 to 5 |\n| doctorComment | optional | string | max 2000 |\n| clinicRating | required | integer | 1 to 5 |\n| clinicComment | optional | string | max 2000 |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"This booking is not completed yet.\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Conflict - already reviewed",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"doctorRating\": 5,\n  \"doctorComment\": \"Very professional and on time.\",\n  \"clinicRating\": 4,\n  \"clinicComment\": \"Clean and easy to find.\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/bookings/{{booking_id}}/review",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"bookings",
										"{{booking_id}}",
										"review"
									]
								},
								"description": "**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| doctorRating | required | integer | 1 to 5 |\n| doctorComment | optional | string | max 2000 |\n| clinicRating | required | integer | 1 to 5 |\n| clinicComment | optional | string | max 2000 |"
							},
							"status": "Conflict",
							"code": 409,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"CONFLICT\",\n    \"message\": \"This booking has already been reviewed.\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Patient Profile (Medical)",
			"item": [
				{
					"name": "Get Medical Profile",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/patient-profile/medical",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"patient-profile",
								"medical"
							]
						},
						"description": "No body/query params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/patient-profile/medical",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-profile",
										"medical"
									]
								},
								"description": "No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"dateOfBirth\": \"1995-04-12\",\n        \"gender\": \"female\",\n        \"occupation\": \"Teacher\",\n        \"medicalHistory\": {\n            \"diabetes\": false,\n            \"hypertension\": false,\n            \"other\": \"None\"\n        },\n        \"surgicalHistory\": {\n            \"hadSurgery\": false,\n            \"type\": null,\n            \"date\": null,\n            \"hospital\": null,\n            \"notes\": null\n        },\n        \"medicationHistory\": {\n            \"other\": \"\",\n            \"notes\": \"\"\n        },\n        \"allergyType\": \"drug\",\n        \"allergySubstance\": \"Penicillin\",\n        \"allergySeverity\": \"moderate\",\n        \"allergyNotes\": \"Causes a rash\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Success - no medical profile yet",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/patient-profile/medical",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-profile",
										"medical"
									]
								},
								"description": "No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Update Medical Profile",
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"occupation\": \"Teacher\",\n  \"gender\": \"female\",\n  \"dateOfBirth\": \"1995-04-12\",\n  \"medicalHistory\": {\n    \"other\": \"None\"\n  },\n  \"surgicalHistory\": {\n    \"hadSurgery\": false,\n    \"type\": null,\n    \"date\": null,\n    \"hospital\": null,\n    \"notes\": null\n  },\n  \"medicationHistory\": {\n    \"other\": \"\",\n    \"notes\": \"\"\n  },\n  \"allergyType\": \"drug\",\n  \"allergySubstance\": \"Penicillin\",\n  \"allergySeverity\": \"moderate\",\n  \"allergyNotes\": \"Causes a rash\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/patient-profile/medical",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"patient-profile",
								"medical"
							]
						},
						"description": "Every field is optional — send only what changed. `medicalHistory`/`medicationHistory` also accept dynamic boolean keys per the active option codes returned by GET medical-history-options (e.g. `medicalHistory.diabetes: true`) — these have no fixed validation rule, they're read dynamically.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| occupation | optional | string | max 150 |\n| gender | optional | string | one of: `male`, `female` |\n| dateOfBirth | optional | date (YYYY-MM-DD) | must be before today |\n| medicalHistory.{optionCode} | optional | boolean | one key per active condition option code, dynamic, not validated |\n| medicalHistory.other | optional | string | max 500 |\n| surgicalHistory.hadSurgery | optional | boolean | read via request, no fixed validation rule |\n| surgicalHistory.type | optional | string | max 255 |\n| surgicalHistory.date | optional | date | |\n| surgicalHistory.hospital | optional | string | max 255 |\n| surgicalHistory.notes | optional | string | max 1000 |\n| medicationHistory.{optionCode} | optional | boolean | one key per active medication option code, dynamic, not validated |\n| medicationHistory.other | optional | string | max 500 |\n| medicationHistory.notes | optional | string | max 1000 |\n| allergyType | optional | string | one of: `drug`, `food`, `other` |\n| allergySubstance | optional | string | max 255 |\n| allergySeverity | optional | string | one of: `mild`, `moderate`, `severe` |\n| allergyNotes | optional | string | max 1000 |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "PUT",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"occupation\": \"Teacher\",\n  \"gender\": \"female\",\n  \"dateOfBirth\": \"1995-04-12\",\n  \"medicalHistory\": {\n    \"other\": \"None\"\n  },\n  \"surgicalHistory\": {\n    \"hadSurgery\": false,\n    \"type\": null,\n    \"date\": null,\n    \"hospital\": null,\n    \"notes\": null\n  },\n  \"medicationHistory\": {\n    \"other\": \"\",\n    \"notes\": \"\"\n  },\n  \"allergyType\": \"drug\",\n  \"allergySubstance\": \"Penicillin\",\n  \"allergySeverity\": \"moderate\",\n  \"allergyNotes\": \"Causes a rash\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/patient-profile/medical",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-profile",
										"medical"
									]
								},
								"description": "Every field is optional — send only what changed. `medicalHistory`/`medicationHistory` also accept dynamic boolean keys per the active option codes returned by GET medical-history-options (e.g. `medicalHistory.diabetes: true`) — these have no fixed validation rule, they're read dynamically.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| occupation | optional | string | max 150 |\n| gender | optional | string | one of: `male`, `female` |\n| dateOfBirth | optional | date (YYYY-MM-DD) | must be before today |\n| medicalHistory.{optionCode} | optional | boolean | one key per active condition option code, dynamic, not validated |\n| medicalHistory.other | optional | string | max 500 |\n| surgicalHistory.hadSurgery | optional | boolean | read via request, no fixed validation rule |\n| surgicalHistory.type | optional | string | max 255 |\n| surgicalHistory.date | optional | date | |\n| surgicalHistory.hospital | optional | string | max 255 |\n| surgicalHistory.notes | optional | string | max 1000 |\n| medicationHistory.{optionCode} | optional | boolean | one key per active medication option code, dynamic, not validated |\n| medicationHistory.other | optional | string | max 500 |\n| medicationHistory.notes | optional | string | max 1000 |\n| allergyType | optional | string | one of: `drug`, `food`, `other` |\n| allergySubstance | optional | string | max 255 |\n| allergySeverity | optional | string | one of: `mild`, `moderate`, `severe` |\n| allergyNotes | optional | string | max 1000 |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"dateOfBirth\": \"1995-04-12\",\n        \"gender\": \"female\",\n        \"occupation\": \"Teacher\",\n        \"medicalHistory\": {\n            \"diabetes\": false,\n            \"hypertension\": false,\n            \"other\": \"None\"\n        },\n        \"surgicalHistory\": {\n            \"hadSurgery\": false,\n            \"type\": null,\n            \"date\": null,\n            \"hospital\": null,\n            \"notes\": null\n        },\n        \"medicationHistory\": {\n            \"other\": \"\",\n            \"notes\": \"\"\n        },\n        \"allergyType\": \"drug\",\n        \"allergySubstance\": \"Penicillin\",\n        \"allergySeverity\": \"moderate\",\n        \"allergyNotes\": \"Causes a rash\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - invalid gender",
							"originalRequest": {
								"method": "PUT",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"occupation\": \"Teacher\",\n  \"gender\": \"female\",\n  \"dateOfBirth\": \"1995-04-12\",\n  \"medicalHistory\": {\n    \"other\": \"None\"\n  },\n  \"surgicalHistory\": {\n    \"hadSurgery\": false,\n    \"type\": null,\n    \"date\": null,\n    \"hospital\": null,\n    \"notes\": null\n  },\n  \"medicationHistory\": {\n    \"other\": \"\",\n    \"notes\": \"\"\n  },\n  \"allergyType\": \"drug\",\n  \"allergySubstance\": \"Penicillin\",\n  \"allergySeverity\": \"moderate\",\n  \"allergyNotes\": \"Causes a rash\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/patient-profile/medical",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-profile",
										"medical"
									]
								},
								"description": "Every field is optional — send only what changed. `medicalHistory`/`medicationHistory` also accept dynamic boolean keys per the active option codes returned by GET medical-history-options (e.g. `medicalHistory.diabetes: true`) — these have no fixed validation rule, they're read dynamically.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| occupation | optional | string | max 150 |\n| gender | optional | string | one of: `male`, `female` |\n| dateOfBirth | optional | date (YYYY-MM-DD) | must be before today |\n| medicalHistory.{optionCode} | optional | boolean | one key per active condition option code, dynamic, not validated |\n| medicalHistory.other | optional | string | max 500 |\n| surgicalHistory.hadSurgery | optional | boolean | read via request, no fixed validation rule |\n| surgicalHistory.type | optional | string | max 255 |\n| surgicalHistory.date | optional | date | |\n| surgicalHistory.hospital | optional | string | max 255 |\n| surgicalHistory.notes | optional | string | max 1000 |\n| medicationHistory.{optionCode} | optional | boolean | one key per active medication option code, dynamic, not validated |\n| medicationHistory.other | optional | string | max 500 |\n| medicationHistory.notes | optional | string | max 1000 |\n| allergyType | optional | string | one of: `drug`, `food`, `other` |\n| allergySubstance | optional | string | max 255 |\n| allergySeverity | optional | string | one of: `mild`, `moderate`, `severe` |\n| allergyNotes | optional | string | max 1000 |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"gender\": [\n            \"The selected gender is invalid.\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Medical History Options",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/medical-history-options",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"medical-history-options"
							]
						},
						"description": "No body/query params. Returns the active `condition`/`medication` option codes used as dynamic keys in Update Medical Profile."
					},
					"response": [
						{
							"name": "Success (with ?type=condition)",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/medical-history-options?type=condition",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"medical-history-options"
									],
									"query": [
										{
											"key": "type",
											"value": "condition"
										}
									]
								},
								"description": "No body/query params. Returns the active `condition`/`medication` option codes used as dynamic keys in Update Medical Profile."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"type\": \"condition\",\n            \"code\": \"diabetes\",\n            \"name\": \"Diabetes\"\n        },\n        {\n            \"id\": 2,\n            \"type\": \"condition\",\n            \"code\": \"hypertension\",\n            \"name\": \"Hypertension\"\n        }\n    ],\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - missing required \"type\" query param",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/medical-history-options",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"medical-history-options"
									]
								},
								"description": "No body/query params. Returns the active `condition`/`medication` option codes used as dynamic keys in Update Medical Profile."
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"type\": [\n            \"The type field is required.\"\n        ]\n    }\n}"
						}
					]
				}
			]
		},
		{
			"name": "Patient Attachments",
			"item": [
				{
					"name": "List Attachments",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/patient-attachments?categoryId=",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"patient-attachments"
							],
							"query": [
								{
									"key": "categoryId",
									"value": ""
								}
							]
						},
						"description": "**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| categoryId | optional | integer | filters attachments to one medical-history-option category |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/patient-attachments?categoryId=",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-attachments"
									],
									"query": [
										{
											"key": "categoryId",
											"value": ""
										}
									]
								},
								"description": "**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| categoryId | optional | integer | filters attachments to one medical-history-option category |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"category\": {\n                \"id\": 3,\n                \"name\": \"Lab Results\"\n            },\n            \"label\": \"Blood test\",\n            \"fileUrl\": \"http://erp.local/uploads/patient-attachments/blood-test.pdf\",\n            \"fileType\": \"pdf\",\n            \"createdAt\": \"2026-09-15T09:00:00+03:00\"\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 15,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Upload Attachment",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "formdata",
							"formdata": [
								{
									"key": "file",
									"type": "file",
									"src": []
								},
								{
									"key": "categoryId",
									"value": "",
									"type": "text"
								},
								{
									"key": "label",
									"value": "Blood test",
									"type": "text"
								}
							]
						},
						"url": {
							"raw": "{{base_url}}/patient-attachments",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"patient-attachments"
							]
						},
						"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| file | required | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx |\n| categoryId | optional | integer | must exist as a medical-history-option id |\n| label | optional | string | max 255 |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "file",
											"type": "file",
											"src": []
										},
										{
											"key": "categoryId",
											"value": "",
											"type": "text"
										},
										{
											"key": "label",
											"value": "Blood test",
											"type": "text"
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/patient-attachments",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-attachments"
									]
								},
								"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| file | required | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx |\n| categoryId | optional | integer | must exist as a medical-history-option id |\n| label | optional | string | max 255 |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"category\": {\n            \"id\": 3,\n            \"name\": \"Lab Results\"\n        },\n        \"label\": \"Blood test\",\n        \"fileUrl\": \"http://erp.local/uploads/patient-attachments/blood-test.pdf\",\n        \"fileType\": \"pdf\",\n        \"createdAt\": \"2026-09-15T09:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - file missing/invalid type",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "file",
											"type": "file",
											"src": []
										},
										{
											"key": "categoryId",
											"value": "",
											"type": "text"
										},
										{
											"key": "label",
											"value": "Blood test",
											"type": "text"
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/patient-attachments",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"patient-attachments"
									]
								},
								"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| file | required | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx |\n| categoryId | optional | integer | must exist as a medical-history-option id |\n| label | optional | string | max 255 |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"file\": [\n            \"The file field is required.\"\n        ]\n    }\n}"
						}
					]
				}
			]
		},
		{
			"name": "Medical Records",
			"item": [
				{
					"name": "My Medical Records",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/medical-records/mine",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"medical-records",
								"mine"
							]
						},
						"description": "Paginated (10 per page, fixed).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| page | optional | integer | standard Laravel pagination page number |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/medical-records/mine",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"medical-records",
										"mine"
									]
								},
								"description": "Paginated (10 per page, fixed).\n\n**Query params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| page | optional | integer | standard Laravel pagination page number |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"diagnosis\": \"Mild eczema\",\n            \"prescription\": \"Topical corticosteroid cream, apply twice daily for 2 weeks.\",\n            \"report\": \"Patient presented with dry, itchy patches on both forearms.\",\n            \"attachmentUrl\": null,\n            \"publishedAt\": \"2026-09-10T13:00:00+03:00\",\n            \"lastEditedAt\": \"2026-09-10T13:00:00+03:00\",\n            \"doctor\": {\n                \"id\": 1,\n                \"name\": \"Dr. Ahmed Hassan\",\n                \"specialty\": \"Dermatology\"\n            },\n            \"booking\": {\n                \"id\": 1,\n                \"scheduledAt\": \"2026-09-10T10:00:00+03:00\",\n                \"branch\": \"Nasr City Branch\"\n            }\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 10,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Medical Record Details",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/medical-records/{{record_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"medical-records",
								"{{record_id}}"
							]
						},
						"description": "No body/query params — `record` id is in the URL and must belong to the authenticated patient."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/medical-records/{{record_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"medical-records",
										"{{record_id}}"
									]
								},
								"description": "No body/query params — `record` id is in the URL and must belong to the authenticated patient."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"diagnosis\": \"Mild eczema\",\n        \"prescription\": \"Topical corticosteroid cream, apply twice daily for 2 weeks.\",\n        \"report\": \"Patient presented with dry, itchy patches on both forearms.\",\n        \"attachmentUrl\": null,\n        \"publishedAt\": \"2026-09-10T13:00:00+03:00\",\n        \"lastEditedAt\": \"2026-09-10T13:00:00+03:00\",\n        \"doctor\": {\n            \"id\": 1,\n            \"name\": \"Dr. Ahmed Hassan\",\n            \"specialty\": \"Dermatology\"\n        },\n        \"booking\": {\n            \"id\": 1,\n            \"scheduledAt\": \"2026-09-10T10:00:00+03:00\",\n            \"branch\": \"Nasr City Branch\"\n        }\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Forbidden - not this patient's record",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/medical-records/{{record_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"medical-records",
										"{{record_id}}"
									]
								},
								"description": "No body/query params — `record` id is in the URL and must belong to the authenticated patient."
							},
							"status": "Forbidden",
							"code": 403,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"FORBIDDEN\",\n    \"message\": \"غير مصرح لك بتنفيذ هذا الإجراء\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Not Found - not yet published",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/medical-records/{{record_id}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"medical-records",
										"{{record_id}}"
									]
								},
								"description": "No body/query params — `record` id is in the URL and must belong to the authenticated patient."
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Chat",
			"item": [
				{
					"name": "Unread Count",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/chat/unread-count",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"chat",
								"unread-count"
							]
						},
						"description": "No body/query params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/chat/unread-count",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"chat",
										"unread-count"
									]
								},
								"description": "No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"count\": 3\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "List Messages With Doctor",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"chat",
								"doctors",
								"{{doctor_id}}",
								"messages"
							]
						},
						"description": "No query params — returns the full message thread with this doctor."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"chat",
										"doctors",
										"{{doctor_id}}",
										"messages"
									]
								},
								"description": "No query params — returns the full message thread with this doctor."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"senderType\": \"patient\",\n            \"body\": \"Hello doctor, I have a question.\",\n            \"attachmentUrl\": null,\n            \"attachmentType\": null,\n            \"readAt\": null,\n            \"createdAt\": \"2026-09-19T18:00:00+03:00\"\n        },\n        {\n            \"id\": 2,\n            \"senderType\": \"doctor\",\n            \"body\": \"Sure, go ahead.\",\n            \"attachmentUrl\": null,\n            \"attachmentType\": null,\n            \"readAt\": \"2026-09-19T18:05:00+03:00\",\n            \"createdAt\": \"2026-09-19T18:04:00+03:00\"\n        }\n    ],\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Not Found - doctor inactive/unknown",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"chat",
										"doctors",
										"{{doctor_id}}",
										"messages"
									]
								},
								"description": "No query params — returns the full message thread with this doctor."
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Send Message",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "formdata",
							"formdata": [
								{
									"key": "body",
									"value": "Hello doctor, I have a question.",
									"type": "text"
								},
								{
									"key": "attachment",
									"type": "file",
									"src": []
								}
							]
						},
						"url": {
							"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"chat",
								"doctors",
								"{{doctor_id}}",
								"messages"
							]
						},
						"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| body | required if no attachment | string | max 5000; required when `attachment` is absent |\n| attachment | required if no body | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx; required when `body` is absent |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "body",
											"value": "Hello doctor, I have a question.",
											"type": "text"
										},
										{
											"key": "attachment",
											"type": "file",
											"src": []
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"chat",
										"doctors",
										"{{doctor_id}}",
										"messages"
									]
								},
								"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| body | required if no attachment | string | max 5000; required when `attachment` is absent |\n| attachment | required if no body | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx; required when `body` is absent |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {\n        \"id\": 1,\n        \"senderType\": \"patient\",\n        \"body\": \"Hello doctor, I have a question.\",\n        \"attachmentUrl\": null,\n        \"attachmentType\": null,\n        \"readAt\": null,\n        \"createdAt\": \"2026-09-19T18:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - neither body nor attachment sent",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "body",
											"value": "Hello doctor, I have a question.",
											"type": "text"
										},
										{
											"key": "attachment",
											"type": "file",
											"src": []
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"chat",
										"doctors",
										"{{doctor_id}}",
										"messages"
									]
								},
								"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| body | required if no attachment | string | max 5000; required when `attachment` is absent |\n| attachment | required if no body | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx; required when `body` is absent |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"body\": [\n            \"The body field is required when attachment is not present.\"\n        ]\n    }\n}"
						},
						{
							"name": "Not Found - doctor inactive/unknown",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "formdata",
									"formdata": [
										{
											"key": "body",
											"value": "Hello doctor, I have a question.",
											"type": "text"
										},
										{
											"key": "attachment",
											"type": "file",
											"src": []
										}
									]
								},
								"url": {
									"raw": "{{base_url}}/chat/doctors/{{doctor_id}}/messages",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"chat",
										"doctors",
										"{{doctor_id}}",
										"messages"
									]
								},
								"description": "multipart/form-data.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| body | required if no attachment | string | max 5000; required when `attachment` is absent |\n| attachment | required if no body | file | max 10MB; jpg, jpeg, png, webp, pdf, doc, docx; required when `body` is absent |"
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Notifications",
			"item": [
				{
					"name": "List Notifications",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/notifications",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"notifications"
							]
						},
						"description": "Paginated (standard Laravel `page` query param accepted). No filter params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/notifications",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"notifications"
									]
								},
								"description": "Paginated (standard Laravel `page` query param accepted). No filter params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": \"9f1c9c2e-1234-4a5b-8c9d-1234567890ab\",\n            \"type\": \"booking.confirmed\",\n            \"title\": \"Booking Confirmed\",\n            \"message\": \"Your appointment with Dr. Ahmed Hassan is confirmed.\",\n            \"url\": null,\n            \"readAt\": null,\n            \"createdAt\": \"2026-09-19T08:00:00+03:00\"\n        }\n    ],\n    \"meta\": {\n        \"pagination\": {\n            \"currentPage\": 1,\n            \"perPage\": 15,\n            \"total\": 1,\n            \"lastPage\": 1\n        }\n    },\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Unread Count",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/notifications/unread-count",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"notifications",
								"unread-count"
							]
						},
						"description": "No body/query params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/notifications/unread-count",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"notifications",
										"unread-count"
									]
								},
								"description": "No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"count\": 2\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Mark All Read",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/notifications/read-all",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"notifications",
								"read-all"
							]
						},
						"description": "No body/query params."
					},
					"response": [
						{
							"name": "Success - No Content",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/notifications/read-all",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"notifications",
										"read-all"
									]
								},
								"description": "No body/query params."
							},
							"status": "No Content",
							"code": 204,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "null"
						}
					]
				},
				{
					"name": "Mark One Read",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/notifications/{{notification_id}}/read",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"notifications",
								"{{notification_id}}",
								"read"
							]
						},
						"description": "No body params — notification `id` is in the URL."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/notifications/{{notification_id}}/read",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"notifications",
										"{{notification_id}}",
										"read"
									]
								},
								"description": "No body params — notification `id` is in the URL."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"id\": \"9f1c9c2e-1234-4a5b-8c9d-1234567890ab\",\n        \"type\": \"booking.confirmed\",\n        \"title\": \"Booking Confirmed\",\n        \"message\": \"Your appointment with Dr. Ahmed Hassan is confirmed.\",\n        \"url\": null,\n        \"readAt\": \"2026-09-20T09:00:00+03:00\",\n        \"createdAt\": \"2026-09-19T08:00:00+03:00\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Not Found - notification does not exist",
							"originalRequest": {
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									}
								],
								"url": {
									"raw": "{{base_url}}/notifications/{{notification_id}}/read",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"notifications",
										"{{notification_id}}",
										"read"
									]
								},
								"description": "No body params — notification `id` is in the URL."
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				}
			]
		},
		{
			"name": "Settings",
			"item": [
				{
					"name": "Get Settings",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/settings",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"settings"
							]
						},
						"description": "Public. No body/query params. Returns `companyName`, `socialLinks`, etc."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/settings",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings"
									]
								},
								"description": "Public. No body/query params. Returns `companyName`, `socialLinks`, etc."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"languages\": [\n            \"ar\",\n            \"en\"\n        ],\n        \"currency\": \"EGP\",\n        \"companyName\": \"BST Clinics\",\n        \"app\": {\n            \"minVersionAndroid\": \"1.0.0\",\n            \"minVersionIos\": \"1.0.0\",\n            \"forceUpdate\": false\n        },\n        \"support\": {\n            \"phone\": \"01000000000\",\n            \"whatsapp\": \"01000000000\",\n            \"email\": \"support@bstclinics.com\"\n        },\n        \"socialLinks\": {\n            \"facebook\": \"https://facebook.com/bstclinics\",\n            \"instagram\": \"https://instagram.com/bstclinics\"\n        },\n        \"features\": {\n            \"chatEnabled\": true,\n            \"videoCallEnabled\": false\n        }\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Onboarding Slides",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/settings/onboarding",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"settings",
								"onboarding"
							]
						},
						"description": "Public. No body/query params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/settings/onboarding",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"onboarding"
									]
								},
								"description": "Public. No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"title\": \"Book with ease\",\n            \"subtitle\": \"Find the right doctor in seconds\",\n            \"imageUrl\": \"http://erp.local/uploads/onboarding/slide1.jpg\",\n            \"sortOrder\": 1\n        }\n    ],\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Static Page",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/settings/pages/{{page_type}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"settings",
								"pages",
								"{{page_type}}"
							]
						},
						"description": "Public.\n\n**Path params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| type (in URL) | required | string | e.g. `about`, `terms`, `privacy` — matches whatever page types are seeded |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/settings/pages/{{page_type}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"pages",
										"{{page_type}}"
									]
								},
								"description": "Public.\n\n**Path params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| type (in URL) | required | string | e.g. `about`, `terms`, `privacy` — matches whatever page types are seeded |"
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": {\n        \"title\": \"About Us\",\n        \"content\": \"BST Clinics is a multi-specialty healthcare provider...\",\n        \"imageUrl\": \"http://erp.local/uploads/pages/about.jpg\"\n    },\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Not Found - unknown page type",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/settings/pages/{{page_type}}",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"pages",
										"{{page_type}}"
									]
								},
								"description": "Public.\n\n**Path params**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| type (in URL) | required | string | e.g. `about`, `terms`, `privacy` — matches whatever page types are seeded |"
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"العنصر المطلوب غير موجود\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "FAQs",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/settings/faqs",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"settings",
								"faqs"
							]
						},
						"description": "Public. No body/query params."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"url": {
									"raw": "{{base_url}}/settings/faqs",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"faqs"
									]
								},
								"description": "Public. No body/query params."
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"OK\",\n    \"message\": \"تمت العملية بنجاح\",\n    \"data\": [\n        {\n            \"id\": 1,\n            \"question\": \"How do I book an appointment?\",\n            \"answer\": \"Use the Doctors tab, pick a doctor and an available slot.\",\n            \"category\": \"booking\"\n        }\n    ],\n    \"meta\": {},\n    \"errors\": null\n}"
						}
					]
				},
				{
					"name": "Submit Contact Message",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"email\": \"omnia.test@example.com\",\n  \"phone\": \"01012345678\",\n  \"subject\": \"Question about booking\",\n  \"message\": \"How do I cancel a booking?\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/settings/contact",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"settings",
								"contact"
							]
						},
						"description": "Public.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| email | required | string (email) | max 255 |\n| phone | required | string | max 50 |\n| subject | required | string | max 255 |\n| message | required | string | |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"email\": \"omnia.test@example.com\",\n  \"phone\": \"01012345678\",\n  \"subject\": \"Question about booking\",\n  \"message\": \"How do I cancel a booking?\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/settings/contact",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"contact"
									]
								},
								"description": "Public.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| email | required | string (email) | max 255 |\n| phone | required | string | max 50 |\n| subject | required | string | max 255 |\n| message | required | string | |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - missing required fields",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"name\": \"Omnia Abdallah\",\n  \"email\": \"omnia.test@example.com\",\n  \"phone\": \"01012345678\",\n  \"subject\": \"Question about booking\",\n  \"message\": \"How do I cancel a booking?\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/settings/contact",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"contact"
									]
								},
								"description": "Public.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| name | required | string | max 255 |\n| email | required | string (email) | max 255 |\n| phone | required | string | max 50 |\n| subject | required | string | max 255 |\n| message | required | string | |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"email\": [\n            \"The email field is required.\"\n        ],\n        \"message\": [\n            \"The message field is required.\"\n        ]\n    }\n}"
						}
					]
				},
				{
					"name": "Submit App Review",
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Accept-Language",
								"value": "{{locale}}"
							}
						],
						"body": {
							"mode": "raw",
							"options": {
								"raw": {
									"language": "json"
								}
							},
							"raw": "{\n  \"rating\": 5,\n  \"comment\": \"Great app, very easy to book appointments.\",\n  \"platform\": \"android\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/settings/app-review",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"settings",
								"app-review"
							]
						},
						"description": "Public.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| rating | required | integer | 1 to 5 |\n| comment | optional | string | max 2000 |\n| platform | optional | string | one of: `ios`, `android`, `web` |"
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"rating\": 5,\n  \"comment\": \"Great app, very easy to book appointments.\",\n  \"platform\": \"android\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/settings/app-review",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"app-review"
									]
								},
								"description": "Public.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| rating | required | integer | 1 to 5 |\n| comment | optional | string | max 2000 |\n| platform | optional | string | one of: `ios`, `android`, `web` |"
							},
							"status": "Created",
							"code": 201,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": true,\n    \"code\": \"CREATED\",\n    \"message\": \"تم الإنشاء بنجاح\",\n    \"data\": {},\n    \"meta\": {},\n    \"errors\": null\n}"
						},
						{
							"name": "Validation Error - rating out of range",
							"originalRequest": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [
									{
										"key": "Accept",
										"value": "application/json"
									},
									{
										"key": "Accept-Language",
										"value": "{{locale}}"
									}
								],
								"body": {
									"mode": "raw",
									"options": {
										"raw": {
											"language": "json"
										}
									},
									"raw": "{\n  \"rating\": 5,\n  \"comment\": \"Great app, very easy to book appointments.\",\n  \"platform\": \"android\"\n}"
								},
								"url": {
									"raw": "{{base_url}}/settings/app-review",
									"host": [
										"{{base_url}}"
									],
									"path": [
										"settings",
										"app-review"
									]
								},
								"description": "Public.\n\n**Body fields**\n\n| Field | Required | Type | Notes |\n|---|---|---|---|\n| rating | required | integer | 1 to 5 |\n| comment | optional | string | max 2000 |\n| platform | optional | string | one of: `ios`, `android`, `web` |"
							},
							"status": "Unprocessable Entity",
							"code": 422,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n    \"success\": false,\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"البيانات المدخلة غير صحيحة\",\n    \"data\": null,\n    \"meta\": {},\n    \"errors\": {\n        \"rating\": [\n            \"The rating field must not be greater than 5.\"\n        ]\n    }\n}"
						}
					]
				}
			]
		}
	]
}
