swagger: '2.0'
info:
  title: IDBOOK APIs
  description: |-
    IDBOOKAPI APIs: All APIs for web application, Android/iOS application.

    Authentication in Swagger (`/api/v1/docs/swagger/`):
    1. Generate JWT token from `POST /api/v1/auth/token/` with your credentials.
    2. Copy the `access` token from the response.
    3. Click the `Authorize` button in Swagger UI.
    4. In `Bearer`, enter: `Bearer <access_token>` and click `Authorize`.
    5. 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.

        - Accepts username (email or phone), password, and optional group_name/active_group.
        - If email/mobile verification is pending, this will trigger OTPs and respond with HTTP 307 and `verification_required` payload instead of tokens.
        - 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.

        Typical flow:
        1. Frontend calls OTP send endpoint for SIGNUP (mobile/email).
        2. User enters OTP.
        3. Frontend calls this endpoint with email, mobile_number, name, otp, group_name and optional referred_code.
        4. 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.

        Flow:
        1. Frontend calls the OTP send endpoints (email and mobile) for SIGNUP.
        2. User enters email/mobile OTPs.
        3. Frontend calls this endpoint with email, mobile_number, otp, otp_mobile, password and group_name.
        4. 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.

        Flow:
        1. Frontend obtains Google ID token from Google SDK.
        2. Frontend calls this endpoint with id_token, optional group_name, mobile_number and referred_code.
        3. If the email already exists in the given group, this acts as LOGIN and returns tokens.
        4. 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
        token 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
        token 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
        information 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
        but their `CompanyDetail` / `AgentDetail` was never created (or was deleted).
        This 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.
        This 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.
        Clears payment/invoice/refund logs (DO_NOTHING FKs) and delinks queries.
        Only 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.
        Supports two authentication methods:
        1. guest_token: Secure token sent via email (recommended)
        2. confirmation_code + email: Fallback method

        Query Parameters:
            - guest_token: Guest access token (preferred method)
            - confirmation_code: Booking confirmation code
            - 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).
        Staff/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.
        This 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,
        and 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:
        - payment.captured: Payment successful
        - 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
        Standard 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).
        Requires quotation (quote_amount) to be set. Uses quotation, user info, and
        query data to generate a proper invoice for all query types (HOTEL, VISA, EVENT,
        VEHICLE, 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:
        - document_type: proforma_pdf, invoice_pdf, receipt_pdf, credit_note_pdf, voucher_pdf, other
        - file: The file to upload (multipart form data)
        - 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).
        CASCADE 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
        Admin 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/
        pk = 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
        User uploads payment proof image along with transaction details
        Supports 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.
        - No auth required: handles AirIQ login/token internally
        - Injects AgentInfo automatically if missing
        - Call with: POST /api/v1/flights/airiq-proxy/<EndpointName>/
          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.
        Only 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
        POST /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
        GET /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
        POST /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
        POST /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
        POST /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
        POST /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.
        Only superusers or staff can perform this action.

        Request body can include:
        - created_by_user_id: User ID to set as added_by (who created the property)
        - managed_by_user_id: User ID to set as managed_by (who manages the property)
        - 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.
        Only superusers or staff can perform this action.

        Request body can include:
        - created_by_user_id: User ID to set as added_by (who created the property)
        - managed_by_user_id: User ID to set as managed_by (who manages the property)
        - 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

        Attach 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.

        Pagination: offset, limit (default limit=10).
        Search: search by file_name.
        Ordering: ordering by created_at, finished_at, total_rows, success_count, failure_count.
        Filters: 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.

        **Pagination:** offset, limit (default limit=10).
        **Search:** search (partial match on name, phone, email, city, country).
        **Ordering:** ordering (e.g. -created_at, name).
        **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
        targeted 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.

        Required header columns:
        - name
        - phone
        - email
        - city
        - country
        - group_type (e.g. B2C-GRP, B2C-GUEST, CORPORATE-GRP, HOTELIER-GRP, AGENT-GRP, BUSINESS-GRP; see auth constants)

        Either 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.

        Counts: success_count = created_count + updated_count (first occurrence per identity only). duplicate_in_file_count = rows skipped as duplicates within this CSV.

        Optional form fields:
        - **group_type** — default when a row omits `group_type` (same values as column).
        - **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
        targeted 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
        targeted 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
        targeted 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.

        Pagination: offset, limit (default limit=10).
        Search: search by name, slug, subject, body_html, body_text.
        Ordering: ordering by created_at, updated_at, name, slug, is_active, is_marketing.
        Filters: 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.

        Defaults 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).
        You 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

        Inspect 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,
        email templates, and test sends. When unset, the API falls back to the default
        row 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,
        email templates, and test sends. When unset, the API falls back to the default
        row 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,
        email templates, and test sends. When unset, the API falls back to the default
        row 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,
        email templates, and test sends. When unset, the API falls back to the default
        row 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,
        email templates, and test sends. When unset, the API falls back to the default
        row 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,
        email templates, and test sends. When unset, the API falls back to the default
        row 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.
        Search: name, template_code, message_id, template_message.
        Filters: template_code, message_id, template_type, is_active.
        **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
        campaign 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
        campaign 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
        campaign 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
        campaign 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
        campaign 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.

        Provide 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.
        Use 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
