openapi: 3.0.1
info:
  title: Mason Device Console API Docs
  version: v1.0
  description: >-
    ## Mason Device Console API


    The Mason Device Console APIs provide programmatic access to manage and
    control your fleet of Mason devices. These APIs enable you to:


    - **Authentication**: Get JWT tokens for API access

    - **Device Management**: Get device information, send commands, and retrieve
    telemetry data

    - **Application Management**: Install, update, and manage applications on
    devices

    - **Configuration**: Apply remote settings and manage device configurations

    - **OTA Updates**: Schedule and manage firmware updates

    - **File Management**: Upload and manage files for distribution to devices

    - **Filtering**: Create and manage device groups based on various criteria


    ### Base URL


    All API endpoints use the base URL: `https://mason.glbth.com`


    ### Authentication


    All API calls require authentication using JWT tokens obtained through the
    login endpoints. API responses follow a consistent structure with status
    information and payload data.
servers:
  - url: https://mason.glbth.com
security:
  - bearer-key: []
tags:
  - name: Remote settings APIs
    description: APIs for managing remote settings
  - name: Login APIs
    description: APIs that are responsible for login operations
  - name: Command APIs
    description: APIs responsible for device commands
  - name: Device live data APIs
    description: APIs responsible for live data operations
  - name: Device Data APIs
    description: APIs that are responsible for device data
  - name: Repository APIs
    description: APIs for repositories actions
  - name: Files APIs
    description: APIs for managing files and packages
  - name: Triggers APIs
    description: APIs for triggers functions
  - name: OTA controller APIs
    description: APIs for controlling OTAs
  - name: support center APIs
    description: APIs for managing support functions
  - name: Filters APIs
    description: APIs for filters operations
paths:
  /rest/supportcenter/manager/updatehhid:
    post:
      tags:
        - support center APIs
      summary: Updates the household ID of the devices in the system.
      description: >-
        The API receives a list of DeviceHHID objects which are pairs of device
        ID and Household ID, and set it in the system.
      operationId: updatehhid
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/DeviceHHID'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/triggers/save:
    post:
      tags:
        - Triggers APIs
      summary: Save trigger to triggers repository
      description: >-
        This API endpoint is used to create or update a trigger repository item.
        It expects an HTTP POST request with a `Trigger` object in the request
        body. The API performs access control checks, executes pre-save
        operations, and then saves the trigger repository item. If it's a new
        item, it sets the creation date before saving.
      operationId: save
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Trigger'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaveTriggersResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/remotesettings/saveremotesettings:
    post:
      tags:
        - Remote settings APIs
      summary: Save Remote Settings
      description: >-
        This API endpoint enables the creation or update of remote settings
        bundles. It requires an HTTP POST request with a `RemoteSettingsBundle`
        object provided in the request body. The API checks the logged user's
        permissions, sets the creation date if it's a new bundle, and then saves
        the remote settings bundle.
      operationId: save_1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteSettingsBundle'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaveRemoteSettingsResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/ota/save:
    post:
      tags:
        - OTA controller APIs
        - Repository APIs
      summary: Save Repository Item
      description: >-
        This API endpoint is used to create or update a repository item. It
        expects an HTTP POST request with a `RepositoryItemBase` object in the
        request body. The API performs access control checks, executes pre-save
        operations, and then saves the repository item. If it's a new item, it
        sets the creation date before saving.
      operationId: save_2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RepositoryItemBase'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaveRepItemResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/getdata/getgroupinstalledappsdata:
    post:
      tags:
        - Device Data APIs
      summary: Retrieves installed app statistics for a group
      description: >-
        This endpoint retrieves installed app data for a specified group. The
        method requires authentication and a JSON payload containing package
        names and group information. The response contains summarized app data
        for the group along with metadata indicating the success of the
        operation
      operationId: getgroupinstalledappsdata
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetGroupInstalledAppsDataRequest'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetGroupInstalledAppsDataResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/filters/addfilter:
    post:
      tags:
        - Filters APIs
      summary: Add device filter (or group)
      description: >-
        This API endpoint allows the addition of a device filter by creating a
        new `DeviceFilter` object. It expects an HTTP POST request with a
        `DeviceFilter` provided in the request body. The API verifies the logged
        user's permissions, sets the owner and domain of the filter, and then
        saves it. It's important to note that a group can be thought of as a
        specific type of filter that is further refined by tags.
      operationId: addDeviceFilter
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceFilter'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddFilterResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/files/savefiledata:
    post:
      tags:
        - Files APIs
      summary: Save file or package repository item.
      description: >-
        This API endpoint handles the saving of file data, including associated
        metadata. It requires an HTTP POST request with a
        `RepositoryFileMetaData` object provided in the request body. The API
        verifies the logged user's permissions, processes the file data, and
        then saves it. Once the file or package has been successfully stored, it
        can be sent to the device(s).
      operationId: saveFiles
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RepositoryFileMetaData'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/files/getrepoitems:
    post:
      tags:
        - Files APIs
      summary: Get file or package repository items by their IDs.
      description: >-
        This endpoint retrieves repository items based on their IDs. It expects
        a list of repository item IDs (repos) in the request body. The method
        first checks the user's permissions to ensure proper authorization. It
        then retrieves the list of repository file metadata. The response
        contains a JSON array of repository file metadata representing the
        requested items.
      operationId: getrepoitems
      requestBody:
        content:
          application/json:
            schema:
              type: array
              description: names of the repository items to retrieve
              items:
                type: string
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetRepoItemsResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/command/save:
    post:
      tags:
        - Command APIs
      summary: Save and trigger a command
      description: >-
        This API endpoint allows for the creation and saving of a new command.
        It takes a `Command` object as the request body which includes the
        execution condition as set in the reference trigger and returns the
        unique identifier (`commandID`) of the newly created command.
      operationId: save_3
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Command'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaveCommandResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/command/changestate/{commandId}:
    post:
      tags:
        - Command APIs
      summary: Modify Command State
      description: >-
        This API endpoint allows for the modification of the state of a command
        identified by its unique command ID. It initiates a state change based
        on the provided 'newstate' parameter.
      operationId: changestate
      parameters:
        - name: commandId
          in: path
          description: The unique identifier of the command.
          required: true
          schema:
            type: string
          example: command123
        - name: newstate
          in: query
          description: The new state to set for the command.
          required: true
          schema:
            type: string
            description: The new state to set for the command.
            example: COMMAND_STATE_ACTIVE
            enum:
              - COMMAND_STATE_ACTIVE
              - COMMAND_STATE_STOPPED
          example: COMMAND_STATE_ACTIVE
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeStateRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/login/refreshjwt:
    post:
      tags:
        - Login APIs
      summary: Refreshes a JWT token
      description: >-
        This endpoint allows users to refresh a JWT token. It takes the
        refreshToken, which was received in the getjwttoken API and generates a
        new jwt token in the request body.
      operationId: refreshjwt
      parameters:
        - name: accountuser
          in: header
          description: The user name associated with the JWT token.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefreshJwtRequest'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefreshJwtResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/login/getjwttoken:
    post:
      tags:
        - Login APIs
      summary: Gets a JWT token.
      description: >-
        This endpoint allows users to obtain a JWT token (short expiration) and
        a refresh token (long expiration) for authentication of further API
        calls. It takes a JSON object containing the username and password
        (required fields) in the request body. The method performs
        authentication, generates tokens, and handles various authentication
        exceptions
      operationId: getRefreshTokenAndJwttoken
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
            examples:
              login:
                summary: Basic login request
                description: A sample login request with username and password
                value:
                  username: username@account
                  password: mypassword
        required: true
      x-code-samples:
        - lang: curl
          source: |-
            curl -X POST \
              https://mason.glbth.com/rest/login/getjwttoken \
              -H 'Content-Type: application/json' \
              -d '{
                "username": "username@account",
                "password": "mypassword"
              }'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/command/send/sendcommanddatatomany:
    post:
      tags:
        - Command APIs
      summary: Send command to multiple devices
      description: >-
        Send a command with provided data to multiple devices. Command could be
        any supported command such as send message command, install package
        command, OTA and more. Returns metadata about the sent command.
      operationId: sendcommanddatatomany
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandDataAndDevices'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendCommandToManyResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/command/send/sendcommandbyfilter/{filterid}:
    post:
      tags:
        - Command APIs
      summary: Send command data to devices based on a filter (or group).
      description: >-
        Creates a new command with provided data and sends it to devices based
        on a filter. Groups, which are filters filtered by tags, can also be a
        target for this command. The API returns metadata about the sent
        command.
      operationId: sendcommandbyfilter
      parameters:
        - name: filterid
          in: path
          description: The ID of the filter (or group) to target for sending the command.
          required: true
          schema:
            type: string
          example: filter123
        - name: ispersist
          in: query
          description: >-
            Flag indicating whether the command should be persisted for future
            reference.
          required: false
          schema:
            type: boolean
            default: false
          example: true
        - name: isall
          in: query
          description: >-
            Flag indicating whether the command should be sent to all matching
            devices.
          required: false
          schema:
            type: boolean
            default: false
          example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandData'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendCommandToManyResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/command/getcommands:
    post:
      tags:
        - Command APIs
      summary: Retrieve a list of commands based on various filters.
      description: >-
        This API retrieves a list of commands based on the provided filters. It
        supports pagination and filtering by action, search string, search type,
        search column, and more.
      operationId: getCommands
      parameters:
        - name: startIndex
          in: query
          description: >-
            The index from which to start retrieving commands in the paginated
            result.
          required: true
          schema:
            type: integer
            format: int32
        - name: pageSize
          in: query
          description: >-
            The number of commands to include in each page of the paginated
            result.
          required: true
          schema:
            type: integer
            format: int32
        - name: action
          in: query
          description: Filter commands by a specific action.
          required: false
          schema:
            type: string
        - name: searchstring
          in: query
          description: A string to search for within the commands.
          required: false
          schema:
            type: string
        - name: searchType
          in: query
          description: The type of search to perform (e.g., exact match, partial match).
          required: false
          schema:
            type: string
        - name: searchcolumn
          in: query
          description: The specific column to search within the commands.
          required: false
          schema:
            type: string
        - name: withgrouppackages
          in: query
          description: >-
            Indicates whether to include group packages along with individual
            commands (default is false).
          required: false
          schema:
            type: boolean
            default: false
        - name: v2
          in: query
          description: Indicates whether to use version 2 of the API (default is false).
          required: false
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/SortData'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandsListResult'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/triggers/getall:
    get:
      tags:
        - Triggers APIs
      summary: Retrieves all triggers.
      description: >-
        This endpoint is used to retrieve all triggers previously stored. The
        endpoint will return a JSON array containing all triggers in the
        database. If no triggers are found in the database, the endpoint will
        return an empty array.
      operationId: getall
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAllTriggersResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/ota/getall:
    get:
      tags:
        - OTA controller APIs
        - Repository APIs
      summary: Get all repository items
      description: >-
        This endpoint retrieves all repository items. It first checks the access
        control list (ACL) to ensure that the logged-in user has the necessary
        permissions abd then returns the list of all repository items.
      operationId: getAll
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAllRepositoryItemResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/live/getlivedata/{deviceid}:
    get:
      tags:
        - Device live data APIs
      summary: Retrieve live data from a device
      description: >-
        This endpoint allows the retrieval of live data from a specific device
        identified by its device ID. Device authentication is required. Upon
        receiving the request, the API triggers the retrieval of live data from
        the device through a background task. The live data is collected and
        stored in a container associated with the device session. The API
        returns the live data response, containing telemetry information and
        other relevant device data. The API has a rate limit of 1 API call for
        each user and device every 1 minute.
      operationId: getLiveData
      parameters:
        - name: deviceid
          in: path
          description: The ID of the device to retrieve live data from
          required: true
          schema:
            type: string
          example: device123
        - name: include
          in: query
          description: >-
            A comma-separated list of categories of data to return from the
            remote device. Options include 'apps' (information about installed
            applications), 'diskstats' (storage data), 'system_properties'
            (system properties), 'settings' (Android settings), and 'filesystem'
            (data about device volumes).
          required: false
          schema:
            type: string
          example: apps,diskstats
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/getdata/getdevicedata/{deviceid}:
    get:
      tags:
        - Device Data APIs
      summary: Retrieve comprehensive device data
      description: >-
        Access detailed information about a device with this API endpoint. It
        provides a more comprehensive view of the device's status, usage, and
        configuration compared to the dashboard data.
      operationId: getdevicedata
      parameters:
        - name: deviceid
          in: path
          description: The id of the device to retrieve data from
          required: true
          schema:
            type: string
          example: device123
        - name: fields
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceDataResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/getalldevices:
    get:
      tags:
        - Device Data APIs
      summary: Retrieve a paginated list of all devices
      description: >-
        Use this API endpoint to retrieve a paginated list of all available
        devices. You can specify pagination, sorting, and filtering parameters
        to customize the result. The response is provided as a
        DeviceListResponse containing device information
      operationId: getAllDevices
      parameters:
        - name: jtStartIndex
          in: query
          required: true
          schema:
            type: integer
            format: int32
        - name: jtPageSize
          in: query
          required: true
          schema:
            type: integer
            format: int32
        - name: jtSorting
          in: query
          required: true
          schema:
            type: string
        - name: searchcolumn
          in: query
          required: false
          schema:
            type: string
        - name: searchfilter
          in: query
          required: false
          schema:
            type: string
        - name: devicefilter
          in: query
          required: false
          schema:
            type: string
        - name: oemcols
          in: query
          required: false
          schema:
            type: string
        - name: sortcolumn
          in: query
          required: false
          schema:
            type: string
            default: hardwareId
        - name: extended
          in: query
          required: false
          schema:
            type: string
            default: 'false'
        - name: sortdirection
          in: query
          required: false
          schema:
            type: string
            default: dsc
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceListResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/filters/getfilters:
    get:
      tags:
        - Filters APIs
      summary: Retrieves a list of device filters (or groups).
      description: >-
        This endpoint allows authorized users to retrieve a list of device
        filters and groups.
      operationId: getFilters
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DeviceFilterResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/files/getfiles:
    get:
      tags:
        - Files APIs
      summary: Get a list of repository file (or package) metadata.
      description: >-
        This endpoint retrieves a list of repository file metadata. It first
        checks the user's permissions to ensure proper authorization. The API
        then retrieve the list of repository file metadata. The response is a
        JSON array containing information about each file (or package),
        including details such as file name, size, creation date, and other
        relevant metadata.
      operationId: getFiles
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetFilesResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/manager/command/get/{commandId}:
    get:
      tags:
        - Command APIs
      summary: Get command by ID with additional information
      description: >-
        Retrieves a command by its ID with additional metadata and returns a
        response containing the command and filter information if applicable
      operationId: getCommandById3
      parameters:
        - name: commandId
          in: path
          description: The unique identifier of the command.
          required: true
          schema:
            type: string
          example: command123
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandGetResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/command/getcommandstats/{commandId}:
    get:
      tags:
        - Command APIs
      summary: Get statistics for a specific command.
      description: This API retrieves statistics for a specific command based on its ID.
      operationId: getcommandstats
      parameters:
        - name: commandId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandStats'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
  /rest/command/getcommandresults/{commandId}:
    get:
      tags:
        - Command APIs
      summary: Get command results.
      description: >-
        This API retrieves command results for a specific command. It supports
        pagination and filtering by search string, sort column, sort order, and
        status filter.
      operationId: getcommandresults
      parameters:
        - name: commandId
          in: path
          required: true
          schema:
            type: string
        - name: startIndex
          in: query
          required: true
          schema:
            type: integer
            format: int32
        - name: pageSize
          in: query
          required: true
          schema:
            type: integer
            format: int32
        - name: searchstring
          in: query
          required: false
          schema:
            type: string
        - name: sortcolumn
          in: query
          required: false
          schema:
            type: string
        - name: sortorder
          in: query
          required: false
          schema:
            type: string
        - name: statusfilter
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandStatusesList'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: ' Too Many Requests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetaData'
        '503':
          description: Service Unavailable
components:
  schemas:
    ResponseMetaData:
      required:
        - '@class'
      type: object
      properties:
        data:
          type: object
          additionalProperties:
            type: object
        result:
          type: string
        message:
          type: string
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    DeviceHHID:
      type: object
      properties:
        deviceID:
          type: string
          description: The device ID which needs to be mapped to the household ID.
        hhid:
          type: string
          description: The household ID to attach to the device ID.
      description: The DeviceHHID class is used to map a device ID to a household ID.
    Trigger:
      type: object
      properties:
        triggerId:
          type: string
        triggerName:
          type: string
        description:
          type: string
        domain:
          type: string
        owner:
          type: string
        triggerData:
          $ref: '#/components/schemas/TriggerData'
        creationDate:
          type: string
          format: date-time
        privateRepoItem:
          type: boolean
        color:
          type: string
        fontIcon:
          type: string
    TriggerData:
      required:
        - '@class'
      type: object
      properties:
        execCondition:
          type: string
        execConditionSuccessCode:
          type: integer
          format: int32
        execConditionScript:
          type: boolean
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    SaveTriggersData:
      type: object
      properties:
        triggerid:
          type: string
      description: The data returned in the response.
    SaveTriggersResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/SaveTriggersData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    RemoteSettingsBundle:
      type: object
      properties:
        settingsBundleId:
          type: string
        settingsBundleName:
          type: string
        description:
          type: string
        domain:
          type: string
        owner:
          type: string
        settingsType:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        privateRepoItem:
          type: boolean
        moreData:
          type: object
          additionalProperties:
            type: object
        remoteSettingsItems:
          type: array
          items:
            $ref: '#/components/schemas/RemoteSettingsItem'
        creationDate:
          type: string
          format: date-time
    RemoteSettingsItem:
      required:
        - '@class'
      type: object
      properties:
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
      oneOf:
        - $ref: '#/components/schemas/RemoteSettingsItemPrinter'
        - $ref: '#/components/schemas/RemoteSettingsItemDeviceManager'
        - $ref: '#/components/schemas/RemoteSettingsItemFirewall'
        - $ref: '#/components/schemas/RemoteSettingsItemMisc'
        - $ref: '#/components/schemas/RemoteSettingsItemPowerManagment'
        - $ref: '#/components/schemas/RemoteSettingsItemUserManager'
        - $ref: '#/components/schemas/RemoteSettingsItemWifi'
    RemoteSettingsItemDeviceManager:
      type: object
      properties:
        maximumFailedPasswordsForWipe:
          type: integer
          format: int32
        maximumTimeToLock:
          type: integer
          format: int64
        passwordExpirationTimeout:
          type: integer
          format: int64
        passwordHistoryLength:
          type: integer
          format: int32
        passwordMinimumLength:
          type: integer
          format: int32
        passwordMinimumLetters:
          type: integer
          format: int32
        passwordMinimumLowerCase:
          type: integer
          format: int32
        passwordMinimumNonLetter:
          type: integer
          format: int32
        passwordMinimumNumeric:
          type: integer
          format: int32
        passwordMinimumSymbols:
          type: integer
          format: int32
        passwordMinimumUpperCase:
          type: integer
          format: int32
        passwordQuality:
          type: integer
          format: int32
        permissionPolicy:
          type: integer
          format: int32
        screenCaptureDisabled:
          type: boolean
        storageEncryption:
          type: boolean
    RemoteSettingsItemFirewall:
      type: object
      properties:
        Enabled:
          type: boolean
        enabled:
          type: boolean
    RemoteSettingsItemMisc:
      type: object
      properties:
        settingsMap:
          type: object
          additionalProperties:
            type: object
    RemoteSettingsItemPowerManagment:
      type: object
      properties:
        PowerPlanName:
          type: string
        STANDBYIDLE_AC:
          type: integer
          format: int32
        VIDEOIDLE_AC:
          type: integer
          format: int32
        HIBERNATEIDLE_AC:
          type: integer
          format: int32
        DISKIDLE_AC:
          type: integer
          format: int32
        STANDBYIDLE_DC:
          type: integer
          format: int32
        VIDEOIDLE_DC:
          type: integer
          format: int32
        HIBERNATEIDLE_DC:
          type: integer
          format: int32
        DISKIDLE_DC:
          type: integer
          format: int32
        ScreenSaverTimeout:
          type: integer
          format: int32
        screenSaverTimeout:
          type: integer
          format: int32
        hibernateidle_AC:
          type: integer
          format: int32
        hibernateidle_DC:
          type: integer
          format: int32
        powerPlanName:
          type: string
        standbyidle_AC:
          type: integer
          format: int32
        videoidle_AC:
          type: integer
          format: int32
        diskidle_DC:
          type: integer
          format: int32
        standbyidle_DC:
          type: integer
          format: int32
        videoidle_DC:
          type: integer
          format: int32
        diskidle_AC:
          type: integer
          format: int32
    RemoteSettingsItemPrinter:
      type: object
      properties:
        port:
          type: string
        fileUrlPath:
          type: string
        infFlieName:
          type: string
        model:
          type: string
        name:
          type: string
        ip:
          type: string
        setDefault:
          type: boolean
        iInfFlieName:
          type: string
          writeOnly: true
    RemoteSettingsItemUserManager:
      type: object
      properties:
        restrictionsMap:
          type: object
          additionalProperties:
            type: object
        statusBarDisabled:
          type: boolean
        backButtonDisabled:
          type: boolean
        homeButtonDisabled:
          type: boolean
        recentButtonDisabled:
          type: boolean
    RemoteSettingsItemWifi:
      type: object
      properties:
        wifiSettingsDatas:
          type: array
          items:
            $ref: '#/components/schemas/WifiSettingsData'
    WifiSettingsData:
      type: object
      properties:
        ssid:
          type: string
        password:
          type: string
        hidden:
          type: boolean
        autoJoin:
          type: boolean
        securityType:
          type: string
        proxySettingsType:
          type: string
        proxyServer:
          type: string
        proxyPort:
          type: string
        proxyUserName:
          type: string
        proxyPassword:
          type: string
        encryptionType:
          type: string
        inputType:
          type: string
        profileFile:
          type: string
        profileFileName:
          type: string
        userName:
          type: string
        properties:
          type: object
          additionalProperties:
            type: object
    SaveRemoteSettingsData:
      type: object
      properties:
        remoteSettingsBundleid:
          type: string
      description: The data returned in the response.
    SaveRemoteSettingsResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/SaveRemoteSettingsData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    AdvancedMessagingItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        bodyText:
          type: string
        image:
          $ref: '#/components/schemas/AssetsItem'
        audio:
          $ref: '#/components/schemas/AssetsItem'
        stretchImage:
          type: boolean
        horizontal:
          type: boolean
        audioLoop:
          type: boolean
        withTimeout:
          type: boolean
        timeOut:
          type: integer
          format: int32
        textColor:
          type: string
        webUrl:
          type: string
        youtubeLoop:
          type: boolean
        htmlCode:
          type: string
        embedUrl:
          type: string
        embedType:
          type: string
        youtubeBaseUrl:
          type: string
        youtubeId:
          type: string
        advMsgType:
          type: string
    AssetsItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        url:
          type: string
        type:
          type: string
        thumbnail:
          type: string
        properties:
          type: object
          additionalProperties:
            type: object
    CommandAdvancedMessaging:
      type: object
      properties:
        advancedMessagingItem:
          $ref: '#/components/schemas/AdvancedMessagingItem'
    CommandAfwAppConfigurations:
      type: object
      properties:
        mcmId:
          type: string
        productId:
          type: string
        productTitle:
          type: string
        isApply:
          type: boolean
        configurationName:
          type: string
    CommandAfwProductset:
      type: object
      properties:
        products:
          type: array
          items:
            type: string
        productSetBehavior:
          type: string
    CommandAfwSilentInstallUninstall:
      type: object
      properties:
        products:
          type: array
          items:
            type: string
        isInstall:
          type: boolean
    CommandAlertUser:
      type: object
      properties:
        message:
          type: string
        emails:
          type: array
          items:
            type: string
    CommandBroadcast:
      type: object
      properties:
        intentAction:
          type: string
          description: >-
            The action of the intent to be sent. This action shall be filtered
            and handled by the receiver app.
          example: com.example.MY_ACTION
        packageName:
          type: string
          description: >-
            The package name to which the intent will be sent. Omitting this
            will send a public broadcast.
          example: com.receiverapp.package
        componentName:
          type: string
          description: >-
            The component name to which the intent will be sent. Omitting this
            will send a broadcast to the entire app.
          example: com.receiverapp.package.YourReceiver
        declaredPermission:
          type: string
          description: >-
            The declared permission for the intent action. The receiving app
            must declare this permission and be signed with the same key as the
            MDM agent app.
          example: com.yourapp.CUSTOM_BROADCAST_PERMISSION
        intentExtras:
          type: object
          additionalProperties:
            type: object
            description: Extra fields to be included with the intent.
            example:
              key1: value1
              key2: value2
          description: Extra fields to be included with the intent.
          example:
            key1: value1
            key2: value2
        waitForResponse:
          type: boolean
          description: >-
            Whether the MDM agent needs to listen for a broadcast intent as a
            response. If true, a 'commandId' will be added to the broadcast
            intent as an extra. The response intent should be sent by the
            receiver with the action 'com.viso.mdm.COMMAND_BROADCAST_RECEIVER'
            and it must include the 'commandId' as an extra. If permission is
            enforced in the response, the response intent must be sent with the
            permission 'com.viso.mdm.COMMAND_BROADCAST_PERMISSION'.
          example: true
          default: false
    CommandClearPackageCache:
      type: object
      properties:
        packageName:
          type: string
        packageID:
          type: string
          writeOnly: true
    CommandClearPackagesCache:
      type: object
      properties:
        packages:
          type: array
          items:
            type: string
    CommandCollectFiles:
      type: object
      properties:
        path:
          type: string
        urlPut:
          type: string
        urlGet:
          type: string
        collectLogFile:
          type: boolean
    CommandCustom:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        type:
          type: string
        values:
          type: object
          additionalProperties:
            type: object
    CommandCustomPlist:
      type: object
      properties:
        customPlistItem:
          $ref: '#/components/schemas/CustomPlistItem'
    CommandData:
      required:
        - '@class'
      type: object
      properties:
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
      oneOf:
        - $ref: '#/components/schemas/CommandAdvancedMessaging'
        - $ref: '#/components/schemas/CommandAfwAppConfigurations'
        - $ref: '#/components/schemas/CommandAfwProductset'
        - $ref: '#/components/schemas/CommandAfwSilentInstallUninstall'
        - $ref: '#/components/schemas/CommandAlertUser'
        - $ref: '#/components/schemas/CommandClearPackageCache'
        - $ref: '#/components/schemas/CommandClearPackagesCache'
        - $ref: '#/components/schemas/CommandCollectFiles'
        - $ref: '#/components/schemas/CommandCustom'
        - $ref: '#/components/schemas/CommandCustomPlist'
        - $ref: '#/components/schemas/CommandDepProfile'
        - $ref: '#/components/schemas/CommandDisableEnablePackage'
        - $ref: '#/components/schemas/CommandDisableEnablePackages'
        - $ref: '#/components/schemas/CommandGetAppUsageAtDateRange'
        - $ref: '#/components/schemas/CommandHide'
        - $ref: '#/components/schemas/CommandIOSCommand'
        - $ref: '#/components/schemas/CommandIOSPlist'
        - $ref: '#/components/schemas/CommandLock'
        - $ref: '#/components/schemas/CommandManageUsers'
        - $ref: '#/components/schemas/CommandOTAFirmwareUpdate'
        - $ref: '#/components/schemas/CommandPopupMessage'
        - $ref: '#/components/schemas/CommandRemoteExec'
        - $ref: '#/components/schemas/CommandRemoteSettings'
        - $ref: '#/components/schemas/CommandRemoveAccount'
        - $ref: '#/components/schemas/CommandRestartDevice'
        - $ref: '#/components/schemas/CommandResyncAppUsage'
        - $ref: '#/components/schemas/CommandScreenSettings'
        - $ref: '#/components/schemas/CommandSendFile'
        - $ref: '#/components/schemas/CommandSendOTAItem'
        - $ref: '#/components/schemas/CommandSendPolicy'
        - $ref: '#/components/schemas/CommandSendPref'
        - $ref: '#/components/schemas/CommandSetPassword'
        - $ref: '#/components/schemas/CommandShutdownDevice'
        - $ref: '#/components/schemas/CommandSiren'
        - $ref: '#/components/schemas/CommandSmartRecovery'
        - $ref: '#/components/schemas/CommandStartPackage'
        - $ref: '#/components/schemas/CommandStopPackage'
        - $ref: '#/components/schemas/CommandStoreAppUsageLocaly'
        - $ref: '#/components/schemas/CommandToggleSuspendDevice'
        - $ref: '#/components/schemas/CommandUninstallPackage'
        - $ref: '#/components/schemas/CommandUninstallPackages'
        - $ref: '#/components/schemas/CommandWOL'
        - $ref: '#/components/schemas/CommandWifiAddToBWList'
        - $ref: '#/components/schemas/CommandWifiConnect'
        - $ref: '#/components/schemas/CommandWipeData'
        - $ref: '#/components/schemas/CommandWorkflow'
        - $ref: '#/components/schemas/CommandWorkflowWait'
        - $ref: '#/components/schemas/CommandfilesBundle'
        - $ref: '#/components/schemas/ToastCommand'
        - $ref: '#/components/schemas/WipeCommand'
        - $ref: '#/components/schemas/CommandBroadcast'
        - $ref: '#/components/schemas/CommandSpeedTest'
    CommandDepProfile:
      type: object
      properties:
        depProfileItem:
          $ref: '#/components/schemas/DepProfileItem'
    CommandDisableEnablePackage:
      type: object
      properties:
        packageName:
          type: string
        enablePackage:
          type: boolean
        packageID:
          type: string
          writeOnly: true
    CommandDisableEnablePackages:
      type: object
      properties:
        enablePackage:
          type: boolean
        packages:
          type: array
          items:
            type: string
    CommandGetAppUsageAtDateRange:
      type: object
      properties:
        start:
          type: string
        end:
          type: string
    CommandHide:
      type: object
      properties:
        hide:
          type: boolean
    CommandIOSCommand:
      type: object
    CommandIOSPlist:
      type: object
      properties:
        props:
          type: object
          additionalProperties:
            type: object
        metaData:
          type: object
          additionalProperties:
            type: object
    CommandLock:
      type: object
      properties:
        lock_message:
          type: string
        lock:
          type: boolean
    CommandManageUsers:
      type: object
      properties:
        user:
          type: string
        action:
          type: string
    CommandOTAFirmwareUpdate:
      type: object
    CommandPopupMessage:
      type: object
      properties:
        title:
          type: string
        message:
          type: string
    CommandRemoteExec:
      type: object
      properties:
        remoteExecItem:
          $ref: '#/components/schemas/RemoteExecItem'
    CommandRemoteSettings:
      type: object
      properties:
        remoteSettingsBundles:
          type: array
          items:
            $ref: '#/components/schemas/RemoteSettingsBundle'
    CommandRemoveAccount:
      type: object
      properties:
        removeType:
          type: string
        accountType:
          type: string
        accounts:
          type: array
          items:
            type: string
    CommandRestartDevice:
      type: object
    CommandResyncAppUsage:
      type: object
    CommandScreenSettings:
      type: object
      properties:
        inputSource:
          type: string
        volume:
          type: integer
          format: int32
        brightness:
          type: integer
          format: int32
    CommandSendFile:
      type: object
      properties:
        repositoryFileMetaData:
          $ref: '#/components/schemas/RepositoryFileMetaData'
    CommandSendOTAItem:
      type: object
      properties:
        otaItem:
          $ref: '#/components/schemas/OTAItem'
    CommandSendPolicy:
      type: object
      properties:
        policy:
          $ref: '#/components/schemas/Policy'
        trigger:
          $ref: '#/components/schemas/Trigger'
    CommandSendPref:
      type: object
      properties:
        prefsMap:
          type: object
          additionalProperties:
            type: object
    CommandSetPassword:
      type: object
      properties:
        password:
          type: string
    CommandShutdownDevice:
      type: object
    CommandSiren:
      type: object
    CommandSmartRecovery:
      type: object
      properties:
        smartRecoveryItem:
          $ref: '#/components/schemas/SmartRecoveryItem'
    CommandSpeedTest:
      type: object
      properties:
        downloadUrl:
          type: string
        uploadUrl:
          type: string
        uploadTest:
          type: boolean
        downloadTest:
          type: boolean
        pingTest:
          type: boolean
    CommandStartPackage:
      type: object
      properties:
        packageName:
          type: string
        packageID:
          type: string
          writeOnly: true
    CommandStopPackage:
      type: object
      properties:
        packageName:
          type: string
        packageID:
          type: string
          writeOnly: true
    CommandStoreAppUsageLocaly:
      type: object
    CommandToggleSuspendDevice:
      type: object
    CommandUninstallPackage:
      type: object
      properties:
        packageName:
          type: string
        packageID:
          type: string
          writeOnly: true
    CommandUninstallPackages:
      type: object
      properties:
        packages:
          type: array
          items:
            type: string
    CommandWOL:
      type: object
      properties:
        deviceIDs:
          type: array
          items:
            type: string
        deviceFilters:
          type: array
          items:
            type: string
        macAddressToWake:
          type: array
          items:
            type: string
        broadcastAddress:
          type: string
        port:
          type: integer
          format: int32
    CommandWifiAddToBWList:
      type: object
      properties:
        wbList:
          type: array
          items:
            $ref: '#/components/schemas/WifiWBListEntry'
    CommandWifiConnect:
      type: object
      properties:
        networkSSID:
          type: string
        networkPass:
          type: string
        securityProtocol:
          type: string
    CommandWipeData:
      type: object
      properties:
        wipe_message:
          type: string
    CommandWorkflow:
      type: object
      properties:
        workFlowItem:
          $ref: '#/components/schemas/WorkFlowItem'
    CommandWorkflowWait:
      type: object
      properties:
        waitSeconds:
          type: integer
          format: int32
    CommandfilesBundle:
      type: object
      properties:
        filesBundleRepoItem:
          $ref: '#/components/schemas/FilesBundleRepoItem'
    CustomPlistItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        values:
          type: object
          additionalProperties:
            type: object
    DepProfileItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        values:
          type: object
          additionalProperties:
            type: object
        serverid:
          type: string
    FilesBundleRepoItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        filesBundleId:
          type: string
        destPath:
          type: string
        files:
          type: array
          items:
            type: string
        bundleUrl:
          type: string
        properties:
          type: object
          additionalProperties:
            type: object
    OTAItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        properties:
          type: object
          additionalProperties:
            type: object
        version:
          type: string
        url:
          type: string
        hash:
          type: string
        hashType:
          type: string
        fileSize:
          type: integer
          format: int32
        fileName:
          type: string
        precedingMin:
          type: string
        precedingMax:
          type: string
        models:
          type: string
        versionPattern:
          type: string
        verPropPath:
          type: string
    Policy:
      type: object
      properties:
        policyId:
          type: string
        policyName:
          type: string
        description:
          type: string
        policyType:
          type: string
        triggerId:
          type: string
        fontIcon:
          type: string
        color:
          type: string
        properties:
          type: object
          additionalProperties:
            type: object
        creationDate:
          type: string
          format: date-time
        privateRepoItem:
          type: boolean
        policySubCatagories:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/PolicySubCatagory'
        policyTrigger:
          $ref: '#/components/schemas/PolicyTrigger'
        domain:
          type: string
        owner:
          type: string
    PolicySubCatagory:
      required:
        - '@class'
      type: object
      properties:
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    PolicyTrigger:
      type: object
    RemoteExecItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        command:
          type: string
        args:
          type: array
          items:
            type: string
        authority:
          type: string
        waitForExit:
          type: boolean
        collectOutput:
          type: boolean
        maxOutSize:
          type: integer
          format: int32
        successCode:
          type: integer
          format: int32
        isScript:
          type: boolean
        props:
          type: object
          additionalProperties:
            type: object
    RepositoryFileMetaData:
      type: object
      properties:
        repositoryFileMetaDataID:
          type: string
        fileID:
          type: string
        fileName:
          type: string
        fileLocation:
          type: string
        ownerUser:
          type: string
        ownerDomain:
          type: string
        lastEditorUser:
          type: string
        privateFile:
          type: boolean
        fileDesc:
          type: string
        fileAction:
          type: string
        arguments:
          type: string
        properties:
          type: object
          additionalProperties:
            type: object
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        lastUpdate:
          type: string
          format: date-time
    RepositoryItemBase:
      required:
        - '@class'
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
      oneOf:
        - $ref: '#/components/schemas/AssetsItem'
        - $ref: '#/components/schemas/AdvancedMessagingItem'
        - $ref: '#/components/schemas/FilesBundleRepoItem'
        - $ref: '#/components/schemas/RemoteExecItem'
        - $ref: '#/components/schemas/OTAItem'
        - $ref: '#/components/schemas/WorkFlowItem'
    SmartRecoveryActionBase:
      required:
        - '@class'
      type: object
      properties:
        restart:
          type: boolean
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    SmartRecoveryItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        model:
          type: string
        smartRecoveryAction:
          $ref: '#/components/schemas/SmartRecoveryActionBase'
    ToastCommand:
      type: object
      properties:
        message:
          type: string
        duration:
          type: string
          enum:
            - SHORT
            - LONG
    WifiWBListEntry:
      type: object
      properties:
        networkSSID:
          type: string
        allow:
          type: boolean
        networkPSK:
          type: string
    WipeCommand:
      type: object
    WorkFlowItem:
      type: object
      properties:
        repositoryItemId:
          type: string
        repositoryItemName:
          type: string
        repositoryItemDesc:
          type: string
        domain:
          type: string
        owner:
          type: string
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: string
          format: date-time
        moreData:
          type: object
          additionalProperties:
            type: object
        privateRepoItem:
          type: boolean
        workflowList:
          type: array
          items:
            $ref: '#/components/schemas/WorkFlowListEntry'
    WorkFlowListEntry:
      type: object
      properties:
        commandName:
          type: string
        commandData:
          $ref: '#/components/schemas/CommandData'
        wait:
          type: boolean
        stopOnFailure:
          type: boolean
        desc:
          type: string
        color:
          type: string
        owner:
          type: string
        privateRepoItem:
          type: boolean
        missingRepo:
          type: boolean
    SaveRepItemData:
      type: object
      properties:
        repositoryItemId:
          type: string
      description: The data returned in the response.
    SaveRepItemResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/SaveRepItemData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    GetGroupInstalledAppsDataRequest:
      type: object
      properties:
        group:
          type: string
          description: The name of the group for which installed app data is requested.
          example: Group1
        packages:
          type: array
          description: A list of package names for specific apps within the group.
          example:
            - com.example.app1
            - com.example.app2
          items:
            type: string
            description: A list of package names for specific apps within the group.
            example: '["com.example.app1","com.example.app2"]'
        isall:
          type: boolean
          description: Flag indicating whether to retrieve data for all apps in the group.
          example: true
    GetGroupInstalledAppsDataResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/GetGroupInstalledAppsDataResponseData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    GetGroupInstalledAppsDataResponseData:
      type: object
      description: The data returned in the response.
    DeviceFilter:
      type: object
      properties:
        id:
          type: string
          description: Id of the associated filter
        rootNode:
          $ref: '#/components/schemas/FilterNode'
        name:
          type: string
          description: Filter's name
        desc:
          type: string
          description: A description of the filter
        isGroupFilter:
          type: boolean
          description: States if filter is a group filter
        owner:
          type: string
          description: The owner of the filter
        domain:
          type: string
          description: Filter's domain
        deviceTagList:
          type: array
          description: A list of the devices tags
          items:
            $ref: '#/components/schemas/DeviceTag'
        color:
          type: string
          description: A hex code for the color associated with the filter
        icon:
          type: string
          description: Icon for the filter
        schoolFilter:
          type: boolean
          description: Flag stating if the filter is a school filter
        syncedFromGoogle:
          type: boolean
          description: flag stating if the filter is synced from Google
        classroomID:
          type: integer
          description: Id for the classroom associated with the filter
          format: int64
        currentRoom:
          type: object
          additionalProperties:
            type: object
            description: HashMap for the current classroom room
          description: HashMap for the current classroom room
        password:
          type: string
          description: password for the filter
        properties:
          type: object
          additionalProperties:
            type: object
            description: HashMap stating different properties of the filter
          description: HashMap stating different properties of the filter
        packages:
          type: array
          description: Filter's packages
          items:
            type: string
            description: Filter's packages
        profileID:
          type: string
        profilesList:
          type: array
          description: Filter's list of profiles id
          items:
            type: string
            description: Filter's list of profiles id
        packagesRepoItems:
          type: array
          items:
            type: string
        profiles:
          type: array
          description: profiles associated with the filter
          items:
            $ref: '#/components/schemas/DevicePolicyData'
        private:
          type: boolean
        groupFilter:
          type: boolean
        permanent:
          type: boolean
    DevicePolicyData:
      type: object
      properties:
        policyID:
          type: string
        policyName:
          type: string
        type:
          type: string
        priority:
          type: integer
          format: int32
      description: profiles associated with the filter
    DeviceTag:
      type: object
      properties:
        name:
          type: string
      description: A list of the devices tags
    FilterNode:
      required:
        - '@class'
      type: object
      properties:
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    AddFilterResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          type: object
          additionalProperties:
            type: object
            description: The data returned in the response (typically empty).
          description: The data returned in the response (typically empty).
        result:
          type: string
        message:
          type: string
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    GetRepoItemsData:
      type: object
      properties:
        packages:
          type: array
          items:
            $ref: '#/components/schemas/RepositoryFileMetaData'
    GetRepoItemsResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/GetRepoItemsData'
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    Command:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier for the command.
          example: command123
        creationTime:
          type: string
          description: The date and time when the command was created.
          format: date-time
        ownerUserName:
          type: string
          description: The username of the owner of the command.
          example: john_doe
        domain:
          type: string
          description: The domain associated with the command.
          example: example.com
        commandData:
          $ref: '#/components/schemas/CommandData'
        trigger:
          $ref: '#/components/schemas/Trigger'
        description:
          type: string
          description: A description of the command.
          example: Activate Emergency Alert
        filterId:
          type: string
          description: The ID of the filter associated with the command.
          example: filter123
        currentDevices:
          type: array
          description: The list of devices currently targeted by the command.
          example:
            - device_id_1
            - device_id_2
          items:
            type: string
            description: The list of devices currently targeted by the command.
            example: '["device_id_1","device_id_2"]'
        state:
          type: string
          description: The state of the command.
          example: Pending
        notifiedUsers:
          uniqueItems: true
          type: array
          description: >-
            A set of usernames representing users who have been notified about
            the command.
          example:
            - user1
            - user2
          items:
            type: string
            description: >-
              A set of usernames representing users who have been notified about
              the command.
            example: '["user1","user2"]'
        notifyDirty:
          type: boolean
          description: Flag indicating whether the command has unsaved changes.
          example: true
        lastChange:
          type: string
          description: The date and time of the last change to the command.
          format: date-time
        failureCount:
          type: integer
          description: The count of failures associated with the command.
          format: int32
          example: 3
        successCount:
          type: integer
          description: The count of successful executions of the command.
          format: int32
          example: 10
        sentCount:
          type: integer
          description: The count of times the command has been sent.
          format: int32
          example: 5
        executedCount:
          type: integer
          description: The count of times the command has been executed.
          format: int32
          example: 7
        readyCount:
          type: integer
          description: The count of devices ready to receive the command.
          format: int32
          example: 8
        persist:
          type: boolean
          description: >-
            Flag indicating whether the command should be persisted for future
            reference.
          example: true
        persistentGroupID:
          type: string
          description: The ID of the persistent group associated with the command.
          example: group123
        persistentGroupName:
          type: string
          description: The name of the persistent group associated with the command.
          example: EmergencyAlertGroup
        props:
          type: object
          additionalProperties:
            type: object
            description: Additional properties associated with the command.
            example:
              property1: value1
              property2: value2
          description: Additional properties associated with the command.
          example:
            property1: value1
            property2: value2
        lastCommandStatus:
          $ref: '#/components/schemas/CommandStatus'
    CommandStatus:
      type: object
      properties:
        id:
          type: string
        commandid:
          type: string
        date:
          type: string
          format: date-time
        status:
          type: string
          description: >-
            Status of the command:

            - PENDING: The device is offline and has not received the command
            yet.

            - sent: Command was sent to the device.

            - READY: Command is scheduled for later but has not been executed
            yet.

            - UPDATE_SENT: Scheduled command has been changed.

            - EXECUTED: Command has been executed.

            - FAILURE: Command was executed but failed.
          example: EXECUTED
          enum:
            - PENDING
            - sent
            - READY
            - UPDATE_SENT
            - EXECUTED
            - FAILURE
        note:
          type: string
          description: General note about the status of the command.
          example: Uninstall apps is disallowed
        deviceid:
          type: string
        properties:
          type: object
          additionalProperties:
            type: string
        additionalprops:
          type: object
          additionalProperties:
            type: object
      description: A list of command statuses.
    SaveCommandData:
      type: object
      properties:
        commandid:
          type: string
          description: Id of the saved command
          example: command123
      description: The data returned in the response.
    SaveCommandResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/SaveCommandData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    ChangeStateRequest:
      type: object
      properties:
        newstate:
          type: string
          description: The new state of thee command
          example: COMMAND_STATE_ACTIVE
    RefreshJwtRequest:
      type: object
      properties:
        userName:
          type: string
          description: The user name associated with the JWT token.
        refreshToken:
          type: string
          description: The refresh token used to obtain a new JWT token.
    RefreshJwtData:
      type: object
      properties:
        token:
          type: string
      description: The data returned in the response.
    RefreshJwtResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/RefreshJwtData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    LoginRequest:
      required:
        - password
        - username
      type: object
      properties:
        username:
          type: string
          description: Username of the user
          example: admin@myaccount
        password:
          type: string
          description: Password of the user
          example: a8D4#0!s1
        totpcode:
          type: string
          description: >-
            TOTP code (Time-Based One-Time Password) for two-factor
            authentication
        idToken:
          type: string
          description: ID token
        ssoDomain:
          type: string
          description: SSO (Single Sign-On) domain
        refreshToken:
          type: string
          description: Refresh token used for token renewal
    ClaimsFromLoginToken:
      type: object
      properties:
        sub:
          type: string
          description: Token owner's username.
        s:
          type: integer
          description: JWT secret creation time.
          format: int64
        ac:
          type: integer
          description: >-
            Encoded value of the Access Control List (ACL) level set for the
            user. It is only presented if at least one permission was removed
            from the user.
          format: int32
        tags:
          type: array
          description: Authorization tags set for the user.
          items:
            type: string
            description: Authorization tags set for the user.
        usertype:
          type: string
          description: >-
            The type of user related to the token. For the MDM application, the
            user type will be GEO_USER_MDM.
        exp:
          type: integer
          description: Expiration for the token.
          format: int32
        iat:
          type: integer
          description: Time at which the token was initiated at
          format: int32
        authorities:
          type: string
          description: Token owner's authorities.
          items:
            type: string
            description: Token owner's authorities.
            enum:
              - ROLE_admin
              - ROLE_user
              - ROLE_supporter
          enum:
            - ROLE_admin
            - ROLE_user
            - ROLE_supporter
      description: Info about the token.
    LoginData:
      type: object
      properties:
        token:
          type: string
          description: Token used for further requests from the server.
        refreshToken:
          type: string
          description: Token used to receive a new token.
        allClaimsFromToken:
          $ref: '#/components/schemas/ClaimsFromLoginToken'
      description: The data returned in the response.
    LoginResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/LoginData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    CommandDataAndDevices:
      type: object
      properties:
        commandData:
          $ref: '#/components/schemas/CommandData'
        deviceIds:
          type: array
          description: IDs of the devices that will receive the command
          example:
            - device_id_1
            - device_id_2
          items:
            type: string
            description: IDs of the devices that will receive the command
            example: '["device_id_1","device_id_2"]'
    SendCommandToManyResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/sentCommandData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    sentCommandData:
      type: object
      properties:
        commandId:
          type: string
          description: ID of the sent command
          example: command123
      description: The data returned in the response.
    SortData:
      type: object
      properties:
        property:
          type: string
          description: The property to sort by.
        direction:
          type: string
          description: The sorting direction (e.g., ASC or DESC).
        searchlist:
          type: object
          additionalProperties:
            type: object
            description: A HashMap for additional search parameters.
          description: A HashMap for additional search parameters.
    CommandsListResult:
      type: object
      properties:
        commands:
          type: array
          items:
            $ref: '#/components/schemas/Command'
        message:
          type: string
        result:
          type: string
        totalRecordCount:
          type: integer
          format: int64
    GetAllTriggersResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/TriggersData'
        result:
          type: string
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    TriggersData:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Trigger'
    GetAllRepositoryItemResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/RepositoryItemsData'
        result:
          type: string
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    RepositoryItemsData:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/RepositoryItemBase'
    DeviceDataResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/DeviceDataResponseData'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    DeviceDataResponseData:
      type: object
      properties:
        deviceData:
          type: object
          additionalProperties:
            type: object
            description: A map containing various data related to the device.
            example:
              batteryLevel: 80
              connectionStatus: connected
          description: A map containing various data related to the device.
          example:
            batteryLevel: 80
            connectionStatus: connected
      description: The data returned in the response.
    AppUsageData:
      type: object
      properties:
        hardwareID:
          type: string
        lastChange:
          type: string
          format: date-time
        startDate:
          type: string
          format: date-time
        appUsages:
          type: array
          items:
            $ref: '#/components/schemas/AppUsageDataItem'
    AppUsageDataItem:
      type: object
      properties:
        numberOfUsages:
          type: integer
          format: int32
        timeUsage:
          type: integer
          format: int64
        packageMetaData:
          $ref: '#/components/schemas/PackageMetaData'
    Device:
      type: object
      properties:
        hardwareId:
          type: string
        lat:
          type: number
          format: double
        lon:
          type: number
          format: double
        locked:
          type: boolean
        userIpAddress:
          type: string
        hidden:
          type: boolean
        version:
          type: string
        emailAccount:
          type: string
        groupTag:
          type: string
        imei:
          type: string
        lastSeen:
          type: string
          format: date-time
        os:
          type: string
        iosData:
          $ref: '#/components/schemas/IOSData'
        winInventory:
          $ref: '#/components/schemas/WinInventory'
        label:
          type: string
        profileImage:
          type: string
        oemName:
          type: string
        smartRecoveryData:
          $ref: '#/components/schemas/SmartRecoveryData'
        mobiToken:
          $ref: '#/components/schemas/MobiToken'
        authToken:
          type: string
        brand:
          type: string
        deviceType:
          type: string
        deviceAFWData:
          $ref: '#/components/schemas/DeviceAFWData'
        rabbitClusterName:
          type: string
        pushData:
          type: object
          additionalProperties:
            type: object
        versionNumber:
          type: integer
          format: int32
        groupsAndProfiles:
          type: array
          items:
            $ref: '#/components/schemas/GroupAndProfiles'
        ssf:
          uniqueItems: true
          type: array
          items:
            type: string
        currRoomData:
          type: object
          additionalProperties:
            type: object
        properties:
          type: object
          additionalProperties:
            type: object
        geofenceLocked:
          type: boolean
        installedAppsData:
          $ref: '#/components/schemas/InstalledAppsData'
        appUsageData:
          $ref: '#/components/schemas/AppUsageData'
        deviceSystemInfo:
          $ref: '#/components/schemas/DeviceSystemInfo'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/DeviceTag'
        policies:
          type: array
          items:
            $ref: '#/components/schemas/DevicePolicyData'
        appliedPolicies:
          type: array
          items:
            $ref: '#/components/schemas/DevicePolicyData'
        securityInfo:
          $ref: '#/components/schemas/SecurityInfo'
        userIPAddress:
          type: string
          writeOnly: true
        regID:
          type: string
    DeviceAFWData:
      type: object
      properties:
        enterpriseID:
          type: string
        userID:
          type: string
    DeviceListResponse:
      type: object
      properties:
        Message:
          type: string
        Result:
          type: string
        Records:
          type: array
          items:
            $ref: '#/components/schemas/Device'
        TotalRecordCount:
          type: integer
          format: int32
    DeviceSystemInfo:
      type: object
      properties:
        hardwareID:
          type: string
        lastChange:
          type: string
          format: date-time
        memData:
          $ref: '#/components/schemas/MemData'
        storageData:
          $ref: '#/components/schemas/StorageData'
        networkUsageData:
          $ref: '#/components/schemas/NetworkUsageData'
        networkInfo:
          $ref: '#/components/schemas/NetworkInfo'
        systemGeneralInfo:
          $ref: '#/components/schemas/SystemGeneralInfo'
        partitions:
          type: array
          items:
            $ref: '#/components/schemas/PartitionInfo'
        iosSystemGeneralInfo:
          $ref: '#/components/schemas/IOSSystemGeneralInfo'
        moreData:
          type: object
          additionalProperties:
            type: object
    GroupAndProfiles:
      type: object
      properties:
        group:
          type: string
        profiles:
          type: array
          items:
            type: string
    IOSData:
      type: object
      properties:
        mdmToken:
          type: string
        depInfo:
          type: object
          additionalProperties:
            type: string
        pendingDomainForUDID:
          type: string
        properties:
          type: object
          additionalProperties:
            type: object
        udid:
          type: string
        unlockToken:
          type: string
    IOSSystemGeneralInfo:
      type: object
      properties:
        iosVersion:
          type: string
        deviceName:
          type: string
        buildVersion:
          type: string
        modelName:
          type: string
        serialNumber:
          type: string
        blueToothMac:
          type: string
        activationLockEnabled:
          type: boolean
        doNotDisturbInEffect:
          type: boolean
        supervised:
          type: boolean
        productName:
          type: string
        phoneNumber:
          type: string
        subscriberCarrierNetwork:
          type: string
        getiCCID:
          type: string
        moreData:
          type: object
          additionalProperties:
            type: object
    InstalledAppDataItem:
      type: object
      properties:
        packageMetaData:
          $ref: '#/components/schemas/PackageMetaData'
        runningNow:
          type: boolean
    InstalledAppsData:
      type: object
      properties:
        hardwareID:
          type: string
        lastChange:
          type: string
          format: date-time
        installedAppDataItems:
          type: array
          items:
            $ref: '#/components/schemas/InstalledAppDataItem'
        accountMainApps:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/PackageMetaData'
    MemData:
      type: object
      properties:
        availableMegs:
          type: integer
          format: int64
        totalMegs:
          type: integer
          format: int64
    MobiToken:
      required:
        - '@class'
      type: object
      properties:
        tokenId:
          type: string
        geoUserID:
          type: string
        password:
          type: string
        tokenState:
          type: string
          writeOnly: true
        creationDate:
          type: string
          format: date-time
        deviceId:
          type: string
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    NetworkInfo:
      type: object
      properties:
        wifiOn:
          type: boolean
        wifiSSID:
          type: string
        macAddress:
          type: string
        bluetoothOn:
          type: boolean
        cellularTechnology:
          type: string
    NetworkUsageData:
      type: object
      properties:
        mobileRxBytes:
          type: integer
          format: int64
        mobileTxBytes:
          type: integer
          format: int64
    PackageMetaData:
      type: object
      properties:
        packageID:
          type: string
        packageName:
          type: string
        packageVersion:
          type: integer
          format: int32
        packageVersionString:
          type: string
        packageVersionName:
          type: string
        iconHash:
          type: string
        packageLabel:
          type: string
        os:
          type: string
        bundleSize:
          type: integer
          format: int32
        dynamicSize:
          type: integer
          format: int32
        type:
          type: string
        companyName:
          type: string
        execPath:
          type: string
        enabled:
          type: boolean
    PartitionInfo:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
        fileSystem:
          type: string
        totalBytes:
          type: integer
          format: int64
        freeBytes:
          type: integer
          format: int64
    SecurityInfo:
      type: object
      properties:
        hardwareEncryptionCaps:
          type: array
          items:
            type: string
        passcodeCompliant:
          type: boolean
        passcodeCompliantWithProfiles:
          type: boolean
        passcodePresent:
          type: boolean
    SmartRecoveryData:
      type: object
      properties:
        model:
          type: string
        version:
          type: string
        scheduleMode:
          type: string
        scheduleData:
          type: object
          additionalProperties:
            type: object
        protectedPartitions:
          type: string
        lastSytemUpdate:
          type: string
          format: date-time
        howManyDaysLeft:
          type: integer
          format: int32
        registrationNumOfUsers:
          type: string
        registrationLicenseName:
          type: string
        registrationLicenseStartDate:
          type: string
        snapshotList:
          type: array
          items:
            $ref: '#/components/schemas/SmartRecoverySnapshot'
    SmartRecoverySnapshot:
      type: object
      properties:
        index:
          type: integer
          format: int32
        name:
          type: string
        desc:
          type: string
        date:
          type: string
          format: date-time
        locked:
          type: boolean
    StorageData:
      type: object
      properties:
        availInternalStorage:
          type: integer
          format: int64
        totalInternalStorage:
          type: integer
          format: int64
        availExtStorage:
          type: integer
          format: int64
        totalExtStorage:
          type: integer
          format: int64
    SystemGeneralInfo:
      type: object
      properties:
        batteryStatus:
          type: integer
          format: int32
        charging:
          type: boolean
        osVersion:
          type: integer
          format: int32
        model:
          type: string
        cpuABI:
          type: string
        screenResolution:
          type: string
        deviceAccess:
          type: string
        resolutions:
          type: array
          items:
            type: string
        serialNumber:
          type: string
        cpuInfo:
          type: string
        screenSize:
          type: string
        has3g:
          type: boolean
        phoneNumber:
          type: string
        manufacturer:
          type: string
    WinInventory:
      type: object
      properties:
        bios:
          type: object
          additionalProperties:
            type: object
        processor:
          type: object
          additionalProperties:
            type: object
        manufactureModel:
          type: object
          additionalProperties:
            type: object
        hotfixes:
          type: array
          items:
            type: object
            additionalProperties:
              type: object
        os:
          type: object
          additionalProperties:
            type: object
        disks:
          type: array
          items:
            type: object
            additionalProperties:
              type: object
        loggedonUsers:
          type: array
          items:
            type: object
            additionalProperties:
              type: object
        missingUpdates:
          type: array
          items:
            type: object
            additionalProperties:
              type: object
        antivirus:
          type: array
          items:
            type: object
            additionalProperties:
              type: object
        localTime:
          type: string
        currentPowerPlan:
          type: object
          additionalProperties:
            type: object
        isFirewallEnabled:
          type: boolean
    DeviceFilterResponse:
      type: object
      properties:
        id:
          type: string
          description: Id of the associated filter
        rootNode:
          $ref: '#/components/schemas/FilterGroup'
        name:
          type: string
          description: Filter's name
        desc:
          type: string
          description: A description of the filter
        owner:
          type: string
          description: The owner of the filter
        domain:
          type: string
          description: Filter's domain
        deviceTagList:
          type: array
          description: A list of the devices tags
          items:
            $ref: '#/components/schemas/DeviceTag'
        color:
          type: string
          description: A hex code for the color associated with the filter
        icon:
          type: string
          description: Icon for the filter
        schoolFilter:
          type: boolean
          description: Flag stating if the filter is a school filter
        syncedFromGoogle:
          type: boolean
          description: flag stating if the filter is synced from Google
        classroomID:
          type: integer
          description: Id for the classroom associated with the filter
          format: int64
        currentRoom:
          type: object
          additionalProperties:
            type: object
            description: HashMap for the current classroom room
          description: HashMap for the current classroom room
        password:
          type: string
          description: password for the filter
        properties:
          $ref: '#/components/schemas/PropertiesData'
        packages:
          type: array
          description: Filter's packages
          items:
            type: string
            description: Filter's packages
        packagesRepoItems:
          type: array
          items:
            type: string
        profiles:
          type: array
          description: profiles associated with the filter
          items:
            $ref: '#/components/schemas/DevicePolicyData'
        groupFilter:
          type: boolean
        permanent:
          type: boolean
        private:
          type: boolean
    FilterGroup:
      type: object
      properties:
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/FilterNode'
        type:
          type: string
    PropertiesData:
      type: object
      description: Properties associated with the user
    FilePropertiesData:
      type: object
    GetFilesResponse:
      type: object
      properties:
        repositoryFileMetaDataID:
          type: string
        fileID:
          type: string
        fileName:
          type: string
        fileLocation:
          type: string
        ownerUser:
          type: string
        ownerDomain:
          type: string
        lastEditorUser:
          type: string
        privateFile:
          type: boolean
        fileDesc:
          type: string
        fileAction:
          type: string
        arguments:
          type: string
        properties:
          $ref: '#/components/schemas/FilePropertiesData'
        color:
          type: string
        fontIcon:
          type: string
        creationDate:
          type: integer
          format: int32
        lastUpdate:
          type: integer
          format: int32
    CommandGetResponse:
      required:
        - '@class'
      type: object
      properties:
        data:
          $ref: '#/components/schemas/CommandInfo'
        result:
          type: string
          description: >-
            The result of the login operation. Should be either 'SUCCESS' or
            'FAILURE'.
        message:
          type: string
          description: >-
            The message associated with the login response (applicable in case
            of 'FAILURE').
        '@class':
          type: string
      discriminator:
        propertyName: '@class'
    CommandInfo:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the command.
          example: command123
        creationTime:
          type: string
          description: The creation time of the command.
          format: date-time
        ownerUserName:
          type: string
          description: The username of the owner of the command.
          example: john_doe
        domain:
          type: string
          description: The domain associated with the command.
          example: example.com
        commandData:
          $ref: '#/components/schemas/CommandInfoData'
        description:
          type: string
          description: A description of the command.
          example: Activate Emergency Alert
      description: The data returned in the response.
    CommandInfoData:
      required:
        - '@class'
      type: object
      properties:
        lock_message:
          type: string
          description: The lock message for the command.
        lock:
          type: boolean
          description: Indicates if the command is locked.
        '@class':
          type: string
      description: Data related to the command.
      discriminator:
        propertyName: '@class'
    CommandStats:
      type: object
      properties:
        totalDevices:
          type: integer
          description: Total number of devices associated with the command.
          format: int32
          example: 100
        success:
          type: integer
          description: Number of successful executions of the command.
          format: int32
          example: 80
        ready:
          type: integer
          description: Number of devices ready to receive the command.
          format: int32
          example: 90
        executed:
          type: integer
          description: Number of times the command has been executed.
          format: int32
          example: 120
        fail:
          type: integer
          description: Number of failed executions of the command.
          format: int32
          example: 20
        count:
          type: integer
          description: Total count.
          format: int32
          example: 150
        readyArr:
          type: array
          description: List of device IDs that are ready to receive the command.
          example:
            - device_id_1
            - device_id_2
          items:
            type: string
            description: List of device IDs that are ready to receive the command.
            example: '["device_id_1","device_id_2"]'
    CommandStatusesList:
      type: object
      properties:
        commandStatus:
          type: array
          description: A list of command statuses.
          items:
            $ref: '#/components/schemas/CommandStatus'
        message:
          type: string
        result:
          type: string
        totalRecordCount:
          type: integer
          format: int64
  securitySchemes:
    bearer-key:
      type: http
      scheme: bearer
      bearerFormat: JWT
