{"swagger": "2.0", "info": {"title": "IDBOOK APIs", "description": "IDBOOKAPI APIs: All APIs for web application, Android/iOS application.\n\nAuthentication in Swagger (`/api/v1/docs/swagger/`):\n1. Generate JWT token from `POST /api/v1/auth/token/` with your credentials.\n2. Copy the `access` token from the response.\n3. Click the `Authorize` button in Swagger UI.\n4. In `Bearer`, enter: `Bearer <access_token>` and click `Authorize`.\n5. Call protected APIs. Re-authorize after token expiry.", "termsOfService": "https://www.google.com/policies/terms/", "contact": {"email": "contact@idbookhotels.com"}, "license": {"name": "BSD License"}, "version": "v1"}, "host": "test.idbookhotels.com", "schemes": ["https"], "basePath": "/api/v1", "consumes": ["application/json"], "produces": ["application/json"], "securityDefinitions": {"Bearer": {"type": "apiKey", "name": "Authorization", "in": "header", "description": "JWT from POST /api/v1/auth/token/. Example: Bearer <access_token>"}, "Basic": {"type": "basic", "description": "HTTP Basic auth (same credentials as Django admin if enabled)."}}, "security": [{"Bearer": []}], "paths": {"/administrator/groups/": {"get": {"operationId": "administrator_groups_list", "description": "List all groups", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Group"}}}}, "tags": ["administrator"]}, "post": {"operationId": "administrator_groups_create", "description": "Create a new group", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Group"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Group"}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/groups/{id}/": {"get": {"operationId": "administrator_groups_read", "description": "Retrieve a single group", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Group"}}}, "tags": ["administrator"]}, "put": {"operationId": "administrator_groups_update", "description": "Update a group", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Group"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Group"}}}, "tags": ["administrator"]}, "patch": {"operationId": "administrator_groups_partial_update", "description": "ViewSet for managing Django Groups", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Group"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Group"}}}, "tags": ["administrator"]}, "delete": {"operationId": "administrator_groups_delete", "description": "Delete a group", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this group.", "required": true, "type": "integer"}]}, "/administrator/permissions/": {"get": {"operationId": "administrator_permissions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Permission"}}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/permissions/{id}/": {"get": {"operationId": "administrator_permissions_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Permission"}}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this permission.", "required": true, "type": "integer"}]}, "/administrator/roles/": {"get": {"operationId": "administrator_roles_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Role"}}}}, "tags": ["administrator"]}, "post": {"operationId": "administrator_roles_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Role"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/roles/{id}/": {"get": {"operationId": "administrator_roles_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "put": {"operationId": "administrator_roles_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Role"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "patch": {"operationId": "administrator_roles_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Role"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "delete": {"operationId": "administrator_roles_delete", "description": "Delete a role", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this role.", "required": true, "type": "integer"}]}, "/administrator/roles/{id}/clone/": {"post": {"operationId": "administrator_roles_clone", "description": "Clone a role to another business", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Role"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this role.", "required": true, "type": "integer"}]}, "/administrator/roles/{id}/permissions/": {"get": {"operationId": "administrator_roles_permissions_read", "description": "Get or update role permissions", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "put": {"operationId": "administrator_roles_permissions_update", "description": "Get or update role permissions", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Role"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Role"}}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this role.", "required": true, "type": "integer"}]}, "/administrator/user-roles/": {"get": {"operationId": "administrator_user-roles_list", "description": "ViewSet for managing UserRole assignments (Super Admin)", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserRole"}}}}, "tags": ["administrator"]}, "post": {"operationId": "administrator_user-roles_create", "description": "ViewSet for managing UserRole assignments (Super Admin)", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserRole"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserRole"}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/user-roles/bulk-assign/": {"post": {"operationId": "administrator_user-roles_bulk_assign", "description": "Bulk assign roles to users", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserRole"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserRole"}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/user-roles/{id}/": {"get": {"operationId": "administrator_user-roles_read", "description": "ViewSet for managing UserRole assignments (Super Admin)", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserRole"}}}, "tags": ["administrator"]}, "put": {"operationId": "administrator_user-roles_update", "description": "Update user role assignment", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserRole"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserRole"}}}, "tags": ["administrator"]}, "patch": {"operationId": "administrator_user-roles_partial_update", "description": "Partial update user role assignment", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserRole"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserRole"}}}, "tags": ["administrator"]}, "delete": {"operationId": "administrator_user-roles_delete", "description": "ViewSet for managing UserRole assignments (Super Admin)", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this User Role Assignment.", "required": true, "type": "integer"}]}, "/administrator/users/": {"get": {"operationId": "administrator_users_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserAdminList"}}}}, "tags": ["administrator"]}, "post": {"operationId": "administrator_users_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/users/export-csv/": {"get": {"operationId": "administrator_users_export_csv", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/User"}}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/users/users-company-details/": {"get": {"operationId": "administrator_users_users_company_details", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/User"}}}}, "tags": ["administrator"]}, "parameters": []}, "/administrator/users/{id}/": {"get": {"operationId": "administrator_users_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserAdminList"}}}, "tags": ["administrator"]}, "put": {"operationId": "administrator_users_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["administrator"]}, "patch": {"operationId": "administrator_users_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/administrator/users/{id}/groups/": {"post": {"operationId": "administrator_users_groups_create", "description": "Assign or remove groups from a user", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["administrator"]}, "put": {"operationId": "administrator_users_groups_update", "description": "Assign or remove groups from a user", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["administrator"]}, "patch": {"operationId": "administrator_users_groups_partial_update", "description": "Assign or remove groups from a user", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["administrator"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/administrator/users/{mobile_number}/roles_and_permissions/": {"get": {"operationId": "administrator_users_roles_and_permissions_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["administrator"]}, "parameters": [{"name": "mobile_number", "in": "path", "description": "Mobile number of the user (10 digits only).", "required": true, "type": "string", "pattern": "^\\+?1?\\d{9,15}$"}]}, "/analytics/property/": {"get": {"operationId": "analytics_property_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyAnalytics"}}}}, "tags": ["analytics"]}, "parameters": []}, "/analytics/property/dashboard/": {"get": {"operationId": "analytics_property_property_analytics_dashboard", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyAnalytics"}}}}, "tags": ["analytics"]}, "parameters": []}, "/analytics/property/stats/": {"get": {"operationId": "analytics_property_get_property_stats", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyAnalytics"}}}}, "tags": ["analytics"]}, "parameters": []}, "/analytics/property/{id}/": {"get": {"operationId": "analytics_property_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyAnalytics"}}}, "tags": ["analytics"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this property analytics.", "required": true, "type": "integer"}]}, "/auth/forgot-password/": {"post": {"operationId": "auth_forgot-password_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/login": {"post": {"operationId": "auth_login_create", "summary": "Login with username/password (multi‑group aware)", "description": "Primary username/password login endpoint.\n\n- Accepts username (email or phone), password, and optional group_name/active_group.\n- If email/mobile verification is pending, this will trigger OTPs and respond with HTTP 307 and `verification_required` payload instead of tokens.\n- On success, returns JWT access/refresh and user representation including active_group.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Login"}}], "responses": {"200": {"description": "Login successful, JWT tokens returned"}, "307": {"description": "Email/mobile verification required, OTPs sent. Client should guide user through OTP verification flow."}, "400": {"description": "Invalid credentials or mobile verification required"}, "401": {"description": "Authentication failed"}}, "tags": ["Auth - Login (Password)"], "security": []}, "parameters": []}, "/auth/logout": {"post": {"operationId": "auth_logout_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/otp/": {"get": {"operationId": "auth_otp_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserSignup"}}}}, "tags": ["auth"]}, "post": {"operationId": "auth_otp_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/otp/generate-otp/": {"post": {"operationId": "auth_otp_generate_otp", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/otp/login/": {"post": {"operationId": "auth_otp_otp_based_user_login", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/otp/signup/": {"post": {"operationId": "auth_otp_otp_based_user_signup", "summary": "OTP-based signup (single endpoint)", "description": "OTP-first signup flow using mobile/email and group_name.\n\nTypical flow:\n1. Frontend calls OTP send endpoint for SIGNUP (mobile/email).\n2. User enters OTP.\n3. Frontend calls this endpoint with email, mobile_number, name, otp, group_name and optional referred_code.\n4. On success, user is created/attached to the group and tokens are returned.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["mobile_number", "otp", "group_name"], "type": "object", "properties": {"email": {"description": "User email (optional but recommended)", "type": "string", "format": "email"}, "mobile_number": {"description": "User mobile number (required, validated)", "type": "string"}, "name": {"description": "Display name", "type": "string"}, "otp": {"description": "OTP received by the user for SIGNUP", "type": "string"}, "referred_code": {"description": "Optional referral code", "type": "string"}, "group_name": {"description": "Target group identifier (e.g. B2C-GRP, B2B-GRP)", "type": "string", "default": "B2C-GRP"}}}}], "responses": {"200": {"description": "Signup/login successful, JWT tokens and user data returned"}, "400": {"description": "Invalid data"}, "406": {"description": "OTP, email or group validation error"}}, "tags": ["Auth - Signup (OTP only)"], "security": []}, "parameters": []}, "/auth/otp/verify-otp/": {"post": {"operationId": "auth_otp_verify_otp", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/otp/{id}/": {"get": {"operationId": "auth_otp_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "put": {"operationId": "auth_otp_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_otp_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/auth/password/": {"get": {"operationId": "auth_password_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserSignup"}}}}, "tags": ["auth"]}, "post": {"operationId": "auth_password_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/password/otp-reset/": {"post": {"operationId": "auth_password_otp_based_password_reset", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/password/profile-reset/": {"post": {"operationId": "auth_password_profile_password_reset", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/password/{id}/": {"get": {"operationId": "auth_password_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "put": {"operationId": "auth_password_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_password_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "delete": {"operationId": "auth_password_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/auth/permissions/check": {"get": {"operationId": "auth_permissions_check_list", "description": "API endpoint to check if user has a specific permission", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/reset-password/": {"post": {"operationId": "auth_reset-password_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/reset-password/token": {"post": {"operationId": "auth_reset-password_token_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/": {"get": {"operationId": "auth_signup_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserSignup"}}}}, "tags": ["auth"]}, "post": {"operationId": "auth_signup_create", "summary": "Signup with OTP verification (username/password flow)", "description": "Signup a new user into a specific group (for example B2C, B2B) using email + mobile OTPs.\n\nFlow:\n1. Frontend calls the OTP send endpoints (email and mobile) for SIGNUP.\n2. User enters email/mobile OTPs.\n3. Frontend calls this endpoint with email, mobile_number, otp, otp_mobile, password and group_name.\n4. On success, returns JWT tokens and user representation bound to the requested group.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "Signup successful, JWT tokens returned"}, "400": {"description": "Validation error"}, "401": {"description": "Email already exists for this group"}, "406": {"description": "OTP or group validation error"}}, "tags": ["Auth - Signup (Password + OTP)"], "security": []}, "parameters": []}, "/auth/signup/buser/email-otp/": {"post": {"operationId": "auth_signup_buser_email_otp_based_buser_signup", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/customer/": {"post": {"operationId": "auth_signup_company_based_customer_signup", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/customer/signup-link/": {"post": {"operationId": "auth_signup_customer_customer_signup_link", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/customer/signup-link/process/": {"post": {"operationId": "auth_signup_customer_signup-link_customer_signup_link_process", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/email/generate-otp/": {"post": {"operationId": "auth_signup_email_generate_email_otp", "description": "Need to delete the code", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/social/": {"get": {"operationId": "auth_signup_social_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserList"}}}}, "tags": ["auth"]}, "post": {"operationId": "auth_signup_social_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/signup/social/google/": {"post": {"operationId": "auth_signup_social_google_based_authentication", "summary": "Google login/signup (per group)", "description": "Authenticate or signup a user using a Google ID token, optionally binding them to a given group.\n\nFlow:\n1. Frontend obtains Google ID token from Google SDK.\n2. Frontend calls this endpoint with id_token, optional group_name, mobile_number and referred_code.\n3. If the email already exists in the given group, this acts as LOGIN and returns tokens.\n4. If not, this acts as SIGNUP into that group and returns tokens.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["id_token"], "type": "object", "properties": {"id_token": {"description": "Google ID token from client-side Google auth", "type": "string"}, "group_name": {"description": "Target group identifier (e.g. B2C-GRP, B2B-GRP)", "type": "string", "default": "B2C-GRP"}, "mobile_number": {"description": "Optional mobile number to attach to user within the group", "type": "string"}, "referred_code": {"description": "Optional referral code", "type": "string"}}}}], "responses": {"200": {"description": "Google auth successful, JWT tokens and user representation returned"}, "400": {"description": "Missing or invalid token / email"}, "406": {"description": "Group or mobile validation error"}}, "tags": ["Auth - Social (Google)"], "security": []}, "parameters": []}, "/auth/signup/social/{id}/": {"get": {"operationId": "auth_signup_social_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "put": {"operationId": "auth_signup_social_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_signup_social_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/auth/signup/{id}/": {"get": {"operationId": "auth_signup_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "put": {"operationId": "auth_signup_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_signup_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSignup"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSignup"}}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/auth/token/": {"post": {"operationId": "auth_token_create", "description": "Takes a set of user credentials and returns an access and refresh JSON web\ntoken pair to prove the authentication of those credentials.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TokenObtainPair"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TokenObtainPair"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/token/refresh/": {"post": {"operationId": "auth_token_refresh_create", "description": "Takes a refresh type JSON web token and returns an access type JSON web\ntoken if the refresh token is valid.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TokenRefresh"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TokenRefresh"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/token/verify/": {"post": {"operationId": "auth_token_verify_create", "description": "Takes a token and indicates if it is valid.  This view provides no\ninformation about a token's fitness for a particular use.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TokenVerify"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TokenVerify"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/permissions": {"get": {"operationId": "auth_user_permissions_list", "description": "API endpoint to get all permissions for a user in a business", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/": {"get": {"operationId": "auth_user_profile_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserList"}}}}, "tags": ["auth"]}, "post": {"operationId": "auth_user_profile_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/billed-to-user/": {"post": {"operationId": "auth_user_profile_billed_to_user", "description": "Create a new user with group and role assignment for billing purposes", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/default/group/": {"post": {"operationId": "auth_user_profile_default_update_default_group", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/detail/": {"get": {"operationId": "auth_user_profile_get_user_profile_detail", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserList"}}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/ensure-linked-entities/": {"post": {"operationId": "auth_user_profile_ensure_linked_entities", "summary": "Ensure group-specific entity rows exist for the current user.", "description": "Use this for cases where a user already belongs to CORPORATE-GRP / AGENT-GRP\nbut their `CompanyDetail` / `AgentDetail` was never created (or was deleted).\nThis endpoint is idempotent.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/referral/": {"get": {"operationId": "auth_user_profile_get_referral_link", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserList"}}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/referral/summary/": {"get": {"operationId": "auth_user_profile_referral_get_referral_summary", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserList"}}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/referral/users/": {"get": {"operationId": "auth_user_profile_referral_get_referral_user", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserList"}}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/switch-group/": {"post": {"operationId": "auth_user_profile_switch_active_group", "description": "Switch active group and get new tokens with the selected group.\nThis allows users to have different active groups in different sessions.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/update-groups-roles/": {"post": {"operationId": "auth_user_profile_update_user_groups_roles", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/user/profile/{id}/": {"get": {"operationId": "auth_user_profile_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "put": {"operationId": "auth_user_profile_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_user_profile_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "delete": {"operationId": "auth_user_profile_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/auth/user/profile/{id}/billed-to-user/": {"patch": {"operationId": "auth_user_profile_update_billed_to_user", "description": "Update billed client details by user id.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserList"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserList"}}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/auth/user/profile/{id}/delete_user/": {"delete": {"operationId": "auth_user_profile_delete_user", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/booking/applied-coupons/": {"get": {"operationId": "booking_applied-coupons_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AppliedCoupon"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_applied-coupons_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AppliedCoupon"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AppliedCoupon"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/applied-coupons/{id}/": {"get": {"operationId": "booking_applied-coupons_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AppliedCoupon"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_applied-coupons_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AppliedCoupon"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AppliedCoupon"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_applied-coupons_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AppliedCoupon"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AppliedCoupon"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this applied coupon.", "required": true, "type": "integer"}]}, "/booking/bookings/": {"get": {"operationId": "booking_bookings_list", "description": "List Booking Based on User Roles", "parameters": [{"name": "booking_type", "in": "query", "description": "booking type.", "required": false, "type": "string", "enum": ["HOLIDAYPACK", "HOTEL", "VEHICLE", "FLIGHT", "VISA", "EVENT"]}, {"name": "status", "in": "query", "required": false, "type": "string", "enum": ["pending", "payment_pending_verification", "confirmed", "canceled", "completed", "no_show", "on_hold"]}, {"name": "company_id", "in": "query", "required": false, "type": "integer"}, {"name": "user_id", "in": "query", "required": false, "type": "integer"}, {"name": "offset", "in": "query", "required": false, "type": "integer"}, {"name": "limit", "in": "query", "required": false, "type": "integer"}, {"name": "search", "in": "query", "description": "Available columns: confirmation_code", "required": false, "type": "string", "minLength": 1}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Booking"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_bookings_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/bulk-delete/": {"post": {"operationId": "booking_bookings_bulk_delete", "description": "Delete many bookings in one request.\nClears payment/invoice/refund logs (DO_NOTHING FKs) and delinks queries.\nOnly bookings visible after the same role filters as list() can be deleted.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/create-customer-eligibility/": {"post": {"operationId": "booking_bookings_create_customer_eligibility", "description": "Admin API to create Pay At Hotel eligibility record (only create, not update)", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/flight-payment/payu-failure/": {"post": {"operationId": "booking_bookings_flight-payment_flight_payment_payu_failure", "description": "Handle PayU failure callback for flight bookings", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/flight-payment/payu-success/": {"post": {"operationId": "booking_bookings_flight-payment_flight_payment_payu_success", "description": "Handle PayU success callback for flight bookings", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/flight-payment/phonepe-callback/": {"post": {"operationId": "booking_bookings_flight-payment_flight_payment_phonepe_callback", "description": "Handle PhonePe payment callback for flight bookings", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/guest/view/": {"get": {"operationId": "booking_bookings_guest_view_guest_booking", "description": "Public endpoint for guest users to view their booking.\nSupports two authentication methods:\n1. guest_token: Secure token sent via email (recommended)\n2. confirmation_code + email: Fallback method\n\nQuery Parameters:\n    - guest_token: Guest access token (preferred method)\n    - confirmation_code: Booking confirmation code\n    - email: Email address associated with the booking", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Booking"}}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/hotel-transactions/": {"get": {"operationId": "booking_bookings_pay_at_hotel_transactions", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Booking"}}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/hotel/booking-caclulation/": {"post": {"operationId": "booking_bookings_hotel_hotel_booking_calculation", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/hotel/pre-confirm/": {"post": {"operationId": "booking_bookings_hotel_hotel_pre_confirm_booking", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/my-flights/": {"get": {"operationId": "booking_bookings_get_user_flight_bookings", "description": "Get user's flight bookings with filters", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Booking"}}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/phone-pay/refundcallbackurl/": {"post": {"operationId": "booking_bookings_phone-pay_phone_pay_refund_callbackurl", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/summary/": {"get": {"operationId": "booking_bookings_booking_summary", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Booking"}}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/update-customer-eligibility/": {"patch": {"operationId": "booking_bookings_update_customer_eligibility", "description": "Admin API to update Pay At Hotel eligibility record for a user and month", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/user/retrieve/": {"get": {"operationId": "booking_bookings_user_user_based_retrieve", "description": "User Based Booking Retrieve", "parameters": [{"name": "booking_type", "in": "query", "description": "booking type.", "required": false, "type": "string", "enum": ["HOLIDAYPACK", "HOTEL", "VEHICLE", "FLIGHT", "VISA", "EVENT"]}, {"name": "status", "in": "query", "required": false, "type": "string", "enum": ["pending", "payment_pending_verification", "confirmed", "canceled", "completed", "no_show", "on_hold"]}, {"name": "offset", "in": "query", "required": false, "type": "integer"}, {"name": "limit", "in": "query", "required": false, "type": "integer"}, {"name": "search", "in": "query", "description": "Available columns: confirmation_code", "required": false, "type": "string", "minLength": 1}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Booking"}}}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/verify-flight-booking/": {"post": {"operationId": "booking_bookings_verify_flight_booking", "description": "Verify guest flight booking with OTP and complete booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["booking_id", "otp"], "type": "object", "properties": {"booking_id": {"description": "Booking ID", "type": "integer"}, "otp": {"description": "OTP from email", "type": "string"}, "email": {"description": "Email address", "type": "string"}}}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}, "400": {"description": "Invalid OTP or booking data"}, "404": {"description": "Booking not found"}}, "tags": ["booking"]}, "parameters": []}, "/booking/bookings/{id}/": {"get": {"operationId": "booking_bookings_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_bookings_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_bookings_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_bookings_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/apply-coupon/": {"patch": {"operationId": "booking_bookings_apply_coupon_pre_booking", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/cancel/": {"patch": {"operationId": "booking_bookings_cancel_booking", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/confirm/": {"patch": {"operationId": "booking_bookings_confirm_booking", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-details/": {"get": {"operationId": "booking_bookings_get_flight_booking_details", "description": "Get comprehensive flight booking details", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-payment/initiate/": {"post": {"operationId": "booking_bookings_flight-payment_initiate_flight_payment", "description": "Initiate payment for flight booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-payment/methods/": {"get": {"operationId": "booking_bookings_flight-payment_get_flight_payment_methods", "description": "Get available payment methods for flight booking", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-schedule/check/": {"post": {"operationId": "booking_bookings_flight-schedule_check_flight_schedule_updates", "description": "Check for flight schedule updates", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-status/": {"get": {"operationId": "booking_bookings_get_flight_booking_status", "description": "Get current flight booking status", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-status/update/": {"post": {"operationId": "booking_bookings_flight-status_update_flight_status_from_airiq", "description": "Update flight booking status from AirIQ", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/flight-timeline/": {"get": {"operationId": "booking_bookings_get_flight_booking_timeline", "description": "Get flight booking timeline", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/hold/": {"patch": {"operationId": "booking_bookings_hold_booking", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/refund/": {"post": {"operationId": "booking_bookings_manual_refund", "description": "Manually trigger refund for a booking (e.g. when flight booking failed but payment was collected).\nStaff/admin only. Supports Wallet and Razorpay. PhonePe must be refunded via cancel flow or gateway.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/update-checkinout/": {"patch": {"operationId": "booking_bookings_update_checkin_checkout", "description": "Update check-in/check-out status of a booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BookingCheckInOut"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/bookings/{id}/update-payment/": {"post": {"operationId": "booking_bookings_update_hotel_payment", "description": "Update payment details for a booking that was marked as pay-at-hotel.\nThis API is for hoteliers to update payment information after receiving payment.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Booking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Booking"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/event-bookings/": {"get": {"operationId": "booking_event-bookings_list", "description": "Admin ViewSet for EventBooking management", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/EventBooking"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_event-bookings_create", "description": "Admin ViewSet for EventBooking management", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EventBooking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/EventBooking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/event-bookings/{id}/": {"get": {"operationId": "booking_event-bookings_read", "description": "Admin ViewSet for EventBooking management", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EventBooking"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_event-bookings_update", "description": "Admin ViewSet for EventBooking management", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EventBooking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EventBooking"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_event-bookings_partial_update", "description": "Admin ViewSet for EventBooking management", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EventBooking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EventBooking"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_event-bookings_delete", "description": "Admin ViewSet for EventBooking management", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this event booking.", "required": true, "type": "integer"}]}, "/booking/flight-bookings/ancillary/phonepe-callback/": {"post": {"operationId": "booking_flight-bookings_ancillary_ancillary_phonepe_callback", "description": "Handle PhonePe callback for SSR payment", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["booking"]}, "parameters": []}, "/booking/flight-bookings/create-booking/": {"post": {"operationId": "booking_flight-bookings_create_booking", "description": "Create flight booking with automatic pricing validation", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["TrackId", "PaxDetailsInfo", "AddressDetails"], "type": "object", "properties": {"session_id": {"description": "Optional: Pricing session ID from search", "type": "string"}, "TrackId": {"description": "AirIQ Track ID for pricing", "type": "string"}, "AdultCount": {"type": "integer", "default": 1}, "ChildCount": {"type": "integer", "default": 0}, "InfantCount": {"type": "integer", "default": 0}, "TripType": {"type": "string", "enum": ["O", "R"], "default": "O"}, "BaseOrigin": {"description": "Origin airport code", "type": "string"}, "BaseDestination": {"description": "Destination airport code", "type": "string"}, "ItineraryFlightsInfo": {"type": "array", "items": {"type": "object", "properties": {"Token": {"type": "string"}, "PaymentInfo": {"type": "array", "items": {"type": "object", "properties": {"TotalAmount": {"type": "string"}}}}}}}, "PaxDetailsInfo": {"type": "array", "items": {"type": "object", "properties": {"PaxRefNumber": {"type": "string"}, "Title": {"type": "string", "enum": ["MR", "MRS", "MISS", "MS", "MSTR", "DR"]}, "FirstName": {"type": "string"}, "LastName": {"type": "string"}, "DOB": {"type": "string"}, "Gender": {"type": "string", "enum": ["Male", "Female"]}, "PaxType": {"type": "string", "enum": ["ADT", "CHD", "INF"]}, "PassportNo": {"type": "string"}, "PassportExpiry": {"type": "string"}, "InfantRef": {"type": "string"}}}}, "AddressDetails": {"type": "object", "properties": {"CountryCode": {"type": "string", "default": "91"}, "ContactNumber": {"type": "string"}, "EmailID": {"type": "string", "format": "email"}}}, "GSTInfo": {"type": "object", "properties": {"GSTNumber": {"type": "string"}, "GSTCompanyName": {"type": "string"}, "GSTAddress": {"type": "string"}, "GSTEmailID": {"type": "string"}, "GSTMobileNumber": {"type": "string"}}}, "BlockPNR": {"type": "boolean", "default": false}, "guest_booking": {"type": "boolean", "default": false}, "otp": {"description": "OTP for guest booking verification", "type": "string"}, "company_id": {"description": "Company ID (required for corporate users)", "type": "integer"}}}}], "responses": {"201": {"description": "Booking created successfully - payment required", "schema": {"type": "object", "properties": {"success": {"type": "boolean"}, "data": {"type": "object", "properties": {"booking_id": {"type": "integer"}, "booking_reference": {"type": "string"}, "status": {"type": "string"}, "total_amount": {"type": "number"}, "payment_expires_at": {"type": "string", "format": "datetime"}, "payment_lock_duration": {"description": "Minutes", "type": "integer"}}}}}}, "400": {"description": "Invalid request data or insufficient balance"}, "402": {"description": "Payment required"}, "500": {"description": "Booking creation failed"}}, "tags": ["booking"]}, "parameters": []}, "/booking/flight-bookings/razorpay/verify/": {"post": {"operationId": "booking_flight-bookings_razorpay_razorpay_verify", "summary": "Verify Razorpay payment for flight bookings (ticket issuance, reschedule, SSR)", "description": "This endpoint verifies the payment signature, fetches payment details,\nand processes the appropriate action based on transaction type.", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["booking"]}, "parameters": []}, "/booking/flight-bookings/razorpay/webhook/": {"post": {"operationId": "booking_flight-bookings_razorpay_razorpay_webhook", "summary": "Handle Razorpay webhook for flight payments", "description": "Events handled:\n- payment.captured: Payment successful\n- payment.failed: Payment failed", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["booking"]}, "parameters": []}, "/booking/flight-bookings/reschedule/phonepe-callback/": {"post": {"operationId": "booking_flight-bookings_reschedule_reschedule_phonepe_callback", "description": "Handle PhonePe callback for reschedule payment", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["booking"]}, "parameters": []}, "/booking/flight-bookings/ticket/phonepe-callback/": {"post": {"operationId": "booking_flight-bookings_ticket_ticket_phonepe_callback", "description": "Handle PhonePe callback for ticket issuance payment", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["booking"]}, "parameters": []}, "/booking/flight-bookings/{booking_id}/airiq/retrieve/": {"get": {"operationId": "booking_flight-bookings_airiq_airiq_retrieve_booking", "description": "Retrieve booking details from AirIQ and update local records (missing fields only)", "parameters": [{"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"200": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{booking_id}/airiq/track-status/": {"get": {"operationId": "booking_flight-bookings_airiq_airiq_track_status", "description": "Track booking status from AirIQ and update local records (missing fields only)", "parameters": [{"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"200": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{booking_id}/cancel-hold/": {"post": {"operationId": "booking_flight-bookings_cancel_hold", "description": "Cancel held booking (BlockPNR). This endpoint is specifically for cancelling bookings that are in HELD status before ticket issuance.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"type": "object", "properties": {"airiq_pnr": {"description": "AirIQ PNR (optional, will use booking's PNR if not provided)", "type": "string"}, "airline_pnr": {"description": "Airline PNR (optional, will use booking's PNR if not provided)", "type": "string"}, "guest_token": {"description": "Guest access token (required for guest bookings, optional for authenticated users)", "type": "string"}}}}, {"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"200": {"description": "Hold cancellation processed successfully", "schema": {"type": "object", "properties": {"success": {"type": "boolean"}, "message": {"type": "string"}, "data": {"type": "object", "properties": {"cancel_status": {"type": "string"}, "remarks": {"type": "string"}, "booking_status": {"type": "string"}, "airiq_response": {"description": "Hold cancel response from AirIQ", "type": "object"}}}}}}, "400": {"description": "Bad request - booking not in HELD status or missing PNRs"}, "404": {"description": "Booking not found"}, "500": {"description": "AirIQ service error"}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{booking_id}/cancel/": {"post": {"operationId": "booking_flight-bookings_cancel_booking", "description": "Cancel flight booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"type": "object", "properties": {"flag": {"description": "PENALTY to check cancellation penalty, CANCEL to cancel booking", "type": "string", "enum": ["PENALTY", "CANCEL"], "default": "CANCEL"}, "remarks": {"description": "Cancellation remarks (optional)", "type": "string"}, "guest_token": {"description": "Guest access token (required for guest bookings, optional for authenticated users)", "type": "string"}}}}, {"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"200": {"description": "Cancellation processed successfully", "schema": {"type": "object", "properties": {"success": {"type": "boolean"}, "message": {"type": "string"}, "data": {"type": "object", "properties": {"cancellation_response": {"description": "Cancellation response from AirIQ", "type": "object"}, "booking_status": {"type": "string"}}}}}}, "400": {"description": "Bad request"}, "404": {"description": "Booking not found"}, "500": {"description": "AirIQ service error"}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{booking_id}/reschedule/availability/": {"post": {"operationId": "booking_flight-bookings_reschedule_reschedule_availability", "description": "Get reschedule availability for a booking. For round-trip, provide flights array with onward and return details.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"type": "object", "properties": {"flights": {"description": "Array of flight segments to reschedule (for round-trip, include both onward and return)", "type": "array", "items": {"type": "object", "properties": {"flight_date": {"description": "YYYY-MM-DD", "type": "string"}, "departure_station": {"description": "3-letter IATA code", "type": "string"}, "arrival_station": {"description": "3-letter IATA code", "type": "string"}}}}, "flight_date": {"description": "YYYY-MM-DD (for single flight/backward compatibility)", "type": "string"}, "departure_station": {"description": "IATA origin (backward compatibility)", "type": "string"}, "arrival_station": {"description": "IATA destination (backward compatibility)", "type": "string"}, "remarks": {"type": "string"}}}}, {"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"201": {"description": "", "schema": {"type": "object", "properties": {"flights": {"description": "Array of flight segments to reschedule (for round-trip, include both onward and return)", "type": "array", "items": {"type": "object", "properties": {"flight_date": {"description": "YYYY-MM-DD", "type": "string"}, "departure_station": {"description": "3-letter IATA code", "type": "string"}, "arrival_station": {"description": "3-letter IATA code", "type": "string"}}}}, "flight_date": {"description": "YYYY-MM-DD (for single flight/backward compatibility)", "type": "string"}, "departure_station": {"description": "IATA origin (backward compatibility)", "type": "string"}, "arrival_station": {"description": "IATA destination (backward compatibility)", "type": "string"}, "remarks": {"type": "string"}}}}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{booking_id}/reschedule/confirm/": {"post": {"operationId": "booking_flight-bookings_reschedule_reschedule_confirm", "description": "Confirm reschedule for a booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["track_id", "flight_details", "contact_no"], "type": "object", "properties": {"track_id": {"type": "string"}, "contact_no": {"type": "string"}, "remarks": {"type": "string"}, "flag": {"description": "Flag to check fare or confirm reschedule. Default: CHECKFARE. When CONFIRM, payment_channel is required.", "type": "string", "enum": ["CHECKFARE", "CONFIRM"], "default": "CHECKFARE"}, "payment_channel": {"description": "Required when flag is CONFIRM. Payment method to use.", "type": "string", "enum": ["WALLET", "PHONE PAY"]}, "redirect_url": {"description": "Required when payment_channel is PHONE PAY. URL to redirect after payment.", "type": "string"}, "flight_details": {"type": "object", "properties": {"origin": {"type": "string"}, "destination": {"type": "string"}, "trip_type": {"type": "string", "enum": ["O", "R", "Y"]}, "segments": {"type": "array", "items": {"type": "object"}}, "base_amount": {"type": "number"}, "gross_amount": {"type": "number"}}}}}}, {"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"201": {"description": "", "schema": {"required": ["track_id", "flight_details", "contact_no"], "type": "object", "properties": {"track_id": {"type": "string"}, "contact_no": {"type": "string"}, "remarks": {"type": "string"}, "flag": {"description": "Flag to check fare or confirm reschedule. Default: CHECKFARE. When CONFIRM, payment_channel is required.", "type": "string", "enum": ["CHECKFARE", "CONFIRM"], "default": "CHECKFARE"}, "payment_channel": {"description": "Required when flag is CONFIRM. Payment method to use.", "type": "string", "enum": ["WALLET", "PHONE PAY"]}, "redirect_url": {"description": "Required when payment_channel is PHONE PAY. URL to redirect after payment.", "type": "string"}, "flight_details": {"type": "object", "properties": {"origin": {"type": "string"}, "destination": {"type": "string"}, "trip_type": {"type": "string", "enum": ["O", "R", "Y"]}, "segments": {"type": "array", "items": {"type": "object"}}, "base_amount": {"type": "number"}, "gross_amount": {"type": "number"}}}}}}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{booking_id}/ticket/": {"post": {"operationId": "booking_flight-bookings_issue_ticket", "description": "Issue ticket for confirmed flight booking", "parameters": [{"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"200": {"description": "Ticket issued successfully", "schema": {"type": "object", "properties": {"success": {"type": "boolean"}, "message": {"type": "string"}, "data": {"type": "object", "properties": {"ticket_response": {"description": "Ticketing response from AirIQ", "type": "object"}, "booking_status": {"type": "string"}}}}}}, "400": {"description": "Bad request"}, "404": {"description": "Booking not found"}, "500": {"description": "AirIQ service error"}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{id}/ancillary/add-ssr/": {"post": {"operationId": "booking_flight-bookings_ancillary_add_ssr", "description": "Add SSR (ancillary) selections to an existing booking. Supports WALLET and PHONE PAY payment methods.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["TracKID"], "type": "object", "properties": {"TracKID": {"description": "TrackId from GetSSR response", "type": "string"}, "AirIqPNR": {"description": "Override AirIQ PNR (optional)", "type": "string"}, "AirlinePNR": {"description": "Override Airline PNR (optional)", "type": "string"}, "Remarks": {"type": "string"}, "MealsSSR": {"type": "array", "items": {"type": "object"}}, "BaggSSR": {"type": "array", "items": {"type": "object"}}, "SeatsSSR": {"type": "array", "items": {"type": "object"}}, "OtherSSR": {"type": "array", "items": {"type": "object"}}, "Payment": {"type": "array", "items": {"type": "object", "properties": {"PaymentMode": {"type": "string", "default": "T"}, "Amount": {"type": "string"}}}}, "payment_channel": {"description": "Payment method", "type": "string", "enum": ["WALLET", "PHONE PAY"]}, "redirect_url": {"description": "Redirect URL for PhonePe payment", "type": "string"}}}}], "responses": {"200": {"description": "Updated booking snapshot and AirIQ response"}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{id}/ancillary/get-ssr/": {"post": {"operationId": "booking_flight-bookings_ancillary_get_ssr_options", "description": "Get available SSR (ancillary) options for a confirmed/held booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"type": "object", "properties": {"AirIqPNR": {"description": "Override AirIQ PNR (optional)", "type": "string"}, "AirlinePNR": {"description": "Override Airline PNR (optional)", "type": "string"}}}}], "responses": {"200": {"description": "SSR options with TrackId and price data"}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/booking/flight-bookings/{id}/status/": {"get": {"operationId": "booking_flight-bookings_get_booking_status", "description": "Get booking status and details", "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "integer"}], "responses": {"200": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/booking/invoices/": {"get": {"operationId": "booking_invoices_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Invoice"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_invoices_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Invoice"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Invoice"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/invoices/generate-invoice-number/": {"post": {"operationId": "booking_invoices_generate_invoice_number", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Invoice"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Invoice"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/invoices/summary/": {"get": {"operationId": "booking_invoices_summary", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Invoice"}}}}, "tags": ["booking"]}, "parameters": []}, "/booking/invoices/{id}/": {"get": {"operationId": "booking_invoices_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Invoice"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_invoices_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Invoice"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Invoice"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_invoices_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Invoice"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Invoice"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_invoices_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this invoice.", "required": true, "type": "integer"}]}, "/booking/legacy-flight-bookings/{booking_id}/seatmap/": {"get": {"operationId": "booking_legacy-flight-bookings_get_seat_map", "description": "Get seat map for flight booking", "parameters": [{"name": "booking_id", "in": "path", "description": "Flight booking ID", "required": true, "type": "integer"}], "responses": {"200": {"description": "Seat map retrieved successfully", "schema": {"type": "object", "properties": {"success": {"type": "boolean"}, "message": {"type": "string"}, "data": {"type": "object", "properties": {"seat_map": {"description": "Seat map data from AirIQ", "type": "object"}}}}}}, "400": {"description": "Bad request"}, "404": {"description": "Booking not found"}, "500": {"description": "AirIQ service error"}}, "tags": ["booking"]}, "parameters": [{"name": "booking_id", "in": "path", "required": true, "type": "string"}]}, "/booking/payment/": {"get": {"operationId": "booking_payment_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BookingPaymentDetail"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_payment_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/payment/initiate/": {"post": {"operationId": "booking_payment_phone_pay_call_initiate", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/payment/phone-pay/callbackurl/": {"post": {"operationId": "booking_payment_phone-pay_phone_pay_callbackurl", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/payment/razorpay/verify/": {"post": {"operationId": "booking_payment_razorpay_razorpay_verify_payment", "summary": "Verify Razorpay payment and confirm booking", "description": "Verify Razorpay payment and confirm booking", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["razorpay_order_id", "razorpay_payment_id", "razorpay_signature"], "type": "object", "properties": {"razorpay_order_id": {"type": "string"}, "razorpay_payment_id": {"type": "string"}, "razorpay_signature": {"type": "string"}}}}], "responses": {"200": {"description": "Payment verified and booking confirmed"}, "400": {"description": "Validation/signature/payment status error"}, "404": {"description": "Order or booking not found"}, "500": {"description": "Verification error"}}, "tags": ["booking"]}, "parameters": []}, "/booking/payment/razorpay/webhook/": {"post": {"operationId": "booking_payment_razorpay_razorpay_webhook", "summary": "Razorpay webhook callback", "description": "Handle Razorpay webhook events", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"description": "Raw Razorpay webhook payload", "type": "object"}}, {"name": "X-Razorpay-Signature", "in": "header", "description": "Razorpay webhook signature", "required": true, "type": "string"}], "responses": {"200": {"description": "Webhook processed successfully"}, "400": {"description": "Invalid signature or malformed payload"}, "500": {"description": "Webhook processing error"}}, "tags": ["booking"]}, "parameters": []}, "/booking/payment/{id}/": {"get": {"operationId": "booking_payment_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_payment_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_payment_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BookingPaymentDetail"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_payment_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking payment detail.", "required": true, "type": "integer"}]}, "/booking/property-payment-info/": {"get": {"operationId": "booking_property-payment-info_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyPaymentBooking"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_property-payment-info_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/property-payment-info/{id}/": {"get": {"operationId": "booking_property-payment-info_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_property-payment-info_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_property-payment-info_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyPaymentBooking"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_property-payment-info_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this booking.", "required": true, "type": "integer"}]}, "/booking/queries/": {"get": {"operationId": "booking_queries_list", "description": "Standard response for query list with pagination support.", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Query"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_queries_create", "description": "Create a new query", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/queries/{id}/": {"get": {"operationId": "booking_queries_read", "description": "Standard response for single query detail.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_queries_update", "description": "Update a query – return standard response structure.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_queries_partial_update", "description": "Unified ViewSet for all query types\nStandard REST API - minimal custom actions", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_queries_delete", "description": "Delete a query – return standard response structure.", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this query.", "required": true, "type": "integer"}]}, "/booking/queries/{id}/add-communication/": {"post": {"operationId": "booking_queries_add_communication", "description": "Add communication note/history", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this query.", "required": true, "type": "integer"}]}, "/booking/queries/{id}/assign-business-user/": {"patch": {"operationId": "booking_queries_assign_business_user", "summary": "Assign query to BUSINESS-GRP user", "description": "Manual assignment of query to a BUSINESS-GRP user.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["assigned_to_user_id"], "type": "object", "properties": {"assigned_to_user_id": {"type": "integer"}, "referred_by_user_id": {"description": "Optional referral owner for performance tracking", "type": "integer"}, "referral_type": {"description": "Optional referral classification", "type": "string", "enum": ["EMPLOYEE", "USER", "AGENT"]}}}}], "responses": {"200": {"description": "Query assigned"}, "400": {"description": "Validation error"}, "403": {"description": "Permission denied"}, "404": {"description": "User not found"}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this query.", "required": true, "type": "integer"}]}, "/booking/queries/{id}/convert-to-booking/": {"post": {"operationId": "booking_queries_convert_to_booking", "description": "Convert query to booking (admin only)", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this query.", "required": true, "type": "integer"}]}, "/booking/queries/{id}/create-proforma-invoice/": {"post": {"operationId": "booking_queries_create_proforma_invoice", "description": "Create or update proforma invoice for query (admin only).\nRequires quotation (quote_amount) to be set. Uses quotation, user info, and\nquery data to generate a proper invoice for all query types (HOTEL, VISA, EVENT,\nVEHICLE, HOLIDAYPACK, FLIGHT).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this query.", "required": true, "type": "integer"}]}, "/booking/queries/{id}/upload-document/": {"post": {"operationId": "booking_queries_upload_document", "summary": "Upload document to query's invoice (admin only)", "description": "Request body:\n- document_type: proforma_pdf, invoice_pdf, receipt_pdf, credit_note_pdf, voucher_pdf, other\n- file: The file to upload (multipart form data)\n- name: (optional) Document name for 'other' type", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Query"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Query"}}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this query.", "required": true, "type": "integer"}]}, "/booking/razorpay-payment/": {"get": {"operationId": "booking_razorpay-payment_list", "description": "Render payment page with optional order_id, razorpay_key, amount, etc.", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["booking"]}, "parameters": []}, "/booking/reviews/": {"get": {"operationId": "booking_reviews_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Review"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_reviews_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Review"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Review"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/reviews/overall-rating/property/": {"post": {"operationId": "booking_reviews_overall-rating_property_overall_rating", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Review"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Review"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/reviews/{id}/": {"get": {"operationId": "booking_reviews_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Review"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_reviews_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Review"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Review"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_reviews_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Review"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Review"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_reviews_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this review.", "required": true, "type": "integer"}]}, "/booking/visa-bookings/": {"get": {"operationId": "booking_visa-bookings_list", "description": "Admin ViewSet for VisaBooking management", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/VisaBooking"}}}}, "tags": ["booking"]}, "post": {"operationId": "booking_visa-bookings_create", "description": "Admin ViewSet for VisaBooking management", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/VisaBooking"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/VisaBooking"}}}, "tags": ["booking"]}, "parameters": []}, "/booking/visa-bookings/{id}/": {"get": {"operationId": "booking_visa-bookings_read", "description": "Admin ViewSet for VisaBooking management", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/VisaBooking"}}}, "tags": ["booking"]}, "put": {"operationId": "booking_visa-bookings_update", "description": "Admin ViewSet for VisaBooking management", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/VisaBooking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/VisaBooking"}}}, "tags": ["booking"]}, "patch": {"operationId": "booking_visa-bookings_partial_update", "description": "Admin ViewSet for VisaBooking management", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/VisaBooking"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/VisaBooking"}}}, "tags": ["booking"]}, "delete": {"operationId": "booking_visa-bookings_delete", "description": "Admin ViewSet for VisaBooking management", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["booking"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this visa booking.", "required": true, "type": "integer"}]}, "/coupons/coupon-campaigns/": {"get": {"operationId": "coupons_coupon-campaigns_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CouponCampaign"}}}}, "tags": ["coupons"]}, "post": {"operationId": "coupons_coupon-campaigns_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponCampaign"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CouponCampaign"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-campaigns/bulk-delete/": {"post": {"operationId": "coupons_coupon-campaigns_bulk_delete", "description": "Bulk deactivate (active=False) or permanently delete campaigns (admin only).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponCampaign"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CouponCampaign"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-campaigns/{id}/": {"get": {"operationId": "coupons_coupon-campaigns_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponCampaign"}}}, "tags": ["coupons"]}, "put": {"operationId": "coupons_coupon-campaigns_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponCampaign"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponCampaign"}}}, "tags": ["coupons"]}, "patch": {"operationId": "coupons_coupon-campaigns_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponCampaign"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponCampaign"}}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this coupon campaign.", "required": true, "type": "integer"}]}, "/coupons/coupon-claims/": {"get": {"operationId": "coupons_coupon-claims_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CouponClaim"}}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-claims/{id}/": {"get": {"operationId": "coupons_coupon-claims_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponClaim"}}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this applied coupon.", "required": true, "type": "integer"}]}, "/coupons/coupon-partners/": {"get": {"operationId": "coupons_coupon-partners_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CouponPartner"}}}}, "tags": ["coupons"]}, "post": {"operationId": "coupons_coupon-partners_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponPartner"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CouponPartner"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-partners/bulk-delete/": {"post": {"operationId": "coupons_coupon-partners_bulk_delete", "description": "Bulk deactivate (active=False) or permanently delete partners (admin only).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponPartner"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CouponPartner"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-partners/{id}/": {"get": {"operationId": "coupons_coupon-partners_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponPartner"}}}, "tags": ["coupons"]}, "put": {"operationId": "coupons_coupon-partners_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponPartner"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponPartner"}}}, "tags": ["coupons"]}, "patch": {"operationId": "coupons_coupon-partners_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponPartner"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponPartner"}}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this coupon partner.", "required": true, "type": "integer"}]}, "/coupons/coupon-redemptions/": {"get": {"operationId": "coupons_coupon-redemptions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CouponRedemption"}}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-redemptions/{id}/": {"get": {"operationId": "coupons_coupon-redemptions_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponRedemption"}}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this coupon redemption.", "required": true, "type": "integer"}]}, "/coupons/coupon-slabs/": {"get": {"operationId": "coupons_coupon-slabs_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CouponAmountSlab"}}}}, "tags": ["coupons"]}, "post": {"operationId": "coupons_coupon-slabs_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponAmountSlab"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CouponAmountSlab"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-slabs/bulk-delete/": {"post": {"operationId": "coupons_coupon-slabs_bulk_delete", "description": "Permanently delete amount slabs (admin only). Slabs have no active flag.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponAmountSlab"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CouponAmountSlab"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupon-slabs/{id}/": {"get": {"operationId": "coupons_coupon-slabs_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponAmountSlab"}}}, "tags": ["coupons"]}, "put": {"operationId": "coupons_coupon-slabs_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponAmountSlab"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponAmountSlab"}}}, "tags": ["coupons"]}, "patch": {"operationId": "coupons_coupon-slabs_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CouponAmountSlab"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CouponAmountSlab"}}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this coupon amount slab.", "required": true, "type": "integer"}]}, "/coupons/coupons/": {"get": {"operationId": "coupons_coupons_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Coupon"}}}}, "tags": ["coupons"]}, "post": {"operationId": "coupons_coupons_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Coupon"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Coupon"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupons/bulk-delete/": {"post": {"operationId": "coupons_coupons_bulk_delete", "summary": "Bulk deactivate (active=False) or permanently delete coupons.", "description": "Pass hard_delete=true (or permanent=true) to remove rows from the DB (admin only).\nCASCADE removes related redemptions, user claims, and applied-coupon rows.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Coupon"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Coupon"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupons/bulk-generate/": {"post": {"operationId": "coupons_coupons_bulk_generate", "summary": "Bulk generate partner coupon codes", "description": "Generate N coupon codes sharing the same campaign (prefix e.g. IDB-MAT-).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["campaign_id", "count"], "type": "object", "properties": {"campaign_id": {"type": "integer"}, "count": {"type": "integer", "maximum": 5000, "minimum": 1}, "code_prefix": {"type": "string", "default": "IDB-MAT-"}, "max_redemptions_total": {"description": "Optional per-coupon total redemption limit for each generated code.", "type": "integer", "minimum": 0}, "max_redemptions_per_user": {"description": "Optional per-coupon per-user redemption limit for each generated code.", "type": "integer", "minimum": 0}, "max_total_discount_budget": {"description": "Optional per-coupon total discount budget cap for each generated code.", "type": "number"}}}}], "responses": {"201": {"description": "Coupons generated"}, "400": {"description": "Validation error"}, "404": {"description": "Campaign not found"}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupons/validity/": {"post": {"operationId": "coupons_coupons_check_coupon_validity", "summary": "Validate coupon for amount/context", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["code"], "type": "object", "properties": {"code": {"type": "string"}, "booking_type": {"type": "string", "default": "HOTEL"}, "amount": {"type": "number"}, "user": {"type": "integer"}, "checkin_date": {"type": "string", "format": "date"}, "booking_date": {"type": "string", "format": "date"}}}}], "responses": {"200": {"description": "Coupon valid"}, "400": {"description": "Coupon invalid or bad payload"}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/coupons/{id}/": {"get": {"operationId": "coupons_coupons_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Coupon"}}}, "tags": ["coupons"]}, "put": {"operationId": "coupons_coupons_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Coupon"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Coupon"}}}, "tags": ["coupons"]}, "patch": {"operationId": "coupons_coupons_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Coupon"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Coupon"}}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this coupon.", "required": true, "type": "integer"}]}, "/coupons/user-coupon-claims/": {"get": {"operationId": "coupons_user-coupon-claims_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserCouponClaim"}}}}, "tags": ["coupons"]}, "post": {"operationId": "coupons_user-coupon-claims_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserCouponClaim"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserCouponClaim"}}}, "tags": ["coupons"]}, "parameters": []}, "/coupons/user-coupon-claims/{id}/": {"get": {"operationId": "coupons_user-coupon-claims_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserCouponClaim"}}}, "tags": ["coupons"]}, "patch": {"operationId": "coupons_user-coupon-claims_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserCouponClaim"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserCouponClaim"}}}, "tags": ["coupons"]}, "delete": {"operationId": "coupons_user-coupon-claims_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["coupons"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user coupon claim.", "required": true, "type": "integer"}]}, "/customer/customers/": {"get": {"operationId": "customer_customers_list", "description": "List Customer Based on User Roles", "parameters": [{"name": "company_id", "in": "query", "required": false, "type": "integer"}, {"name": "user_id", "in": "query", "required": false, "type": "integer"}, {"name": "group_name", "in": "query", "description": "Group for the customer.", "required": false, "type": "string", "enum": ["ORG", "ADMIN", "DEFAULT"]}, {"name": "department", "in": "query", "required": false, "type": "string", "maxLength": 30, "x-nullable": true}, {"name": "privileged", "in": "query", "description": "Whether the customer is privileged.", "required": false, "type": "boolean"}, {"name": "active", "in": "query", "description": "Whether the customer is active.", "required": false, "type": "boolean"}, {"name": "offset", "in": "query", "required": false, "type": "integer"}, {"name": "limit", "in": "query", "required": false, "type": "integer"}, {"name": "search", "in": "query", "description": "Available columns: employee_id", "required": false, "type": "string", "minLength": 1}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Customer"}}}}, "tags": ["customer"]}, "post": {"operationId": "customer_customers_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Customer"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Customer"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/customers/user-based/retrieve/": {"get": {"operationId": "customer_customers_user-based_user_based_retrieve", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Customer"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/customers/user-based/update/": {"post": {"operationId": "customer_customers_user-based_user_based_update", "description": "", "parameters": [{"name": "address", "in": "formData", "description": "Full address", "required": false, "type": "string", "x-nullable": true}, {"name": "gender", "in": "formData", "description": "Select the gender of the customer.", "required": false, "type": "string", "enum": ["Male", "Female", "Other"], "x-nullable": true}, {"name": "date_of_birth", "in": "formData", "description": "Enter the date of birth of the customer.", "required": false, "type": "string", "format": "date", "x-nullable": true}, {"name": "profile_picture", "in": "formData", "required": false, "type": "file", "x-nullable": true}, {"name": "id_proof_type", "in": "formData", "required": false, "type": "string", "enum": ["ADHAR CARD", "VOTER ID CARD", "DRIVING LICENCE", "Others"], "x-nullable": true}, {"name": "id_proof", "in": "formData", "required": false, "type": "file", "x-nullable": true}, {"name": "pan_card", "in": "formData", "required": false, "type": "file", "x-nullable": true}, {"name": "pan_card_number", "in": "formData", "required": false, "type": "string", "maxLength": 20, "x-nullable": true}, {"name": "gstin", "in": "formData", "required": false, "type": "string", "maxLength": 20, "x-nullable": true}, {"name": "aadhar_card", "in": "formData", "required": false, "type": "file", "x-nullable": true}, {"name": "aadhar_card_number", "in": "formData", "required": false, "type": "string", "maxLength": 20, "x-nullable": true}, {"name": "loyalty_points", "in": "formData", "description": "Total loyalty points earned by the customer.", "required": false, "type": "integer", "maximum": 2147483647, "minimum": 0}, {"name": "membership_status", "in": "formData", "description": "Check if the customer has a membership.", "required": false, "type": "boolean"}, {"name": "emergency_contact_name", "in": "formData", "description": "Name of the customer's emergency contact person.", "required": false, "type": "string", "maxLength": 100, "x-nullable": true}, {"name": "emergency_contact_phone", "in": "formData", "description": "Phone number of the customer's emergency contact.", "required": false, "type": "string", "maxLength": 10, "x-nullable": true}, {"name": "preferred_language", "in": "formData", "description": "Preferred language of communication for the customer.", "required": false, "type": "string", "enum": ["English", "Hindi"], "x-nullable": true}, {"name": "dietary_restrictions", "in": "formData", "description": "Any dietary restrictions or preferences for the customer.", "required": false, "type": "string", "x-nullable": true}, {"name": "special_requests", "in": "formData", "description": "Any special requests or notes from the customer.", "required": false, "type": "string", "x-nullable": true}, {"name": "group_name", "in": "formData", "description": "Group for the customer.", "required": false, "type": "string", "enum": ["ORG", "ADMIN", "DEFAULT"]}, {"name": "employee_id", "in": "formData", "required": false, "type": "string", "maxLength": 20, "x-nullable": true}, {"name": "department", "in": "formData", "required": false, "type": "string", "maxLength": 30, "x-nullable": true}, {"name": "privileged", "in": "formData", "description": "Whether the customer is privileged.", "required": false, "type": "boolean"}, {"name": "active", "in": "formData", "description": "Whether the customer is active.", "required": false, "type": "boolean"}, {"name": "state", "in": "formData", "required": false, "type": "string", "maxLength": 50}, {"name": "country", "in": "formData", "required": false, "type": "string", "maxLength": 50}, {"name": "user", "in": "formData", "description": "user profile in user table", "required": true, "type": "integer"}, {"name": "added_user", "in": "formData", "description": "Confirmed / Added User", "required": false, "type": "integer", "x-nullable": true}, {"name": "primary_agent", "in": "formData", "description": "Primary agent for this customer (most recent or manually set)", "required": false, "type": "integer", "x-nullable": true}, {"name": "agents", "in": "formData", "description": "Agents linked to this customer (can have multiple)", "required": false, "type": "array", "items": {"type": "integer"}, "uniqueItems": true}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Customer"}}}, "consumes": ["multipart/form-data"], "tags": ["customer"]}, "parameters": []}, "/customer/customers/{id}/": {"get": {"operationId": "customer_customers_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Customer"}}}, "tags": ["customer"]}, "put": {"operationId": "customer_customers_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Customer"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Customer"}}}, "tags": ["customer"]}, "patch": {"operationId": "customer_customers_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Customer"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Customer"}}}, "tags": ["customer"]}, "delete": {"operationId": "customer_customers_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this customer.", "required": true, "type": "integer"}]}, "/customer/customers/{id}/inactive/": {"delete": {"operationId": "customer_customers_make_customer_inactive", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this customer.", "required": true, "type": "integer"}]}, "/customer/wallet-transaction/": {"get": {"operationId": "customer_wallet-transaction_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/WalletTransaction"}}}}, "tags": ["customer"]}, "post": {"operationId": "customer_wallet-transaction_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/WalletTransaction"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet-transaction/admin/stats/": {"get": {"operationId": "customer_wallet-transaction_admin_admin_transactions_stats", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/WalletTransaction"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet-transaction/admin/transactions/": {"get": {"operationId": "customer_wallet-transaction_admin_admin_all_transactions", "description": "List all wallet transactions (finance admin only).", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/WalletTransaction"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet-transaction/agent/search/": {"get": {"operationId": "customer_wallet-transaction_agent_search_customers_for_agent", "description": "Search existing customers to link to agent", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/WalletTransaction"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet-transaction/agent/{agent_id}/customers/": {"get": {"operationId": "customer_wallet-transaction_agent_agent_customers", "description": "List all customers linked to an agent", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/WalletTransaction"}}}}, "tags": ["customer"]}, "parameters": [{"name": "agent_id", "in": "path", "description": "Agent this transaction belongs to", "required": true, "type": "string"}]}, "/customer/wallet-transaction/user/": {"get": {"operationId": "customer_wallet-transaction_user_based_wallet_transaction", "description": "List Wallet Transaction Based on User", "parameters": [{"name": "user_id", "in": "query", "required": false, "type": "integer", "minimum": 1}, {"name": "company_id", "in": "query", "required": false, "type": "integer", "minimum": 1}, {"name": "agent_id", "in": "query", "required": false, "type": "integer", "minimum": 1}, {"name": "transaction_type", "in": "query", "required": false, "type": "string", "enum": ["Credit", "Debit"]}, {"name": "transaction_for", "in": "query", "required": false, "type": "string"}, {"name": "payment_type", "in": "query", "required": false, "type": "string"}, {"name": "payment_medium", "in": "query", "required": false, "type": "string"}, {"name": "status", "in": "query", "required": false, "type": "string"}, {"name": "is_transaction_success", "in": "query", "required": false, "type": "boolean"}, {"name": "search", "in": "query", "required": false, "type": "string"}, {"name": "start_date", "in": "query", "required": false, "type": "string", "format": "date"}, {"name": "end_date", "in": "query", "required": false, "type": "string", "format": "date"}, {"name": "ordering", "in": "query", "description": "Comma separated fields. Allowed: created, updated, amount, status, transaction_type, transaction_id, payment_medium, payment_type", "required": false, "type": "string"}, {"name": "offset", "in": "query", "required": false, "type": "integer", "default": 0, "minimum": 0}, {"name": "limit", "in": "query", "required": false, "type": "integer", "default": 10, "maximum": 100, "minimum": 1}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/WalletTransaction"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet-transaction/{id}/": {"get": {"operationId": "customer_wallet-transaction_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "put": {"operationId": "customer_wallet-transaction_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/WalletTransaction"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "patch": {"operationId": "customer_wallet-transaction_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/WalletTransaction"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "delete": {"operationId": "customer_wallet-transaction_delete", "description": "Block generic DELETE; finance admins use .../admin/?wallet_id= instead.", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet transaction.", "required": true, "type": "integer"}]}, "/customer/wallet-transaction/{id}/admin/": {"patch": {"operationId": "customer_wallet-transaction_admin_partial_update", "description": "Finance admin: PATCH partial update or DELETE; wallet_id query verifies ledger scope.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/WalletTransaction"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "delete": {"operationId": "customer_wallet-transaction_admin_delete", "description": "Finance admin: PATCH partial update or DELETE; wallet_id query verifies ledger scope.", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet transaction.", "required": true, "type": "integer"}]}, "/customer/wallet-transaction/{id}/link-agent/": {"post": {"operationId": "customer_wallet-transaction_link_agent", "description": "Explicitly link customer to agent", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/WalletTransaction"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet transaction.", "required": true, "type": "integer"}]}, "/customer/wallet-transaction/{id}/unlink-agent/": {"post": {"operationId": "customer_wallet-transaction_unlink_agent", "description": "Remove agent from customer", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/WalletTransaction"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/WalletTransaction"}}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet transaction.", "required": true, "type": "integer"}]}, "/customer/wallet/": {"get": {"operationId": "customer_wallet_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "post": {"operationId": "customer_wallet_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/admin/funds-summary/": {"get": {"operationId": "customer_wallet_admin_admin_wallet_funds_summary", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/admin/summary/": {"get": {"operationId": "customer_wallet_admin_admin_wallet_dashboard_summary", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/admin/wallets/": {"get": {"operationId": "customer_wallet_admin_admin_wallet_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/approve-recharge/": {"post": {"operationId": "customer_wallet_approve_wallet_recharge", "description": "API for admin to approve wallet recharge requests\nAdmin verifies the amount and approves the transaction", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/balance/": {"get": {"operationId": "customer_wallet_user_based_wallet_retrieve", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/pending-recharges/": {"get": {"operationId": "customer_wallet_list_pending_recharges", "description": "List wallet recharge requests (bank transfer flow). Use query param `status` (Pending | Completed | Failed); omit it to default to Pending. Filter by `wallet_owner` (b2c | company | agent), ids, dates, etc.", "parameters": [{"name": "user_id", "in": "query", "required": false, "type": "integer", "x-nullable": true}, {"name": "company_id", "in": "query", "required": false, "type": "integer", "x-nullable": true}, {"name": "agent_id", "in": "query", "required": false, "type": "integer", "x-nullable": true}, {"name": "offset", "in": "query", "required": false, "type": "integer", "default": 0, "minimum": 0}, {"name": "limit", "in": "query", "required": false, "type": "integer", "default": 10, "maximum": 100, "minimum": 1}, {"name": "transaction_id", "in": "query", "required": false, "type": "string"}, {"name": "payment_type", "in": "query", "required": false, "type": "string"}, {"name": "payment_medium", "in": "query", "required": false, "type": "string"}, {"name": "status", "in": "query", "description": "Pending | Completed | Failed (defaults to Pending when omitted)", "required": false, "type": "string"}, {"name": "wallet_owner", "in": "query", "description": "b2c | company | agent — filter by wallet scope", "required": false, "type": "string"}, {"name": "start_date", "in": "query", "description": "Filter by start date (YYYY-MM-DD)", "required": false, "type": "string", "format": "date", "x-nullable": true}, {"name": "end_date", "in": "query", "description": "Filter by end date (YYYY-MM-DD)", "required": false, "type": "string", "format": "date", "x-nullable": true}, {"name": "search", "in": "query", "description": "Search by user name, email, mobile, transaction_id", "required": false, "type": "string"}, {"name": "ordering", "in": "query", "description": "Order by field (e.g., '-created', 'amount', '-amount')", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PendingRecharge"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/pending-recharges/{id}/reject/": {"post": {"operationId": "customer_wallet_pending-recharges_reject_create", "description": "POST /api/v1/customer/wallet/pending-recharges/<pk>/reject/\npk = WalletTransaction primary key (same as Bank Transfers admin table id).", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/customer/wallet/phone-pay/callbackurl/": {"post": {"operationId": "customer_wallet_phone-pay_phone_pay_callbackurl", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/razorpay/verify/": {"post": {"operationId": "customer_wallet_razorpay_razorpay_wallet_verify", "description": "Verify Razorpay payment for wallet recharge", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/razorpay/webhook/": {"post": {"operationId": "customer_wallet_razorpay_razorpay_wallet_webhook", "description": "Handle Razorpay webhook for wallet recharge", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/recharge/": {"post": {"operationId": "customer_wallet_wallet_recharge", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/recharge/fee-preview/": {"get": {"operationId": "customer_wallet_recharge_wallet_recharge_fee_preview", "description": "Estimate Razorpay processing fee; bank-transfer path has zero fee.", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/wallet-recharge/": {"post": {"operationId": "customer_wallet_wallet_bank_recharge", "description": "API for wallet recharge through bank transfer\nUser uploads payment proof image along with transaction details\nSupports user, company, and agent wallets", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": []}, "/customer/wallet/{id}/": {"get": {"operationId": "customer_wallet_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "put": {"operationId": "customer_wallet_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "patch": {"operationId": "customer_wallet_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "delete": {"operationId": "customer_wallet_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet.", "required": true, "type": "integer"}]}, "/customer/wallet/{id}/admin-summary/": {"get": {"operationId": "customer_wallet_admin_wallet_summary", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Wallet"}}}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet.", "required": true, "type": "integer"}]}, "/customer/wallet/{id}/admin-transactions/": {"get": {"operationId": "customer_wallet_admin-transactions_read", "description": "Finance admin: list or create transactions scoped to this wallet.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "post": {"operationId": "customer_wallet_admin-transactions_create", "description": "Finance admin: list or create transactions scoped to this wallet.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet.", "required": true, "type": "integer"}]}, "/customer/wallet/{id}/admin/": {"patch": {"operationId": "customer_wallet_admin_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "delete": {"operationId": "customer_wallet_admin_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet.", "required": true, "type": "integer"}]}, "/customer/wallet/{id}/reconcile-balance/": {"post": {"operationId": "customer_wallet_admin_reconcile_wallet_balance", "description": "Set wallet.balance from sum(Credit) - sum(Debit) over Completed successful ledger rows.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Wallet"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Wallet"}}}, "tags": ["customer"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this wallet.", "required": true, "type": "integer"}]}, "/flights/airiq-proxy/endpoints/": {"get": {"operationId": "flights_airiq-proxy_list_endpoints", "description": "Generic proxy for AirIQ API endpoints.\n- No auth required: handles AirIQ login/token internally\n- Injects AgentInfo automatically if missing\n- Call with: POST /api/v1/flights/airiq-proxy/<EndpointName>/\n  Example: POST /api/v1/flights/airiq-proxy/Availability/", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/airiq-proxy/{endpoint}/": {"post": {"operationId": "flights_proxy", "description": "Pure proxy endpoint - passes request to AirIQ API and returns raw response.\nOnly injects AgentInfo if missing in the payload.", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": [{"name": "endpoint", "in": "path", "required": true, "type": "string"}]}, "/flights/legacy-search/airlines/": {"get": {"operationId": "flights_legacy-search_list_airlines", "description": "List all active airlines", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/legacy-search/airports/": {"get": {"operationId": "flights_legacy-search_list_airports", "description": "List all active airports", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/legacy-search/search/": {"post": {"operationId": "flights_legacy-search_search_flights", "description": "Search for available flights\nPOST /api/v1/flights/search/", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/pricing/account-balance/": {"get": {"operationId": "flights_pricing_get_account_balance", "description": "Get agent account balance from AirIQ\nGET /api/v1/flights/pricing/account-balance/", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/pricing/fare-rules/": {"post": {"operationId": "flights_pricing_get_fare_rules", "description": "Get fare rules for specific flights", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/pricing/multi-class-fare/": {"post": {"operationId": "flights_pricing_get_multi_class_fare", "description": "Get fare for specific class\nPOST /api/v1/flights/pricing/multi-class-fare/", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/pricing/multi-class/": {"post": {"operationId": "flights_pricing_get_multi_class", "description": "Get available classes for flights\nPOST /api/v1/flights/pricing/multi-class/", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/pricing/price/": {"post": {"operationId": "flights_pricing_price_flight", "description": "Get detailed pricing for selected flight\nPOST /api/v1/flights/pricing/price/", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/pricing/seatmap/": {"post": {"operationId": "flights_pricing_get_seat_map", "description": "Get seat map for selected flight segments\nPOST /api/v1/flights/pricing/seatmap/", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/airlines/": {"get": {"operationId": "flights_search_list_airlines", "description": "Search and filter airlines (backed by OpenFlights data)", "parameters": [{"name": "search", "in": "query", "description": "Free-text search across code, ICAO, name, alias, callsign, country", "type": "string"}, {"name": "country", "in": "query", "description": "Filter by country (case-insensitive contains)", "type": "string"}, {"name": "iata", "in": "query", "description": "Filter by IATA code (exact match)", "type": "string"}, {"name": "icao", "in": "query", "description": "Filter by ICAO code (exact match)", "type": "string"}, {"name": "active", "in": "query", "description": "Filter by OpenFlights active flag (Y/N)", "type": "string"}, {"name": "is_active", "in": "query", "description": "Filter by internal is_active flag (true/false). Defaults to true.", "type": "boolean"}, {"name": "limit", "in": "query", "description": "Maximum number of records to return (max 200)", "type": "integer", "default": 50}], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/airports/": {"get": {"operationId": "flights_search_list_airports", "description": "Get list of airports", "parameters": [{"name": "search", "in": "query", "description": "Search by IATA code, name, or city", "type": "string"}, {"name": "country", "in": "query", "description": "Filter by country", "type": "string"}, {"name": "limit", "in": "query", "type": "integer", "default": 50}], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/availability/": {"post": {"operationId": "flights_search_flight_availability", "description": "Search flights and create pricing session", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["origin", "destination", "departure_date", "adults"], "type": "object", "properties": {"origin": {"description": "3-letter IATA origin code", "type": "string"}, "destination": {"description": "3-letter IATA destination code", "type": "string"}, "departure_date": {"description": "Departure date (YYYY-MM-DD)", "type": "string"}, "return_date": {"description": "Return date for round trip (YYYY-MM-DD)", "type": "string"}, "trip_type": {"type": "string", "enum": ["O", "R"], "default": "O"}, "adults": {"type": "integer", "default": 1, "maximum": 9, "minimum": 1}, "children": {"type": "integer", "default": 0, "maximum": 8, "minimum": 0}, "infants": {"type": "integer", "default": 0, "maximum": 4, "minimum": 0}, "flight_class": {"type": "string", "enum": ["E", "B", "F"], "default": "E"}, "direct_only": {"type": "boolean", "default": false}}}}], "responses": {"200": {"description": "Flight search results with pricing session", "schema": {"type": "object", "properties": {"success": {"type": "boolean"}, "data": {"type": "object", "properties": {"session_id": {"type": "string"}, "track_id": {"type": "string"}, "flight_options": {"type": "array", "items": {"type": "object"}}, "expires_at": {"type": "string"}, "time_remaining": {"type": "integer"}}}}}}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/booking-total/": {"post": {"operationId": "flights_search_calculate_booking_total", "description": "Calculate final booking total with GST and all charges", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["session_id"], "type": "object", "properties": {"session_id": {"type": "string"}, "gst_info": {"type": "object", "properties": {"gst_number": {"type": "string"}, "company_name": {"type": "string"}, "address": {"type": "string"}, "email": {"type": "string"}, "mobile": {"type": "string"}}}}}}], "responses": {"201": {"description": "", "schema": {"required": ["session_id"], "type": "object", "properties": {"session_id": {"type": "string"}, "gst_info": {"type": "object", "properties": {"gst_number": {"type": "string"}, "company_name": {"type": "string"}, "address": {"type": "string"}, "email": {"type": "string"}, "mobile": {"type": "string"}}}}}}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/extend-session/": {"post": {"operationId": "flights_search_extend_session", "description": "Extend pricing session expiry", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["session_id"], "type": "object", "properties": {"session_id": {"type": "string"}, "minutes": {"type": "integer", "default": 5, "maximum": 15, "minimum": 1}}}}], "responses": {"201": {"description": "", "schema": {"required": ["session_id"], "type": "object", "properties": {"session_id": {"type": "string"}, "minutes": {"type": "integer", "default": 5, "maximum": 15, "minimum": 1}}}}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/pricing/": {"post": {"operationId": "flights_search_get_detailed_pricing", "description": "Get detailed pricing for selected flights with ancillary services", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["search_params", "selected_flights"], "type": "object", "properties": {"search_params": {"description": "Original search parameters from availability", "type": "object"}, "selected_flights": {"description": "Selected flight with fare option from availability results", "type": "array", "items": {"type": "object"}}, "session_id": {"description": "Optional existing session ID", "type": "string"}, "ancillary_services": {"type": "object", "properties": {"seats": {"type": "array", "items": {"type": "object"}}, "meals": {"type": "array", "items": {"type": "object"}}, "baggage": {"type": "array", "items": {"type": "object"}}, "other": {"type": "array", "items": {"type": "object"}}}}}}}], "responses": {"201": {"description": "", "schema": {"required": ["search_params", "selected_flights"], "type": "object", "properties": {"search_params": {"description": "Original search parameters from availability", "type": "object"}, "selected_flights": {"description": "Selected flight with fare option from availability results", "type": "array", "items": {"type": "object"}}, "session_id": {"description": "Optional existing session ID", "type": "string"}, "ancillary_services": {"type": "object", "properties": {"seats": {"type": "array", "items": {"type": "object"}}, "meals": {"type": "array", "items": {"type": "object"}}, "baggage": {"type": "array", "items": {"type": "object"}}, "other": {"type": "array", "items": {"type": "object"}}}}}}}}, "tags": ["flights"]}, "parameters": []}, "/flights/search/seat-map/": {"get": {"operationId": "flights_search_get_seat_map", "description": "Get seat map for selected flights", "parameters": [{"name": "session_id", "in": "query", "required": true, "type": "string"}], "responses": {"200": {"description": ""}}, "tags": ["flights"]}, "parameters": []}, "/holiday-package/customer-tour-enquiries/": {"get": {"operationId": "holiday-package_customer-tour-enquiries_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CustomerTourEnquiry"}}}}, "tags": ["holiday-package"]}, "post": {"operationId": "holiday-package_customer-tour-enquiries_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CustomerTourEnquiry"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CustomerTourEnquiry"}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/customer-tour-enquiries/{id}/": {"get": {"operationId": "holiday-package_customer-tour-enquiries_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CustomerTourEnquiry"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this customer tour enquiry.", "required": true, "type": "integer"}]}, "/holiday-package/tour-accommodations/": {"get": {"operationId": "holiday-package_tour-accommodations_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Accommodation"}}}}, "tags": ["holiday-package"]}, "post": {"operationId": "holiday-package_tour-accommodations_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Accommodation"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Accommodation"}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/tour-accommodations/{id}/": {"get": {"operationId": "holiday-package_tour-accommodations_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Accommodation"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this accommodation.", "required": true, "type": "integer"}]}, "/holiday-package/tour-bank-details/": {"get": {"operationId": "holiday-package_tour-bank-details_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TourBankDetail"}}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/tour-bank-details/{id}/": {"get": {"operationId": "holiday-package_tour-bank-details_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TourBankDetail"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this tour bank detail.", "required": true, "type": "integer"}]}, "/holiday-package/tour-daily-plans/": {"get": {"operationId": "holiday-package_tour-daily-plans_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/DailyPlan"}}}}, "tags": ["holiday-package"]}, "post": {"operationId": "holiday-package_tour-daily-plans_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/DailyPlan"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/DailyPlan"}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/tour-daily-plans/{id}/": {"get": {"operationId": "holiday-package_tour-daily-plans_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/DailyPlan"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this daily plan.", "required": true, "type": "integer"}]}, "/holiday-package/tour-inclusions-exclusions/": {"get": {"operationId": "holiday-package_tour-inclusions-exclusions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/InclusionExclusion"}}}}, "tags": ["holiday-package"]}, "post": {"operationId": "holiday-package_tour-inclusions-exclusions_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/InclusionExclusion"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/InclusionExclusion"}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/tour-inclusions-exclusions/{id}/": {"get": {"operationId": "holiday-package_tour-inclusions-exclusions_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/InclusionExclusion"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this inclusion exclusion.", "required": true, "type": "integer"}]}, "/holiday-package/tour-package-detail/{id}": {"get": {"operationId": "holiday-package_tour-package-detail_read", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/holiday-package/tour-packages/": {"get": {"operationId": "holiday-package_tour-packages_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TourPackage"}}}}, "tags": ["holiday-package"]}, "post": {"operationId": "holiday-package_tour-packages_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TourPackage"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TourPackage"}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/tour-packages/{id}/": {"get": {"operationId": "holiday-package_tour-packages_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TourPackage"}}}, "tags": ["holiday-package"]}, "put": {"operationId": "holiday-package_tour-packages_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TourPackage"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TourPackage"}}}, "tags": ["holiday-package"]}, "patch": {"operationId": "holiday-package_tour-packages_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TourPackage"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TourPackage"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this tour package.", "required": true, "type": "integer"}]}, "/holiday-package/tour-vehicles/": {"get": {"operationId": "holiday-package_tour-vehicles_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Vehicle"}}}}, "tags": ["holiday-package"]}, "post": {"operationId": "holiday-package_tour-vehicles_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Vehicle"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Vehicle"}}}, "tags": ["holiday-package"]}, "parameters": []}, "/holiday-package/tour-vehicles/{id}/": {"get": {"operationId": "holiday-package_tour-vehicles_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Vehicle"}}}, "tags": ["holiday-package"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this vehicle.", "required": true, "type": "integer"}]}, "/hotels/amenity-category/": {"get": {"operationId": "hotels_amenity-category_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/HotelAmenityCategory"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_amenity-category_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/amenity-category/{id}/": {"get": {"operationId": "hotels_amenity-category_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_amenity-category_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_amenity-category_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/HotelAmenityCategory"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this hotel amenity category.", "required": true, "type": "integer"}]}, "/hotels/block/property/": {"get": {"operationId": "hotels_block_property_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BlockedProperty"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_block_property_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BlockedProperty"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BlockedProperty"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/block/property/room-list/": {"post": {"operationId": "hotels_block_property_retrieve_available_room", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BlockedProperty"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BlockedProperty"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/block/property/{id}/": {"get": {"operationId": "hotels_block_property_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BlockedProperty"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_block_property_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BlockedProperty"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BlockedProperty"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_block_property_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BlockedProperty"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BlockedProperty"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_block_property_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this blocked property.", "required": true, "type": "integer"}]}, "/hotels/block/property/{id}/active/": {"patch": {"operationId": "hotels_block_property_make_active_or_inactive", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BlockedProperty"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BlockedProperty"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this blocked property.", "required": true, "type": "integer"}]}, "/hotels/calendar/": {"get": {"operationId": "hotels_calendar_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CalendarRoom"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_calendar_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CalendarRoom"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CalendarRoom"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/calendar/{id}/": {"get": {"operationId": "hotels_calendar_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CalendarRoom"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_calendar_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CalendarRoom"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CalendarRoom"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_calendar_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CalendarRoom"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CalendarRoom"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_calendar_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this calendar room.", "required": true, "type": "integer"}]}, "/hotels/financial-details/": {"get": {"operationId": "hotels_financial-details_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/FinancialDetail"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_financial-details_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FinancialDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/FinancialDetail"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/financial-details/{id}/": {"get": {"operationId": "hotels_financial-details_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FinancialDetail"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_financial-details_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FinancialDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FinancialDetail"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_financial-details_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FinancialDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FinancialDetail"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this financial detail.", "required": true, "type": "integer"}]}, "/hotels/galleries/": {"get": {"operationId": "hotels_galleries_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Gallery"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_galleries_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Gallery"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Gallery"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/galleries/{id}/": {"get": {"operationId": "hotels_galleries_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Gallery"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_galleries_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Gallery"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Gallery"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_galleries_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Gallery"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Gallery"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this gallery.", "required": true, "type": "integer"}]}, "/hotels/inclusions/": {"get": {"operationId": "hotels_inclusions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Inclusion"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_inclusions_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Inclusion"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Inclusion"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/inclusions/{id}/": {"get": {"operationId": "hotels_inclusions_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Inclusion"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_inclusions_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Inclusion"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Inclusion"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_inclusions_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Inclusion"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Inclusion"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this inclusion.", "required": true, "type": "integer"}]}, "/hotels/landmarks/": {"get": {"operationId": "hotels_landmarks_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyLandmark"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_landmarks_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyLandmark"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PropertyLandmark"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/landmarks/{id}/": {"get": {"operationId": "hotels_landmarks_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyLandmark"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_landmarks_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyLandmark"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyLandmark"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_landmarks_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyLandmark"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyLandmark"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_landmarks_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this property landmark.", "required": true, "type": "integer"}]}, "/hotels/payout/": {"get": {"operationId": "hotels_payout_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyPayoutDetails"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_payout_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/payout/pending/": {"get": {"operationId": "hotels_payout_get_payout_pending_booking_details", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyPayoutDetails"}}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/payout/set-batch-payment/": {"post": {"operationId": "hotels_payout_create_payout_batch", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/payout/{id}/": {"get": {"operationId": "hotels_payout_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_payout_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_payout_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyPayoutDetails"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_payout_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this property payout details.", "required": true, "type": "integer"}]}, "/hotels/properties/": {"get": {"operationId": "hotels_properties_list", "summary": "List/search properties", "description": "Returns a paginated list of properties with lowest-price annotation and per-property pricing details when check-in/out and guest counts are provided. Response envelope: status, message, count, data.", "parameters": [{"name": "offset", "in": "query", "description": "Pagination offset (used with limit).", "type": "integer"}, {"name": "limit", "in": "query", "description": "Page size (used with offset).", "type": "integer"}, {"name": "location", "in": "query", "description": "Comma-separated places; matches area, city, state, country, name, title.", "type": "string"}, {"name": "property_search", "in": "query", "description": "Search by property name or title (icontains).", "type": "string"}, {"name": "status", "in": "query", "description": "Property status (e.g. Active).", "type": "string"}, {"name": "checkin", "in": "query", "description": "Check-in datetime ISO-8601 with offset, e.g. 2026-03-21T14:40+05:30.", "type": "string"}, {"name": "checkout", "in": "query", "description": "Check-out datetime ISO-8601 with offset.", "type": "string"}, {"name": "adult_count", "in": "query", "description": "Number of adults (used for pricing allocation).", "type": "integer"}, {"name": "child_count", "in": "query", "description": "Number of children.", "type": "integer"}, {"name": "child_age_list", "in": "query", "description": "Comma-separated child ages.", "type": "string"}, {"name": "infants", "in": "query", "description": "Infant count (passed through booking context).", "type": "integer"}, {"name": "rooms", "in": "query", "description": "Requested room count.", "type": "integer"}, {"name": "duration", "in": "query", "description": "Booking duration (e.g. hours for slot flows).", "type": "integer"}, {"name": "booking_slot", "in": "query", "description": "Slot length for pricing: \"4 Hrs\", \"8 Hrs\", \"12 Hrs\", or \"24 Hrs\" (default).", "type": "string"}, {"name": "bookingType", "in": "query", "description": "Client booking mode label (e.g. full-day).", "type": "string"}, {"name": "is_slot_price_enabled", "in": "query", "description": "If \"true\", return only properties with hourly/slot pricing enabled. If omitted or any other value (including false), do not filter by this flag — use this for full-day searches so hotels that also offer hourly pricing still appear.", "type": "string"}, {"name": "ordering", "in": "query", "description": "Comma-separated field names for ORDER BY.", "type": "string"}, {"name": "start_price", "in": "query", "description": "Lower bound for lowest-price filter (use with end_price).", "type": "integer"}, {"name": "end_price", "in": "query", "description": "Upper bound for lowest-price filter (use with start_price).", "type": "integer"}, {"name": "nearby_latitude", "in": "query", "description": "Latitude for distance sort (use with nearby_longitude).", "type": "number"}, {"name": "nearby_longitude", "in": "query", "description": "Longitude for distance sort (use with nearby_latitude).", "type": "number"}, {"name": "pay_at_hotel", "in": "query", "description": "true or false.", "type": "string"}, {"name": "property_amenity", "in": "query", "description": "Comma-separated hotel amenity titles (JSON amenity_details match).", "type": "string"}, {"name": "room_amenity", "in": "query", "description": "Comma-separated room amenities (filters by room).", "type": "string"}, {"name": "policies", "in": "query", "description": "Comma-separated policy field paths (see policies__* filters).", "type": "string"}, {"name": "rating", "in": "query", "description": "Comma-separated rating values.", "type": "string"}, {"name": "property_type", "in": "query", "description": "Comma-separated property types.", "type": "string"}, {"name": "room_type", "in": "query", "description": "Comma-separated room types.", "type": "string"}, {"name": "room_view", "in": "query", "description": "Comma-separated room views.", "type": "string"}, {"name": "start_review_star", "in": "query", "description": "Minimum review_star (inclusive).", "type": "number"}, {"name": "end_review_star", "in": "query", "description": "Maximum review_star (exclusive).", "type": "number"}, {"name": "country", "in": "query", "type": "string"}, {"name": "state", "in": "query", "type": "string"}, {"name": "city_name", "in": "query", "type": "string"}, {"name": "area_name", "in": "query", "type": "string"}, {"name": "property_id", "in": "query", "description": "Filter by a single property id.", "type": "integer"}, {"name": "is_favorite", "in": "query", "description": "True or False (requires authenticated user for favorites).", "type": "string"}], "responses": {"200": {"description": "Success: { status, message, count, data: PropertyList[] }"}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_properties_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/bulk-assign-business-rep/": {"post": {"operationId": "hotels_properties_bulk_assign_business_rep", "description": "Bulk assign one business representative to multiple properties", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/commission/": {"get": {"operationId": "hotels_properties_commission_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyCommission"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_properties_commission_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyCommission"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PropertyCommission"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/commission/{id}/": {"get": {"operationId": "hotels_properties_commission_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyCommission"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_properties_commission_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyCommission"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyCommission"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_commission_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyCommission"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyCommission"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_properties_commission_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this property commission.", "required": true, "type": "integer"}]}, "/hotels/properties/delete/spend-limit/": {"post": {"operationId": "hotels_properties_delete_delete_pay_at_hotel_spend_limit", "description": "Delete a spend limit based on ID using POST method", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/favorite/": {"post": {"operationId": "hotels_properties_add_favorite_property", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/favorite/list/": {"get": {"operationId": "hotels_properties_favorite_get_favorite_property", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/get/spend-limit/": {"get": {"operationId": "hotels_properties_get_get_pay_at_hotel_spend_limits", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/hotel-customer-eligibility/": {"get": {"operationId": "hotels_properties_get_customer_eligibility", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/location/autosuggest/": {"get": {"operationId": "hotels_properties_location_get_location_suggestion", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/location/list/": {"get": {"operationId": "hotels_properties_location_get_property_location", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/media/": {"post": {"operationId": "hotels_properties_upload_media", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/media/inactive/": {"post": {"operationId": "hotels_properties_media_make_media_inactive", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/media/list/": {"get": {"operationId": "hotels_properties_media_list_media", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/policy/": {"get": {"operationId": "hotels_properties_policy_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Policy"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_properties_policy_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Policy"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Policy"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/policy/structure/": {"get": {"operationId": "hotels_properties_policy_get_policy_data_structure", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Policy"}}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/policy/{id}/": {"get": {"operationId": "hotels_properties_policy_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Policy"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_properties_policy_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Policy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Policy"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_policy_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Policy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Policy"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_properties_policy_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this policy details.", "required": true, "type": "integer"}]}, "/hotels/properties/price-range/": {"get": {"operationId": "hotels_properties_get_price_range", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/set/spend-limit/": {"post": {"operationId": "hotels_properties_set_set_pay_at_hotel_spend_limit", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/top-destination/": {"get": {"operationId": "hotels_properties_top-destination_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TopDestinations"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_properties_top-destination_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TopDestinations"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TopDestinations"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/top-destination/total-hotels/": {"patch": {"operationId": "hotels_properties_top-destination_update_total_hotels", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TopDestinations"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TopDestinations"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/top-destination/{id}/": {"get": {"operationId": "hotels_properties_top-destination_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TopDestinations"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_properties_top-destination_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TopDestinations"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TopDestinations"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_top-destination_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TopDestinations"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TopDestinations"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_properties_top-destination_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this top destinations.", "required": true, "type": "integer"}]}, "/hotels/properties/trending-places/": {"get": {"operationId": "hotels_properties_trending-places_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TrendingPlaces"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_properties_trending-places_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TrendingPlaces"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TrendingPlaces"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/trending-places/total-hotels/": {"patch": {"operationId": "hotels_properties_trending-places_update_total_hotels", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TrendingPlaces"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TrendingPlaces"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/trending-places/{id}/": {"get": {"operationId": "hotels_properties_trending-places_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TrendingPlaces"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_properties_trending-places_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TrendingPlaces"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TrendingPlaces"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_trending-places_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TrendingPlaces"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TrendingPlaces"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_properties_trending-places_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this trending places.", "required": true, "type": "integer"}]}, "/hotels/properties/update/spend-limit/": {"patch": {"operationId": "hotels_properties_update_update_pay_at_hotel_spend_limit", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/verify-agreement/": {"get": {"operationId": "hotels_properties_verify_agreement", "description": "Verify service agreement using token and regenerate PDF with signature details", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/properties/{id}/": {"get": {"operationId": "hotels_properties_read", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_properties_update", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_partial_update", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this Property.", "required": true, "type": "integer"}]}, "/hotels/properties/{id}/business-rep/": {"get": {"operationId": "hotels_properties_business-rep_read", "description": "Get or update business representative (account manager) for a property", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_properties_business-rep_update", "description": "Get or update business representative (account manager) for a property", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_business-rep_partial_update", "description": "Get or update business representative (account manager) for a property", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this Property.", "required": true, "type": "integer"}]}, "/hotels/properties/{id}/insights/": {"get": {"operationId": "hotels_properties_property_insights", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this Property.", "required": true, "type": "integer"}]}, "/hotels/properties/{id}/update-created-by/": {"put": {"operationId": "hotels_properties_update-created-by_update", "description": "Update the property's 'added_by' (created by) and/or 'managed_by' (manager) fields.\nOnly superusers or staff can perform this action.\n\nRequest body can include:\n- created_by_user_id: User ID to set as added_by (who created the property)\n- managed_by_user_id: User ID to set as managed_by (who manages the property)\n- Both fields can be updated independently or together", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_properties_update-created-by_partial_update", "description": "Update the property's 'added_by' (created by) and/or 'managed_by' (manager) fields.\nOnly superusers or staff can perform this action.\n\nRequest body can include:\n- created_by_user_id: User ID to set as added_by (who created the property)\n- managed_by_user_id: User ID to set as managed_by (who manages the property)\n- Both fields can be updated independently or together", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this Property.", "required": true, "type": "integer"}]}, "/hotels/property-bank/": {"get": {"operationId": "hotels_property-bank_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PropertyBankDetails"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_property-bank_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyBankDetails"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PropertyBankDetails"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/property-bank/{id}/": {"get": {"operationId": "hotels_property-bank_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyBankDetails"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_property-bank_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyBankDetails"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyBankDetails"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_property-bank_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PropertyBankDetails"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PropertyBankDetails"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this property bank details.", "required": true, "type": "integer"}]}, "/hotels/room-category/": {"get": {"operationId": "hotels_room-category_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/RoomAmenityCategory"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_room-category_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/room-category/{id}/": {"get": {"operationId": "hotels_room-category_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_room-category_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_room-category_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RoomAmenityCategory"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this room amenity category.", "required": true, "type": "integer"}]}, "/hotels/room/dynamic-pricing/": {"get": {"operationId": "hotels_room_dynamic-pricing_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/DynamicRoomPricing"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_room_dynamic-pricing_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/room/dynamic-pricing/{id}/": {"get": {"operationId": "hotels_room_dynamic-pricing_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_room_dynamic-pricing_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_room_dynamic-pricing_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_room_dynamic-pricing_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this dynamic room pricing.", "required": true, "type": "integer"}]}, "/hotels/room/dynamic-pricing/{id}/active/": {"patch": {"operationId": "hotels_room_dynamic-pricing_make_active_or_inactive", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/DynamicRoomPricing"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this dynamic room pricing.", "required": true, "type": "integer"}]}, "/hotels/rooms/": {"get": {"operationId": "hotels_rooms_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Room"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_rooms_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Room"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/rooms/media/": {"post": {"operationId": "hotels_rooms_upload_media", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Room"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/rooms/media/inactive/": {"post": {"operationId": "hotels_rooms_media_make_media_inactive", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Room"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/rooms/media/list/": {"get": {"operationId": "hotels_rooms_media_list_media", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Room"}}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/rooms/{id}/": {"get": {"operationId": "hotels_rooms_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_rooms_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Room"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_rooms_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Room"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "delete": {"operationId": "hotels_rooms_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this room.", "required": true, "type": "integer"}]}, "/hotels/rooms/{id}/inactive/": {"patch": {"operationId": "hotels_rooms_make_room_inactive", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Room"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Room"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this room.", "required": true, "type": "integer"}]}, "/hotels/rules/": {"get": {"operationId": "hotels_rules_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Rule"}}}}, "tags": ["hotels"]}, "post": {"operationId": "hotels_rules_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Rule"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Rule"}}}, "tags": ["hotels"]}, "parameters": []}, "/hotels/rules/{id}/": {"get": {"operationId": "hotels_rules_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Rule"}}}, "tags": ["hotels"]}, "put": {"operationId": "hotels_rules_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Rule"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Rule"}}}, "tags": ["hotels"]}, "patch": {"operationId": "hotels_rules_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Rule"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Rule"}}}, "tags": ["hotels"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this rule.", "required": true, "type": "integer"}]}, "/log-management/user-subscription/": {"get": {"operationId": "log-management_user-subscription_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserSubscriptionLogs"}}}}, "tags": ["log-management"]}, "parameters": []}, "/log-management/user-subscription/{id}/": {"get": {"operationId": "log-management_user-subscription_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSubscriptionLogs"}}}, "tags": ["log-management"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user subscription logs.", "required": true, "type": "integer"}]}, "/messaging/campaign-steps/": {"get": {"operationId": "messaging_campaign-steps_list", "summary": "List campaign steps", "description": "Step 4: Campaign Steps\n\nAttach one or more steps (Email/SMS, templates, delays) to a campaign.", "parameters": [{"name": "offset", "in": "query", "type": "integer"}, {"name": "limit", "in": "query", "type": "integer"}, {"name": "campaign", "in": "query", "type": "integer"}, {"name": "channel", "in": "query", "type": "string"}, {"name": "active", "in": "query", "type": "boolean"}], "responses": {"200": {"description": "Standard envelope"}}, "tags": ["messaging"]}, "post": {"operationId": "messaging_campaign-steps_create", "summary": "Step 4: Campaign Steps", "description": "Attach one or more steps (Email/SMS, templates, delays) to a campaign.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignStep"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CampaignStep"}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/campaign-steps/{id}/": {"get": {"operationId": "messaging_campaign-steps_read", "summary": "Step 4: Campaign Steps", "description": "Attach one or more steps (Email/SMS, templates, delays) to a campaign.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CampaignStep"}}}, "tags": ["messaging"]}, "put": {"operationId": "messaging_campaign-steps_update", "summary": "Step 4: Campaign Steps", "description": "Attach one or more steps (Email/SMS, templates, delays) to a campaign.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignStep"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CampaignStep"}}}, "tags": ["messaging"]}, "patch": {"operationId": "messaging_campaign-steps_partial_update", "summary": "Step 4: Campaign Steps", "description": "Attach one or more steps (Email/SMS, templates, delays) to a campaign.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignStep"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CampaignStep"}}}, "tags": ["messaging"]}, "delete": {"operationId": "messaging_campaign-steps_delete", "summary": "Step 4: Campaign Steps", "description": "Attach one or more steps (Email/SMS, templates, delays) to a campaign.", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign step.", "required": true, "type": "integer"}]}, "/messaging/campaigns/": {"get": {"operationId": "messaging_campaigns_list", "summary": "List campaigns (filters, search, pagination)", "description": "", "parameters": [{"name": "offset", "in": "query", "type": "integer"}, {"name": "limit", "in": "query", "type": "integer"}, {"name": "search", "in": "query", "type": "string"}, {"name": "ordering", "in": "query", "type": "string"}, {"name": "status", "in": "query", "type": "string"}, {"name": "target_group_type", "in": "query", "type": "string"}], "responses": {"200": {"description": "Standard envelope: count, data"}}, "tags": ["messaging"]}, "post": {"operationId": "messaging_campaigns_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignCreateUpdate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CampaignCreateUpdate"}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/campaigns/audience-preview/": {"post": {"operationId": "messaging_campaigns_audience_preview", "summary": "Preview audience size without saving a campaign", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignAudiencePreview"}}], "responses": {"200": {"description": "count and targeting echo"}}, "tags": ["3. Campaigns & Steps"]}, "parameters": []}, "/messaging/campaigns/audience-sample/": {"post": {"operationId": "messaging_campaigns_audience_sample", "summary": "Sample contacts matching audience filters (paginated)", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignAudiencePreview"}}], "responses": {"200": {"description": "Standard envelope: total count + Contact[] slice"}}, "tags": ["3. Campaigns & Steps"]}, "parameters": []}, "/messaging/campaigns/{id}/": {"get": {"operationId": "messaging_campaigns_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Campaign"}}}, "tags": ["messaging"]}, "put": {"operationId": "messaging_campaigns_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignCreateUpdate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CampaignCreateUpdate"}}}, "tags": ["messaging"]}, "patch": {"operationId": "messaging_campaigns_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CampaignCreateUpdate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CampaignCreateUpdate"}}}, "tags": ["messaging"]}, "delete": {"operationId": "messaging_campaigns_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/audience/": {"get": {"operationId": "messaging_campaigns_audience", "summary": "Saved campaign: audience count and targeting", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Campaign"}}}, "tags": ["3. Campaigns & Steps"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/contacts/": {"get": {"operationId": "messaging_campaigns_contacts", "summary": "Paginated campaign_contact rows (per-recipient pipeline)", "description": "", "parameters": [{"name": "offset", "in": "query", "type": "integer"}, {"name": "limit", "in": "query", "type": "integer"}, {"name": "status", "in": "query", "description": "Filter by CampaignContact status", "type": "string"}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Campaign"}}}, "tags": ["5. Monitoring & Analytics"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/pause/": {"post": {"operationId": "messaging_campaigns_pause", "summary": "Pause an active or scheduled campaign", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Campaign"}}], "responses": {"200": {"description": "Campaign paused", "examples": {"application/json": {"status": "success", "data": {"status": "paused"}}}}}, "tags": ["4. Execution (Send & Schedule)"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/reset-contacts/": {"post": {"operationId": "messaging_campaigns_reset_contacts", "summary": "Delete queued rows for draft/paused campaigns (re-build audience)", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Campaign"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Campaign"}}}, "tags": ["3. Campaigns & Steps"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/resume/": {"post": {"operationId": "messaging_campaigns_resume", "summary": "Resume a paused campaign without rebuilding pipeline rows", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Campaign"}}], "responses": {"200": {"description": "Campaign resumed", "examples": {"application/json": {"status": "success", "data": {"status": "running"}}}}, "400": {"description": "Campaign is not paused"}}, "tags": ["4. Execution (Send & Schedule)"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/schedule/": {"post": {"operationId": "messaging_campaigns_schedule", "summary": "Schedule campaign for a future time", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["schedule_time"], "type": "object", "properties": {"schedule_time": {"description": "ISO 8601 datetime when the first step should start.", "type": "string", "format": "date-time", "example": "2026-03-17T10:00:00+05:30"}}}}], "responses": {"200": {"description": "Campaign scheduled", "examples": {"application/json": {"status": "success", "data": {"status": "scheduled", "schedule_time": "2026-03-17T04:30:00Z"}}}}, "400": {"description": "Invalid schedule_time"}}, "tags": ["4. Execution (Send & Schedule)"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/send_now/": {"post": {"operationId": "messaging_campaigns_send_now", "summary": "Trigger campaign to send immediately", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Campaign"}}], "responses": {"200": {"description": "Campaign started", "examples": {"application/json": {"status": "success", "data": {"status": "running"}}}}}, "tags": ["4. Execution (Send & Schedule)"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/campaigns/{id}/status/": {"get": {"operationId": "messaging_campaigns_status", "summary": "Campaign status, aggregate counters, and per-step breakdown", "description": "", "parameters": [], "responses": {"200": {"description": "Campaign status with counters", "examples": {"application/json": {"status": "success", "data": {"campaign_id": 1, "status": "running", "counters": {}, "steps": []}}}}}, "tags": ["5. Monitoring & Analytics"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this campaign.", "required": true, "type": "integer"}]}, "/messaging/contact-uploads/": {"get": {"operationId": "messaging_contact-uploads_list", "summary": "List contact uploads (with filters, search, sort, pagination)", "description": "Returns recent contact uploads in standard envelope.\n\nPagination: offset, limit (default limit=10).\nSearch: search by file_name.\nOrdering: ordering by created_at, finished_at, total_rows, success_count, failure_count.\nFilters: status, uploaded_by, file_name.", "parameters": [{"name": "offset", "in": "query", "description": "Pagination offset (default 0).", "type": "integer"}, {"name": "limit", "in": "query", "description": "Pagination limit (default 10).", "type": "integer"}, {"name": "search", "in": "query", "description": "Search by file_name (partial match).", "type": "string"}, {"name": "ordering", "in": "query", "description": "Sort by created_at, finished_at, total_rows, success_count, failure_count. Prefix '-' for desc.", "type": "string"}, {"name": "status", "in": "query", "description": "Filter by status: processing/completed/failed.", "type": "string"}, {"name": "uploaded_by", "in": "query", "description": "Filter by uploader user id.", "type": "integer"}, {"name": "file_name", "in": "query", "description": "Exact match filter by file name.", "type": "string"}], "responses": {"200": {"description": "Standard response: { status, message, count, data: [ContactUploadSession...] }"}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/contact-uploads/{id}/": {"get": {"operationId": "messaging_contact-uploads_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ContactUploadSession"}}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this contact upload session.", "required": true, "type": "integer"}]}, "/messaging/contacts/": {"get": {"operationId": "messaging_contacts_list", "summary": "List contacts (with filters, search, sort, pagination)", "description": "Returns contacts in standard envelope. Use query params to filter, search, sort, and paginate.\n\n**Pagination:** offset, limit (default limit=10).\n**Search:** search (partial match on name, phone, email, city, country).\n**Ordering:** ordering (e.g. -created_at, name).\n**Filters:** group_type, city, country, department, is_blacklisted, opt_out_sms, opt_out_email, opt_out_whatsapp.", "parameters": [{"name": "offset", "in": "query", "description": "Pagination: skip this many records (default 0).", "type": "integer"}, {"name": "limit", "in": "query", "description": "Pagination: max records per page (default 10).", "type": "integer"}, {"name": "search", "in": "query", "description": "Search in name, phone, email, city, country (partial match).", "type": "string"}, {"name": "ordering", "in": "query", "description": "Sort by: created_at, updated_at, name, email, phone, city, country. Prefix with '-' for descending (e.g. -created_at).", "type": "string"}, {"name": "group_type", "in": "query", "type": "string"}, {"name": "city", "in": "query", "type": "string"}, {"name": "country", "in": "query", "type": "string"}, {"name": "department", "in": "query", "type": "string"}, {"name": "is_blacklisted", "in": "query", "description": "Filter by blacklist status.", "type": "boolean"}, {"name": "opt_out_sms", "in": "query", "description": "Filter by SMS opt-out.", "type": "boolean"}, {"name": "opt_out_email", "in": "query", "description": "Filter by email opt-out.", "type": "boolean"}, {"name": "opt_out_whatsapp", "in": "query", "description": "Filter by WhatsApp opt-out.", "type": "boolean"}], "responses": {"200": {"description": "Standard response: { status, message, count, data: [Contact...] }"}}, "tags": ["messaging"]}, "post": {"operationId": "messaging_contacts_create", "summary": "Step 1: Contacts & Segmentation", "description": "Use these endpoints to create, list, and bulk upload contacts which will be\ntargeted by campaigns.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Contact"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Contact"}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/contacts/bulk-delete/": {"post": {"operationId": "messaging_contacts_bulk_delete", "summary": "Bulk delete contacts", "description": "Delete multiple contacts by ID. Request body: { \"ids\": [1, 2, 3] }. Only existing contact IDs are deleted; invalid IDs are skipped.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["ids"], "type": "object", "properties": {"ids": {"description": "List of contact IDs to delete.", "type": "array", "items": {"type": "integer"}}}}}], "responses": {"200": {"description": "Bulk delete result", "examples": {"application/json": {"status": "success", "message": "Contacts deleted", "count": 0, "data": {"deleted_count": 3, "ids": [1, 2, 3]}}}}, "400": {"description": "Invalid request (e.g. ids missing or not a list)."}}, "tags": ["1. Contacts & Segmentation"]}, "parameters": []}, "/messaging/contacts/upload/": {"post": {"operationId": "messaging_contacts_upload", "summary": "Bulk upload contacts via CSV", "description": "Upload a CSV file exported from Excel to create or update contacts.\n\nRequired header columns:\n- name\n- phone\n- email\n- city\n- country\n- group_type (e.g. B2C-GRP, B2C-GUEST, CORPORATE-GRP, HOTELIER-GRP, AGENT-GRP, BUSINESS-GRP; see auth constants)\n\nEither phone or email must be present per row. Existing contacts are matched by (group_type + phone) or (group_type + email). Duplicate rows in the file (same group_type + phone/email as an earlier row) are ignored and not upserted.\n\nCounts: success_count = created_count + updated_count (first occurrence per identity only). duplicate_in_file_count = rows skipped as duplicates within this CSV.\n\nOptional form fields:\n- **group_type** — default when a row omits `group_type` (same values as column).\n- **default_tags** — comma-separated labels applied to every row, **union** with per-row `tags` / `segment_tags` column (all normalized lowercase); then merged with existing contact tags on update.", "parameters": [{"name": "name", "in": "formData", "required": false, "type": "string", "maxLength": 255}, {"name": "phone", "in": "formData", "required": false, "type": "string", "maxLength": 32}, {"name": "email", "in": "formData", "required": false, "type": "string", "format": "email", "maxLength": 254}, {"name": "city", "in": "formData", "required": false, "type": "string", "maxLength": 128}, {"name": "country", "in": "formData", "required": false, "type": "string", "maxLength": 128}, {"name": "group_type", "in": "formData", "description": "Default group_type for rows that omit the column (e.g. B2C-GRP).", "required": false, "type": "string"}, {"name": "segment_tags", "in": "formData", "required": false, "type": "string"}, {"name": "remarks", "in": "formData", "required": false, "type": "string"}, {"name": "department", "in": "formData", "required": false, "type": "string", "maxLength": 128}, {"name": "opt_out_sms", "in": "formData", "required": false, "type": "boolean"}, {"name": "opt_out_email", "in": "formData", "required": false, "type": "boolean"}, {"name": "opt_out_whatsapp", "in": "formData", "required": false, "type": "boolean"}, {"name": "is_blacklisted", "in": "formData", "required": false, "type": "boolean"}, {"name": "source", "in": "formData", "description": "e.g. excel_upload", "required": false, "type": "string", "maxLength": 64}, {"name": "user", "in": "formData", "required": false, "type": "integer", "x-nullable": true}, {"name": "file", "in": "formData", "description": "CSV file with contacts exported from Excel.", "required": true, "type": "file"}, {"name": "default_tags", "in": "formData", "description": "Comma-separated tags applied to every row in addition to per-row tags.", "required": false, "type": "string"}], "responses": {"201": {"description": "Upload processed successfully", "examples": {"application/json": {"status": "success", "data": {"id": 5, "uploaded_by": 1, "file_name": "b2c_contacts.csv", "status": "completed", "total_rows": 120, "success_count": 115, "failure_count": 5, "created_count": 80, "updated_count": 23, "duplicate_in_file_count": 12, "errors": [{"row": 4, "error": "Either phone or email is required"}]}}}}, "400": {"description": "Invalid file or parsing error"}}, "consumes": ["multipart/form-data"], "tags": ["1. Contacts & Segmentation"]}, "parameters": []}, "/messaging/contacts/{id}/": {"get": {"operationId": "messaging_contacts_read", "summary": "Step 1: Contacts & Segmentation", "description": "Use these endpoints to create, list, and bulk upload contacts which will be\ntargeted by campaigns.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Contact"}}}, "tags": ["messaging"]}, "put": {"operationId": "messaging_contacts_update", "summary": "Step 1: Contacts & Segmentation", "description": "Use these endpoints to create, list, and bulk upload contacts which will be\ntargeted by campaigns.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Contact"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Contact"}}}, "tags": ["messaging"]}, "patch": {"operationId": "messaging_contacts_partial_update", "summary": "Step 1: Contacts & Segmentation", "description": "Use these endpoints to create, list, and bulk upload contacts which will be\ntargeted by campaigns.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Contact"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Contact"}}}, "tags": ["messaging"]}, "delete": {"operationId": "messaging_contacts_delete", "description": "Delete a single contact. Returns standard response.", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this contact.", "required": true, "type": "integer"}]}, "/messaging/email-templates/": {"get": {"operationId": "messaging_email-templates_list", "summary": "List email templates (with filters, search, sort, pagination)", "description": "Returns email templates in standard envelope.\n\nPagination: offset, limit (default limit=10).\nSearch: search by name, slug, subject, body_html, body_text.\nOrdering: ordering by created_at, updated_at, name, slug, is_active, is_marketing.\nFilters: is_active, is_marketing, provider, created_by, slug, name.", "parameters": [{"name": "offset", "in": "query", "description": "Pagination: skip this many records (default 0).", "type": "integer"}, {"name": "limit", "in": "query", "description": "Pagination: max records per page (default 10).", "type": "integer"}, {"name": "search", "in": "query", "description": "Search in name, slug, subject, body_html, body_text (partial match).", "type": "string"}, {"name": "ordering", "in": "query", "description": "Sort by: created_at, updated_at, name, slug, is_active, is_marketing. Prefix with '-' for descending (e.g. -created_at).", "type": "string"}, {"name": "is_active", "in": "query", "type": "boolean"}, {"name": "is_marketing", "in": "query", "type": "boolean"}, {"name": "provider", "in": "query", "description": "Filter by provider id.", "type": "integer"}, {"name": "created_by", "in": "query", "description": "Filter by creator user id.", "type": "integer"}, {"name": "slug", "in": "query", "type": "string"}, {"name": "name", "in": "query", "type": "string"}], "responses": {"200": {"description": "Standard response: { status, message, count, data: [EmailTemplate...] }"}}, "tags": ["messaging"]}, "post": {"operationId": "messaging_email-templates_create", "summary": "Step 2: Email Templates", "description": "Define marketing email templates used by campaign steps (channel=email).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EmailTemplate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/EmailTemplate"}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/email-templates/{id}/": {"get": {"operationId": "messaging_email-templates_read", "summary": "Step 2: Email Templates", "description": "Define marketing email templates used by campaign steps (channel=email).", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EmailTemplate"}}}, "tags": ["messaging"]}, "put": {"operationId": "messaging_email-templates_update", "summary": "Step 2: Email Templates", "description": "Define marketing email templates used by campaign steps (channel=email).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EmailTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EmailTemplate"}}}, "tags": ["messaging"]}, "patch": {"operationId": "messaging_email-templates_partial_update", "summary": "Step 2: Email Templates", "description": "Define marketing email templates used by campaign steps (channel=email).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/EmailTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/EmailTemplate"}}}, "tags": ["messaging"]}, "delete": {"operationId": "messaging_email-templates_delete", "summary": "Step 2: Email Templates", "description": "Define marketing email templates used by campaign steps (channel=email).", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this email template.", "required": true, "type": "integer"}]}, "/messaging/email-templates/{id}/preview/": {"post": {"operationId": "messaging_email-templates_preview", "summary": "Preview an email template with variables", "description": "Renders subject/body using a selected contact (optional) and variable overrides.\n\nDefaults are applied from EmailTemplate.variables_schema and inline |default: syntax.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"type": "object", "properties": {"contact_id": {"description": "Contact id to use as context.", "type": "integer"}, "variables": {"description": "Override variables (e.g. {\"name\": \"Vignesh\"}).", "type": "object", "additionalProperties": {"type": "string"}}}}}], "responses": {"200": {"description": "Standard response: rendered subject/body"}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this email template.", "required": true, "type": "integer"}]}, "/messaging/email-templates/{id}/send-test/": {"post": {"operationId": "messaging_email-templates_send_test", "summary": "Send a test email for this template", "description": "Sends a test email using this template. Provide either to_email, or contact_id (uses contact.email).\nYou can pass variable overrides via `variables`.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": [], "type": "object", "properties": {"to_email": {"description": "Recipient email for the test.", "type": "string"}, "contact_id": {"description": "Contact id to use as context.", "type": "integer"}, "variables": {"description": "Override variables (e.g. {\"name\": \"Vignesh\"}).", "type": "object", "additionalProperties": {"type": "string"}}, "messaging_provider_id": {"description": "Optional. Use this email MessagingProviderConfig for SMTP. Omit to follow template → default provider → server env.", "type": "integer"}}}}], "responses": {"200": {"description": "Standard response: send result"}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this email template.", "required": true, "type": "integer"}]}, "/messaging/message-logs/": {"get": {"operationId": "messaging_message-logs_list", "summary": "List message logs (filters, pagination)", "description": "Step 6: Monitoring & Analytics\n\nInspect individual message logs for debugging and analytics.", "parameters": [{"name": "offset", "in": "query", "type": "integer"}, {"name": "limit", "in": "query", "type": "integer"}, {"name": "campaign", "in": "query", "type": "integer"}, {"name": "step", "in": "query", "type": "integer"}, {"name": "contact", "in": "query", "type": "integer"}, {"name": "channel", "in": "query", "type": "string"}, {"name": "status", "in": "query", "type": "string"}], "responses": {"200": {"description": "Standard envelope"}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/message-logs/{id}/": {"get": {"operationId": "messaging_message-logs_read", "summary": "Step 6: Monitoring & Analytics", "description": "Inspect individual message logs for debugging and analytics.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/MessageLog"}}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this message log.", "required": true, "type": "integer"}]}, "/messaging/provider-configs/": {"get": {"operationId": "messaging_provider-configs_list", "summary": "List messaging provider configs", "description": "Custom email (SMTP) and SMS (Fast2SMS) provider rows used by campaign steps,\nemail templates, and test sends. When unset, the API falls back to the default\nrow for that channel (if any), then to server environment variables.", "parameters": [{"name": "offset", "in": "query", "type": "integer"}, {"name": "limit", "in": "query", "type": "integer"}, {"name": "channel", "in": "query", "type": "string"}, {"name": "active", "in": "query", "type": "boolean"}, {"name": "is_default", "in": "query", "type": "boolean"}, {"name": "search", "in": "query", "type": "string"}], "responses": {"200": {"description": "Standard response envelope with list"}}, "tags": ["messaging"]}, "post": {"operationId": "messaging_provider-configs_create", "description": "Custom email (SMTP) and SMS (Fast2SMS) provider rows used by campaign steps,\nemail templates, and test sends. When unset, the API falls back to the default\nrow for that channel (if any), then to server environment variables.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/provider-configs/credential-guidance/": {"get": {"operationId": "messaging_provider-configs_credential_guidance_action", "summary": "How to obtain SMTP and Fast2SMS credentials", "description": "Short admin copy: `general` and per-field `hint` only (no long prose).", "parameters": [], "responses": {"200": {"description": "Standard response: { general, email, sms }"}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/provider-configs/{id}/": {"get": {"operationId": "messaging_provider-configs_read", "description": "Custom email (SMTP) and SMS (Fast2SMS) provider rows used by campaign steps,\nemail templates, and test sends. When unset, the API falls back to the default\nrow for that channel (if any), then to server environment variables.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}}, "tags": ["messaging"]}, "put": {"operationId": "messaging_provider-configs_update", "description": "Custom email (SMTP) and SMS (Fast2SMS) provider rows used by campaign steps,\nemail templates, and test sends. When unset, the API falls back to the default\nrow for that channel (if any), then to server environment variables.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}}, "tags": ["messaging"]}, "patch": {"operationId": "messaging_provider-configs_partial_update", "description": "Custom email (SMTP) and SMS (Fast2SMS) provider rows used by campaign steps,\nemail templates, and test sends. When unset, the API falls back to the default\nrow for that channel (if any), then to server environment variables.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/MessagingProviderConfig"}}}, "tags": ["messaging"]}, "delete": {"operationId": "messaging_provider-configs_delete", "description": "Custom email (SMTP) and SMS (Fast2SMS) provider rows used by campaign steps,\nemail templates, and test sends. When unset, the API falls back to the default\nrow for that channel (if any), then to server environment variables.", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this messaging provider config.", "required": true, "type": "integer"}]}, "/messaging/sms-templates/": {"get": {"operationId": "messaging_sms-templates_list", "summary": "List SMS templates (filters, search, sort, pagination)", "description": "Pagination: offset, limit.\nSearch: name, template_code, message_id, template_message.\nFilters: template_code, message_id, template_type, is_active.\n**for_campaigns=true**: only templates eligible for messaging campaign SMS steps.", "parameters": [{"name": "offset", "in": "query", "type": "integer"}, {"name": "limit", "in": "query", "type": "integer"}, {"name": "search", "in": "query", "type": "string"}, {"name": "ordering", "in": "query", "type": "string"}, {"name": "template_code", "in": "query", "type": "string"}, {"name": "message_id", "in": "query", "type": "string"}, {"name": "template_type", "in": "query", "description": "transactional | service_implicit | service_explicit | promotional", "type": "string"}, {"name": "is_active", "in": "query", "type": "boolean"}, {"name": "for_campaigns", "in": "query", "description": "If true, only active service_explicit + promotional (campaign picker).", "type": "boolean"}], "responses": {"200": {"description": "Standard envelope"}}, "tags": ["messaging"]}, "post": {"operationId": "messaging_sms-templates_create", "summary": "SMS / DLT templates (MessageTemplate): CRUD, filters, and catalog for campaign steps.", "description": "Query **for_campaigns=true** to list only **active** templates with types allowed on\ncampaign SMS steps (**service_explicit**, **promotional**).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SmsTemplate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/SmsTemplate"}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/sms-templates/{id}/": {"get": {"operationId": "messaging_sms-templates_read", "summary": "SMS / DLT templates (MessageTemplate): CRUD, filters, and catalog for campaign steps.", "description": "Query **for_campaigns=true** to list only **active** templates with types allowed on\ncampaign SMS steps (**service_explicit**, **promotional**).", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/SmsTemplate"}}}, "tags": ["messaging"]}, "put": {"operationId": "messaging_sms-templates_update", "summary": "SMS / DLT templates (MessageTemplate): CRUD, filters, and catalog for campaign steps.", "description": "Query **for_campaigns=true** to list only **active** templates with types allowed on\ncampaign SMS steps (**service_explicit**, **promotional**).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SmsTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/SmsTemplate"}}}, "tags": ["messaging"]}, "patch": {"operationId": "messaging_sms-templates_partial_update", "summary": "SMS / DLT templates (MessageTemplate): CRUD, filters, and catalog for campaign steps.", "description": "Query **for_campaigns=true** to list only **active** templates with types allowed on\ncampaign SMS steps (**service_explicit**, **promotional**).", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SmsTemplate"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/SmsTemplate"}}}, "tags": ["messaging"]}, "delete": {"operationId": "messaging_sms-templates_delete", "summary": "SMS / DLT templates (MessageTemplate): CRUD, filters, and catalog for campaign steps.", "description": "Query **for_campaigns=true** to list only **active** templates with types allowed on\ncampaign SMS steps (**service_explicit**, **promotional**).", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["messaging"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this message template.", "required": true, "type": "integer"}]}, "/messaging/template-variables/": {"get": {"operationId": "messaging_template-variables_list", "summary": "List available template variables", "description": "Returns all supported template variables that can be used in SMS and email templates, grouped by categories like 'contact' and 'user'.", "parameters": [], "responses": {"200": {"description": "List of variables", "examples": {"application/json": {"status": "success", "data": [{"name": "name", "label": "Contact name", "category": "contact"}, {"name": "city", "label": "City", "category": "contact"}, {"name": "user_id", "label": "User ID", "category": "user"}]}}}}, "tags": ["messaging"]}, "parameters": []}, "/messaging/tests/sms/send-test/": {"post": {"operationId": "messaging_tests_sms_send_test_sms", "summary": "Send a test SMS (Fast2SMS template)", "description": "Send a test SMS using a provider template_code.\n\nProvide either phone, or contact_id (uses contact.phone). You can send `variables_values` directly (recommended), or pass `variables` to build a pipe string.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"required": ["template_code"], "type": "object", "properties": {"template_code": {"description": "Fast2SMS template code.", "type": "string"}, "phone": {"description": "Recipient phone (digits/+).", "type": "string"}, "contact_id": {"description": "Contact id to use as context.", "type": "integer"}, "variables_values": {"description": "Pipe-separated values in provider-expected order.", "type": "string"}, "variables": {"description": "Override variables to build variables_values if variables_values is not provided.", "type": "object", "additionalProperties": {"type": "string"}}, "messaging_provider_id": {"description": "Optional. SMS MessagingProviderConfig (Fast2SMS) to use instead of environment defaults.", "type": "integer"}}}}], "responses": {"200": {"description": "Standard response: provider response"}}, "tags": ["messaging"]}, "parameters": []}, "/org-managements/business-detail/": {"get": {"operationId": "org-managements_business-detail_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BusinessDetail"}}}}, "tags": ["org-managements"]}, "post": {"operationId": "org-managements_business-detail_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BusinessDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BusinessDetail"}}}, "tags": ["org-managements"]}, "parameters": []}, "/org-managements/business-detail/active/": {"get": {"operationId": "org-managements_business-detail_active_business", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BusinessDetail"}}}}, "tags": ["org-managements"]}, "parameters": []}, "/org-managements/business-detail/export-csv/": {"get": {"operationId": "org-managements_business-detail_export_csv", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BusinessDetail"}}}}, "tags": ["org-managements"]}, "parameters": []}, "/org-managements/business-detail/user/retrieve/": {"get": {"operationId": "org-managements_business-detail_user_user_based_retrieve", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BusinessDetail"}}}}, "tags": ["org-managements"]}, "parameters": []}, "/org-managements/business-detail/{id}/": {"get": {"operationId": "org-managements_business-detail_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BusinessDetail"}}}, "tags": ["org-managements"]}, "put": {"operationId": "org-managements_business-detail_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BusinessDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BusinessDetail"}}}, "tags": ["org-managements"]}, "patch": {"operationId": "org-managements_business-detail_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BusinessDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BusinessDetail"}}}, "tags": ["org-managements"]}, "delete": {"operationId": "org-managements_business-detail_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-managements"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this Business.", "required": true, "type": "integer"}]}, "/org-resources/about-us/": {"get": {"operationId": "org-resources_about-us_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AboutUs"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_about-us_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AboutUs"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AboutUs"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/about-us/{id}/": {"get": {"operationId": "org-resources_about-us_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AboutUs"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_about-us_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AboutUs"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AboutUs"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_about-us_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AboutUs"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AboutUs"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this about us.", "required": true, "type": "integer"}]}, "/org-resources/addresses/": {"get": {"operationId": "org-resources_addresses_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Address"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_addresses_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Address"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Address"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/addresses/{id}/": {"get": {"operationId": "org-resources_addresses_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Address"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_addresses_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Address"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Address"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_addresses_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Address"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Address"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this address.", "required": true, "type": "integer"}]}, "/org-resources/agent-dashboard/bookings/": {"get": {"operationId": "org-resources_agent-dashboard_bookings", "description": "List agent bookings with filters", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-dashboard/commissions/": {"get": {"operationId": "org-resources_agent-dashboard_commissions", "description": "Get commission tracking and settlements", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-dashboard/customers/": {"get": {"operationId": "org-resources_agent-dashboard_customers", "description": "List agent's customers with stats", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-dashboard/dashboard/": {"get": {"operationId": "org-resources_agent-dashboard_dashboard", "description": "Main dashboard overview for agent", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-details/": {"get": {"operationId": "org-resources_agent-details_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AgentDetail"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_agent-details_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AgentDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AgentDetail"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-details/export-csv/": {"get": {"operationId": "org-resources_agent-details_export_csv", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AgentDetail"}}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-details/me/": {"get": {"operationId": "org-resources_agent-details_me", "description": "Get the agent profile for the currently logged-in user.\nUse this when the client does not know the agent id.", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AgentDetail"}}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-details/{id}/": {"get": {"operationId": "org-resources_agent-details_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AgentDetail"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_agent-details_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AgentDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AgentDetail"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_agent-details_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AgentDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AgentDetail"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_agent-details_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this agent detail.", "required": true, "type": "integer"}]}, "/org-resources/agent-markup-config/": {"get": {"operationId": "org-resources_agent-markup-config_list", "description": "List markup configurations", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AgentMarkupConfig"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_agent-markup-config_create", "description": "Create or update markup config for agent", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/agent-markup-config/{id}/": {"get": {"operationId": "org-resources_agent-markup-config_read", "description": "Retrieve a single markup configuration", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_agent-markup-config_update", "description": "Update markup configuration", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_agent-markup-config_partial_update", "description": "ViewSet for managing agent markup configurations", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AgentMarkupConfig"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/org-resources/amenities/": {"get": {"operationId": "org-resources_amenities_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Amenity"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_amenities_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Amenity"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Amenity"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/amenities/{id}/": {"get": {"operationId": "org-resources_amenities_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Amenity"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_amenities_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Amenity"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Amenity"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_amenities_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Amenity"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Amenity"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this amenity.", "required": true, "type": "integer"}]}, "/org-resources/amenity-categories/": {"get": {"operationId": "org-resources_amenity-categories_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/AmenityCategory"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_amenity-categories_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AmenityCategory"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AmenityCategory"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/amenity-categories/{id}/": {"get": {"operationId": "org-resources_amenity-categories_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AmenityCategory"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_amenity-categories_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AmenityCategory"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AmenityCategory"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_amenity-categories_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AmenityCategory"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/AmenityCategory"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this amenity category.", "required": true, "type": "integer"}]}, "/org-resources/basic-rules-config/": {"get": {"operationId": "org-resources_basic-rules-config_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/BasicRulesConfig"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_basic-rules-config_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BasicRulesConfig"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/BasicRulesConfig"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/basic-rules-config/{id}/": {"get": {"operationId": "org-resources_basic-rules-config_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BasicRulesConfig"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_basic-rules-config_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/BasicRulesConfig"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/BasicRulesConfig"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_basic-rules-config_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this basic rules config.", "required": true, "type": "integer"}]}, "/org-resources/career/": {"get": {"operationId": "org-resources_career_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Career"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_career_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Career"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Career"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/career/{id}/": {"get": {"operationId": "org-resources_career_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Career"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_career_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Career"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Career"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_career_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Career"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Career"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this career.", "required": true, "type": "integer"}]}, "/org-resources/company-details/": {"get": {"operationId": "org-resources_company-details_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CompanyDetail"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_company-details_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/company-details/bulk-assign-business-rep/": {"post": {"operationId": "org-resources_company-details_bulk_assign_business_rep", "description": "Bulk assign one business representative to multiple companies", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/company-details/create/": {"post": {"operationId": "org-resources_company-details_create_company_by_badmin", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/company-details/export-csv/": {"get": {"operationId": "org-resources_company-details_export_csv", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CompanyDetail"}}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/company-details/{id}/": {"get": {"operationId": "org-resources_company-details_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_company-details_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_company-details_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_company-details_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this company detail.", "required": true, "type": "integer"}]}, "/org-resources/company-details/{id}/business-rep/": {"get": {"operationId": "org-resources_company-details_business-rep_read", "description": "Get or update business representative (account manager) for a company", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_company-details_business-rep_update", "description": "Get or update business representative (account manager) for a company", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_company-details_business-rep_partial_update", "description": "Get or update business representative (account manager) for a company", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this company detail.", "required": true, "type": "integer"}]}, "/org-resources/company-details/{id}/update/contact/": {"patch": {"operationId": "org-resources_company-details_update_update_contact", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CompanyDetail"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CompanyDetail"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this company detail.", "required": true, "type": "integer"}]}, "/org-resources/country-details/": {"get": {"operationId": "org-resources_country-details_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CountryDetails"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_country-details_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountryDetails"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CountryDetails"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/country-details/populate-data/": {"post": {"operationId": "org-resources_country-details_populate_data", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountryDetails"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CountryDetails"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/country-details/{id}/": {"get": {"operationId": "org-resources_country-details_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountryDetails"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_country-details_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountryDetails"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountryDetails"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_country-details_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CountryDetails"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CountryDetails"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_country-details_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this country details.", "required": true, "type": "integer"}]}, "/org-resources/enquiries/": {"get": {"operationId": "org-resources_enquiries_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Enquiry"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_enquiries_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Enquiry"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Enquiry"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/enquiries/{id}/": {"get": {"operationId": "org-resources_enquiries_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Enquiry"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_enquiries_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Enquiry"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Enquiry"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_enquiries_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Enquiry"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Enquiry"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this enquiry.", "required": true, "type": "integer"}]}, "/org-resources/faqs/": {"get": {"operationId": "org-resources_faqs_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/FAQs"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_faqs_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FAQs"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/FAQs"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/faqs/{id}/": {"get": {"operationId": "org-resources_faqs_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FAQs"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_faqs_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FAQs"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FAQs"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_faqs_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FAQs"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FAQs"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this fa qs.", "required": true, "type": "integer"}]}, "/org-resources/feature-subscriptions/": {"get": {"operationId": "org-resources_feature-subscriptions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/FeatureSubscription"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_feature-subscriptions_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FeatureSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/FeatureSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/feature-subscriptions/{id}/": {"get": {"operationId": "org-resources_feature-subscriptions_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FeatureSubscription"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_feature-subscriptions_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FeatureSubscription"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FeatureSubscription"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_feature-subscriptions_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this feature subscription.", "required": true, "type": "integer"}]}, "/org-resources/get-state-and-district/{query}/": {"get": {"operationId": "org-resources_get-state-and-district_read", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "query", "in": "path", "required": true, "type": "string"}]}, "/org-resources/legality/": {"get": {"operationId": "org-resources_legality_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Legality"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_legality_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Legality"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Legality"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/legality/{id}/": {"get": {"operationId": "org-resources_legality_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Legality"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_legality_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Legality"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Legality"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_legality_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Legality"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Legality"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this legality.", "required": true, "type": "integer"}]}, "/org-resources/notification/": {"get": {"operationId": "org-resources_notification_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserNotification"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_notification_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserNotification"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserNotification"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/notification/user-based/retrieve/": {"get": {"operationId": "org-resources_notification_user-based_get_user_based_notification", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserNotification"}}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/notification/{id}/": {"get": {"operationId": "org-resources_notification_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserNotification"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_notification_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserNotification"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserNotification"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_notification_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserNotification"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserNotification"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_notification_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user notification.", "required": true, "type": "integer"}]}, "/org-resources/occupancies/": {"get": {"operationId": "org-resources_occupancies_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Occupancy"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_occupancies_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Occupancy"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Occupancy"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/occupancies/{id}/": {"get": {"operationId": "org-resources_occupancies_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Occupancy"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_occupancies_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Occupancy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Occupancy"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_occupancies_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Occupancy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Occupancy"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this occupancy.", "required": true, "type": "integer"}]}, "/org-resources/privacy-policy/": {"get": {"operationId": "org-resources_privacy-policy_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/PrivacyPolicy"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_privacy-policy_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PrivacyPolicy"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PrivacyPolicy"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/privacy-policy/{id}/": {"get": {"operationId": "org-resources_privacy-policy_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PrivacyPolicy"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_privacy-policy_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PrivacyPolicy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PrivacyPolicy"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_privacy-policy_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PrivacyPolicy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/PrivacyPolicy"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this privacy policy.", "required": true, "type": "integer"}]}, "/org-resources/refund-and-cancellation-policy/": {"get": {"operationId": "org-resources_refund-and-cancellation-policy_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_refund-and-cancellation-policy_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/refund-and-cancellation-policy/{id}/": {"get": {"operationId": "org-resources_refund-and-cancellation-policy_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_refund-and-cancellation-policy_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_refund-and-cancellation-policy_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RefundAndCancellationPolicy"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this refund and cancellation policy.", "required": true, "type": "integer"}]}, "/org-resources/room-types/": {"get": {"operationId": "org-resources_room-types_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/RoomType"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_room-types_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RoomType"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/RoomType"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/room-types/{id}/": {"get": {"operationId": "org-resources_room-types_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RoomType"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_room-types_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RoomType"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RoomType"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_room-types_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RoomType"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/RoomType"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this room type.", "required": true, "type": "integer"}]}, "/org-resources/subscriber/": {"get": {"operationId": "org-resources_subscriber_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Subscriber"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_subscriber_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscriber"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Subscriber"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/subscriber/{id}/": {"get": {"operationId": "org-resources_subscriber_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscriber"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_subscriber_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscriber"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscriber"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_subscriber_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscriber"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscriber"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscriber.", "required": true, "type": "integer"}]}, "/org-resources/subscription/": {"get": {"operationId": "org-resources_subscription_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Subscription"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_subscription_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Subscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/subscription/{id}/": {"get": {"operationId": "org-resources_subscription_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscription"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_subscription_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscription"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscription"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_subscription_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscription"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscription"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_subscription_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this subscription.", "required": true, "type": "integer"}]}, "/org-resources/terms-and-conditions/": {"get": {"operationId": "org-resources_terms-and-conditions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/TermsAndConditions"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_terms-and-conditions_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TermsAndConditions"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TermsAndConditions"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/terms-and-conditions/{id}/": {"get": {"operationId": "org-resources_terms-and-conditions_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TermsAndConditions"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_terms-and-conditions_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TermsAndConditions"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TermsAndConditions"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_terms-and-conditions_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TermsAndConditions"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/TermsAndConditions"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this terms and conditions.", "required": true, "type": "integer"}]}, "/org-resources/upload-media/": {"get": {"operationId": "org-resources_upload-media_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UploadedMedia"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_upload-media_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UploadedMedia"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UploadedMedia"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/upload-media/{id}/": {"get": {"operationId": "org-resources_upload-media_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UploadedMedia"}}}, "tags": ["org-resources"]}, "put": {"operationId": "org-resources_upload-media_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UploadedMedia"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UploadedMedia"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_upload-media_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UploadedMedia"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UploadedMedia"}}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this uploaded media.", "required": true, "type": "integer"}]}, "/org-resources/user-subscription/": {"get": {"operationId": "org-resources_user-subscription_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserSubscription"}}}}, "tags": ["org-resources"]}, "post": {"operationId": "org-resources_user-subscription_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/cancel-webhook/": {"post": {"operationId": "org-resources_user-subscription_cancel_subscription_webhook", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/cancel/": {"post": {"operationId": "org-resources_user-subscription_cancel_subscription", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/payu-payment-response/": {"post": {"operationId": "org-resources_user-subscription_payment_payu_response", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/payu-sucess/": {"post": {"operationId": "org-resources_user-subscription_subscription_payu_success", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/recur-init/pe-callbackurl/": {"post": {"operationId": "org-resources_user-subscription_recur-init_recur_init_pe_callbackurl", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/submit-auth-init/pe-callbackurl/": {"post": {"operationId": "org-resources_user-subscription_submit-auth-init_submit_auth_init_pe_callbackurl", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "parameters": []}, "/org-resources/user-subscription/{id}/": {"get": {"operationId": "org-resources_user-subscription_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "patch": {"operationId": "org-resources_user-subscription_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserSubscription"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserSubscription"}}}, "tags": ["org-resources"]}, "delete": {"operationId": "org-resources_user-subscription_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["org-resources"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user subscription.", "required": true, "type": "integer"}]}, "/payment-gateways/razorpay/webhook/": {"post": {"operationId": "payment-gateways_razorpay_webhook_create", "description": "Handle Razorpay webhook POST request", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["payment-gateways"]}, "parameters": []}, "/upload-file/": {"post": {"operationId": "upload-file_create", "description": "", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["upload-file"]}, "parameters": []}}, "definitions": {"Group": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "user_count": {"title": "User count", "type": "string", "readOnly": true}, "role_count": {"title": "Role count", "type": "string", "readOnly": true}, "permissions_detail": {"title": "Permissions detail", "type": "string", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 150, "minLength": 1}, "permissions": {"type": "array", "items": {"type": "integer"}, "uniqueItems": true}}}, "Permission": {"required": ["name", "codename", "content_type"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "permission_code": {"title": "Permission code", "type": "string", "readOnly": true}, "module": {"title": "Module", "type": "string", "readOnly": true}, "description": {"title": "Description", "type": "string", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "codename": {"title": "Codename", "type": "string", "maxLength": 100, "minLength": 1}, "content_type": {"title": "Content type", "type": "integer"}}}, "Role": {"required": ["name", "business", "permissions"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "business_name": {"title": "Business name", "type": "string", "readOnly": true, "minLength": 1, "x-nullable": true}, "group_name": {"title": "Group name", "type": "string", "readOnly": true, "minLength": 1, "x-nullable": true}, "permissions_detail": {"title": "Permissions detail", "type": "string", "readOnly": true}, "name": {"title": "Name", "description": "Name of the role.", "type": "string", "maxLength": 50, "minLength": 1}, "short_code": {"title": "Short code", "description": "Short code representing the role.", "type": "string", "maxLength": 3, "minLength": 1}, "description": {"title": "Description", "description": "Detailed description of what this role does and its responsibilities.", "type": "string", "x-nullable": true}, "is_system_role": {"title": "Is system role", "description": "Whether this is a system role (BUS-ADMIN, CORP-ADMIN, etc.).", "type": "boolean", "default": false}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "business": {"title": "Business", "description": "Business this role belongs to. Null for system roles.", "type": "integer", "x-nullable": true}, "group": {"title": "Group", "description": "Django Group this role belongs to (e.g., BUSINESS-GRP, CORPORATE-GRP).", "type": "integer", "x-nullable": true}, "permissions": {"description": "Select permissions associated with this role.", "type": "array", "items": {"description": "Select permissions associated with this role.", "type": "integer"}, "uniqueItems": true}}}, "UserRole": {"required": ["user", "role", "business"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "user_email": {"title": "User email", "type": "string", "readOnly": true, "minLength": 1}, "user_mobile": {"title": "User mobile", "type": "string", "readOnly": true, "minLength": 1}, "user_name": {"title": "User name", "type": "string", "readOnly": true, "minLength": 1}, "role_name": {"title": "Role name", "type": "string", "readOnly": true, "minLength": 1}, "role_description": {"title": "Role description", "type": "string", "readOnly": true, "minLength": 1}, "role_short_code": {"title": "Role short code", "type": "string", "readOnly": true, "minLength": 1}, "business_name": {"title": "Business name", "type": "string", "readOnly": true, "minLength": 1}, "assigned_by_email": {"title": "Assigned by email", "type": "string", "readOnly": true, "minLength": 1, "x-nullable": true}, "scope_description": {"title": "Scope description", "type": "string", "readOnly": true}, "region": {"title": "Region", "description": "Region code for region-based access (e.g., TN, KA).", "type": "string", "maxLength": 100, "x-nullable": true}, "association_id": {"title": "Association id", "description": "Association ID for association-based access (company_id, hotel_id, or agent_id).", "type": "integer", "maximum": 9223372036854775807, "minimum": -9223372036854775808, "x-nullable": true}, "is_active": {"title": "Is active", "description": "Whether this role assignment is active.", "type": "boolean"}, "assigned_at": {"title": "Assigned at", "description": "When this role was assigned.", "type": "string", "format": "date-time", "readOnly": true}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "description": "User this role is assigned to.", "type": "integer"}, "role": {"title": "Role", "description": "Role assigned to the user.", "type": "integer"}, "business": {"title": "Business", "description": "Business this role assignment belongs to.", "type": "integer"}, "assigned_by": {"title": "Assigned by", "description": "User who assigned this role.", "type": "integer", "x-nullable": true}}}, "UserAdminList": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "custom_id": {"title": "Custom id", "description": "Custom ID for the user.", "type": "string", "maxLength": 15}, "email": {"title": "Email", "description": "Email address of the user.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "mobile_number": {"title": "Mobile number", "description": "Mobile number of the user (10 digits only).", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "x-nullable": true}, "name": {"title": "Name", "description": "Name of the user.", "type": "string", "maxLength": 255, "x-nullable": true}, "first_name": {"title": "First name", "description": "First name of the user.", "type": "string", "maxLength": 150, "x-nullable": true}, "last_name": {"title": "Last name", "description": "Last name of the user.", "type": "string", "maxLength": 150, "x-nullable": true}, "company_id": {"title": "Company id", "description": "company detail id", "type": "integer", "maximum": 9223372036854775807, "minimum": -9223372036854775808, "x-nullable": true}, "business_id": {"title": "Business id", "description": "Business detail id", "type": "integer", "maximum": 9223372036854775807, "minimum": -9223372036854775808, "x-nullable": true}, "category": {"title": "Category", "description": "Category of the user.", "type": "string", "maxLength": 20}, "default_group": {"title": "Default group", "description": "Switched group", "type": "string", "maxLength": 30, "minLength": 1, "x-nullable": true}, "is_active": {"title": "Is active", "description": "Whether the user account is active.", "type": "boolean"}, "is_staff": {"title": "Is staff", "description": "Whether the user has staff privileges.", "type": "boolean"}, "email_verified": {"title": "Email verified", "description": "Whether the user's email address is verified.", "type": "boolean"}, "mobile_verified": {"title": "Mobile verified", "description": "Whether the user's mobile number is verified.", "type": "boolean"}, "first_booking": {"title": "First booking", "description": "Status for first confirmed booking", "type": "boolean"}, "created": {"title": "Created", "description": "Date and time when the user account was created.", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "description": "Date and time when the user account was last updated.", "type": "string", "format": "date-time", "readOnly": true}, "groups": {"description": "The groups this user belongs to. A user will get all permissions granted to each of their groups.", "type": "array", "items": {"description": "The groups this user belongs to. A user will get all permissions granted to each of their groups.", "type": "integer"}, "uniqueItems": true}, "roles": {"description": "Select roles associated with this user.", "type": "array", "items": {"description": "Select roles associated with this user.", "type": "integer"}, "uniqueItems": true}}}, "User": {"required": ["password"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "custom_id": {"title": "Custom id", "description": "Custom ID for the user.", "type": "string", "maxLength": 15}, "email": {"title": "Email", "description": "Email address of the user.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "password": {"title": "Password", "type": "string", "pattern": "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[@#$!%^&*()\\-_+=])[A-Za-z\\d@#$!%^&*()\\-_+=]{8,}$", "minLength": 1}, "mobile_number": {"title": "Mobile number", "description": "Mobile number of the user (10 digits only).", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "x-nullable": true}, "first_name": {"title": "First name", "description": "First name of the user.", "type": "string", "maxLength": 150, "x-nullable": true}, "last_name": {"title": "Last name", "description": "Last name of the user.", "type": "string", "maxLength": 150, "x-nullable": true}, "last_login": {"title": "Last login", "type": "string", "format": "date-time", "x-nullable": true}, "category": {"title": "Category", "description": "Category of the user.", "type": "string", "maxLength": 20}, "is_staff": {"title": "Is staff", "description": "Whether the user has staff privileges.", "type": "boolean"}, "is_active": {"title": "Is active", "description": "Whether the user account is active.", "type": "boolean"}, "roles": {"description": "Select roles associated with this user.", "type": "array", "items": {"description": "Select roles associated with this user.", "type": "integer"}, "uniqueItems": true}}}, "PropertyAnalytics": {"required": ["visit_count"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "ip_address": {"title": "Ip address", "type": "string", "maxLength": 220}, "visit_count": {"title": "Visit count", "type": "integer", "maximum": 2147483647, "minimum": 0}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}, "property_info": {"title": "Property info", "type": "integer", "x-nullable": true}}}, "Login": {"required": ["password"], "type": "object", "properties": {"email": {"title": "Email", "type": "string", "format": "email", "minLength": 1, "x-nullable": true}, "mobile_number": {"title": "Mobile number", "type": "string", "x-nullable": true}, "username": {"title": "Username", "type": "string", "x-nullable": true}, "group_name": {"title": "Group name", "type": "string", "x-nullable": true}, "password": {"title": "Password", "type": "string", "minLength": 1}}}, "UserSignup": {"required": ["password"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "password": {"title": "Password", "type": "string", "pattern": "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[@#$!%^&*()\\-_+=])[A-Za-z\\d@#$!%^&*()\\-_+=]{8,}$", "minLength": 1}, "email": {"title": "Email", "description": "Email address of the user.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "name": {"title": "Name", "description": "Name of the user.", "type": "string", "maxLength": 255, "x-nullable": true}, "mobile_number": {"title": "Mobile number", "description": "Mobile number of the user (10 digits only).", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "x-nullable": true}, "roles": {"description": "Select roles associated with this user.", "type": "array", "items": {"description": "Select roles associated with this user.", "type": "integer"}, "uniqueItems": true}, "referred_code": {"title": "Referred code", "description": "Referred by user code.", "type": "string", "maxLength": 120}}}, "UserList": {"type": "object", "properties": {}}, "TokenObtainPair": {"required": ["id", "password"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "minLength": 1}, "password": {"title": "Password", "type": "string", "minLength": 1}}}, "TokenRefresh": {"required": ["refresh"], "type": "object", "properties": {"refresh": {"title": "Refresh", "type": "string", "minLength": 1}, "access": {"title": "Access", "type": "string", "readOnly": true, "minLength": 1}}}, "TokenVerify": {"required": ["token"], "type": "object", "properties": {"token": {"title": "Token", "type": "string", "minLength": 1}}}, "AppliedCoupon": {"required": ["discount_amount", "coupon", "booking"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "discount_amount": {"title": "Discount amount", "type": "string", "format": "decimal"}, "coupon": {"title": "Coupon", "type": "integer"}, "booking": {"title": "Booking", "type": "integer"}}}, "BookingCommission": {"required": ["commission", "tax_percentage", "tax_amount", "com_amnt", "com_amnt_withtax", "tcs", "tds", "hotelier_amount", "final_payout", "commission_type", "booking"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "commission": {"title": "Commission", "type": "number"}, "tax_percentage": {"title": "Tax percentage", "type": "number"}, "tax_amount": {"title": "Tax amount", "type": "number"}, "com_amnt": {"title": "Com amnt", "type": "number"}, "com_amnt_withtax": {"title": "Com amnt withtax", "type": "number"}, "tcs": {"title": "Tcs", "type": "number"}, "tds": {"title": "Tds", "type": "number"}, "hotelier_amount": {"title": "Hotelier amount", "type": "number"}, "final_payout": {"title": "Final payout", "type": "number"}, "commission_type": {"title": "Commission type", "type": "string", "maxLength": 20, "minLength": 1}, "hotelier_amount_with_tax": {"title": "Hotelier amount with tax", "type": "string", "format": "decimal"}, "is_payment_approved": {"title": "Is payment approved", "description": "Whether payment approved by admin", "type": "boolean"}, "payout_status": {"title": "Payout status", "type": "string", "enum": ["PENDING", "ASSIGNED", "INITIATED", "INIT-FAIL", "PAID", "FAILED"]}, "booking": {"title": "Booking", "type": "integer"}, "latest_payout_reference": {"title": "Latest payout reference", "type": "integer", "x-nullable": true}}}, "Booking": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "commission_info": {"$ref": "#/definitions/BookingCommission"}, "invoice_pdf_url": {"title": "Invoice pdf url", "type": "string", "readOnly": true}, "receipt_pdf_url": {"title": "Receipt pdf url", "type": "string", "readOnly": true}, "booking_source": {"title": "Booking source", "description": "Source of the booking", "type": "string", "enum": ["AGENT", "CORPORATE", "B2C", "GUEST"]}, "reference_code": {"title": "Reference code", "type": "string", "maxLength": 500, "x-nullable": true}, "confirmation_code": {"title": "Confirmation code", "type": "string", "maxLength": 500, "x-nullable": true}, "invoice_id": {"title": "Invoice id", "type": "string", "maxLength": 500, "x-nullable": true}, "guest_access_token": {"title": "Guest access token", "description": "Secure token for guest users to access their booking without authentication", "type": "string", "maxLength": 255, "x-nullable": true}, "booking_type": {"title": "Booking type", "description": "booking type.", "type": "string", "enum": ["HOLIDAYPACK", "HOTEL", "VEHICLE", "FLIGHT", "VISA", "EVENT"]}, "adult_count": {"title": "Adult count", "description": "adults count", "type": "integer", "maximum": 32767, "minimum": 0}, "child_count": {"title": "Child count", "description": "children count", "type": "integer", "maximum": 32767, "minimum": 0}, "child_age_list": {"title": "Child age list", "type": "object", "x-nullable": true}, "infant_count": {"title": "Infant count", "description": "infant count", "type": "integer", "maximum": 32767, "minimum": 0}, "coupon_code": {"title": "Coupon code", "type": "string", "maxLength": 64}, "discount": {"title": "Discount", "type": "string", "format": "decimal"}, "pro_member_discount_percent": {"title": "Pro member discount percent", "description": "Discount percent for pro member", "type": "integer", "maximum": 32767, "minimum": 0}, "pro_member_discount_value": {"title": "Pro member discount value", "description": "Discount value", "type": "integer", "maximum": 32767, "minimum": 0}, "subtotal": {"title": "Subtotal", "description": "Price for the booking", "type": "string", "format": "decimal"}, "gst_percentage": {"title": "Gst percentage", "description": "GST % for the booking", "type": "string", "format": "decimal"}, "gst_amount": {"title": "Gst amount", "description": "GST amount for the booking", "type": "string", "format": "decimal"}, "gst_type": {"title": "Gst type", "description": "GST Type", "type": "string", "enum": ["", "IGST", "CGST/SGST"]}, "service_tax": {"title": "Service tax", "description": "Service tax for the booking", "type": "string", "format": "decimal"}, "total_discount": {"title": "Total discount", "description": "Total discount of a booking", "type": "string", "format": "decimal"}, "final_amount": {"title": "Final amount", "description": "Final amount after considering gst, discount", "type": "string", "format": "decimal"}, "total_payment_made": {"title": "Total payment made", "description": "Total Payment made", "type": "string", "format": "decimal"}, "min_payment_percent": {"title": "Min payment percent", "description": "Minimum %% of post-coupon final_amount required as first/advance payment", "type": "string", "format": "decimal", "x-nullable": true}, "min_payment_amount": {"title": "Min payment amount", "description": "Minimum rupee payment required for confirmation (optional).", "type": "string", "format": "decimal", "x-nullable": true}, "agent_markup_percent": {"title": "Agent markup percent", "description": "Agent markup percentage applied to this booking", "type": "string", "format": "decimal", "x-nullable": true}, "agent_markup_amount": {"title": "Agent markup amount", "description": "Agent markup amount applied to this booking", "type": "string", "format": "decimal", "x-nullable": true}, "final_price_with_markup": {"title": "Final price with markup", "description": "Final price including agent markup", "type": "string", "format": "decimal", "x-nullable": true}, "pay_with_commission": {"title": "Pay with commission", "description": "True: customer pays amount including agent commission/markup; False: pay net amount only. Used for hotel and flight bookings.", "type": "boolean"}, "status": {"title": "Status", "type": "string", "enum": ["pending", "payment_pending_verification", "confirmed", "canceled", "completed", "no_show", "on_hold"]}, "on_hold_end_time": {"title": "On hold end time", "description": "Booking hold end time", "type": "string", "format": "date-time", "x-nullable": true}, "description": {"title": "Description", "type": "string"}, "additional_notes": {"title": "Additional notes", "type": "string"}, "active": {"title": "Active", "type": "boolean"}, "is_reviewed": {"title": "Is reviewed", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "is_checkin": {"title": "Is checkin", "description": "Check_in status", "type": "boolean"}, "is_checkout": {"title": "Is checkout", "description": "Check_out status", "type": "boolean"}, "is_direct_pay": {"title": "Is direct pay", "type": "boolean"}, "user": {"title": "Booking_user", "type": "integer", "x-nullable": true}, "company": {"title": "Company", "type": "integer", "x-nullable": true}, "agent": {"title": "Agent", "description": "Agent who created this booking (null if direct booking)", "type": "integer", "x-nullable": true}, "hotel_booking": {"title": "Hotel_booking", "type": "integer", "x-nullable": true}, "holiday_package_booking": {"title": "Hotel_package_booking", "type": "integer", "x-nullable": true}, "vehicle_booking": {"title": "Vehicle_booking", "type": "integer", "x-nullable": true}, "flight_booking": {"title": "Flight_booking", "type": "integer", "x-nullable": true}, "visa_booking": {"title": "Visa_booking", "type": "integer", "x-nullable": true}, "event_booking": {"title": "Event_booking", "type": "integer", "x-nullable": true}, "coupon": {"title": "Booking_coupon", "type": "integer", "x-nullable": true}, "source_query": {"title": "Source query", "description": "Query this booking was created from", "type": "integer", "x-nullable": true}}}, "BookingCheckInOut": {"type": "object", "properties": {"is_checkin": {"title": "Is checkin", "description": "Check_in status", "type": "boolean"}, "is_checkout": {"title": "Is checkout", "description": "Check_out status", "type": "boolean"}}}, "EventBooking": {"required": ["event_name", "event_date", "location"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "event_name": {"title": "Event name", "description": "Name of the event", "type": "string", "maxLength": 200, "minLength": 1}, "event_type": {"title": "Event type", "description": "Type of event", "type": "string", "enum": ["conference", "wedding", "corporate", "seminar", "exhibition", "festival", "other"]}, "event_date": {"title": "Event date", "description": "Event start date and time", "type": "string", "format": "date-time"}, "event_end_date": {"title": "Event end date", "description": "Event end date and time (optional)", "type": "string", "format": "date-time", "x-nullable": true}, "location": {"title": "Location", "description": "Event location (city/venue)", "type": "string", "maxLength": 200, "minLength": 1}, "attendee_count": {"title": "Attendee count", "description": "Number of attendees", "type": "integer", "maximum": 2147483647, "minimum": 0}, "budget_range": {"title": "Budget range", "description": "Budget range for the event", "type": "string", "enum": ["under_50000", "50000_100000", "100000_250000", "250000_500000", "above_500000"], "x-nullable": true}, "special_requirements": {"title": "Special requirements", "description": "Any special requirements", "type": "string"}, "status": {"title": "Status", "description": "Current status of the booking", "type": "string", "enum": ["pending", "assigned", "documents_reviewed", "quoted", "confirmed", "completed", "cancelled"]}, "itinerary_details": {"title": "Itinerary details", "description": "Admin-added itinerary details", "type": "object", "x-nullable": true}, "admin_notes": {"title": "Admin notes", "description": "Admin notes and comments", "type": "string"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "Invoice": {"required": ["invoice_date", "billed_by"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "logo": {"title": "Logo", "type": "string", "maxLength": 255}, "header": {"title": "Header", "type": "string", "maxLength": 255}, "footer": {"title": "Footer", "type": "string", "maxLength": 255}, "invoice_number": {"title": "Invoice number", "type": "string", "maxLength": 50, "minLength": 1}, "invoice_date": {"title": "Invoice date", "type": "string", "format": "date"}, "due_date": {"title": "Due date", "type": "string", "format": "date", "x-nullable": true}, "notes": {"title": "Notes", "type": "string", "maxLength": 255}, "invoice_pdf": {"title": "Invoice pdf", "description": "Final invoice PDF", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "proforma_pdf": {"title": "Proforma pdf", "description": "Proforma invoice PDF", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "receipt_pdf": {"title": "Receipt pdf", "description": "Payment receipt PDF", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "credit_note_pdf": {"title": "Credit note pdf", "description": "Credit note PDF (for refunds/adjustments)", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "voucher_pdf": {"title": "Voucher pdf", "description": "Booking voucher PDF", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "other_documents": {"title": "Other documents", "description": "List of other document URLs [{name, url, type, uploaded_at}]", "type": "object"}, "billed_by_details": {"title": "Billed by details", "type": "object", "x-nullable": true}, "billed_to_details": {"title": "Billed to details", "type": "object", "x-nullable": true}, "billed_to_type": {"title": "Billed to type", "description": "Type of billed_to_ref_id (user/company/agent)", "type": "string", "maxLength": 20}, "billed_to_ref_id": {"title": "Billed to ref id", "description": "Reference id for billed_to_type (User.id / CompanyDetail.id / AgentDetail.id)", "type": "integer", "maximum": 9223372036854775807, "minimum": -9223372036854775808, "x-nullable": true}, "supply_details": {"title": "Supply details", "type": "object", "x-nullable": true}, "items": {"title": "Items", "type": "object", "x-nullable": true}, "payment_details": {"title": "Payment details", "type": "object", "x-nullable": true}, "additional_options": {"title": "Additional options", "type": "object", "x-nullable": true}, "GST": {"title": "GST", "type": "integer", "maximum": 2147483647, "minimum": 0}, "GST_type": {"title": "GST type", "type": "string", "maxLength": 20}, "total": {"title": "Total", "type": "integer", "maximum": 2147483647, "minimum": 0}, "total_amount": {"title": "Total amount", "type": "integer", "maximum": 2147483647, "minimum": 0}, "total_tax": {"title": "Total tax", "type": "integer", "maximum": 2147483647, "minimum": 0}, "status": {"title": "Status", "type": "string", "enum": ["PI", "Pending", "Paid", "Overdue", "Refunded", "Cancelled", "Refund Pending"]}, "next_schedule_date": {"title": "Next schedule date", "type": "string", "format": "date", "x-nullable": true}, "tags": {"title": "Tags", "type": "string", "maxLength": 255}, "reference": {"title": "Reference", "type": "string", "enum": ["Booking", "Subscription", "Other"]}, "discount": {"title": "Discount", "type": "string", "format": "decimal"}, "pro_member_discount": {"title": "Pro member discount", "type": "string", "format": "decimal"}, "created_by": {"title": "Created by", "type": "string", "maxLength": 50}, "updated_by": {"title": "Updated by", "type": "string", "maxLength": 50}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "invoice_type": {"title": "Invoice type", "description": "Invoice type - PROFORMA for queries, INVOICE for confirmed bookings", "type": "string", "enum": ["PROFORMA", "INVOICE"]}, "billed_by": {"title": "Billed by", "type": "integer"}, "billed_to": {"title": "Billed to", "type": "integer", "x-nullable": true}, "source_query": {"title": "Source query", "description": "Query this invoice was created from", "type": "integer", "x-nullable": true}}}, "BookingPaymentDetail": {"required": ["merchant_transaction_id", "booking"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "merchant_transaction_id": {"title": "Merchant transaction id", "type": "string", "maxLength": 150, "minLength": 1}, "transaction_id": {"title": "Transaction id", "type": "string", "maxLength": 150}, "code": {"title": "Code", "type": "string", "maxLength": 50}, "message": {"title": "Message", "type": "string", "maxLength": 150}, "payment_type": {"title": "Payment type", "type": "string", "enum": ["PAYMENT GATEWAY", "WALLET", "NBFC", "DIRECT", "BANK TRANSFER"], "x-nullable": true}, "payment_medium": {"title": "Payment medium", "type": "string", "enum": ["PHONE PAY", "RAZORPAY", "PAYMENT GATEWAY", "PayU", "Idbook", "Hotel", "NEFT", "RTGS", "IMPS", "UPI", "NET_BANKING", "Others"], "x-nullable": true}, "amount": {"title": "Amount", "type": "string", "format": "decimal", "x-nullable": true}, "is_transaction_success": {"title": "Is transaction success", "type": "boolean"}, "transaction_for": {"title": "Transaction for", "type": "string", "enum": ["booking_confirmed", "booking_refund", "cancellation_fee", "referral_booking", "booking_cashback", "signup_reward", "pro_member_bonus", "pro_member_bonus_expiry", "wallet_recharge", "others"]}, "transaction_details": {"title": "Transaction details", "type": "object", "x-nullable": true}, "payment_mode": {"title": "Payment mode", "type": "string", "enum": ["Cash", "Card", "Bank Transfer", "UPI", "Cheque", "Other"]}, "reference": {"title": "Reference", "type": "string", "enum": ["Booking", "Subscription", "Other"]}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "booking": {"title": "Booking", "type": "integer"}, "invoice": {"title": "Invoice", "type": "integer", "x-nullable": true}}}, "PropertyPaymentBooking": {"required": ["confirmed_checkin_time", "confirmed_checkout_time", "merchant_transaction_id", "payment_type", "payment_medium", "payment_amount", "is_transaction_success"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "reference_code": {"title": "Reference code", "type": "string", "maxLength": 500, "x-nullable": true}, "confirmation_code": {"title": "Confirmation code", "type": "string", "maxLength": 500, "x-nullable": true}, "final_amount": {"title": "Final amount", "description": "Final amount after considering gst, discount", "type": "string", "format": "decimal"}, "total_payment_made": {"title": "Total payment made", "description": "Total Payment made", "type": "string", "format": "decimal"}, "invoice_id": {"title": "Invoice id", "type": "string", "maxLength": 500, "x-nullable": true}, "confirmed_checkin_time": {"title": "Confirmed checkin time", "type": "string", "format": "date-time", "x-nullable": true}, "confirmed_checkout_time": {"title": "Confirmed checkout time", "type": "string", "format": "date-time", "x-nullable": true}, "merchant_transaction_id": {"title": "Merchant transaction id", "type": "string", "minLength": 1, "x-nullable": true}, "payment_type": {"title": "Payment type", "type": "string", "minLength": 1, "x-nullable": true}, "payment_medium": {"title": "Payment medium", "type": "string", "minLength": 1, "x-nullable": true}, "payment_amount": {"title": "Payment amount", "type": "string", "format": "decimal", "x-nullable": true}, "is_transaction_success": {"title": "Is transaction success", "type": "boolean", "x-nullable": true}}}, "QueryCommunication": {"required": ["message"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "user_name": {"title": "User name", "type": "string", "readOnly": true, "minLength": 1}, "user_email": {"title": "User email", "type": "string", "format": "email", "readOnly": true, "minLength": 1}, "communication_type": {"title": "Communication type", "type": "string", "enum": ["NOTE", "EMAIL", "CALL", "SMS", "STATUS_UPDATE", "QUOTE_UPDATE"]}, "subject": {"title": "Subject", "type": "string", "maxLength": 200}, "message": {"title": "Message", "description": "Communication message/notes", "type": "string", "minLength": 1}, "attachments": {"title": "Attachments", "description": "List of attachment URLs", "type": "object", "x-nullable": true}, "is_internal": {"title": "Is internal", "description": "Internal note (not visible to customer)", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "query": {"title": "Query", "description": "Query this communication belongs to", "type": "integer", "readOnly": true}, "user": {"title": "User", "description": "User who added this communication", "type": "integer", "readOnly": true, "x-nullable": true}}}, "Query": {"required": ["query_type"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "communications": {"type": "array", "items": {"$ref": "#/definitions/QueryCommunication"}, "readOnly": true}, "raised_by_name": {"title": "Raised by name", "type": "string", "readOnly": true, "minLength": 1}, "raised_by_email": {"title": "Raised by email", "type": "string", "format": "email", "readOnly": true, "minLength": 1}, "referred_by_name": {"title": "Referred by name", "type": "string", "readOnly": true, "minLength": 1}, "company_name": {"title": "Company name", "type": "string", "readOnly": true, "minLength": 1}, "booking_details": {"title": "Booking details", "type": "string", "readOnly": true}, "invoice_details": {"title": "Invoice details", "type": "string", "readOnly": true}, "query_type": {"title": "Query type", "description": "Type of query (HOTEL, FLIGHT, VISA, EVENT, etc.)", "type": "string", "enum": ["HOLIDAYPACK", "HOTEL", "VEHICLE", "FLIGHT", "VISA", "EVENT"]}, "query_reference": {"title": "Query reference", "description": "Unique reference code for query", "type": "string", "readOnly": true, "minLength": 1, "x-nullable": true}, "booking_for": {"title": "Booking for", "description": "Booking made for whom", "type": "string", "enum": ["B2C", "CORPORATE", "AGENT"]}, "referral_type": {"title": "Referral type", "description": "Type of referral", "type": "string", "enum": ["EMPLOYEE", "USER", "AGENT"], "x-nullable": true}, "query_data": {"title": "Query data", "description": "Service-specific query data (destination, dates, etc.)", "type": "object"}, "status": {"title": "Status", "description": "Current status of query", "type": "string", "enum": ["pending", "assigned", "documents_reviewed", "quoted", "confirmed", "completed", "cancelled"]}, "quote_amount": {"title": "Quote amount", "description": "Quoted amount", "type": "string", "format": "decimal", "x-nullable": true}, "coupon_code": {"title": "Coupon code", "description": "Optional partner coupon captured on the query", "type": "string", "maxLength": 64}, "guest_access_token": {"title": "Guest access token", "description": "Secure token for guest users to access their query without authentication", "type": "string", "maxLength": 255, "x-nullable": true}, "itinerary_details": {"title": "Itinerary details", "description": "Admin-added itinerary details", "type": "object", "x-nullable": true}, "admin_notes": {"title": "Admin notes", "description": "Admin notes", "type": "string"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "expires_at": {"title": "Expires at", "description": "Query expiry date (for quotes)", "type": "string", "format": "date-time", "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "raised_by": {"title": "Raised by", "description": "User who created/submitted the query", "type": "integer", "x-nullable": true}, "company": {"title": "Company", "description": "Company if query is for corporate", "type": "integer", "x-nullable": true}, "agent": {"title": "Agent", "description": "Agent associated with this query (if created/managed by agent)", "type": "integer", "x-nullable": true}, "assigned_to": {"title": "Assigned to", "description": "Business user currently assigned to handle this query", "type": "integer", "x-nullable": true}, "referred_by": {"title": "Referred by", "description": "Employee or user who referred this query", "type": "integer", "x-nullable": true}, "invoice": {"title": "Invoice", "description": "Proforma invoice for this query (converts to final invoice on booking)", "type": "integer", "readOnly": true, "x-nullable": true}, "booking": {"title": "Booking", "description": "Booking created from this query", "type": "integer", "readOnly": true, "x-nullable": true}}}, "Review": {"required": ["overall_rating"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "property_review": {"title": "Property review", "type": "object"}, "overall_rating": {"title": "Overall rating", "description": "Overall rating for the booked service.", "type": "string", "format": "decimal"}, "agency_review": {"title": "Agency review", "type": "object", "x-nullable": true}, "overall_agency_rating": {"title": "Overall agency rating", "description": "Overall rating for the agency.", "type": "string", "format": "decimal", "x-nullable": true}, "created": {"title": "Created", "description": "Date and time when the review was created.", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "description": "Date and time when the review was last updated.", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "description": "Whether the review is active.", "type": "boolean"}, "property": {"title": "Property", "description": "Select the property for which this review is submitted.", "type": "integer", "x-nullable": true}, "booking": {"title": "Booking", "type": "integer", "x-nullable": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}}}, "VisaBooking": {"required": ["destination_country", "travel_date"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "destination_country": {"title": "Destination country", "description": "Destination country for visa", "type": "string", "maxLength": 100, "minLength": 1}, "travel_date": {"title": "Travel date", "description": "Intended travel date", "type": "string", "format": "date"}, "visa_type": {"title": "Visa type", "description": "Type of visa required", "type": "string", "enum": ["tourist", "business", "transit", "student", "work", "other"]}, "passport_number": {"title": "Passport number", "description": "Passport number", "type": "string", "maxLength": 50}, "passport_expiry": {"title": "Passport expiry", "description": "Passport expiry date", "type": "string", "format": "date", "x-nullable": true}, "travel_purpose": {"title": "Travel purpose", "description": "Purpose of travel", "type": "string"}, "documents_uploaded": {"title": "Documents uploaded", "description": "JSON field for document URLs", "type": "object", "x-nullable": true}, "special_requirements": {"title": "Special requirements", "description": "Any special requirements", "type": "string"}, "status": {"title": "Status", "description": "Current status of the booking", "type": "string", "enum": ["pending", "assigned", "documents_reviewed", "quoted", "confirmed", "completed", "cancelled"]}, "itinerary_details": {"title": "Itinerary details", "description": "Admin-added itinerary details", "type": "object", "x-nullable": true}, "admin_notes": {"title": "Admin notes", "description": "Admin notes and comments", "type": "string"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "CouponAmountSlab": {"required": ["min_amount", "discount_value", "campaign"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "campaign_name": {"title": "Campaign name", "type": "string", "readOnly": true, "minLength": 1}, "sort_order": {"title": "Sort order", "type": "integer", "maximum": 32767, "minimum": 0}, "min_amount": {"title": "Min amount", "type": "string", "format": "decimal"}, "max_amount": {"title": "Max amount", "description": "Upper bound exclusive; null = no upper limit", "type": "string", "format": "decimal", "x-nullable": true}, "discount_type": {"title": "Discount type", "type": "string", "enum": ["AMOUNT", "PERCENT"]}, "discount_value": {"title": "Discount value", "type": "string", "format": "decimal"}, "max_discount_per_booking": {"title": "Max discount per booking", "description": "Cap discount for this slab", "type": "string", "format": "decimal", "x-nullable": true}, "campaign": {"title": "Campaign", "type": "integer"}}}, "CouponCampaign": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "slabs": {"type": "array", "items": {"$ref": "#/definitions/CouponAmountSlab"}, "readOnly": true}, "partner_name": {"title": "Partner name", "type": "string", "readOnly": true, "minLength": 1}, "name": {"title": "Name", "type": "string", "maxLength": 200, "minLength": 1}, "internal_code": {"title": "Internal code", "description": "Optional reference for ops", "type": "string", "maxLength": 100}, "allowed_booking_types": {"title": "Allowed booking types", "description": "Subset of BOOKING_TYPE values, e.g. ['HOLIDAYPACK','HOTEL']. Empty = all types.", "type": "object"}, "max_redemptions_total": {"title": "Max redemptions total", "description": "Stop after this many successful redemptions (campaign-wide).", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "max_redemptions_per_user": {"title": "Max redemptions per user", "description": "Max redemptions per user for this campaign.", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "max_total_discount_budget": {"title": "Max total discount budget", "description": "Sum of discount_applied across redemptions must not exceed this.", "type": "string", "format": "decimal", "x-nullable": true}, "campaign_valid_from": {"title": "Campaign valid from", "type": "string", "format": "date-time", "x-nullable": true}, "campaign_valid_to": {"title": "Campaign valid to", "type": "string", "format": "date-time", "x-nullable": true}, "funding_source": {"title": "Funding source", "type": "string", "maxLength": 100}, "terms_url": {"title": "Terms url", "type": "string", "format": "uri", "maxLength": 200}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "partner": {"title": "Partner", "type": "integer", "x-nullable": true}}}, "CouponClaim": {"required": ["discount_amount", "coupon", "booking"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "coupon_code": {"title": "Coupon code", "type": "string", "readOnly": true, "minLength": 1}, "coupon_name": {"title": "Coupon name", "type": "string", "readOnly": true, "minLength": 1}, "campaign_id": {"title": "Campaign id", "type": "integer", "readOnly": true}, "campaign_name": {"title": "Campaign name", "type": "string", "readOnly": true, "minLength": 1}, "partner_id": {"title": "Partner id", "type": "integer", "readOnly": true}, "partner_name": {"title": "Partner name", "type": "string", "readOnly": true, "minLength": 1}, "booking_id": {"title": "Booking id", "type": "integer", "readOnly": true}, "user_id": {"title": "User id", "type": "integer", "readOnly": true}, "user_name": {"title": "User name", "type": "string", "readOnly": true, "minLength": 1}, "user_email": {"title": "User email", "type": "string", "readOnly": true, "minLength": 1}, "discount_amount": {"title": "Discount amount", "type": "string", "format": "decimal"}, "coupon": {"title": "Coupon", "type": "integer"}, "booking": {"title": "Booking", "type": "integer"}}}, "CouponPartner": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 200, "minLength": 1}, "partner_type": {"title": "Partner type", "description": "e.g. bank, pg, media, matrimony", "type": "string", "maxLength": 50}, "display_name": {"title": "Display name", "type": "string", "maxLength": 200}, "contact_email": {"title": "Contact email", "type": "string", "format": "email", "maxLength": 254}, "notes": {"title": "Notes", "type": "string"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "CouponRedemption": {"required": ["booking_subtotal", "discount_applied", "coupon", "booking"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "coupon_code": {"title": "Coupon code", "type": "string", "readOnly": true, "minLength": 1}, "coupon_name": {"title": "Coupon name", "type": "string", "readOnly": true, "minLength": 1}, "campaign_id": {"title": "Campaign id", "type": "integer", "readOnly": true}, "campaign_name": {"title": "Campaign name", "type": "string", "readOnly": true, "minLength": 1}, "partner_id": {"title": "Partner id", "type": "integer", "readOnly": true}, "partner_name": {"title": "Partner name", "type": "string", "readOnly": true, "minLength": 1}, "user_name": {"title": "User name", "type": "string", "readOnly": true, "minLength": 1}, "booking_type": {"title": "Booking type", "type": "string", "enum": ["HOLIDAYPACK", "HOTEL", "VEHICLE", "FLIGHT", "VISA", "EVENT"]}, "booking_subtotal": {"title": "Booking subtotal", "type": "string", "format": "decimal"}, "discount_applied": {"title": "Discount applied", "type": "string", "format": "decimal"}, "status": {"title": "Status", "type": "string", "enum": ["confirmed", "reversed"]}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "coupon": {"title": "Coupon", "type": "integer"}, "booking": {"title": "Booking", "type": "integer"}, "user": {"title": "User", "type": "integer", "x-nullable": true}}}, "Coupon": {"required": ["discount"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "code": {"title": "Code", "type": "string"}, "partner_name": {"title": "Partner name", "type": "string", "readOnly": true, "minLength": 1}, "campaign_name": {"title": "Campaign name", "type": "string", "readOnly": true, "minLength": 1}, "name": {"title": "Name", "type": "string", "maxLength": 200}, "is_stay_date": {"title": "Is stay date", "type": "boolean"}, "stay_start_date": {"title": "Stay start date", "type": "string", "format": "date", "x-nullable": true}, "stay_end_date": {"title": "Stay end date", "type": "string", "format": "date", "x-nullable": true}, "is_booking_date": {"title": "Is booking date", "type": "boolean"}, "booking_start_date": {"title": "Booking start date", "type": "string", "format": "date", "x-nullable": true}, "booking_end_date": {"title": "Booking end date", "type": "string", "format": "date", "x-nullable": true}, "discount_type": {"title": "Discount type", "type": "string", "enum": ["AMOUNT", "PERCENT"]}, "discount": {"title": "Discount", "type": "string", "format": "decimal"}, "use_coupon_value_override": {"title": "Use coupon value override", "description": "If true, when campaign slabs are configured, coupon.discount is used as a maximum discount cap (slabs still apply).", "type": "boolean"}, "max_redemptions_total": {"title": "Max redemptions total", "description": "Maximum successful redemptions allowed for this coupon code.", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "max_redemptions_per_user": {"title": "Max redemptions per user", "description": "Maximum times the same user can redeem this coupon code.", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "max_total_discount_budget": {"title": "Max total discount budget", "description": "Total discount amount allowed for this coupon code across all redemptions.", "type": "string", "format": "decimal", "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "campaign": {"title": "Campaign", "type": "integer", "x-nullable": true}, "partner": {"title": "Partner", "type": "integer", "x-nullable": true}, "property": {"title": "Property", "type": "integer", "x-nullable": true}}}, "UserCouponClaim": {"required": ["coupon", "user"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "coupon_code": {"title": "Coupon code", "type": "string", "readOnly": true, "minLength": 1}, "coupon_name": {"title": "Coupon name", "type": "string", "readOnly": true, "minLength": 1}, "campaign_id": {"title": "Campaign id", "type": "integer", "readOnly": true}, "campaign_name": {"title": "Campaign name", "type": "string", "readOnly": true, "minLength": 1}, "partner_id": {"title": "Partner id", "type": "integer", "readOnly": true}, "partner_name": {"title": "Partner name", "type": "string", "readOnly": true, "minLength": 1}, "user_id": {"title": "User id", "type": "integer", "readOnly": true}, "user_name": {"title": "User name", "type": "string", "readOnly": true, "minLength": 1}, "user_email": {"title": "User email", "type": "string", "readOnly": true, "minLength": 1}, "redeemed_discount_so_far": {"title": "Redeemed discount so far", "type": "string", "readOnly": true}, "remaining_discount_budget": {"title": "Remaining discount budget", "type": "string", "readOnly": true}, "is_exclusive": {"title": "Is exclusive", "description": "If true, this coupon is reserved to this user and cannot be used by other users.", "type": "boolean"}, "claimed_discount_budget": {"title": "Claimed discount budget", "description": "Optional per-user discount budget reserved at claim time. When set, user redemptions should not exceed this amount.", "type": "string", "format": "decimal", "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "coupon": {"title": "Coupon", "type": "integer"}, "user": {"title": "User", "type": "integer"}}}, "Customer": {"required": ["user"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "address": {"title": "Customer_address", "description": "Full address", "type": "string", "x-nullable": true}, "gender": {"title": "Gender", "description": "Select the gender of the customer.", "type": "string", "enum": ["Male", "Female", "Other"], "x-nullable": true}, "date_of_birth": {"title": "Date of birth", "description": "Enter the date of birth of the customer.", "type": "string", "format": "date", "x-nullable": true}, "profile_picture": {"title": "Profile picture", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "id_proof_type": {"title": "Id proof type", "type": "string", "enum": ["ADHAR CARD", "VOTER ID CARD", "DRIVING LICENCE", "Others"], "x-nullable": true}, "id_proof": {"title": "Id proof", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "pan_card": {"title": "Pan card", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "pan_card_number": {"title": "Pan card number", "type": "string", "maxLength": 20, "x-nullable": true}, "gstin": {"title": "Gstin", "type": "string", "maxLength": 20, "x-nullable": true}, "aadhar_card": {"title": "Aadhar card", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "aadhar_card_number": {"title": "Aadhar card number", "type": "string", "maxLength": 20, "x-nullable": true}, "loyalty_points": {"title": "Loyalty points", "description": "Total loyalty points earned by the customer.", "type": "integer", "maximum": 2147483647, "minimum": 0}, "membership_status": {"title": "Membership status", "description": "Check if the customer has a membership.", "type": "boolean"}, "emergency_contact_name": {"title": "Emergency contact name", "description": "Name of the customer's emergency contact person.", "type": "string", "maxLength": 100, "x-nullable": true}, "emergency_contact_phone": {"title": "Emergency contact phone", "description": "Phone number of the customer's emergency contact.", "type": "string", "maxLength": 10, "x-nullable": true}, "preferred_language": {"title": "Preferred language", "description": "Preferred language of communication for the customer.", "type": "string", "enum": ["English", "Hindi"], "x-nullable": true}, "dietary_restrictions": {"title": "Dietary restrictions", "description": "Any dietary restrictions or preferences for the customer.", "type": "string", "x-nullable": true}, "special_requests": {"title": "Special requests", "description": "Any special requests or notes from the customer.", "type": "string", "x-nullable": true}, "group_name": {"title": "Group name", "description": "Group for the customer.", "type": "string", "enum": ["ORG", "ADMIN", "DEFAULT"]}, "employee_id": {"title": "Employee id", "type": "string", "maxLength": 20, "x-nullable": true}, "department": {"title": "Department", "type": "string", "maxLength": 30, "x-nullable": true}, "privileged": {"title": "Privileged", "description": "Whether the customer is privileged.", "type": "boolean"}, "active": {"title": "Active", "description": "Whether the customer is active.", "type": "boolean"}, "state": {"title": "State", "type": "string", "maxLength": 50}, "country": {"title": "Country", "type": "string", "maxLength": 50}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "Customer_profile", "description": "user profile in user table", "type": "integer"}, "added_user": {"title": "Added user", "description": "Confirmed / Added User", "type": "integer", "x-nullable": true}, "primary_agent": {"title": "Primary agent", "description": "Primary agent for this customer (most recent or manually set)", "type": "integer", "x-nullable": true}, "agents": {"description": "Agents linked to this customer (can have multiple)", "type": "array", "items": {"description": "Agents linked to this customer (can have multiple)", "type": "integer"}, "uniqueItems": true}}}, "WalletTransaction": {"required": ["transaction_type", "transaction_details"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "running_balance": {"title": "Running balance", "type": "string", "format": "decimal", "readOnly": true}, "code": {"title": "Code", "type": "string", "maxLength": 50}, "amount": {"title": "Amount", "type": "string", "format": "decimal"}, "transaction_type": {"title": "Transaction type", "description": "Credit / Debit", "type": "string", "enum": ["Credit", "Debit"]}, "transaction_for": {"title": "Transaction for", "type": "string", "enum": ["booking_confirmed", "booking_refund", "cancellation_fee", "referral_booking", "booking_cashback", "signup_reward", "pro_member_bonus", "pro_member_bonus_expiry", "wallet_recharge", "others"]}, "transaction_id": {"title": "Transaction id", "description": "transaction id", "type": "string", "maxLength": 350, "x-nullable": true}, "transaction_details": {"title": "Transaction details", "description": "Transaction description", "type": "string", "minLength": 1}, "other_details": {"title": "Other details", "type": "object", "x-nullable": true}, "payment_type": {"title": "Payment type", "type": "string", "enum": ["PAYMENT GATEWAY", "WALLET", "NBFC", "DIRECT", "BANK TRANSFER"]}, "payment_medium": {"title": "Payment medium", "type": "string", "enum": ["PHONE PAY", "RAZORPAY", "PAYMENT GATEWAY", "PayU", "Idbook", "Hotel", "NEFT", "RTGS", "IMPS", "UPI", "NET_BANKING", "Others"]}, "is_transaction_success": {"title": "Is transaction success", "type": "boolean"}, "expiry_date": {"title": "Expiry date", "description": "Expiry date for pro wallet credit amount", "type": "string", "format": "date-time", "x-nullable": true}, "used_amount": {"title": "Used amount", "description": "Amount used from pro wallet", "type": "string", "format": "decimal"}, "remaining_amount": {"title": "Remaining amount", "description": "Remaining amount from pro wallet", "type": "string", "format": "decimal"}, "is_expired": {"title": "Is expired", "description": "Flag to indicate if a pro wallet credit has been expired and processed", "type": "boolean"}, "media": {"title": "Media", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "status": {"title": "Status", "type": "string", "enum": ["Pending", "Completed", "Failed", "Others"]}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}, "company": {"title": "Company", "type": "integer", "x-nullable": true}, "agent": {"title": "Agent", "description": "Agent this transaction belongs to", "type": "integer", "x-nullable": true}}}, "Wallet": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "balance": {"title": "Balance", "type": "string", "format": "decimal"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}, "company": {"title": "Company", "type": "integer", "x-nullable": true}, "agent": {"title": "Agent", "description": "Agent this wallet belongs to", "type": "integer", "x-nullable": true}}}, "PendingRecharge": {"required": ["transaction_type", "transaction_details"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "wallet_id": {"title": "Wallet id", "type": "string", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}, "company": {"title": "Company", "type": "integer", "x-nullable": true}, "agent": {"title": "Agent", "description": "Agent this transaction belongs to", "type": "integer", "x-nullable": true}, "user_name": {"title": "User name", "type": "string", "readOnly": true}, "company_name": {"title": "Company name", "type": "string", "readOnly": true}, "agent_name": {"title": "Agent name", "type": "string", "readOnly": true}, "user_email": {"title": "User email", "type": "string", "readOnly": true}, "user_mobile": {"title": "User mobile", "type": "string", "readOnly": true}, "code": {"title": "Code", "type": "string", "maxLength": 50}, "amount": {"title": "Amount", "type": "string", "format": "decimal"}, "transaction_type": {"title": "Transaction type", "description": "Credit / Debit", "type": "string", "enum": ["Credit", "Debit"]}, "transaction_for": {"title": "Transaction for", "type": "string", "enum": ["booking_confirmed", "booking_refund", "cancellation_fee", "referral_booking", "booking_cashback", "signup_reward", "pro_member_bonus", "pro_member_bonus_expiry", "wallet_recharge", "others"]}, "transaction_id": {"title": "Transaction id", "description": "transaction id", "type": "string", "maxLength": 350, "x-nullable": true}, "transaction_details": {"title": "Transaction details", "description": "Transaction description", "type": "string", "minLength": 1}, "payment_type": {"title": "Payment type", "type": "string", "enum": ["PAYMENT GATEWAY", "WALLET", "NBFC", "DIRECT", "BANK TRANSFER"]}, "payment_medium": {"title": "Payment medium", "type": "string", "enum": ["PHONE PAY", "RAZORPAY", "PAYMENT GATEWAY", "PayU", "Idbook", "Hotel", "NEFT", "RTGS", "IMPS", "UPI", "NET_BANKING", "Others"]}, "status": {"title": "Status", "type": "string", "enum": ["Pending", "Completed", "Failed", "Others"]}, "media": {"title": "Media", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "other_details": {"title": "Other details", "type": "object", "x-nullable": true}}}, "CustomerTourEnquiry": {"required": ["email", "mobile_number", "tour_start_date", "tour_end_date", "tour_duration", "date_of_journey", "tour_start_city"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "full_name": {"title": "Full name", "type": "string", "maxLength": 100, "x-nullable": true}, "email": {"title": "Email", "type": "string", "format": "email", "maxLength": 254, "minLength": 1}, "mobile_number": {"title": "Mobile number", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "minLength": 1}, "tour_destination": {"title": "Tour destination", "type": "string", "maxLength": 100, "x-nullable": true}, "tour_start_date": {"title": "Tour start date", "type": "string", "format": "date"}, "tour_end_date": {"title": "Tour end date", "type": "string", "format": "date"}, "tour_duration": {"title": "Tour duration", "description": "enter duration like 4N/5D", "type": "string", "maxLength": 50, "minLength": 1}, "date_of_journey": {"title": "Date of journey", "type": "string", "format": "date"}, "adults": {"title": "Adults", "type": "integer", "maximum": 32767, "minimum": 0}, "children": {"title": "Children", "type": "integer", "maximum": 32767, "minimum": 0}, "tour_start_city": {"title": "Tour start city", "type": "string", "maxLength": 50, "minLength": 1}, "flight_required": {"title": "Flight required", "type": "boolean"}, "private_transfer": {"title": "Private transfer", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "Accommodation": {"required": ["tour", "room_type", "occupancy"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "hotel_name": {"title": "Hotel name", "type": "string", "maxLength": 50}, "no_of_room": {"title": "No of room", "type": "integer", "maximum": 32767, "minimum": 0}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "tour": {"title": "Tour", "type": "integer"}, "room_type": {"title": "Room type", "type": "integer"}, "occupancy": {"title": "Occupancy", "type": "integer"}}}, "TourBankDetail": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "bank_name": {"title": "Bank name", "type": "string", "maxLength": 100, "x-nullable": true}, "account_holder_name": {"title": "Account holder name", "type": "string", "maxLength": 100, "x-nullable": true}, "account_number": {"title": "Account number", "type": "string", "maxLength": 15, "x-nullable": true}, "repeat_account_number": {"title": "Repeat account number", "type": "string", "maxLength": 15, "x-nullable": true}, "ifsc": {"title": "Ifsc", "type": "string", "maxLength": 15, "x-nullable": true}, "paytm_number": {"title": "Paytm number", "type": "string", "maxLength": 10, "x-nullable": true}, "google_pay_number": {"title": "Google pay number", "type": "string", "maxLength": 10, "x-nullable": true}, "phonepe_number": {"title": "Phonepe number", "type": "string", "maxLength": 10, "x-nullable": true}, "upi": {"title": "Upi", "type": "string", "maxLength": 50, "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "DailyPlan": {"required": ["title", "plan_date", "stay", "check_in", "check_out", "detailed_plan", "tour"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 10, "minLength": 1}, "plan_date": {"title": "Plan date", "type": "string", "format": "date"}, "stay": {"title": "Stay", "type": "string", "maxLength": 50, "minLength": 1}, "check_in": {"title": "Check in", "type": "string", "format": "date-time"}, "check_out": {"title": "Check out", "type": "string", "format": "date-time"}, "detailed_plan": {"title": "Detailed plan", "type": "string", "minLength": 1}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "tour": {"title": "Tour", "type": "integer"}}}, "InclusionExclusion": {"required": ["body", "tour"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "body": {"title": "Body", "type": "string", "minLength": 1}, "status": {"title": "Status", "type": "string", "enum": ["INCLUSION", "EXCLUSION"], "default": "INCLUSION"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "tour": {"title": "Tour", "type": "integer"}}}, "TourPackage": {"required": ["customer_fullname", "date_of_journey", "tour_start_city", "advance_amount_to_pay_for_the_trip_confirmation"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "trip_id": {"title": "Trip id", "type": "string", "maxLength": 10}, "trip_name": {"title": "Trip name", "type": "string", "maxLength": 50}, "customer_fullname": {"title": "Customer fullname", "type": "string", "maxLength": 50, "minLength": 1}, "tour_duration": {"title": "Tour duration", "type": "string", "enum": ["1N/2D", "2N/3D", "3N/4D", "4N/5D", "5N/6D", "6N/7D", "7N/8D", "8N/9D", "9N/10D", "10N/11D", "11N/12D", "12N/13D", "13N/13D", "14N/13D", "15N/13D", "16N/13D", "17N/13D"]}, "date_of_journey": {"title": "Date of journey", "type": "string", "format": "date"}, "adults": {"title": "Adults", "type": "integer", "maximum": 32767, "minimum": 0}, "tour_start_city": {"title": "Tour start city", "type": "string", "maxLength": 50, "minLength": 1}, "total_booking_amount": {"title": "Total booking amount", "type": "number"}, "advance_amount_to_pay_for_the_trip_confirmation": {"title": "Advance amount to pay for the trip confirmation", "type": "string", "maxLength": 50, "minLength": 1}, "payment_link": {"title": "Payment link", "type": "string", "format": "uri", "maxLength": 200, "x-nullable": true}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}}}, "Vehicle": {"required": ["vehicle_type", "tour"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "vehicle_type": {"title": "Vehicle type", "type": "string", "maxLength": 50, "minLength": 1}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "tour": {"title": "Tour", "type": "integer"}}}, "HotelAmenity": {"required": ["title", "amenity_category"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "detail": {"title": "Detail", "description": "Hotel Amenity", "type": "object", "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "amenity_category": {"title": "Amenity category", "type": "integer"}}}, "HotelAmenityCategory": {"required": ["title"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "hotel_amenity": {"type": "array", "items": {"$ref": "#/definitions/HotelAmenity"}, "readOnly": true}}}, "PropertyName": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "description": "Name of the property.", "type": "string", "maxLength": 70, "minLength": 1}, "title": {"title": "Title", "description": "Display name of the property.", "type": "string", "maxLength": 200}}}, "RoomName": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "description": "Name of the property.", "type": "string", "maxLength": 70}, "room_type": {"title": "Room type", "type": "string", "enum": ["DELUXE", "CLASSIC", "PREMIUM"]}}}, "BlockedProperty": {"required": ["start_date", "end_date"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "blocked_property": {"$ref": "#/definitions/PropertyName"}, "blocked_room": {"$ref": "#/definitions/RoomName"}, "no_of_blocked_rooms": {"title": "No of blocked rooms", "type": "integer", "maximum": 32767, "minimum": 0}, "is_entire_property": {"title": "Is entire property", "type": "boolean"}, "start_date": {"title": "Start date", "type": "string", "format": "date-time"}, "end_date": {"title": "End date", "type": "string", "format": "date-time"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "CalendarRoom": {"required": ["property_id", "room_id", "blocked_booked", "start_date", "end_date"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "property_id": {"title": "Property id", "type": "integer", "maximum": 9223372036854775807, "minimum": -9223372036854775808}, "room_id": {"title": "Room id", "type": "integer", "maximum": 9223372036854775807, "minimum": -9223372036854775808}, "no_unavailable_rooms": {"title": "No unavailable rooms", "type": "integer", "maximum": 32767, "minimum": 0}, "blocked_booked": {"title": "Blocked booked", "type": "string", "maxLength": 50, "minLength": 1}, "start_date": {"title": "Start date", "type": "string", "format": "date-time"}, "end_date": {"title": "End date", "type": "string", "format": "date-time"}}}, "FinancialDetail": {"required": ["json_data"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "json_data": {"title": "Json data", "type": "object"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "property": {"title": "Property", "type": "integer", "x-nullable": true}}}, "UploadedMedia": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "x-nullable": true}, "file_name": {"title": "File name", "type": "string", "maxLength": 200, "x-nullable": true}, "file_id": {"title": "File id", "type": "string", "maxLength": 200, "x-nullable": true}, "caption": {"title": "Caption", "type": "string", "maxLength": 200, "x-nullable": true}, "url": {"title": "Url", "type": "string", "format": "uri", "maxLength": 200, "x-nullable": true}, "tags": {"title": "Tags", "type": "string", "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "size": {"title": "Size", "type": "integer", "maximum": 2147483647, "minimum": 0}, "height": {"title": "Height", "type": "integer", "maximum": 2147483647, "minimum": 0}, "width": {"title": "Width", "type": "integer", "maximum": 2147483647, "minimum": 0}, "type": {"title": "Type", "type": "string", "maxLength": 20, "x-nullable": true}, "version_name": {"title": "Version name", "type": "string", "maxLength": 200, "x-nullable": true}, "version_id": {"title": "Version id", "type": "string", "maxLength": 200, "x-nullable": true}, "thumbnail_url": {"title": "Thumbnail url", "type": "string", "format": "uri", "maxLength": 200, "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}}}, "Gallery": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "media": {"$ref": "#/definitions/UploadedMedia"}, "active": {"title": "Active", "description": "Whether the gallery image is active.", "type": "boolean"}, "created": {"title": "Created", "description": "Date and time when the gallery image was created.", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "description": "Date and time when the gallery image was last updated.", "type": "string", "format": "date-time", "readOnly": true}, "added_by": {"title": "Added by", "type": "integer", "x-nullable": true}, "property": {"title": "Property", "description": "Select the property for which this gallery image belongs.", "type": "integer", "x-nullable": true}, "room": {"title": "Room", "description": "Select the room for which this gallery image belongs.", "type": "integer", "x-nullable": true}}}, "Inclusion": {"required": ["json_data"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "json_data": {"title": "Json data", "type": "object"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "property": {"title": "Property", "type": "integer", "x-nullable": true}}}, "PropertyLandmark": {"required": ["landmark", "distance"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "property": {"title": "Property", "type": "integer", "x-nullable": true}, "landmark": {"title": "Landmark", "description": "Name of the landmark.", "type": "string", "maxLength": 255, "minLength": 1}, "distance": {"title": "Distance", "description": "Distance from the property (in meters).", "type": "string", "format": "decimal"}}}, "PropertyPayoutDetails": {"required": ["amount", "payout_property"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "amount": {"title": "Amount", "type": "string", "format": "decimal"}, "transaction_id": {"title": "Transaction id", "type": "string", "maxLength": 100}, "batch_id": {"title": "Batch id", "type": "string", "maxLength": 100}, "batch_created_by": {"title": "Batch created by", "type": "string", "enum": ["ADMIN", "AUTO"]}, "pg_ref_no": {"title": "Pg ref no", "type": "string", "maxLength": 100}, "transaction_type": {"title": "Transaction type", "type": "string", "maxLength": 50}, "payment_medium": {"title": "Payment medium", "type": "string", "enum": ["PHONE PAY", "RAZORPAY", "PAYMENT GATEWAY", "PayU", "Idbook", "Hotel", "NEFT", "RTGS", "IMPS", "UPI", "NET_BANKING", "Others"]}, "booking_list": {"title": "Booking list", "type": "object"}, "initiate_status": {"title": "Initiate status", "type": "integer", "maximum": 32767, "minimum": 0, "x-nullable": true}, "initiate_message": {"title": "Initiate message", "type": "string", "maxLength": 200}, "initiate_response": {"title": "Initiate response", "type": "object", "x-nullable": true}, "initiate_date": {"title": "Initiate date", "type": "string", "format": "date-time", "x-nullable": true}, "transaction_response": {"title": "Transaction response", "type": "object", "x-nullable": true}, "paid": {"title": "Paid", "type": "boolean"}, "transaction_status": {"title": "Transaction status", "type": "string", "maxLength": 50}, "transaction_executed_by": {"title": "Transaction executed by", "type": "string", "enum": ["ADMIN", "AUTO"]}, "payout_reference_file": {"title": "Payout reference file", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "payout_property": {"title": "Payout property", "type": "integer"}}}, "PropertyCommission": {"required": ["commission", "commission_type", "property_comm"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "commission": {"title": "Commission", "type": "number"}, "code": {"title": "Code", "type": "string"}, "commission_type": {"title": "Commission type", "type": "string", "enum": ["AMOUNT", "PERCENT"]}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "property_comm": {"title": "Property comm", "type": "integer"}}}, "Policy": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "policy_details": {"title": "Policy details", "type": "object", "x-nullable": true}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "TopDestinations": {"required": ["location_name", "display_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "location_name": {"title": "Location name", "type": "string", "maxLength": 60, "minLength": 1}, "display_name": {"title": "Display name", "type": "string", "maxLength": 60, "minLength": 1}, "media": {"title": "Media", "type": "string", "readOnly": true, "format": "uri"}, "no_of_hotels": {"title": "No of hotels", "description": "Total Hotel count for the location", "type": "integer", "maximum": 2147483647, "minimum": 0}, "active": {"title": "Active", "type": "boolean"}}}, "TrendingPlaces": {"required": ["location_name", "display_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "location_name": {"title": "Location name", "type": "string", "maxLength": 60, "minLength": 1}, "display_name": {"title": "Display name", "type": "string", "maxLength": 60, "minLength": 1}, "media": {"title": "Media", "type": "string", "readOnly": true, "format": "uri"}, "no_of_hotels": {"title": "No of hotels", "description": "Total Hotel count for the location", "type": "integer", "maximum": 2147483647, "minimum": 0}, "active": {"title": "Active", "type": "boolean"}}}, "PropertyBankDetails": {"required": ["account_number", "ifsc", "bank_name", "property"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "account_number": {"title": "Account number", "type": "string", "maxLength": 35, "minLength": 1}, "ifsc": {"title": "Ifsc", "type": "string", "maxLength": 25, "minLength": 1}, "bank_name": {"title": "Bank name", "type": "string", "maxLength": 35, "minLength": 1}, "gstin": {"title": "Gstin", "type": "string", "maxLength": 25}, "pan": {"title": "Pan", "type": "string", "maxLength": 25}, "tan": {"title": "Tan", "type": "string", "maxLength": 25}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "property": {"title": "Property", "type": "integer"}}}, "RoomAmenity": {"required": ["title"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "detail": {"title": "Detail", "description": "room amenity", "type": "object", "x-nullable": true}}}, "RoomAmenityCategory": {"required": ["title"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "room_amenity": {"type": "array", "items": {"$ref": "#/definitions/RoomAmenity"}, "readOnly": true}}}, "DynamicRoomPricing": {"required": ["start_date", "end_date", "for_property", "for_room"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "start_date": {"title": "Start date", "type": "string", "format": "date-time"}, "end_date": {"title": "End date", "type": "string", "format": "date-time"}, "room_price": {"title": "Room price", "type": "object"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "for_property": {"title": "For property", "type": "integer"}, "for_room": {"title": "For room", "type": "integer"}}}, "Room": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "amenity_details": {"title": "Amenity details", "type": "object", "x-nullable": true}, "custom_id": {"title": "Custom id", "description": "Custom ID for the room.", "type": "string", "maxLength": 30, "x-nullable": true}, "room_type": {"title": "Room type", "type": "string", "enum": ["DELUXE", "CLASSIC", "PREMIUM"]}, "room_view": {"title": "Room view", "type": "string", "enum": ["SEA VIEW", "RIVER VIEW", "VALLEY VIEW", "CITY VIEW", "POOL VIEW", "SWIMMING POOL VIEW", "BEACH VIEW", "MOUNTAIN VIEW", "LAKE VIEW", "TEMPLE VIEW", "GARDEN VIEW", "HILL VIEW", "FOREST VIEW", "TERRACE VIEW", "BALCONY VIEW", "JUNGLE VIEW", "COURTYARD VIEW", "PALACE VIEW", "DESERT VIEW", "NON VIEW"]}, "bed_type": {"title": "Bed type", "type": "string", "enum": ["KING", "QUEEN", "SINGLE"]}, "name": {"title": "Name", "description": "Name of the property.", "type": "string", "maxLength": 70}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "room_size": {"title": "Room size", "description": "Room Size", "type": "integer", "maximum": 32767, "minimum": 0}, "room_measurement_type": {"title": "Room measurement type", "type": "string", "enum": ["square feet", "square meter"]}, "no_available_rooms": {"title": "No available rooms", "type": "integer", "maximum": 32767, "minimum": 0}, "meal_options": {"title": "Meal options", "type": "string", "enum": ["Accomodation only", "Free Breakfast", "Free Breakfast and Lunch", "Free Breakfast and Dinner", "Free Breakfast, Lunch and Dinner", "Free Breakfast, Lunch, Dinner and Custom Inclusions"]}, "is_smoking_allowed": {"title": "Is smoking allowed", "type": "boolean"}, "extra_bed_type": {"title": "Extra bed type", "type": "string", "enum": ["Mattress", "Cot", "Sofa cum bed"]}, "is_extra_bed_available": {"title": "Is extra bed available", "type": "boolean"}, "room_occupancy": {"title": "Room occupancy", "type": "object"}, "room_price": {"title": "Room price", "type": "object"}, "is_slot_price_enabled": {"title": "Is slot price enabled", "type": "boolean"}, "discount": {"title": "Discount", "description": "Discount percentage for the room (maximum 90%).", "type": "integer", "maximum": 32767, "minimum": 0}, "discount_type": {"title": "Discount type", "type": "string", "enum": ["AMOUNT", "PERCENT"]}, "start_availability_date": {"title": "Start availability date", "type": "string", "format": "date", "x-nullable": true}, "end_availability_date": {"title": "End availability date", "type": "string", "format": "date", "x-nullable": true}, "active": {"title": "Active", "description": "Whether the room is active.", "type": "boolean"}, "created": {"title": "Created", "description": "Date and time when the room was created.", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "description": "Date and time when the room was last updated.", "type": "string", "format": "date-time", "readOnly": true}, "property": {"title": "Property", "description": "Select the property this room belongs to.", "type": "integer", "x-nullable": true}}}, "Rule": {"required": ["json_data"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "json_data": {"title": "Json data", "type": "object"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "property": {"title": "Property", "type": "integer", "x-nullable": true}}}, "UserSubscriptionLogs": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "pg_subid": {"title": "Pg subid", "description": "payment gateway subscription id", "type": "string", "maxLength": 100}, "tnx_id": {"title": "Tnx id", "description": "transaction id / request id", "type": "string", "maxLength": 100}, "api_code": {"title": "Api code", "type": "string", "enum": ["VPA-CHECK", "CRT-SUB", "MANDATE", "MNDT-CLBAK", "MNDT-STATCHK", "RECUR-INIT", "RECRINIT-CALBAK", "RECUR-NOTIF", "SUB-CANC", "SUBCANC-CALBAK", "CMN-CALBAK"]}, "status_code": {"title": "Status code", "type": "integer", "maximum": 2147483647, "minimum": -2147483648, "x-nullable": true}, "status_response": {"title": "Status response", "type": "object", "x-nullable": true}, "error_message": {"title": "Error message", "type": "string", "minLength": 1}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}, "user_sub": {"title": "User sub", "type": "integer", "x-nullable": true}}}, "CampaignStep": {"required": ["order_index", "channel", "campaign"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "order_index": {"title": "Order index", "description": "Ordering of steps within a campaign (1,2,3...).", "type": "integer", "maximum": 2147483647, "minimum": 0}, "channel": {"title": "Channel", "type": "string", "enum": ["sms", "email"]}, "template_code": {"title": "Template code", "description": "For SMS: MessageTemplate.template_code; for Email: EmailTemplate.slug.", "type": "string", "maxLength": 255}, "delay_amount": {"title": "Delay amount", "description": "Delay after previous step (or campaign start) before sending.", "type": "integer", "maximum": 2147483647, "minimum": 0}, "delay_unit": {"title": "Delay unit", "type": "string", "enum": ["hours", "days", "weeks"]}, "active": {"title": "Active", "type": "boolean"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "campaign": {"title": "Campaign", "type": "integer"}, "messaging_provider": {"title": "Messaging provider", "description": "Optional: send this step via this provider (must match channel). If empty, uses the email template's provider (email only), then the default provider for the channel, then server environment settings.", "type": "integer", "x-nullable": true}}}, "CampaignCreateUpdate": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "description": {"title": "Description", "type": "string"}, "target_group_type": {"title": "Target group type", "description": "If empty, applies to all groups (filtered via target_filters).", "type": "string", "enum": ["B2C-GRP", "B2C-GUEST", "CORP-ADMIN", "CORP-EMP", "CORPORATE-GRP", "BUSINESS-GRP", "BUS-ADMIN", "HTLR-ADMIN", "FRANCH-ADMIN", "HOTELIER-GRP", "FRANCHISE-GRP", "AGENT-GRP", "AGENT-ADMIN"]}, "target_filters": {"title": "Target filters", "description": "Flexible filters: {\"city\": \"Kochi\", \"country\": \"INDIA\"}", "type": "object"}, "status": {"title": "Status", "type": "string", "enum": ["draft", "scheduled", "running", "paused", "completed", "failed"], "readOnly": true}, "schedule_time": {"title": "Schedule time", "description": "If set, initial campaign dispatch will be scheduled for this time.", "type": "string", "format": "date-time", "x-nullable": true}, "repeat_every_days": {"title": "Repeat every days", "description": "If set (>0), auto-create the next campaign run after completion with schedule_time + repeat_every_days.", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "repeat_from_campaign": {"title": "Repeat from campaign", "description": "Internal link to the previous run when this campaign was auto-generated.", "type": "integer", "x-nullable": true}, "created_by": {"title": "Created by", "type": "integer", "readOnly": true, "x-nullable": true}}}, "CampaignAudiencePreview": {"type": "object", "properties": {"target_group_type": {"title": "Target group type", "type": "string", "default": ""}, "target_filters": {"title": "Target filters", "type": "object", "default": {}}}}, "Campaign": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "steps": {"type": "array", "items": {"$ref": "#/definitions/CampaignStep"}, "readOnly": true}, "created_by_email": {"title": "Created by email", "type": "string", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "description": {"title": "Description", "type": "string"}, "target_group_type": {"title": "Target group type", "description": "If empty, applies to all groups (filtered via target_filters).", "type": "string", "enum": ["B2C-GRP", "B2C-GUEST", "CORP-ADMIN", "CORP-EMP", "CORPORATE-GRP", "BUSINESS-GRP", "BUS-ADMIN", "HTLR-ADMIN", "FRANCH-ADMIN", "HOTELIER-GRP", "FRANCHISE-GRP", "AGENT-GRP", "AGENT-ADMIN"]}, "target_filters": {"title": "Target filters", "description": "Flexible filters: {\"city\": \"Kochi\", \"country\": \"INDIA\"}", "type": "object"}, "status": {"title": "Status", "type": "string", "enum": ["draft", "scheduled", "running", "paused", "completed", "failed"], "readOnly": true}, "schedule_time": {"title": "Schedule time", "description": "If set, initial campaign dispatch will be scheduled for this time.", "type": "string", "format": "date-time", "x-nullable": true}, "repeat_every_days": {"title": "Repeat every days", "description": "If set (>0), auto-create the next campaign run after completion with schedule_time + repeat_every_days.", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "repeat_from_campaign": {"title": "Repeat from campaign", "description": "Internal link to the previous run when this campaign was auto-generated.", "type": "integer", "x-nullable": true}, "created_by": {"title": "Created by", "type": "integer", "readOnly": true, "x-nullable": true}}}, "ContactUploadSession": {"required": ["file_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "file_name": {"title": "File name", "type": "string", "maxLength": 255, "minLength": 1}, "status": {"title": "Status", "type": "string", "enum": ["processing", "completed", "failed"], "readOnly": true}, "total_rows": {"title": "Total rows", "type": "integer", "maximum": 2147483647, "minimum": 0}, "success_count": {"title": "Success count", "type": "integer", "maximum": 2147483647, "minimum": 0}, "failure_count": {"title": "Failure count", "type": "integer", "maximum": 2147483647, "minimum": 0}, "created_count": {"title": "Created count", "description": "Number of contacts newly created", "type": "integer", "maximum": 2147483647, "minimum": 0}, "updated_count": {"title": "Updated count", "description": "Number of rows that matched existing contacts (updated)", "type": "integer", "maximum": 2147483647, "minimum": 0}, "duplicate_in_file_count": {"title": "Duplicate in file count", "description": "Number of rows in the CSV that were duplicates (same group_type+phone/email seen earlier in file)", "type": "integer", "maximum": 2147483647, "minimum": 0}, "error_report_path": {"title": "Error report path", "description": "JSON array of row errors, or path to stored error report file", "type": "string"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "finished_at": {"title": "Finished at", "type": "string", "format": "date-time", "readOnly": true, "x-nullable": true}, "uploaded_by": {"title": "Uploaded by", "type": "integer", "x-nullable": true}}}, "Contact": {"required": ["group_type"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255}, "phone": {"title": "Phone", "type": "string", "maxLength": 32}, "email": {"title": "Email", "type": "string", "format": "email", "maxLength": 254}, "city": {"title": "City", "type": "string", "maxLength": 128}, "country": {"title": "Country", "type": "string", "maxLength": 128}, "group_type": {"title": "Group type", "type": "string", "enum": ["B2C-GRP", "B2C-GUEST", "CORP-ADMIN", "CORP-EMP", "CORPORATE-GRP", "BUSINESS-GRP", "BUS-ADMIN", "HTLR-ADMIN", "FRANCH-ADMIN", "HOTELIER-GRP", "FRANCHISE-GRP", "AGENT-GRP", "AGENT-ADMIN"]}, "segment_tags": {"title": "Segment tags", "type": "object"}, "remarks": {"title": "Remarks", "type": "string"}, "department": {"title": "Department", "type": "string", "maxLength": 128}, "opt_out_sms": {"title": "Opt out sms", "type": "boolean"}, "opt_out_email": {"title": "Opt out email", "type": "boolean"}, "opt_out_whatsapp": {"title": "Opt out whatsapp", "type": "boolean"}, "is_blacklisted": {"title": "Is blacklisted", "type": "boolean"}, "source": {"title": "Source", "description": "e.g. excel_upload", "type": "string", "maxLength": 64}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer", "x-nullable": true}}}, "EmailTemplate": {"required": ["name", "slug", "subject", "body_html"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 128, "minLength": 1}, "slug": {"title": "Slug", "type": "string", "format": "slug", "pattern": "^[-a-zA-Z0-9_]+$", "maxLength": 128, "minLength": 1}, "subject": {"title": "Subject", "type": "string", "maxLength": 255, "minLength": 1}, "body_html": {"title": "Body html", "type": "string", "minLength": 1}, "body_text": {"title": "Body text", "type": "string"}, "variables_schema": {"title": "Variables schema", "description": "List of supported variables, e.g. ['name', 'city', 'booking_link']", "type": "object"}, "is_marketing": {"title": "Is marketing", "type": "boolean"}, "is_active": {"title": "Is active", "type": "boolean"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}, "provider": {"title": "Provider", "type": "integer", "x-nullable": true}, "created_by": {"title": "Created by", "type": "integer", "readOnly": true, "x-nullable": true}}}, "MessageLog": {"required": ["channel", "status"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "contact": {"$ref": "#/definitions/Contact"}, "channel": {"title": "Channel", "type": "string", "enum": ["sms", "email"]}, "status": {"title": "Status", "type": "string", "enum": ["queued", "accepted", "sent", "delivered", "bounced", "deferred", "failed"]}, "provider": {"title": "Provider", "type": "string", "maxLength": 64}, "provider_response": {"title": "Provider response", "type": "object"}, "sent_at": {"title": "Sent at", "type": "string", "format": "date-time", "x-nullable": true}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "campaign": {"title": "Campaign", "type": "integer", "x-nullable": true}, "step": {"title": "Step", "type": "integer", "x-nullable": true}}}, "MessagingProviderConfig": {"required": ["channel", "name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "channel": {"title": "Channel", "type": "string", "enum": ["sms", "email"]}, "name": {"title": "Name", "type": "string", "maxLength": 64, "minLength": 1}, "is_default": {"title": "Is default", "description": "If true, this config will be used when no explicit provider is selected.", "type": "boolean"}, "settings": {"title": "Settings", "description": "Provider specific settings (API key overrides, sender IDs, etc.)", "type": "object"}, "rate_limit_per_minute": {"title": "Rate limit per minute", "description": "Soft rate limit hint for this provider (0 = use system default).", "type": "integer", "maximum": 2147483647, "minimum": 0}, "active": {"title": "Active", "type": "boolean"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}}}, "SmsTemplate": {"required": ["message_id", "template_code", "template_message"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "description": "Internal display name (optional).", "type": "string", "maxLength": 255}, "message_id": {"title": "Message id", "type": "string", "maxLength": 50, "minLength": 1}, "template_code": {"title": "Template code", "type": "string", "maxLength": 255, "minLength": 1}, "template_message": {"title": "Template message", "type": "string", "minLength": 1}, "template_type": {"title": "Template type", "type": "string", "enum": ["transactional", "service_implicit", "service_explicit", "promotional"]}, "is_active": {"title": "Is active", "type": "boolean"}, "created_at": {"title": "Created at", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated at", "type": "string", "format": "date-time", "readOnly": true}}}, "BusinessDetail": {"required": ["business_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "business_name": {"title": "Business name", "type": "string", "maxLength": 150, "minLength": 1}, "hsn_sac_no": {"title": "Hsn sac no", "type": "string", "maxLength": 100, "minLength": 1, "x-nullable": true}, "business_logo": {"title": "Business logo", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "business_phone": {"title": "Business phone", "type": "string", "maxLength": 50, "x-nullable": true}, "business_email": {"title": "Business email", "type": "string", "maxLength": 50, "x-nullable": true}, "domain_name": {"title": "Domain name", "type": "string", "maxLength": 50, "x-nullable": true}, "full_address": {"title": "Full address", "type": "string", "maxLength": 500, "x-nullable": true}, "gstin_no": {"title": "Gstin no", "type": "string", "maxLength": 100, "x-nullable": true}, "pan_no": {"title": "Pan no", "type": "string", "maxLength": 100, "x-nullable": true}, "website_url": {"title": "Website url", "type": "string", "format": "uri", "maxLength": 200}, "state": {"title": "State", "type": "string", "maxLength": 50}, "country": {"title": "Country", "type": "string", "maxLength": 25, "minLength": 1}, "active": {"title": "Active", "description": "Whether the business is active.", "type": "boolean"}, "is_default": {"title": "Is default", "description": "Default billed-by business (fallback when specific business not found).", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "AboutUs": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "Address": {"required": ["full_address", "district"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "full_address": {"title": "Full address", "description": "Full address", "type": "string", "maxLength": 100, "minLength": 1}, "district": {"title": "District", "description": "District", "type": "string", "maxLength": 50, "minLength": 1}, "state": {"title": "State", "description": "State", "type": "string", "enum": ["Andhra Pradesh", "Arunachal Pradesh", "Assam", "Bihar", "Chandigarh (UT)", "Chhattisgarh", "Dadra and Nagar Haveli (UT)", "Daman and Diu (UT)", "Delhi (NCT)", "Goa", "Gujarat", "Haryana", "Himachal Pradesh", "Jammu and Kashmir", "Jharkhand", "Karnataka", "Kerala", "Lakshadweep (UT)", "Madhya Pradesh", "Maharashtra", "Manipur", "Meghalaya", "Mizoram", "Nagaland", "Odisha", "Puducherry (UT)", "Punjab", "Rajasthan", "Sikkim", "Tamil Nadu", "Telangana", "Tripura", "Uttarakhand", "Uttar Pradesh", "West Bengal"]}, "country": {"title": "Country", "description": "Country", "type": "string", "enum": ["INDIA", "NEPAL", "BHUTAN", "CHINA", "UAE", "MALDIVES"]}, "pin_code": {"title": "Pin code", "description": "PIN code", "type": "integer", "maximum": 2147483647, "minimum": 0}}}, "AgentDetail": {"required": ["agent_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "agent_name": {"title": "Agent name", "type": "string", "maxLength": 50, "minLength": 1}, "agent_code": {"title": "Agent code", "type": "string", "maxLength": 100, "x-nullable": true}, "agent_logo": {"title": "Agent logo", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "agent_phone": {"title": "Agent phone", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 50, "x-nullable": true}, "agent_email": {"title": "Agent email", "description": "Email address of the agent.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "agent_website": {"title": "Agent website", "type": "string", "format": "uri", "maxLength": 200, "x-nullable": true}, "gstin_no": {"title": "Gstin no", "type": "string", "maxLength": 100, "x-nullable": true}, "pan_no": {"title": "Pan no", "type": "string", "maxLength": 100, "x-nullable": true}, "registered_address": {"title": "Registered address", "type": "string", "x-nullable": true}, "contact_person_name": {"title": "Contact person name", "type": "string", "maxLength": 50, "x-nullable": true}, "contact_number": {"title": "Contact number", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "x-nullable": true}, "designation": {"title": "Designation", "type": "string", "maxLength": 50, "x-nullable": true}, "contact_email_address": {"title": "Contact email address", "description": "Email address of the contact person.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "district": {"title": "District", "type": "string", "maxLength": 20, "x-nullable": true}, "state": {"title": "State", "type": "string", "maxLength": 30, "minLength": 1}, "country": {"title": "Country", "type": "string", "maxLength": 25, "minLength": 1}, "pin_code": {"title": "Pin code", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "location": {"title": "Location", "description": "Google map URL", "type": "string", "maxLength": 255, "x-nullable": true}, "latitude": {"title": "Latitude", "description": "Latitude", "type": "number"}, "longitude": {"title": "Longitude", "description": "Longitude", "type": "number"}, "approved": {"title": "Approved", "type": "boolean"}, "is_active": {"title": "Is active", "description": "Whether the agent is active.", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "AgentMarkupConfig": {"required": ["agent"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "agent_name": {"title": "Agent name", "type": "string", "readOnly": true, "minLength": 1}, "agent_code": {"title": "Agent code", "type": "string", "readOnly": true, "minLength": 1}, "default_markup_percent": {"title": "Default markup percent", "description": "Default markup percentage (0-100)", "type": "string", "format": "decimal"}, "default_markup_amount": {"title": "Default markup amount", "description": "Default fixed markup amount (if markup_type is FIXED)", "type": "string", "format": "decimal", "x-nullable": true}, "markup_type": {"title": "Markup type", "description": "Type of markup: percentage or fixed amount", "type": "string", "enum": ["PERCENT", "FIXED"]}, "is_active": {"title": "Is active", "description": "Whether this markup configuration is active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "agent": {"title": "Agent", "description": "Agent this markup configuration belongs to", "type": "integer"}}}, "Amenity": {"required": ["title", "amenity_category"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "amenity_category": {"title": "Amenity category", "type": "integer"}}}, "AmenityCategory": {"required": ["title"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "BasicRulesConfig": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "start_limit": {"title": "Start limit", "description": "Start range of bookings or other things", "type": "integer", "maximum": 2147483647, "minimum": 0}, "end_limit": {"title": "End limit", "description": "End range of bookings or other things", "type": "integer", "maximum": 2147483647, "minimum": 0}, "value": {"title": "Value", "description": "Percent or value of the respective discount, cashback etc.", "type": "integer", "maximum": 2147483647, "minimum": 0}, "rules_for": {"title": "Rules for", "type": "string", "enum": ["PRO_DISCOUNT", "PRO_CASHBACK", "OTHERS"]}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "Career": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "CompanyDetail": {"required": ["company_name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "company_name": {"title": "Company name", "type": "string", "maxLength": 50, "minLength": 1}, "brand_name": {"title": "Brand name", "type": "string", "maxLength": 100, "x-nullable": true}, "company_logo": {"title": "Company logo", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "company_phone": {"title": "Company phone", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 50, "x-nullable": true}, "company_email": {"title": "Company email", "description": "Email address of the company.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "domain_name": {"title": "Domain name", "type": "string", "maxLength": 50, "x-nullable": true}, "company_website": {"title": "Company website", "type": "string", "format": "uri", "maxLength": 200, "x-nullable": true}, "gstin_no": {"title": "Gstin no", "type": "string", "maxLength": 100, "minLength": 1, "x-nullable": true}, "pan_no": {"title": "Pan no", "type": "string", "maxLength": 100}, "registered_address": {"title": "Registered address", "type": "string", "x-nullable": true}, "contact_person_name": {"title": "Contact person name", "type": "string", "maxLength": 50, "x-nullable": true}, "contact_number": {"title": "Contact number", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "x-nullable": true}, "designation": {"title": "Designation", "type": "string", "maxLength": 50, "x-nullable": true}, "contact_email_address": {"title": "Contact email address", "description": "Email address of the contact person.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "district": {"title": "District", "type": "string", "maxLength": 20, "x-nullable": true}, "state": {"title": "State", "type": "string", "maxLength": 30, "minLength": 1}, "country": {"title": "Country", "type": "string", "maxLength": 25, "minLength": 1}, "pin_code": {"title": "Pin code", "type": "integer", "maximum": 2147483647, "minimum": 0, "x-nullable": true}, "location": {"title": "Location", "description": "Google map URL", "type": "string", "maxLength": 255, "x-nullable": true}, "latitude": {"title": "Latitude", "description": "Latitude", "type": "number"}, "longitude": {"title": "Longitude", "description": "Longitude", "type": "number"}, "approved": {"title": "Approved", "type": "boolean"}, "is_active": {"title": "Is active", "description": "Whether the company is active.", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "business_rep": {"title": "Business rep", "type": "integer", "x-nullable": true}}}, "CountryDetails": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "country_name": {"title": "Country name", "type": "string", "maxLength": 150, "x-nullable": true}, "country_short_name": {"title": "Country short name", "type": "string", "maxLength": 20, "x-nullable": true}, "country_phone_code": {"title": "Country phone code", "type": "string", "maxLength": 10, "x-nullable": true}, "country_details": {"title": "Country details", "type": "object", "x-nullable": true}}}, "Enquiry": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 100}, "phone_no": {"title": "Phone no", "type": "string", "pattern": "^\\+?1?\\d{9,15}$", "maxLength": 10, "x-nullable": true}, "email": {"title": "Email", "description": "Email address of the user.", "type": "string", "format": "email", "maxLength": 254, "x-nullable": true}, "subject": {"title": "Subject", "type": "string", "enum": ["Transaction", "Withdrawal", "Referral", "Other"]}, "enquiry_msg": {"title": "Enquiry msg", "type": "string", "x-nullable": true}, "enquiry_reply": {"title": "Enquiry reply", "type": "string", "x-nullable": true}, "read": {"title": "Read", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "active": {"title": "Active", "type": "boolean"}, "user": {"title": "User", "type": "integer", "x-nullable": true}, "replied_by": {"title": "Replied by", "type": "integer", "x-nullable": true}}}, "FAQs": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "FeatureSubscription": {"required": ["title", "feature_key", "type", "level"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 255, "minLength": 1}, "feature_key": {"title": "Feature key", "type": "string", "maxLength": 100, "minLength": 1}, "type": {"title": "Type", "type": "string", "enum": ["Monthly", "Yearly"]}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "order": {"title": "Order", "type": "integer", "maximum": 2147483647, "minimum": 0}, "is_active": {"title": "Is active", "type": "boolean"}, "level": {"title": "Level", "type": "integer", "maximum": 2147483647, "minimum": 0}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "subscription": {"title": "Subscription", "type": "integer", "x-nullable": true}}}, "Legality": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "UserNotification": {"required": ["user"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "notification_type": {"title": "Notification type", "type": "string", "enum": ["GENERAL", "OFFERS", "BOOKING", "MEMBERSHIP"]}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "is_read": {"title": "Is read", "type": "boolean"}, "redirect_url": {"title": "Redirect url", "type": "string", "x-nullable": true}, "image_link": {"title": "Image link", "type": "string", "x-nullable": true}, "group_name": {"title": "Group name", "type": "string", "maxLength": 30}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer"}, "send_by": {"title": "Send by", "type": "integer", "x-nullable": true}}}, "Occupancy": {"required": ["title"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 30, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "PrivacyPolicy": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "RefundAndCancellationPolicy": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "RoomType": {"required": ["title"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 30, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "Subscriber": {"required": ["email"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "email": {"title": "Email", "type": "string", "format": "email", "maxLength": 254, "minLength": 1}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "Subscription": {"required": ["name", "subscription_type", "level"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "features": {"title": "Features", "type": "string", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 50, "minLength": 1}, "subscription_type": {"title": "Subscription type", "type": "string", "enum": ["Monthly", "Yearly"]}, "price": {"title": "Price", "type": "integer", "maximum": 2147483647, "minimum": 0}, "level": {"title": "Level", "type": "integer", "maximum": 2147483647, "minimum": 0}, "discount": {"title": "Discount", "description": "Discount for Subscription", "type": "integer", "maximum": 32767, "minimum": 0}, "discount_type": {"title": "Discount type", "type": "string", "enum": ["AMOUNT", "PERCENT"]}, "final_price": {"title": "Final price", "type": "integer", "maximum": 2147483647, "minimum": 0}, "details": {"title": "Details", "type": "object"}, "is_popular": {"title": "Is popular", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "TermsAndConditions": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 150, "x-nullable": true}, "description": {"title": "Description", "type": "string", "x-nullable": true}, "image": {"title": "Image", "type": "string", "readOnly": true, "x-nullable": true, "format": "uri"}, "active": {"title": "Active", "type": "boolean"}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}}}, "UserSubscription": {"required": ["name", "subscription_type", "user"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "minLength": 1, "x-nullable": true}, "subscription_type": {"title": "Subscription type", "type": "string", "minLength": 1, "x-nullable": true}, "features": {"title": "Features", "type": "string", "readOnly": true}, "pg_subid": {"title": "Pg subid", "description": "payment gateway subscription id", "type": "string", "maxLength": 100}, "merchant_userid": {"title": "Merchant userid", "type": "string", "maxLength": 100}, "merchant_subid": {"title": "Merchant subid", "type": "string", "maxLength": 100}, "mandate_tnx_id": {"title": "Mandate tnx id", "description": "Mandate transaction id", "type": "string", "maxLength": 100}, "recrinit_tnx_id": {"title": "Recrinit tnx id", "description": "Recurring init transaction id", "type": "string", "maxLength": 100}, "notification_id": {"title": "Notification id", "type": "string", "maxLength": 100}, "payment_type": {"title": "Payment type", "type": "string", "enum": ["PAYMENT GATEWAY", "WALLET", "NBFC", "DIRECT", "BANK TRANSFER"]}, "payment_medium": {"title": "Payment medium", "type": "string", "enum": ["PHONE PAY", "RAZORPAY", "PAYMENT GATEWAY", "PayU", "Idbook", "Hotel", "NEFT", "RTGS", "IMPS", "UPI", "NET_BANKING", "Others"]}, "upi_id": {"title": "Upi id", "type": "string", "maxLength": 50}, "is_upi_valid": {"title": "Is upi valid", "type": "boolean"}, "sub_workflow": {"title": "Sub workflow", "type": "string", "enum": ["PENNY_DROP", "TRANSACTION"]}, "sub_start_date": {"title": "Sub start date", "type": "string", "format": "date-time", "x-nullable": true}, "sub_end_date": {"title": "Sub end date", "type": "string", "format": "date-time", "x-nullable": true}, "last_paid_date": {"title": "Last paid date", "type": "string", "format": "date-time", "x-nullable": true}, "next_payment_date": {"title": "Next payment date", "type": "string", "format": "date-time", "x-nullable": true}, "next_notify_date": {"title": "Next notify date", "type": "string", "format": "date-time", "x-nullable": true}, "subscription_amount": {"title": "Subscription amount", "type": "integer", "maximum": 2147483647, "minimum": -2147483648}, "total_amount": {"title": "Total amount", "type": "integer", "maximum": 2147483647, "minimum": -2147483648}, "transaction_amount": {"title": "Transaction amount", "description": "last transaction amount", "type": "integer", "maximum": 2147483647, "minimum": -2147483648}, "mandate_status": {"title": "Mandate status", "type": "string", "enum": ["pending", "initiated", "active", "failed", "cancel_initiated", "cancelled", "cancel_failed", "expired"]}, "last_mandate_check": {"title": "Last mandate check", "type": "string", "format": "date-time", "x-nullable": true}, "paid": {"title": "Paid", "type": "boolean"}, "active": {"title": "Active", "type": "boolean"}, "notes": {"title": "Notes", "type": "string"}, "is_cancel_initiated": {"title": "Is cancel initiated", "type": "boolean"}, "is_cancelled": {"title": "Is cancelled", "type": "boolean"}, "cancel_tnx_id": {"title": "Cancel tnx id", "description": "Cancel transaction id", "type": "string", "maxLength": 100}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "updated": {"title": "Updated", "type": "string", "format": "date-time", "readOnly": true}, "user": {"title": "User", "type": "integer"}, "idb_sub": {"title": "Idb sub", "description": "Idbook subscription", "type": "integer", "x-nullable": true}}}}}