openapi: 3.0.3
info:
  title: Volo Access Control API
  description: |
    Volo Access Control is a cloud-based physical access control system. This API provides comprehensive access to all aspects of the system.

    ## Authentication
    All requests to the API must include the following custom headers for authentication:
    - `x-nonce-token`: A unique, base64-encoded, random string for each request. Prevents replay attacks. **Required for all authenticated requests.**
    - `x-app-token`: The application token received during application registration. Required for endpoints enforcing application-based authentication.
    - `x-user-credential`: The session token received from the login endpoint. Required for endpoints enforcing user-based authentication.

    Some endpoints may require both `x-app-token` and `x-user-credential` headers. If both are required, both must be present. See [Authentication documentation](https://wiki.volo-access.com/docs/API/authentication) for details.

    ## Error Handling
    The API uses standard HTTP status codes and returns error responses in a consistent format. All error responses include:
    - `applicationMessage`: Technical error message for developers
    - `consumerMessage`: User-friendly error message

    ### Common Error Codes
    - **400 Bad Request**: Invalid request parameters, missing required fields, or malformed data
    - **401 Unauthorized**: Authentication required or invalid credentials
    - **403 Forbidden**: Insufficient permissions to access the resource
    - **404 Not Found**: Requested resource does not exist
    - **409 Conflict**: Resource conflict (e.g., duplicate entries, resource in use)
    - **410 Gone**: Resource no longer available (e.g., expired reset codes)
    - **500 Internal Server Error**: Unexpected server error
    - **503 Service Unavailable**: Service temporarily unavailable
  contact:
    name: General Distribution Ltd.
    email: support@gendis.co.uk
  termsOfService: https://wiki.volo-access.com/docs/API/terms-conditions
  version: "1.0.0"
servers:
  - url: https://api.volo-access.com/v1
    description: Production server
  - url: https://staging-api.gendis.co.uk/v1
    description: Staging server
paths:
  /business/customer:
    get:
      summary: List all customers
      description: Returns a list of all customers registered in the system under the user who is requesting this service.
      tags: [Customer]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: List of customers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCustomerDetailsResponse'
        '400':
          description: Bad Request - Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/customer/{CustomerGuid}:
    get:
      summary: Get customer by GUID
      description: Returns the details of a single customer by unique GUID.
      tags: [Customer]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier (GUID) for the customer
      responses:
        '200':
          description: Customer details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerDetailsResponse'
        '400':
          description: Bad Request - Invalid customer GUID format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    put:
      summary: Update customer
      description: Updates the details of an existing customer.
      tags: [Customer]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier (GUID) for the customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerDetailsForm'
      responses:
        '200':
          description: Customer updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
        '400':
          description: Bad Request - Invalid request data or customer GUID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      summary: Delete customer
      description: Deletes an existing customer and all associated data.
      tags: [Customer]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier (GUID) for the customer
      responses:
        '200':
          description: Customer deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
        '400':
          description: Bad Request - Invalid customer GUID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/customer:
    post:
      summary: Create a new customer
      description: Creates a new customer in the system.
      tags: [Customer]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerDetailsForm'
      responses:
        '200':
          description: Customer created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerDetailsResponse'
        '400':
          description: Bad Request - Invalid request data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict - Customer already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/installer/metrics:
    get:
      summary: Get installer metrics
      description: Returns a set of metrics for the installer, including customer, general, user, device, license, and firmware statistics.
      tags: [Installer]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Installer metrics response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstallerMetricsResponse'
  /business/customer/{CustomerGuid}/site:
    get:
      summary: List customer sites
      description: Returns a list of all sites associated with the specified customer.
      tags: [Customer Sites]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of customer sites
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListSiteDetailsResponse'
    post:
      summary: Create customer site
      description: Creates a new site for the specified customer.
      tags: [Customer Sites]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SiteDetailsForm'
      responses:
        '200':
          description: Site created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/customer/{CustomerGuid}/site/{SiteGuid}:
    get:
      summary: Get customer site by GUID
      description: Returns the details of a specific site for the customer.
      tags: [Customer Sites]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: SiteGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the site
      responses:
        '200':
          description: Site details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteDetailsResponse'
    put:
      summary: Update customer site
      description: Updates the details of an existing site for the customer.
      tags: [Customer Sites]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: SiteGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the site
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SiteDetailsForm'
      responses:
        '200':
          description: Site updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
    delete:
      summary: Delete customer site
      description: Deletes a site for the customer.
      tags: [Customer Sites]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: SiteGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the site
      responses:
        '200':
          description: Site deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/customer/{CustomerGuid}/user:
    get:
      summary: List customer users
      description: Returns a list of all users associated with the specified customer.
      tags: [Customer Users]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of customer users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCustomerUsersDetailsResponse'
  /business/customer/{CustomerGuid}/device:
    get:
      summary: List customer devices
      description: Returns a list of all devices associated with the specified customer.
      tags: [Customer Devices]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of customer devices
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListDeviceDetailsResponse'
        '400':
          description: Bad Request - Invalid customer GUID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      summary: Create customer device
      description: Creates a new device for the specified customer.
      tags: [Customer Devices]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceDetailsForm'
      responses:
        '200':
          description: Device created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
        '400':
          description: Bad Request - Invalid request data or serial number format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict - Device already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/customer/{CustomerGuid}/device/{DeviceGuid}:
    get:
      summary: Get customer device by GUID
      description: Returns the details of a specific device for the customer.
      tags: [Customer Devices]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: DeviceGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the device
      responses:
        '200':
          description: Device details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceDetailsResponse'
    put:
      summary: Update customer device
      description: Updates the details of an existing device for the customer.
      tags: [Customer Devices]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: DeviceGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the device
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceDetailsForm'
      responses:
        '200':
          description: Device updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
    delete:
      summary: Delete customer device
      description: Deletes a device for the customer.
      tags: [Customer Devices]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: DeviceGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the device
      responses:
        '200':
          description: Device deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/customer/{CustomerGuid}/usergroup:
    get:
      summary: List customer user groups
      description: Returns a list of all user groups associated with the specified customer.
      tags: [Customer User Groups]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of customer user groups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCustomerUserGroupsResponse'
  /business/customer/{CustomerGuid}/accesslevel:
    get:
      summary: List customer access levels
      description: Returns a list of all access levels associated with the specified customer.
      tags: [Customer Access Levels]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of customer access levels
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCustomerAccessLevelResponse'
  /business/customer/{CustomerGuid}/accesslevel/{AccessLevelGuid}:
    get:
      summary: Get customer access level by GUID
      description: Returns the details of a specific access level for the customer.
      tags: [Customer Access Levels]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: AccessLevelGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the access level
      responses:
        '200':
          description: Access level details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAccessLevelResponse'
    put:
      summary: Update customer access level
      description: Updates the details of an existing access level for the customer.
      tags: [Customer Access Levels]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: AccessLevelGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the access level
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccessLevelForm'
      responses:
        '200':
          description: Access level updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateAccessLevelResponse'
  /business/customer/{CustomerGuid}/door:
    get:
      summary: List customer doors
      description: Returns a list of all doors associated with the specified customer.
      tags: [Customer Doors]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of customer doors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListDoorDetailsResponse'
  /business/customer/{CustomerGuid}/event:
    get:
      summary: List customer events
      description: Returns a list of all events associated with the specified customer.
      tags: [Customer Events]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: fromDate
          in: query
          required: false
          schema:
            type: string
            format: date-time
          description: Filter events from this date (ISO 8601 format)
        - name: toDate
          in: query
          required: false
          schema:
            type: string
            format: date-time
          description: Filter events to this date (ISO 8601 format)
        - name: eventType
          in: query
          required: false
          schema:
            type: integer
          description: Filter by specific event type
      responses:
        '200':
          description: List of customer events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListEventDetailsResponse'
  /business/license:
    get:
      summary: Get client licenses
      description: Returns all licenses associated with the current client.
      tags: [License Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Client licenses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions to access licenses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/license/available:
    get:
      summary: Get available licenses
      description: Returns all available (unallocated) licenses.
      tags: [License Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Available licenses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponse'
  /business/license/types:
    get:
      summary: Get license types
      description: Returns all available license types and their pricing information.
      tags: [License Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: License types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseTypesResponse'
  /business/customer/{CustomerGuid}/license:
    get:
      summary: Get customer licenses
      description: Returns all licenses associated with the specified customer.
      tags: [License Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: Customer licenses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseResponse'
  /business/device/{SerialNumber}/license:
    get:
      summary: Get device licenses
      description: Returns the controller and SIM licenses associated with the specified device.
      tags: [License Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: SerialNumber
          in: path
          required: true
          schema:
            type: string
          description: The device serial number
      responses:
        '200':
          description: Device licenses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceLicenseResponse'
        '400':
          description: Bad Request - Invalid serial number format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Device not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/report:
    get:
      summary: List all reports
      description: Returns a list of all available reports in the system.
      tags: [Report Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: List of all reports
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListReportsResponse'
  /business/report/{ReportType}:
    get:
      summary: Get report details
      description: Returns the details and parameters for a specific report type.
      tags: [Report Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: ReportType
          in: path
          required: true
          schema:
            type: integer
          description: The report type identifier
      responses:
        '200':
          description: Report details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
    post:
      summary: Execute report
      description: Executes a report with the specified parameters and returns a message key for tracking.
      tags: [Report Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: ReportType
          in: path
          required: true
          schema:
            type: integer
          description: The report type identifier
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportParametersForm'
      responses:
        '200':
          description: Report execution initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExecuteReportResponse'
        '400':
          description: Bad Request - Invalid report parameters or file key format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Insufficient permissions to execute reports
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Report type not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/report/status/{FileKey}:
    get:
      summary: Get report status
      description: Returns the status of a report execution using the file key from the execute response.
      tags: [Report Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: FileKey
          in: path
          required: true
          schema:
            type: string
          description: The file key from the execute report response
      responses:
        '200':
          description: Report status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryReportStatusResponse'
  /business/report/menu/{ParameterType}/{CustomerGuid}:
    get:
      summary: Get report menu items
      description: Returns menu items for report parameters based on the parameter type and customer.
      tags: [Report Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: ParameterType
          in: path
          required: true
          schema:
            type: integer
          description: The parameter type identifier
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The customer unique identifier
      responses:
        '200':
          description: Report menu items
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListReportMenuItemResponse'
  /business/timezone:
    get:
      summary: Get geographic timezones
      description: Returns a list of all available geographic timezones.
      tags: [Timezone Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: List of geographic timezones
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListGeoTimezoneResponse'
  /business/customer/{CustomerGuid}/timezone:
    get:
      summary: Get customer timezones
      description: Returns all timezones associated with the specified customer.
      tags: [Timezone Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: Customer timezones
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerTimezoneResponse'
  /business/customer/{CustomerGuid}/timezone/all:
    get:
      summary: Get all customer timezones
      description: Returns all timezones (including details) associated with the specified customer.
      tags: [Timezone Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: All customer timezones
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCustomerTimezoneResponse'
  /business/customer/{CustomerGuid}/timezone/{TimezoneGuid}:
    get:
      summary: Get customer timezone details
      description: Returns detailed information for a specific timezone of the customer.
      tags: [Timezone Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: TimezoneGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the timezone
      responses:
        '200':
          description: Timezone details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedTimezoneResponse'
  /business/customer/{CustomerGuid}/timezone/conflict:
    get:
      summary: Get timezone conflicts
      description: Returns any timezone conflicts for the specified customer.
      tags: [Timezone Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: Timezone conflicts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimezoneConflictResponse'
  /business/customer/{CustomerGuid}/user/{UserGuid}:
    get:
      summary: Get user details
      description: Returns detailed information for a specific user.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerUsersDetailsResponse'
  /business/customer/{CustomerGuid}/token:
    get:
      summary: Get customer tokens
      description: Returns all tokens associated with the specified customer.
      tags: [Token Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: activeOnly
          in: query
          required: false
          schema:
            type: boolean
          description: Filter to show only active tokens (not marked as lost)
      responses:
        '200':
          description: Customer tokens
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListTokenDetailsResponse'
  /business/customer/{CustomerGuid}/token/search:
    get:
      summary: Find user by token data
      description: Searches for users associated with a specific token data value.
      tags: [Token Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: CustomerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: tokenData
          in: query
          required: true
          schema:
            type: string
          description: The token data to search for
      responses:
        '200':
          description: Users found with the specified token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListFindUserTokenResponse'
  /business/token/search:
    get:
      summary: Find user by token data (global)
      description: Searches for users associated with a specific token data value across all customers.
      tags: [Token Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: tokenData
          in: query
          required: true
          schema:
            type: string
          description: The token data to search for
      responses:
        '200':
          description: Users found with the specified token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListFindUserTokenResponse'
  /business/user/{UserGuid}/token/{TokenGuid}:
    get:
      summary: Get user token details
      description: Returns detailed information for a specific token of a user.
      tags: [Token Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
        - name: TokenGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the token
      responses:
        '200':
          description: Token details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenDetailsResponse'
  /business/user/login:
    post:
      summary: User login
      description: Authenticates a user and returns a session token for subsequent requests.
      tags: [User Authentication]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCredentials'
      responses:
        '200':
          description: Login successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '400':
          description: Bad Request - Missing username or password
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid credentials or account locked
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/user/logout:
    delete:
      summary: User logout
      description: Logs out the current user and invalidates the session token.
      tags: [User Authentication]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Logout successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
        '401':
          description: Unauthorized - Invalid session token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/user/session/renew:
    post:
      summary: Renew user session
      description: Renews the current user session and returns a new session token.
      tags: [User Authentication]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Session renewed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
  /business/user/password/reset/request:
    post:
      summary: Request password reset
      description: Requests a password reset code to be sent to the user's email.
      tags: [User Authentication]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: username
          in: query
          required: true
          schema:
            type: string
          description: The username to reset password for
      responses:
        '200':
          description: Password reset request sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user/password/reset:
    post:
      summary: Confirm password reset
      description: Confirms password reset using the reset code and sets a new password.
      tags: [User Authentication]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetRequest'
      responses:
        '200':
          description: Password reset successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
        '400':
          description: Bad Request - Invalid reset code or password format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: Gone - Reset code expired or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /business/user/permission:
    get:
      summary: Get user permissions
      description: Returns the current user's permissions and roles.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: User permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPermissionsResponse'
  /business/user/message:
    get:
      summary: Get operator messages
      description: Returns messages for the current operator.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Operator messages
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOperatorMessageResponse'
    delete:
      summary: Delete operator message
      description: Deletes a specific operator message.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: messageId
          in: query
          required: true
          schema:
            type: integer
          description: The ID of the message to delete
      responses:
        '200':
          description: Message deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user:
    get:
      summary: Get all operators
      description: Returns a list of all operators in the system.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: List of operators
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOperatorDetailsResponse'
    post:
      summary: Create new operator
      description: Creates a new operator account.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorDetails'
      responses:
        '200':
          description: Operator created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user/details:
    get:
      summary: Get single operator
      description: Returns details for a specific operator.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: OperatorId
          in: query
          required: true
          schema:
            type: string
          description: The operator ID
      responses:
        '200':
          description: Operator details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorDetails'
  /business/user/{OperatorId}:
    put:
      summary: Update operator details
      description: Updates the details for a specific operator.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: OperatorId
          in: path
          required: true
          schema:
            type: string
          description: The operator ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorDetails'
      responses:
        '200':
          description: Operator updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
    delete:
      summary: Delete operator
      description: Deletes a specific operator account.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: OperatorId
          in: path
          required: true
          schema:
            type: string
          description: The operator ID
      responses:
        '200':
          description: Operator deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user/{OperatorId}/password:
    put:
      summary: Reset operator password
      description: Resets the password for a specific operator.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: OperatorId
          in: path
          required: true
          schema:
            type: string
          description: The operator ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetRequest'
      responses:
        '200':
          description: Password reset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user/{OperatorId}/unlock:
    put:
      summary: Unlock operator account
      description: Unlocks a locked operator account.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: OperatorId
          in: path
          required: true
          schema:
            type: string
          description: The operator ID
      responses:
        '200':
          description: Account unlocked
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user/type:
    get:
      summary: Get operator types
      description: Returns available operator types.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Operator types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnumDataResponse'
  /business/user/session-token:
    get:
      summary: Get session token
      description: Returns the current session token information.
      tags: [User Authentication]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Session token info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/user/accept/terms-and-conditions:
    put:
      summary: Accept terms and conditions
      description: Accepts the terms and conditions for the current user.
      tags: [User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      responses:
        '200':
          description: Terms accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/schedule-reporting/{customerGuid}:
    get:
      summary: Get scheduled reports
      description: Returns all scheduled reports for the specified customer.
      tags: [Scheduled Reports]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: customerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      responses:
        '200':
          description: List of scheduled reports
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListScheduledReportsResponse'
    post:
      summary: Create scheduled report
      description: Creates a new scheduled report for the specified customer.
      tags: [Scheduled Reports]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: customerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScheduleReportForm'
      responses:
        '200':
          description: Scheduled report created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/schedule-reporting/{customerGuid}/{scheduledReportId}:
    get:
      summary: Get scheduled report
      description: Returns details for a specific scheduled report.
      tags: [Scheduled Reports]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: customerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: scheduledReportId
          in: path
          required: true
          schema:
            type: integer
          description: The scheduled report ID
      responses:
        '200':
          description: Scheduled report details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduledReportResponse'
    put:
      summary: Update scheduled report
      description: Updates an existing scheduled report.
      tags: [Scheduled Reports]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: customerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: scheduledReportId
          in: path
          required: true
          schema:
            type: integer
          description: The scheduled report ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScheduleReportForm'
      responses:
        '200':
          description: Scheduled report updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
    delete:
      summary: Delete scheduled report
      description: Deletes a specific scheduled report.
      tags: [Scheduled Reports]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: customerGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the customer
        - name: scheduledReportId
          in: path
          required: true
          schema:
            type: integer
          description: The scheduled report ID
      responses:
        '200':
          description: Scheduled report deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/customer-users/{UserGuid}:
    put:
      summary: Update user details
      description: Updates the details for a specific customer user.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerUserForm'
      responses:
        '200':
          description: User updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateUserResponse'
    delete:
      summary: Delete customer user
      description: Deletes a specific customer user.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
      responses:
        '200':
          description: User deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateUserResponse'
  /business/customer-users/{UserGuid}/bar:
    put:
      summary: Change user bar status
      description: Changes the bar status (access restriction) for a specific user.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
        - name: status
          in: query
          required: true
          schema:
            type: string
          description: The new bar status
      responses:
        '200':
          description: Bar status changed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateUserResponse'
  /business/customer-users/{UserGuid}/token/{TokenGuid}:
    put:
      summary: Update token status
      description: Updates the status of a specific token for a user.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
        - name: TokenGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenForm'
      responses:
        '200':
          description: Token status updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateUserResponse'
    delete:
      summary: Delete user token
      description: Deletes a specific token for a user.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
        - name: TokenGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the token
      responses:
        '200':
          description: Token deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateUserResponse'
  /business/customer-users/{UserGuid}/token:
    post:
      summary: Create new token
      description: Creates a new token for a specific user.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenForm'
      responses:
        '200':
          description: Token created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicResponse'
  /business/customer-users/{UserGuid}/token/{TokenGuid}/data:
    put:
      summary: Update token data
      description: Updates the data for a specific token.
      tags: [Customer User Management]
      security:
        - ApplicationAuth: []
        - NonceAuth: []
        - UserAuth: []
      parameters:
        - name: UserGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the user
        - name: TokenGuid
          in: path
          required: true
          schema:
            type: string
          description: The unique identifier for the token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenForm'
      responses:
        '200':
          description: Token data updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateStateResponse'
components:
  securitySchemes:
    ApplicationAuth:
      type: apiKey
      in: header
      name: x-app-token
      description: Application token received during application registration
    NonceAuth:
      type: apiKey
      in: header
      name: x-nonce-token
      description: Unique, base64-encoded, random string for each request. Prevents replay attacks
    UserAuth:
      type: apiKey
      in: header
      name: x-user-credential
      description: Session token received from the login endpoint. Required for user-based authentication

  schemas:
    ErrorResponse:
      type: object
      properties:
        applicationMessage:
          type: string
          description: The application-level error message
        consumerMessage:
          type: string
          description: The user-friendly error message
      required: [applicationMessage, consumerMessage]
    CustomerDetailsResponse:
      type: object
      properties:
        customerCode:
          type: string
        customerName:
          type: string
        notes:
          type: string
        geographicTimezoneId:
          type: string
        customerId:
          type: integer
      required: [customerCode, customerName, customerId]
    ListCustomerDetailsResponse:
      type: object
      properties:
        customerDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/CustomerDetailsResponse'
    CustomerDetailsForm:
      type: object
      properties:
        name:
          type: string
        geographicTimezoneId:
          type: string
        notes:
          type: string
      required: [name, geographicTimezoneId]
    BasicResponse:
      type: object
      properties:
        content:
          type: string
        errorMessage:
          type: string
    InstallerMetricsResponse:
      type: object
      properties:
        customerMetrics:
          $ref: '#/components/schemas/CustomerMetricsResponse'
        generalMetrics:
          $ref: '#/components/schemas/GeneralMetricsResponse'
        userMetrics:
          $ref: '#/components/schemas/UserMetricsResponse'
        deviceMetrics:
          $ref: '#/components/schemas/DeviceIssuesMetricsResponse'
        licenceMetrics:
          $ref: '#/components/schemas/LicenseMetricsResponse'
        firmwareMetrics:
          $ref: '#/components/schemas/FirmwareMetricsResponse'
    CustomerMetricsResponse:
      type: object
      properties:
        customers:
          type: array
          items:
            $ref: '#/components/schemas/CustomerNameResponse'
    CustomerNameResponse:
      type: object
      properties:
        customerGuid:
          type: string
        customerId:
          type: integer
        customerName:
          type: string
    GeneralMetricsResponse:
      type: object
      properties:
        numberOfCustomers:
          type: integer
        numberOfSites:
          type: integer
        numberOfDevices:
          type: integer
        numberOfMasterDevices:
          type: integer
        numberOfSlaveDevices:
          type: integer
        latestMasterFirmwareVersion:
          type: string
        latestSlaveFirmwareVersion:
          type: string
        sitesConnectedToFireAlarm:
          type: integer
        sitesConnectedToFireAlarmDetails:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDetailsResponse'
    UserMetricsResponse:
      type: object
      properties:
        numberOfUsers:
          type: integer
        numberOfBarredUsers:
          type: integer
        numberOfLostTokens:
          type: integer
        numberOfOperators:
          type: integer
        numberOfOperatorsNotAcceptTAndC:
          type: integer
        barredUsers:
          type: array
          items:
            $ref: '#/components/schemas/UserDetailsResponse'
        lostTokenUsers:
          type: array
          items:
            $ref: '#/components/schemas/UserLostTokenResponse'
    DeviceIssuesMetricsResponse:
      type: object
      properties:
        offlineDevices:
          type: integer
        onlineDevices:
          type: integer
        outOfDateDevices:
          type: integer
        deactivatedDevices:
          type: integer
        lockdownDevices:
          type: integer
        onlineDevicesDetails:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDetailsResponse'
        offlineDevicesDetails:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDetailsResponse'
        deactivatedDevicesDetails:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDetailsResponse'
        lockdownDevicesDetails:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDetailsResponse'
    LicenseMetricsResponse:
      type: object
      properties:
        controllerLicensesNearingExpiry:
          type: array
          items:
            $ref: '#/components/schemas/License'
        simLicensesNearingExpiry:
          type: array
          items:
            $ref: '#/components/schemas/License'
        controllerLicensesExpired:
          type: array
          items:
            $ref: '#/components/schemas/License'
        simLicensesExpired:
          type: array
          items:
            $ref: '#/components/schemas/License'
    FirmwareMetricsResponse:
      type: object
      properties:
        firmwareDetail:
          type: array
          items:
            $ref: '#/components/schemas/FirmwareVersionMetricsResponse'
    FirmwareVersionMetricsResponse:
      type: object
      properties:
        version:
          type: string
        deviceType:
          type: string
        numberOfDevices:
          type: integer
    SiteDetailsResponse:
      type: object
      properties:
        siteGuid:
          type: string
          description: The site GUID
        name:
          type: string
          description: The site name
        siteCode:
          type: string
          description: The site code
        geographicTimezoneId:
          type: string
          description: The geographic timezone ID
        notes:
          type: string
          description: The site notes
        customerGuid:
          type: string
          description: The customer unique identifier
        siteId:
          type: integer
          description: The site ID
    SiteDetailsForm:
      type: object
      properties:
        siteName:
          type: string
          description: The site name
        siteCode:
          type: string
          description: The site code
        geographicTimezoneId:
          type: string
          description: The geographic timezone ID
        notes:
          type: string
          description: The site notes
    CustomerUsersDetailsResponse:
      type: object
      properties:
        userGuid:
          type: string
          description: The user GUID (primary key)
        firstName:
          type: string
          description: The user first name
        lastName:
          type: string
          description: The user last name
        dateValidFrom:
          type: string
          format: date-time
          description: The date valid from
        expiryDate:
          type: string
          format: date-time
          description: The expiry date
        pin:
          type: integer
          description: The pin code
        verificationPin:
          type: integer
          description: The verification pin
        pinTokenGuid:
          type: string
          description: The token GUID
        isBarred:
          type: boolean
          description: Whether the user is barred
        smallCustomField1:
          type: string
          description: The small custom field 1
        smallCustomField2:
          type: string
          description: The small custom field 2
        largeCustomField1:
          type: string
          description: The large custom field 1
        largeCustomField2:
          type: string
          description: The large custom field 2
        extraLargeCustomField:
          type: string
          description: The extra large custom field
        isExemptFromLockDown:
          type: boolean
          description: Whether the user is exempt from lock down
        accessLevelGuid:
          type: string
          description: The access level unique identifier
        accessLevelDescription:
          type: string
          description: The access level description
        userGroupGuid:
          type: string
          description: The user group unique identifier
        userGroupDescription:
          type: string
          description: The user group description
        accessLevelId:
          type: integer
          description: The access level ID
        userId:
          type: integer
          description: The user ID
    ListSiteDetailsResponse:
      type: object
      properties:
        siteDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/SiteDetailsResponse'
    ListCustomerUsersDetailsResponse:
      type: object
      properties:
        customerUsersDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/CustomerUsersDetailsResponse'
    DeviceDetailsResponse:
      type: object
      properties:
        deviceGuid:
          type: string
          description: The device GUID
        name:
          type: string
          description: The device name
        serialNumber:
          type: string
          description: The device serial number
        activationCode:
          type: string
          description: The activation code
        notes:
          type: string
          description: The device notes
        masterSerialNumber:
          type: string
          description: The master serial number (for expansion controllers)
        slave:
          type: boolean
          description: Whether the device is an expansion controller
        master:
          type: boolean
          description: Whether the device is a master controller
        autoReinstate:
          type: boolean
          description: The auto reinstate indicator
        controllerLicense:
          type: string
          description: The controller license
        simLicense:
          type: string
          description: The SIM license
        customerGuid:
          type: string
          description: The customer unique identifier
        deviceId:
          type: integer
          description: The device ID
    DeviceDetailsForm:
      type: object
      properties:
        name:
          type: string
          description: The device name
        serialNumber:
          type: string
          description: The device serial number
        activationCode:
          type: string
          description: The activation code
        notes:
          type: string
          description: The device notes
        masterSerialNumber:
          type: string
          description: The master serial number (for expansion controllers)
        slave:
          type: boolean
          description: Whether the device is an expansion controller
        master:
          type: boolean
          description: Whether the device is a master controller
        autoReinstate:
          type: boolean
          description: The auto reinstate indicator
        controllerLicense:
          type: string
          description: The controller license
        simLicense:
          type: string
          description: The SIM license
    ListDeviceDetailsResponse:
      type: object
      properties:
        deviceDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDetailsResponse'
    CustomerUserGroupDetailsResponse:
      type: object
      properties:
        userGroupGuid:
          type: string
          description: The user group unique identifier
        name:
          type: string
          description: The user group name
        userGroupMemberDetailsList:
          type: array
          items:
            $ref: '#/components/schemas/UserGroupMemberDetails'
        userGroupId:
          type: integer
          description: The user group ID
    UserGroupMemberDetails:
      type: object
      properties:
        userName:
          type: string
          description: The user name
        userGuid:
          type: string
          description: The user unique identifier
    ListCustomerUserGroupsResponse:
      type: object
      properties:
        userGroupDetailsList:
          type: array
          items:
            $ref: '#/components/schemas/CustomerUserGroupDetailsResponse'
    CustomerAccessLevelResponse:
      type: object
      properties:
        accessLevels:
          type: array
          items:
            $ref: '#/components/schemas/AccessLevelRuleDetails'
        customerGuid:
          type: string
          description: The customer unique identifier
        customerName:
          type: string
          description: The customer name
        accessLevelGuid:
          type: string
          description: The access level unique identifier
        accessLevelDescription:
          type: string
          description: The access level description
        accessLevelId:
          type: integer
          description: The access level ID
    AccessLevelRuleDetails:
      type: object
      properties:
        doorGuid:
          type: string
          description: The door unique identifier
        acTimezoneGuid:
          type: string
          description: The access control timezone unique identifier
        doorName:
          type: string
          description: The door name
        timezoneDescription:
          type: string
          description: The timezone description
        timezoneId:
          type: integer
          description: The timezone ID
    AccessLevelForm:
      type: object
      properties:
        accessLevelName:
          type: string
          description: The access level name
        accessLevelRules:
          type: array
          items:
            $ref: '#/components/schemas/AccessLevelRuleDetails'
          description: The access level rules
    UpdateAccessLevelResponse:
      type: object
      properties:
        nameChange:
          type: boolean
          description: Whether the name was changed
        rulesChange:
          type: boolean
          description: Whether the rules were changed
    ListCustomerAccessLevelResponse:
      type: object
      properties:
        customerAccessLevels:
          type: array
          items:
            $ref: '#/components/schemas/CustomerAccessLevelResponse'
    DoorDetailsResponse:
      type: object
      properties:
        doorGuid:
          type: string
          description: The door unique identifier
        controllerPortId:
          type: integer
          description: The controller port ID
        name:
          type: string
          description: The door name
        deviceDetailsResponse:
          $ref: '#/components/schemas/DeviceDetailsResponse'
        isFireAlarmExempt:
          type: boolean
          description: Whether the door is exempt from fire alarm
        doorReaderDetailsResponse:
          $ref: '#/components/schemas/DoorReaderDetailsResponse'
        cameras:
          type: array
          items:
            $ref: '#/components/schemas/CameraResponse'
          description: The cameras relating to the door
    DoorReaderDetailsResponse:
      type: object
      properties:
        readerType:
          type: string
          description: The reader type
        status:
          type: string
          description: The reader status
        deviceStatus:
          type: string
          description: The device status
        ledConfigurationCode:
          type: string
          description: The LED configuration code
        customFormatGuid:
          type: string
          description: The custom format GUID
    ListDoorDetailsResponse:
      type: object
      properties:
        doorDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/DoorDetailsResponse'
    CameraResponse:
      type: object
      properties:
        cameraGuid:
          type: string
          description: The camera unique identifier
        name:
          type: string
          description: The camera name
        ipAddress:
          type: string
          description: The camera IP address
        port:
          type: integer
          description: The camera port
        username:
          type: string
          description: The camera username
        password:
          type: string
          description: The camera password
        cameraType:
          type: string
          description: The camera type
        status:
          type: string
          description: The camera status
    EventDetailsResponse:
      type: object
      properties:
        eventId:
          type: integer
          description: The event ID
        displayName:
          type: string
          description: The event display name
        priorityDescription:
          type: string
          description: The priority description
        customerGuid:
          type: string
          description: The customer unique identifier
        eventDate:
          type: string
          format: date-time
          description: The event date
        receivedDate:
          type: string
          format: date-time
          description: The received date
        deviceSerialNumber:
          type: string
          description: The device serial number
        deviceName:
          type: string
          description: The device name
        deviceGuid:
          type: string
          description: The device GUID
        doorGuid:
          type: string
          description: The door unique identifier
        tokenData:
          type: string
          description: The token data
        tokenGuid:
          type: string
          description: The token unique identifier
        tokenDescription:
          type: string
          description: The token description
        tokenLost:
          type: boolean
          description: Whether the token is lost
        userGuid:
          type: string
          description: The user unique identifier
        userFirstName:
          type: string
          description: The user first name
        userLastName:
          type: string
          description: The user last name
        userBarred:
          type: boolean
          description: Whether the user is barred
        userDeleted:
          type: boolean
          description: Whether the user is deleted
        siteGuid:
          type: string
          description: The site unique identifier
        siteName:
          type: string
          description: The site name
        siteCode:
          type: string
          description: The site code
        doorName:
          type: string
          description: The door name
        doorDeleted:
          type: boolean
          description: Whether the door is deleted
        deviceDeleted:
          type: boolean
          description: Whether the device is deleted
        siteDeleted:
          type: boolean
          description: Whether the site is deleted
        timezoneDescription:
          type: string
          description: The timezone description
        installerCode:
          type: string
          description: The installer code
        customerName:
          type: string
          description: The customer name
        eventType:
          type: integer
          description: The event type
        localDoorId:
          type: integer
          description: The local door ID
        tz:
          type: integer
          description: The controller timezone
        deviceId:
          type: integer
          description: The device ID
        doorId:
          type: integer
          description: The door ID
        tokenId:
          type: integer
          description: The token ID
        customerId:
          type: integer
          description: The customer ID
        siteId:
          type: integer
          description: The site ID
        userId:
          type: integer
          description: The user ID
        tokenType:
          type: integer
          description: The token type
        tokenIfType:
          type: integer
          description: The token interface type
    ListEventDetailsResponse:
      type: object
      properties:
        eventDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/EventDetailsResponse'
    License:
      type: object
      properties:
        key:
          type: string
          description: The license key
        description:
          type: string
          description: The license description
        serialNumber:
          type: string
          description: The master device serial number
        iccid:
          type: string
          description: The SIM ICCID
        simProvider:
          type: string
          description: The SIM provider
        customerGuid:
          type: string
          description: The unique identifier of the customer to which the license is allocated
        expirationDate:
          type: string
          format: date-time
          description: The expiration date
        customerName:
          type: string
          description: The customer name
        siteGuid:
          type: string
          description: The site GUID
        siteName:
          type: string
          description: The site name
        deviceName:
          type: string
          description: The device name
        installerName:
          type: string
          description: The installer name
        installerCode:
          type: string
          description: The installer code
    LicenseResponse:
      type: object
      properties:
        controllerLicenses:
          type: array
          items:
            $ref: '#/components/schemas/License'
          description: List of controller licenses
        simLicenses:
          type: array
          items:
            $ref: '#/components/schemas/License'
          description: List of SIM licenses
    DeviceLicenseResponse:
      type: object
      properties:
        controllerLicense:
          $ref: '#/components/schemas/License'
          description: The controller license
        simLicense:
          $ref: '#/components/schemas/License'
          description: The SIM license
    LicenseTypesResponse:
      type: object
      properties:
        controllerLicenseTypes:
          type: array
          items:
            $ref: '#/components/schemas/LicenseType'
          description: List of controller license types
        simLicenseTypes:
          type: array
          items:
            $ref: '#/components/schemas/LicenseType'
          description: List of SIM license types
    LicenseType:
      type: object
      properties:
        licenseTypeId:
          type: integer
          description: The license type ID
        description:
          type: string
          description: The license type description
        price:
          type: number
          format: float
          description: The license price
        currency:
          type: string
          description: The currency code
        duration:
          type: integer
          description: The license duration in days
    ReportResponse:
      type: object
      properties:
        reportType:
          type: integer
          description: The report type identifier
        reportName:
          type: string
          description: The report name
        requireDateRange:
          type: boolean
          description: Whether the report requires a date range
        reportDescription:
          type: string
          description: The report description
        reportHelpLink:
          type: string
          description: The report help link
        reportTypeParameters:
          type: array
          items:
            $ref: '#/components/schemas/ReportTypeParameterResponse'
          description: The report parameters
    ListReportsResponse:
      type: object
      properties:
        reports:
          type: array
          items:
            $ref: '#/components/schemas/ReportResponse'
          description: List of reports
    ReportTypeParameterResponse:
      type: object
      properties:
        parameterType:
          type: integer
          description: The parameter type identifier
        parameterName:
          type: string
          description: The parameter name
        parameterDescription:
          type: string
          description: The parameter description
        required:
          type: boolean
          description: Whether the parameter is required
    ReportParametersForm:
      type: object
      properties:
        fromDate:
          type: string
          format: date-time
          description: The start date for the report
        toDate:
          type: string
          format: date-time
          description: The end date for the report
        customerGuid:
          type: string
          description: The customer GUID filter
        siteGuid:
          type: string
          description: The site GUID filter
        deviceGuid:
          type: string
          description: The device GUID filter
        userGuid:
          type: string
          description: The user GUID filter
        doorGuid:
          type: string
          description: The door GUID filter
        tokenGuid:
          type: string
          description: The token GUID filter
        userGroupGuid:
          type: string
          description: The user group GUID filter
        installerCode:
          type: string
          description: The installer code filter
    ExecuteReportResponse:
      type: object
      properties:
        reportMessageKey:
          type: string
          description: The message key for tracking report execution
    QueryReportStatusResponse:
      type: object
      properties:
        status:
          type: string
          description: The report execution status
        downloadUrl:
          type: string
          description: The download URL for the completed report
        errorMessage:
          type: string
          description: Error message if the report failed
    ListReportMenuItemResponse:
      type: object
      properties:
        menuItems:
          type: array
          items:
            $ref: '#/components/schemas/ReportMenuItemResponse'
          description: List of menu items
    ReportMenuItemResponse:
      type: object
      properties:
        id:
          type: integer
          description: The menu item ID
        description:
          type: string
          description: The menu item description
    TimezoneResponse:
      type: object
      properties:
        timezoneGuid:
          type: string
          description: The timezone unique identifier
        description:
          type: string
          description: The timezone description
        timezoneId:
          type: integer
          description: The timezone ID
        timezoneDetails:
          type: array
          items:
            $ref: '#/components/schemas/TimezoneDetails'
          description: The timezone schedule details
    CustomerTimezoneResponse:
      type: object
      properties:
        timezoneResponseList:
          type: array
          items:
            $ref: '#/components/schemas/TimezoneResponse'
          description: List of customer timezones
    ListCustomerTimezoneResponse:
      type: object
      properties:
        timezoneResponseList:
          type: array
          items:
            $ref: '#/components/schemas/AdvancedTimezoneResponse'
          description: List of all customer timezones with details
    AdvancedTimezoneResponse:
      type: object
      properties:
        timezoneGuid:
          type: string
          description: The timezone unique identifier
        description:
          type: string
          description: The timezone description
        timezoneId:
          type: integer
          description: The timezone ID
        timezoneDetails:
          type: array
          items:
            $ref: '#/components/schemas/AdvancedTimezoneDetails'
          description: The advanced timezone schedule details
    AdvancedTimezoneDetails:
      type: object
      properties:
        weekDay:
          type: string
          description: The weekday name
        startTime:
          type: string
          description: The start time (HH:MM format)
        endTime:
          type: string
          description: The end time (HH:MM format)
        startDate:
          type: string
          format: date
          description: The start date for holiday timezones
        endDate:
          type: string
          format: date
          description: The end date for holiday timezones
    TimezoneDetails:
      type: object
      properties:
        weekDay:
          type: string
          description: The weekday name
        startTime:
          type: string
          description: The start time (HH:MM format)
        endTime:
          type: string
          description: The end time (HH:MM format)
    ListGeoTimezoneResponse:
      type: object
      properties:
        geoTimezoneResponseList:
          type: array
          items:
            $ref: '#/components/schemas/GeoTimezoneResponse'
          description: List of geographic timezones
    GeoTimezoneResponse:
      type: object
      properties:
        timezoneId:
          type: string
          description: The timezone ID
        timezoneDescription:
          type: string
          description: The timezone description
        offset:
          type: string
          description: The timezone offset
    TimezoneConflictResponse:
      type: object
      properties:
        conflicts:
          type: array
          items:
            $ref: '#/components/schemas/TimezoneConflict'
          description: List of timezone conflicts
        liveFeedUrl:
          type: string
          description: The live feed URL for real-time conflict updates
    TimezoneConflict:
      type: object
      properties:
        deviceSerialNumber:
          type: string
          description: The device serial number
        deviceName:
          type: string
          description: The device name
        conflictDescription:
          type: string
          description: The conflict description
        conflictType:
          type: string
          description: The type of conflict
    UserDetailsResponse:
      type: object
      properties:
        customerGuid:
          type: string
          description: The customer GUID
        userGuid:
          type: string
          description: The user GUID
        userId:
          type: integer
          description: The user ID
        firstName:
          type: string
          description: The user first name
        lastName:
          type: string
          description: The user last name
    TokenDetailsResponse:
      type: object
      properties:
        tokenGuid:
          type: string
          description: The token unique identifier
        description:
          type: string
          description: The token description
        value:
          type: string
          description: The token value
        interfaceType:
          type: string
          description: The interface type
        markedAsLost:
          type: boolean
          description: Whether the token is marked as lost
        tokenTypeId:
          type: integer
          description: The token type ID
        interfaceTypeId:
          type: integer
          description: The reader interface type ID
    ListTokenDetailsResponse:
      type: object
      properties:
        tokenDetailsResponseList:
          type: array
          items:
            $ref: '#/components/schemas/TokenDetailsResponse'
          description: List of token details
    FindUserTokenResponse:
      type: object
      properties:
        userGuid:
          type: string
          description: The user unique identifier
        tokenGuid:
          type: string
          description: The token unique identifier
        tokenData:
          type: integer
          description: The token data
        lost:
          type: boolean
          description: Whether the token is lost
        tokenType:
          type: string
          description: The token type
        interfaceType:
          type: string
          description: The token interface type
        firstName:
          type: string
          description: The user first name
        lastName:
          type: string
          description: The user last name
        customerGuid:
          type: string
          description: The customer unique identifier
        customerName:
          type: string
          description: The customer name
        tokenDeleted:
          type: boolean
          description: Whether the token is deleted
        userDeleted:
          type: boolean
          description: Whether the user is deleted
        customerDeleted:
          type: boolean
          description: Whether the customer is deleted
    ListFindUserTokenResponse:
      type: object
      properties:
        userTokenResponseList:
          type: array
          items:
            $ref: '#/components/schemas/FindUserTokenResponse'
          description: List of users found with the specified token
    UserLostTokenResponse:
      type: object
      properties:
        firstName:
          type: string
          description: The user first name
        lastName:
          type: string
          description: The user last name
        customerGuid:
          type: string
          description: The customer unique identifier
        userGuid:
          type: string
          description: The user unique identifier
        userId:
          type: integer
          description: The user ID
        tokenData:
          type: integer
          description: The token data
    UserCredentials:
      type: object
      properties:
        username:
          type: string
          description: The username
        password:
          type: string
          description: The password
    LoginResponse:
      type: object
      properties:
        sessionToken:
          type: string
          description: The session token
        expirationDate:
          type: string
          format: date-time
          description: The session expiration date
        loginMessage:
          type: string
          description: Any login message
    PasswordResetRequest:
      type: object
      properties:
        username:
          type: string
          description: The username
        resetCode:
          type: string
          description: The reset code
        newPassword:
          type: string
          description: The new password
    UserPermissionsResponse:
      type: object
      properties:
        permissions:
          type: array
          items:
            type: string
          description: List of user permissions
        roles:
          type: array
          items:
            type: string
          description: List of user roles
    OperatorDetails:
      type: object
      properties:
        operatorId:
          type: string
          description: The operator ID
        firstName:
          type: string
          description: The operator first name
        lastName:
          type: string
          description: The operator last name
        email:
          type: string
          description: The operator email
        username:
          type: string
          description: The operator username
        role:
          type: string
          description: The operator role
        active:
          type: boolean
          description: Whether the operator is active
    ListOperatorDetailsResponse:
      type: object
      properties:
        operatorDetailsList:
          type: array
          items:
            $ref: '#/components/schemas/OperatorDetails'
          description: List of operator details
    ListOperatorMessageResponse:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OperatorMessage'
          description: List of operator messages
    OperatorMessage:
      type: object
      properties:
        messageId:
          type: integer
          description: The message ID
        title:
          type: string
          description: The message title
        content:
          type: string
          description: The message content
        createdDate:
          type: string
          format: date-time
          description: The message creation date
        read:
          type: boolean
          description: Whether the message has been read
    EnumDataResponse:
      type: object
      properties:
        value:
          type: string
          description: The enum value
        description:
          type: string
          description: The enum description
    ScheduledReportResponse:
      type: object
      properties:
        scheduledReportId:
          type: integer
          description: The scheduled report ID
        report:
          $ref: '#/components/schemas/ReportResponse'
        hour:
          type: integer
          description: The hour of execution (0-23)
        dayOfWeek:
          type: integer
          description: The day of week for execution (1-7)
        active:
          type: boolean
          description: Whether the scheduled report is active
        recipientList:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledReportRecipientResponse'
          description: List of recipients
        parameterList:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledReportParameterResponse'
          description: List of parameters
    ListScheduledReportsResponse:
      type: object
      properties:
        scheduledReportResponseList:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledReportResponse'
          description: List of scheduled reports
    ScheduleReportForm:
      type: object
      properties:
        reportId:
          type: integer
          description: The report ID
        hour:
          type: integer
          description: The hour of execution (0-23)
        dayOfWeek:
          type: integer
          description: The day of week for execution (1-7)
        active:
          type: boolean
          description: Whether the scheduled report should be active
        recipients:
          type: array
          items:
            type: string
          description: List of recipient email addresses
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledReportParameterForm'
          description: List of report parameters
    ScheduledReportParameterForm:
      type: object
      properties:
        parameterId:
          type: integer
          description: The parameter ID
        values:
          type: array
          items:
            type: string
          description: The parameter values
    ScheduledReportRecipientResponse:
      type: object
      properties:
        recipientId:
          type: integer
          description: The recipient ID
        scheduledReportId:
          type: integer
          description: The scheduled report ID
        emailAddress:
          type: string
          description: The recipient email address
    ScheduledReportParameterResponse:
      type: object
      properties:
        scheduledParameterId:
          type: integer
          description: The scheduled parameter ID
        reportParameterType:
          $ref: '#/components/schemas/ReportTypeParameterResponse'
        values:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledReportParameterValueResponse'
          description: List of parameter values
    ScheduledReportParameterValueResponse:
      type: object
      properties:
        scheduledParameterId:
          type: integer
          description: The scheduled parameter ID
        itemId:
          type: integer
          description: The item ID
        value:
          type: string
          description: The parameter value
        valueDescription:
          type: string
          description: The parameter value description
    CustomerUserForm:
      type: object
      properties:
        firstName:
          type: string
          description: The user first name
        lastName:
          type: string
          description: The user last name
        email:
          type: string
          description: The user email address
        phoneNumber:
          type: string
          description: The user phone number
        active:
          type: boolean
          description: Whether the user is active
        accessLevels:
          type: array
          items:
            type: string
          description: List of access level GUIDs
        userGroups:
          type: array
          items:
            type: string
          description: List of user group GUIDs
    TokenForm:
      type: object
      properties:
        tokenTypeId:
          type: integer
          description: The token type ID
        interfaceTypeId:
          type: integer
          description: The interface type ID
        description:
          type: string
          description: The token description
        value:
          type: string
          description: The token value
        markedAsLost:
          type: boolean
          description: Whether the token is marked as lost
    UpdateUserResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Whether the operation was successful
        message:
          type: string
          description: The response message
        userGuid:
          type: string
          description: The user GUID
    UpdateStateResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Whether the operation was successful
        message:
          type: string
          description: The response message
        state:
          type: string
          description: The updated state
