openapi: 3.0.1
info:
  description: These REST APIs provide several remote control and management operations
    on the H200 Enable Enterprise Media Player.
  title: Enable Enterprise Local Management Server
  version: 3.5.0
servers:
- url: "http://{host}:8090/api/v2"
  variables:
    host:
      default: api.aminocom.com
- url: "https://{host}:10444/api/v2"
  variables:
    host:
      default: api.aminocom.com
tags:
- description: List current available APIs in YAML format
  name: API
- description: Control the screen of device currently connected via serial port interface.
    Only LG TV is supported at the moment. Details can be found at https://www.lg.com/ca_en/support/product-support/troubleshoot/help-library/cs-CT52001643-20153058982994/
  name: Screen control
- description: Manage user applications
  name: System - Application Management
- description: Query and control audio status from system
  name: System - Audio Settings
- description: Query status of device lock. Locking or unlocking the device
  name: System - Device Lock control
- description: Retrieve diagnostic information of the STB
  name: System - Diagnostic API
- description: Fetch all network info on STB
  name: System - Network API
- description: Manage power control state
  name: System - Power State
- description: Capture and download screenshot from the system
  name: System - Screenshot
- description: Return storage information
  name: System - Storage Info API
- description: System information query and system control
  name: System - General Operation
paths:
  /commandScheduler/schedule:
    post:
      description: execute command(s) at a specified time on the device
      operationId: schedule
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandScheduler'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandSchedulerId'
          description: OK
        "400":
          description: Bad request
      summary: Schedule command(s) to be executed on the device
      tags:
      - Command Scheduler
  /commandScheduler/schedule/{id}:
    delete:
      description: cancel the scheduled command(s) on the device
      operationId: cancel
      parameters:
      - description: "Cancel the scheduled command(s) if it is not executed. If the\
          \ schedule id does not exist, an error will be returned."
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
        "400":
          description: Bad request
        "404":
          description: Invalid input
      summary: Cancel scheduled command(s)
      tags:
      - Command Scheduler
    get:
      description: get the execution status/results of the scheduled command(s) from
        the device
      operationId: getCommandStatus
      parameters:
      - description: Schedule id
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommandScheduler'
          description: OK
        "400":
          description: Bad request
        "404":
          description: Invalid input
      summary: Get status of the scheduled command(s).
      tags:
      - Command Scheduler
  /commandScheduler/schedules:
    get:
      description: get the list of schedule id
      operationId: getScheduleList
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommandSchedulerId'
          description: OK
      summary: Get the list of scheduled command(s).
      tags:
      - Command Scheduler
  /debug/bugreports:
    get:
      description: "Returns an array of bug reports, including the date created, filename,\
        \ size and status. Returns an empty array if no bug reports exist."
      operationId: getReportList
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BugReport'
          description: OK
      summary: Get list of bug reports
      tags:
      - Debug Utilities
  /debug/bugreports/generate:
    post:
      description: Start generating a new bug report
      operationId: generate
      responses:
        "200":
          description: OK
      summary: Initiate bugreport generation
      tags:
      - Debug Utilities
  /debug/bugreports/{name}:
    get:
      description: Returns the bug report with the specified filename as a ZIP file.
        Returns a 404 error if the bug report does not exist.
      operationId: getReportZip
      parameters:
      - in: path
        name: name
        required: true
        schema:
          type: string
          description: The filename of the bug report to download.
          example: bugreport-H200-QTT8.201201.002-2023-06-13-09-51-59.zip
      responses:
        "200":
          description: OK
        "400":
          description: Bug report is still generating
        "404":
          description: Bug report not found
      summary: Download generated bug report
      tags:
      - Debug Utilities
  /debug/logcat:
    get:
      description: Retrieves the complete current logcat circular buffer.
      operationId: logcat
      responses:
        "200":
          content:
            text/plain:
              schema:
                type: string
                example: "03-29 03:10:15.145  3559  3559 I vold    : Vold 3.0 (the\
                  \ awakening) firing up"
          description: OK
      summary: Get logcat buffer.
      tags:
      - Debug Utilities
  /debug/tcpdump/start:
    post:
      description: "Starts a tcpdump process with the provided parameters (e.g., interface,\
        \ packet count, verbosity). The capture file is saved to external storage.\
        \ **Note:** Do not use the `-w` argument, as the output file path is not configurable\
        \ and is set by the system. This is an advanced debugging tool. Use only if\
        \ you are familiar with `tcpdump` and network capture. Improper use may impact\
        \ system performance. Please ensure only one SD card or USB drive is inserted\
        \ to avoid write conflicts. Supported external storage formats are **exFAT**\
        \ and **FAT32**. **Syntax Tip:** When using `curl`, ensure quoting the parameters\
        \ after -d (e.g., `curl <H200_IP_address>:8090/api/v2/debug/tcpdump/start\
        \ -d '-i eth0 -c 100'`)."
      operationId: startTcpdump
      requestBody:
        content:
          text/plain:
            schema:
              type: string
              example: ' -i eth0 -c 100'
      responses:
        "200":
          content:
            text/plain:
              schema:
                type: string
                example: capturing
          description: OK - Tcpdump started successfully.
        "400":
          description: "Bad Request - Invalid or missing parameters, or `-w` argument\
            \ was provided, or more than one SD card or USB drive is inserted."
      summary: Initiate network capture
      tags:
      - Debug Utilities
  /debug/tcpdump/status:
    get:
      description: "Retrieves the current status of the tcpdump process, including\
        \ whether it’s capturing, completed, or aborted, and the output file path\
        \ if available."
      operationId: getTcpdumpStatus
      responses:
        "200":
          content:
            text/plain:
              schema:
                type: string
                example: "completed\n/mnt/media_rw/D39B-EFD4/2025-03-03_03-54-59.pcap\n\
                  tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture\
                  \ size 262144 bytes\n1000 packets captured\n1074 packets received\
                  \ by filter\n0 packets dropped by kernel\n\n"
          description: "OK - Returns the status (e.g., 'not_started', 'capturing',\
            \ 'completed', or 'aborted') and optionally the path to the generated\
            \ .pcap file."
      summary: Get tcpdump status
      tags:
      - Debug Utilities
  /debug/tcpdump/stop:
    post:
      description: Stops the currently running tcpdump process and finalizes the capture
        file.
      operationId: stopTcpdump
      responses:
        "200":
          content:
            text/plain:
              schema:
                type: string
                example: "tcpdump: listening on eth0, link-type EN10MB (Ethernet),\
                  \ capture size 262144 bytes\n1000 packets captured\n1074 packets\
                  \ received by filter\n0 packets dropped by kernel\n"
          description: OK - Tcpdump stopped successfully.
        "400":
          description: Bad Request - No active tcpdump process to stop.
      summary: Stop network capture
      tags:
      - Debug Utilities
  /device/hardwareModel:
    get:
      description: Retrieves hardware model in number.
      operationId: getHardwareModel
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HardwareModelResponse'
          description: OK
      summary: Get hardware model of STB.
      tags:
      - Device Information
  /device/hdmi:
    get:
      description: "Returns HDMI Information, refer to schema of returned data below"
      operationId: getHdmiInfo
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HdmiInfo'
          description: Returns HDMI Information
      summary: Get HDMI Information
      tags:
      - Device Information
  /device/hdmiCec/standbyMode:
    get:
      description: "The standby mode to retrieve. Valid values are `off`, `tv2stb`,\
        \ `stb2tv`, or `both`"
      operationId: getStandbyMode
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HdmiStandbyMode'
          description: OK
      summary: Get the HDMI CEC standby mode of the device
      tags:
      - Device HDMI CEC control
    put:
      description: "This API endpoint allows you to set the HDMI CEC standby mode\
        \ of the device. Setting the standby mode to 'both' , 'tv2stb' or 'stb2tv'\
        \ will enable HDMI CEC."
      operationId: setStandbyMode
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HdmiStandbyMode'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Set the HDMI CEC standby mode of the device
      tags:
      - Device HDMI CEC control
  /device/hdmiCec/tv:
    get:
      description: "The device is an array of name for all connected devices. Empty\
        \ String for no device connected or that device does not support HDMI CEC.\
        \ active_port will be 0 if failed to get active source of TV, e.g. TV not\
        \ support CEC or not connect with HDMI. active_port may not reporting correctly\
        \ until TV switching input when multiple devices connected.400 Bad request\
        \ will be returned if STB does not enable HDMI CEC."
      operationId: getConnectedDevices
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TVStatus'
          description: OK
        "400":
          description: "Bad Request, HDMI CEC is not enabled"
      summary: Get TV status via HDMI CEC
      tags:
      - Device HDMI CEC control
    put:
      description: "Update the power mode of the TV. Set the value to `true` to turn\
        \ on the TV or `false` to turn it off. Set power mode of TV to `true` will\
        \ switch the active input of HDMI port to STB.Switch the active input of HDMI\
        \ port for the TV. Note that this action can only be performed if a device\
        \ is currently connected to the specified HDMI port.If HDMI CEC is not enabled,\
        \ this action will enable it."
      operationId: setTV
      requestBody:
        content:
          application/json:
            examples:
              Update TV output:
                description: Update TV output
                value:
                  active_port: 4
              Update TV power status:
                description: Update TV power status
                value:
                  power_on: false
              Update both TV output and power status together:
                description: Update both TV output and power status together
                value:
                  active_port: 1
                  power_on: true
            schema:
              anyOf:
              - $ref: '#/components/schemas/HdmiPort'
              - $ref: '#/components/schemas/HdmiPowerMode'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Update power mode and active HDMI port for TV via HDMI CEC
      tags:
      - Device HDMI CEC control
  /device/hdmiCec/tv/cycleInput:
    post:
      operationId: cycleTVInput
      responses:
        "200":
          description: OK
      summary: "Cycle through the available inputs on the TV. If HDMI CEC is not enabled,\
        \ this action will enable it."
      tags:
      - Device HDMI CEC control
  /device/hdmiCec/tv/volumeDown:
    post:
      description: "If HDMI CEC is not enabled, this action will enable it."
      operationId: volumeDown
      responses:
        "200":
          description: OK
      summary: Simulate pressing the 'volume down' button on the TV 5 times to reduce
        the volume.
      tags:
      - Device HDMI CEC control
  /device/hdmiCec/tv/volumeUp:
    post:
      description: "If HDMI CEC is not enabled, this action will enable it."
      operationId: volumeUp
      responses:
        "200":
          description: OK
      summary: Simulate pressing the 'volume up' button on the TV 5 times to increase
        the volume.
      tags:
      - Device HDMI CEC control
  /device/macAddress:
    get:
      description: Retrieves mac address in the format of XX:XX:XX:XX:XX:XX.
      operationId: getMacAddress
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MacAddressResponse'
          description: OK
      summary: Get MAC address of STB.
      tags:
      - Device Information
  /device/screen-control/brightness:
    get:
      description: Get the current brightness level of the screen
      operationId: getScreenBrightness
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenBrightnessData'
          description: Current screen brightness level
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Get screen brightness level
      tags:
      - Screen control
    put:
      description: Set the screen brightness level (0-100%)
      operationId: setScreenBrightness
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenBrightnessData'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenBrightnessData'
          description: Brightness updated successfully
        "400":
          description: Bad Request - Brightness value out of range (0-100)
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Set screen brightness level
      tags:
      - Screen control
  /device/screen-control/channel/down:
    post:
      description: "Change to the previous channel, same as pressing the channel down\
        \ button on the remote control"
      operationId: channelDown
      responses:
        "200":
          description: Channel decreased successfully
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Change to previous channel
      tags:
      - Screen control
  /device/screen-control/channel/up:
    post:
      description: "Change to the next channel, same as pressing the channel up button\
        \ on the remote control"
      operationId: channelUp
      responses:
        "200":
          description: Channel increased successfully
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Change to next channel
      tags:
      - Screen control
  /device/screen-control/config:
    get:
      description: "Retrieve the current configuration of the screen, including details\
        \ such as the brand, baud rate, and whether it is operating in binary mode."
      operationId: getScreenConfig
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenConfigData'
          description: Current RS232 configuration
      summary: Get screen configuration
      tags:
      - Screen control
    put:
      description: "Configure the RS232 settings, including parameters such as the\
        \ brand, baud rate, and whether binary mode is enabled. System will try to\
        \ detect the screen brand and apply the appropriate settings. This is useful\
        \ for overriding default settings or when the screen is not recognized automatically."
      operationId: setScreenConfig
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenConfigData'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenConfigData'
          description: RS232 configuration updated successfully
        "400":
          description: Bad Request - Invalid configuration data
        "500":
          description: Internal Server Error. Please reboot and retry.
      summary: Set RS232 configuration
      tags:
      - Screen control
  /device/screen-control/input:
    get:
      description: Get the current input source of the screen
      operationId: getScreenInputSource
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenInputData'
          description: Current screen input source
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Get current screen input source
      tags:
      - Screen control
    put:
      description: "Set the screen input source, e.g., HDMI1, HDMI2, etc."
      operationId: setScreenInputSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenInputData'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenInputData'
          description: Input source changed successfully
        "400":
          description: Bad Request - Invalid input source
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Set screen input source
      tags:
      - Screen control
  /device/screen-control/input/raw:
    put:
      description: "Send a raw hex value to select input of the screen (supports Ex-link\
        \ or LG hex identifiers), for example, '90' for HDMI1, '91' for HDMI2, etc."
      operationId: setScreenInputSourceByRaw
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenRawRequest'
      responses:
        "200":
          description: Raw input command sent successfully
        "400":
          description: "Bad Request - Invalid format. Expected format: 'XX' (hex)"
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Select screen input by given raw hex value
      tags:
      - Screen control
  /device/screen-control/key:
    post:
      description: "Send a remote control key to screen by the given hex code. The\
        \ hex code should be in the format 'XX' (e.g., '43' for Menu or Settings,\
        \ '28' for Return(Back), etc.)."
      operationId: sendScreenKeyCommand
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenRawRequest'
      responses:
        "200":
          description: Key command sent successfully
        "400":
          description: "Bad Request. Invalid format. Expected format: 'XX' (hex)"
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Send a remote control key to screen
      tags:
      - Screen control
  /device/screen-control/power:
    get:
      description: Get the current power status of the screen
      operationId: getScreenPowerStatus
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenPowerData'
          description: Current screen power status
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Get screen power status
      tags:
      - Screen control
    put:
      description: Set the screen power status (on or off). Some TVs may need longer
        time to respond commands when the screen is powered off
      operationId: setScreenPower
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenPowerData'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenPowerData'
          description: Updated screen power status
        "400":
          description: Bad Request. Expected JSON body with 'power' field set to true
            or false
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Set screen power status
      tags:
      - Screen control
  /device/screen-control/volume:
    get:
      description: Get the current volume level of the screen
      operationId: getScreenVolume
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenVolumeData'
          description: Current screen volume level
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Get screen volume level
      tags:
      - Screen control
    put:
      description: Set the screen volume level (0-100%)
      operationId: setScreenVolume
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenVolumeData'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenVolumeData'
          description: Updated screen volume level
        "400":
          description: Bad Request - Volume value out of range (0-100)
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Set screen volume level
      tags:
      - Screen control
  /device/screen-control/volume/down:
    post:
      description: "Decrease screen volume, same as pressing the volume down button\
        \ on the remote control"
      operationId: decreaseScreenVolume
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenVolumeData'
          description: Volume decreased successfully
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Decrease screen volume
      tags:
      - Screen control
  /device/screen-control/volume/mute:
    get:
      description: Get the current mute status of the screen
      operationId: getScreenMuteStatus
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenMuteData'
          description: Current screen mute status
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Get screen mute status
      tags:
      - Screen control
    put:
      description: Set the screen mute status
      operationId: setScreenMute
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenMuteData'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenMuteData'
          description: Updated screen mute status
        "400":
          description: Bad Request. Expected JSON body with 'mute' field set to true
            or false
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Set screen mute status
      tags:
      - Screen control
  /device/screen-control/volume/up:
    post:
      description: "Increase screen volume, same as pressing the volume up button\
        \ on the remote control"
      operationId: increaseScreenVolume
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenVolumeData'
          description: Volume increased successfully
        "500":
          description: Internal Server Error or timeout. Please verify the connection
            and ensure that the screen supports RS232 commands.
      summary: Increase screen volume
      tags:
      - Screen control
  /device/serialNumber:
    get:
      description: "Retrieves serial number in the format of {product number}-{device\
        \ serial}."
      operationId: getSerialNumber
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SerialNumberResponse'
          description: OK
      summary: Get serial number of STB.
      tags:
      - Device Information
  /firmware/upgrade:
    post:
      description: Upgrade the device from the specified URI.
      operationId: upgrade
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpgradeRequest'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Initiate upgrade from URI.
      tags:
      - Firmware Management
  /input/irControl:
    get:
      description: Retrieves status that enable or not
      operationId: getIrControlStatus
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IrControlResponse'
          description: OK
      summary: Get current IR control status
      tags:
      - Input
    put:
      description: Enable or disable IR control
      operationId: putIrControlStatus
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IrControlRequest'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Set current IR control status
      tags:
      - Input
  /input/key:
    post:
      description: Inject keycode(s) into Android Input Subsystem. Will be forward
        to either global or local handler depending on the keycode and any key remap.
        See https://developer.android.com/reference/android/view/KeyEvent
      operationId: sendKey
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Key'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Inject keycode(s).
      tags:
      - Input
  /openapi.yaml:
    get:
      operationId: getOpenAPIFile
      responses:
        "200":
          content:
            text/plain:
              schema:
                type: string
                example: string
          description: OK
      summary: Get API document in yaml format.
      tags:
      - API
  /system:
    get:
      description: Returns system uptime in milliseconds
      operationId: getSystemInfoResponse
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemInfo'
          description: Return system uptime in milliseconds
      summary: Query system uptime
      tags:
      - System - General Operation
  /system/application:
    get:
      description: Retrieves array of information of applications installed.
      operationId: getApplicationList
      parameters:
      - description: "Possible value: running, stopped, and paused"
        example: running
        in: query
        name: state
        schema:
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Application'
          description: OK
        "400":
          description: Bad Request
      summary: Get list of Android applications installed.
      tags:
      - System - Application Management
  /system/application/install:
    post:
      description: Install / Re-Install / Downgrade APK on the device.
      operationId: installPackageByUpload
      parameters:
      - description: "Possible value: reinstall, downgrade\n- reinstall, install the\
          \ package without clear package data\n- downgrade, downgrade the package\
          \ and clear package data\n- (empty), install the package if package is not\
          \ installed, or the installed version is higher"
        example: reinstall
        in: query
        name: option
        schema:
          type: string
      requestBody:
        content:
          application/vnd.android.package-archive:
            schema:
              type: string
              format: binary
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Install / Re-Install / Downgrade APK on the device.
      tags:
      - System - Application Management
  /system/application/install-via-url:
    post:
      description: Install / Re-Install / Downgrade APK on the device.
      operationId: installPackageByUrl
      parameters:
      - description: "Possible value: reinstall, downgrade\n- reinstall, install the\
          \ package without clear package data\n- downgrade, downgrade the package\
          \ and clear package data\n- (empty), install the package if package is not\
          \ installed, or the installed version is higher"
        example: reinstall
        in: query
        name: option
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SystemApplicationInstallRequestBody'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Install / Re-Install / Downgrade APK on the device.
      tags:
      - System - Application Management
  /system/application/{app}:
    get:
      description: Retrieves information of the installed package.
      operationId: getApplication
      parameters:
      - description: package name
        in: path
        name: app
        required: true
        schema:
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
          description: OK
        "404":
          description: Not Found
      summary: Get the information of a installed Android package.
      tags:
      - System - Application Management
  /system/application/{app}/clear:
    post:
      description: Clear all data of the installed package.
      operationId: clearPackageDataByName
      parameters:
      - description: package name
        in: path
        name: app
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
        "404":
          description: Not Found
        "500":
          description: Internal Server Error
      summary: Clear the data of a installed Android package.
      tags:
      - System - Application Management
  /system/application/{app}/force-stop:
    post:
      description: Forcing the installed package to stop.
      operationId: forceStopPackageByName
      parameters:
      - description: package name
        in: path
        name: app
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
        "404":
          description: Not Found
        "500":
          description: Internal Server Error
      summary: Forcing of a installed running Android package to stop
      tags:
      - System - Application Management
  /system/application/{app}/uninstall:
    post:
      description: Uninstall Android package from the device.
      operationId: uninstallPackageByName
      parameters:
      - description: package name
        in: path
        name: app
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "404":
          description: Not Found
      summary: Uninstall a installed Android package.
      tags:
      - System - Application Management
  /system/audio/mute:
    get:
      description: Returns current mute status.
      operationId: getMute
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Mute'
          description: Return current mute status
      summary: Get mute status
      tags:
      - System - Audio Settings
    put:
      description: "Apply mute status from the request body.\n\nThe field, mute, is\
        \ a boolean.\n\n"
      operationId: applyMute
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Mute'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Mute'
          description: Modify mute settings successful and return the current mute
            status
        "400":
          description: 'Bad request due to:<br>1. <b>mute</b> cannot be parsed into
            a boolean value '
      summary: Modify mute setting
      tags:
      - System - Audio Settings
  /system/audio/volume:
    get:
      description: |-
        Returns volume information.

        Note that return value is in percentage.
      operationId: getVolume
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Volume'
          description: Return volume information
      summary: Get volume
      tags:
      - System - Audio Settings
    put:
      description: "Apply volume settings from the request body.\n\nThe field, volume,\
        \ is a integer.\n\nthe valid volume range is between 0 to 100, inclusive.\n\
        \nNote that return value is in percentage.\n\n"
      operationId: applyVolume
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Volume'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Volume'
          description: Modify volume settings successful and return the current volume
            setting
        "400":
          description: Bad request due to:<br>1. <b>volume</b> is out of 0 to 100<br>2.
            <b>volume</b> cannot be parsed into a numeric value
      summary: Modify volume setting
      tags:
      - System - Audio Settings
  /system/deeplink:
    post:
      description: Send a intent for Android system to launch a new activity.
      operationId: sendIntent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LaunchIntent'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Send an Android launch intent.
      tags:
      - System - General Operation
  /system/diagnostic:
    get:
      description: "Currently returns information about general, interface, network,\
        \ Wifi, launcher, zero screen app, and rcu\n\nThe Diagnostic Info has no definitive\
        \ schema, but rather Engage display whatever info passed by the STB\n\nThe\
        \ format is defined as follows:\n\n- Each JSONObject in root level act as\
        \ a new section in the diagnostic panel\n\n  - Each field inside the object\
        \ has its own row\n\n  - The key act as the bold header for the row\n\n  -\
        \ The value can be:\n\n    - A String, representing a single column\n    -\
        \ An Array of String, representing multiple columns\n\n\nA common format for\
        \ a section of individual information (e.g. Network):\n\n{ \"Row Header 1\"\
        : \"Value\", \"Row Header 2\": \"Another Value\" }\n\n\nA common format for\
        \ a section of common objects (e.g. RCU):\n\n{ \"\": [\"Column Header 1\"\
        , \"Column Header 2\"], \"Row Header 1\": [\"Value 1\", \"Value 2\"], \"Row\
        \ Header 2\": [\"Value 1\", \"Value 2\"] }"
      operationId: getDiagnosticInfo
      responses:
        "200":
          description: Returns all diagnostic information
      summary: Get all diagnostic information
      tags:
      - System - Diagnostic API
  /system/lock:
    post:
      description: "Lock the device, and return the current device lock status.<br><br>If\
        \ empty request body is received, the lock message will be retrieved through\
        \ INI."
      operationId: lockDevice
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceLockRequest'
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceLockStatus'
          description: "Locking device succeed, returns device lock status"
        "400":
          description: Bad request due to:<br>1. invalid request body<br>2. fail to
            validate the image URL due to unreachable<br>3. fail to validate the image
            URL because its Content-Type header does not start with 'image/'<br>4.
            fail to validate the image URL because its Content-Length header is greater
            than 10 MB
      summary: Request to lock the device
      tags:
      - System - Device Lock control
  /system/lock_status:
    get:
      description: Returns device lock status
      operationId: getDeviceLockStatus
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceLockStatus'
          description: Returns device lock status
      summary: Query status of device lock
      tags:
      - System - Device Lock control
  /system/network:
    get:
      description: Retrieve detailed information of network(s) on the STB
      operationId: getNetworkInfo
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkInterfaceDetailsResponse'
          description: Returns Network Information
      summary: Get Network Information
      tags:
      - System - Network API
  /system/power:
    get:
      description: Get the current power status of the device.
      operationId: powerStatus
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerResponse'
          description: OK
      summary: Power Status
      tags:
      - System - Power State
  /system/power/activate:
    post:
      description: Set the device from standby mode to active mode
      operationId: powerActivate
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Power Activation
      tags:
      - System - Power State
  /system/power/standby:
    post:
      description: Set the device from active mode into standby mode
      operationId: powerStandby
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Power Standby
      tags:
      - System - Power State
  /system/prop:
    get:
      description: Returns Android System Property as specified by key.
      operationId: getProp
      parameters:
      - example: persist.sys.timezone
        in: query
        name: key
        required: true
        schema:
          type: string
      responses:
        "200":
          content:
            text/plain:
              schema:
                type: string
                example: persist.sys.timezone=Asia/Hong_Kong
          description: OK
        "400":
          description: Bad Request
      summary: Get system property.
      tags:
      - System - General Operation
    put:
      description: "Sets the provided value into the Android Property as specified\
        \ in key. There are limitations of property that can be set. It is limited\
        \ by SE policy. You can add new properties under the existing domain, e.g.\
        \ persist.sys., persist.vendor.amino."
      operationId: setProp
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KeyValuePair'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Set property value.
      tags:
      - System - General Operation
  /system/reboot:
    post:
      description: Reboots the device immediately without prompt.
      operationId: reboot
      responses:
        "200":
          description: OK
      summary: Reboot device.
      tags:
      - System - General Operation
  /system/rotation:
    get:
      description: Obtain the orientation of the device's screen
      operationId: getSystemOrientation
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RotationResponse'
          description: OK
      summary: Get system orientation
      tags:
      - System - General Operation
    put:
      description: Configure the orientation of the device's screen
      operationId: setSystemOrientation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RotationChangeRequest'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "409":
          description: Conflict
      summary: Set the system orientation
      tags:
      - System - General Operation
  /system/screenshot:
    get:
      description: Returns a list of all available screenshots.
      operationId: getImages
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Screenshot'
          description: OK
      summary: Get all available screenshots
      tags:
      - System - Screenshot
  /system/screenshot/capture:
    post:
      description: "Captures a new screenshot. If the number of screenshots exceeds\
        \ 10, the oldest screenshot will be automatically deleted."
      operationId: capture
      responses:
        "200":
          description: OK
        "500":
          description: Internal Server Error
        "503":
          description: Device or resource busy
      summary: Capture a new screenshot
      tags:
      - System - Screenshot
  /system/screenshot/{id}:
    get:
      description: "Returns the screenshot with the specified ID. Use ID=0 to get\
        \ the latest screenshot, or ID=9 to get the oldest screenshot."
      operationId: getImage
      parameters:
      - description: ID of the screenshot to retrieve
        in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      responses:
        "200":
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Screenshot'
          description: OK
        "404":
          description: Not found
      summary: Get information about a specific screenshot
      tags:
      - System - Screenshot
  /system/screenshot/{id}/image:
    get:
      description: "Returns the raw image data for a specific screenshot. Use ID=0\
        \ to get the latest screenshot, or ID=9 to get the oldest screenshot."
      operationId: returnImage
      parameters:
      - description: ID of the screenshot to retrieve
        in: path
        name: id
        required: true
        schema:
          type: integer
          format: int32
      responses:
        "200":
          content:
            image/jpeg:
              schema:
                type: string
                format: binary
          description: OK
        "404":
          description: Not found
      summary: Get the raw image data for a specific screenshot
      tags:
      - System - Screenshot
  /system/spacemgr:
    get:
      description: "Returns storage information, represented in bytes"
      operationId: getStorageInfo
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageInfo'
          description: Return storage information
      summary: Get storage information
      tags:
      - System - Storage Info API
  /system/storage/unmountAll:
    post:
      description: Unmounts all external storage devices. This prevents data loss
        when the device is powered off.
      operationId: unmountAll
      responses:
        "200":
          description: OK
      summary: Unmount all external storage
      tags:
      - System - Storage Info API
  /system/unlock:
    post:
      description: "Unlock the device, and return the current device lock status"
      operationId: unlockDevice
      responses:
        "200":
          content:
            application/json:
              example:
                locked: false
              schema:
                $ref: '#/components/schemas/DeviceLockStatus'
          description: "Unlocking device succeed, returns device lock status"
      summary: Request to unlock the device
      tags:
      - System - Device Lock control
  /zapper/changeChannel:
    post:
      description: "Built-in Zapper Application will be restarted and attempt to tune\
        \ to the specified channel by name or desc. If the channel name or desc is\
        \ not found, it will tune to the channel configured from the Lineup File."
      operationId: changeChannel
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ZapperChannelChange'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Change channel on zapper.
      tags:
      - Zapper
  /zapper/channels:
    get:
      description: "Complete channel lineup will be returns in JSON format or empty\
        \ json object {} if no channels have been provisioned."
      operationId: getAllChannels
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Channels'
          description: OK
      summary: Returns complete channel lineup.
      tags:
      - Zapper
    post:
      description: Add a new channel to the lineup. If the channel already exists
        then an error will be returned.
      operationId: addNewChannel
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/ChannelV1'
              - $ref: '#/components/schemas/ChannelV2'
              - $ref: '#/components/schemas/ChannelV3'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Adds new channel to the lineup.
      tags:
      - Zapper
  /zapper/channels/{name}:
    delete:
      operationId: deleteChannel
      parameters:
      - description: Delete the channel for number provided as name param. If the
          channel does not exist and error will be returned.
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Delete the channel.
      tags:
      - Zapper
    get:
      operationId: getChannelByName
      parameters:
      - description: Return the channel object for number provided as name param.
        in: path
        name: name
        required: true
        schema:
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/ChannelV1'
                - $ref: '#/components/schemas/ChannelV2'
                - $ref: '#/components/schemas/ChannelV3'
          description: OK
        "400":
          description: Bad Request
      summary: Get the channel info.
      tags:
      - Zapper
    put:
      operationId: editChannelInfo
      parameters:
      - description: Update the channel object for number provided as name param.
          If the channel does not exist and error will be returned.
        in: path
        name: name
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/ChannelV1'
              - $ref: '#/components/schemas/ChannelV2'
              - $ref: '#/components/schemas/ChannelV3'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Create or change the channel info of a channel.
      tags:
      - Zapper
  /zapper/tuneToUrl:
    post:
      description: "Provide channel lineup entry and force tune the channel zapper\
        \ to tune to the entry without persisting. Upon Ch+/- the channel zapper will\
        \ continue going through the lineup if configured. If NO channel lineup has\
        \ been configured, CH+/- will have no effect and the Forced Tuned URL will\
        \ continue to play."
      operationId: tuneToUrl
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/ChannelV1'
              - $ref: '#/components/schemas/ChannelV2'
              - $ref: '#/components/schemas/ChannelV3'
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
      summary: Force tune to video URL.
      tags:
      - Zapper
components:
  schemas:
    Application:
      type: object
      properties:
        app_label:
          type: string
          description: Display name of application.
          example: Browser
        in_system_image:
          type: boolean
          description: Whether the application is part of system image.
          example: true
        launch_intent:
          $ref: '#/components/schemas/LaunchIntent'
        package_name:
          type: string
          description: Package name of application.
          example: com.aminocom.browser
        state:
          type: string
          description: Running state of application
          enum:
          - running
          - stopped
          - paused
          example: running
        storage:
          $ref: '#/components/schemas/Storage'
        version:
          type: string
          description: Version number of application
          example: "1.0"
    BugReport:
      type: object
      properties:
        date:
          type: string
          description: "The date and time when the bug report was taken, in ISO 8601\
            \ format."
          example: 2023-06-13T09:53:40Z
        name:
          type: string
          description: The filename of the bug report.
          example: bugreport-H200-QTT8.201201.002-2023-06-13-09-51-59.zip
        size:
          type: integer
          format: int64
          description: The size of the bug report file in bytes.
          example: 3828208
        status:
          type: string
          description: The status of the bug report.
          enum:
          - generating
          - available
          example: generating
    Channel:
      type: object
      oneOf:
      - $ref: '#/components/schemas/ChannelV1'
      - $ref: '#/components/schemas/ChannelV2'
      - $ref: '#/components/schemas/ChannelV3'
    ChannelV1:
      type: object
      properties:
        addr:
          type: string
          example: 233.22.133.1
        desc:
          type: string
          example: UDP 1
        drm_session_type:
          type: string
          example: persistent
        encrypting_request_header:
          type: object
          additionalProperties:
            type: string
            example: "{'header_a':'a'}"
          example: "{'header_a':'a'}"
        encrypting_server:
          type: string
          example: http://demo.aminocom.com/license
        encryption_type:
          type: string
          example: com.widevine.alpha
        igmpv3_addr_list:
          type: array
          items:
            type: string
            example: 198.51.100.42
        igmpv3_mode:
          type: string
          enum:
          - asm
          - include
          - exclude
          example: asm
        loop_on_end:
          type: boolean
          description: set true to replay the video upon video end.
          example: false
        name:
          type: string
          example: "101"
        port:
          type: integer
          format: int32
          example: 8110
          maximum: 65536
          minimum: 1
        retry_on_error:
          type: boolean
          description: "set true to re-tune the this channel when there is ERROR event,\
            \ set false to tune to the next channel upon error."
          example: false
        starting:
          type: boolean
          description: set true to specify the 1st channel being played after boot
          example: true
        type:
          type: string
          enum:
          - udp
          - igmpv3
          - nativedash
          - rtsp
          - http
          - srt
          - https
          example: udp
      required:
      - addr
      - name
      - type
    ChannelV2:
      type: object
      properties:
        desc:
          type: string
          example: UDP 1
        drm_session_type:
          type: string
          example: persistent
        encrypting_request_header:
          type: object
          additionalProperties:
            type: string
            example: "{'header_a':'a'}"
          example: "{'header_a':'a'}"
        encrypting_server:
          type: string
          example: http://demo.aminocom.com/license
        encryption_type:
          type: string
          example: com.widevine.alpha
        loop_on_end:
          type: boolean
          description: set true to replay the video upon video end.
          example: false
        name:
          type: string
          example: "101"
        retry_on_error:
          type: boolean
          description: "set true to re-tune the this channel when there is ERROR event,\
            \ set false to tune to the next channel upon error."
          example: false
        starting:
          type: boolean
          description: set true to specify the 1st channel being played after boot
          example: true
        url:
          type: string
          description: Full URL as EnableJS API Player.setSource()
          example: udp://233.22.133.100:8110?prog_id=2&disable_av_sync=true
      required:
      - name
      - url
    ChannelV3:
      type: object
      properties:
        desc:
          type: string
          example: UDP 1
        drm_session_type:
          type: string
          example: persistent
        encrypting_request_header:
          type: object
          additionalProperties:
            type: string
            example: "{'header_a':'a'}"
          example: "{'header_a':'a'}"
        encrypting_server:
          type: string
          example: http://demo.aminocom.com/license
        encryption_type:
          type: string
          example: com.widevine.alpha
        loop_on_end:
          type: boolean
          description: set true to replay the video upon video end.
          example: false
        name:
          type: string
          example: "101"
        retry_on_error:
          type: boolean
          description: "set true to re-tune the this channel when there is ERROR event,\
            \ set false to tune to the next channel upon error."
          example: false
        starting:
          type: boolean
          description: set true to specify the 1st channel being played after boot
          example: true
        url:
          type: array
          items:
            type: string
            description: Array of String contains full URL as EnableJS API Player.setSource()
            example: "[\"udp://233.22.133.100:8110\",\"udp://233.22.133.101:8110\"\
              ]"
            maxLength: 4
            minLength: 1
      required:
      - name
      - url
    Channels:
      type: object
      properties:
        channels:
          type: array
          items:
            $ref: '#/components/schemas/Channel'
    Command:
      type: object
      properties:
        method:
          type: string
          description: Request method
          example: POST
        params:
          type: object
          description: command arguments
          example: "\"volume\":{\"left\":\"50\", \"right\":\"50\"}"
        payload:
          type: object
          example: "{\"locked\":false},"
          readOnly: true
        status:
          type: integer
          format: int32
          example: 200
          readOnly: true
        timeout:
          type: integer
          format: int32
          description: "in milliseconds, how long to wait for the response from the\
            \ device. Default is 10000 (10s)"
          example: 1000
        url:
          type: string
          description: api url
          example: /system/audio
      required:
      - method
      - url
    CommandScheduler:
      type: object
      properties:
        apiBaseUrl:
          type: string
          description: Base url to be append to url of the command.
          example: http://localhost:8090
        commands:
          type: array
          items:
            $ref: '#/components/schemas/Command'
        execTs:
          type: integer
          format: int64
          description: "epoch time to execute the command(s). The Execution Time will\
            \ add and minus a threshold (10 seconds) to become a time range, then\
            \ compare it with the system clock time to determine the actions."
          example: 1678430761
        inSeq:
          type: boolean
          description: execute the command(s) sequentially
          example: true
        status:
          type: integer
          format: int32
          example: 200
          readOnly: true
        statusPayload:
          type: string
          example: success
          readOnly: true
      required:
      - apiBaseUrl
    CommandSchedulerId:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 100
    DeviceLockRequest:
      type: object
      properties:
        image:
          type: string
          description: The lock image URL.<br>Content-Type header shall start with
            'image/' and Content-Length header shall be smaller than or equal to 10
            MB.
          example: https://xxx/device_lock.png
        message:
          type: string
          description: "The lock message.<br>If the image field does not exist, the\
            \ lock screen will show message defined here.<br>If message = empty string,\
            \ the lock message will be retrieved through INI."
          example: Your device has been locked
    DeviceLockStatus:
      type: object
      properties:
        locked:
          type: boolean
    ExtrasConfig:
      type: object
      description: Additional parameters to be passed in JSON format.
      properties:
        configA:
          type: boolean
          example: true
        configB:
          type: string
          example: String
        configC:
          type: integer
          format: int32
          example: 123
    HardwareModelResponse:
      type: object
      properties:
        hardwareModel:
          type: string
          example: "107"
    HdmiInfo:
      type: object
      properties:
        cec_one_touch_play:
          type: string
          example: "off"
        cec_remote_control:
          type: string
          example: tv2stb
        cec_standby:
          type: string
          example: "off"
        connected:
          type: boolean
          example: true
        current_resolution:
          type: string
          example: 1920x1080
        hdcp_enabled:
          type: boolean
          example: true
        hdcp_success:
          type: string
          example: "Yes"
        hdcp_version:
          type: string
          example: V1
        max_audio_pcm_channels:
          type: integer
          format: int32
          example: 2
        monitor_name:
          type: string
          example: MStar
        preferred_resolution:
          type: string
          example: 2160p30hz
        supported_3D_resolution:
          type: array
          example:
          - '480i60hz TopBottom SidebySide '
          - '576i50hz TopBottom SidebySide '
          items:
            type: string
        supported_deep_color_formats:
          type: string
          example: --
        supported_eotf_formats:
          type: string
          example: --
        supported_resolution:
          type: array
          example:
          - 480i60hz
          - 576i50hz
          items:
            type: string
    HdmiPort:
      type: object
      properties:
        active_port:
          type: integer
          format: int32
          example: 1
      required:
      - active_port
    HdmiPowerMode:
      type: object
      properties:
        power_on:
          type: boolean
          example: false
      required:
      - power_on
    HdmiStandbyMode:
      type: object
      properties:
        mode:
          type: string
          description: The standby command communication between TV and STB
          enum:
          - tv2stb
          - stb2tv
          - both
          - "off"
      required:
      - mode
    IrControlRequest:
      type: object
      properties:
        enable:
          type: boolean
          example: true
      required:
      - enable
    IrControlResponse:
      type: object
      properties:
        ircontrol:
          type: boolean
          example: true
    Key:
      type: object
      properties:
        delay:
          type: integer
          format: int32
          example: 500
        keycode:
          type: integer
          format: int32
          example: 166
      required:
      - keycode
    KeyValuePair:
      type: object
      properties:
        key:
          type: string
          example: persist.sys.amino.hdmi.cec.one_touch_play
        value:
          type: string
          example: "on"
      required:
      - key
      - value
    LaunchIntent:
      type: object
      properties:
        action:
          type: string
          description: Action Name.
          example: android.intent.action.VIEW
        activity:
          type: string
          description: Classname inside of the application package.
          example: com.aminocom.browser.MainActivity
        data:
          type: string
          description: Data or uri.
          example: https://www.yahoo.com
        extras:
          $ref: '#/components/schemas/ExtrasConfig'
        package:
          type: string
          description: Explicit package id should be target to instead of broadcast.
          example: com.aminocom.browser
        packageName:
          type: string
          description: Deprecated. Keep for compatibility. Please use package.
    MacAddressResponse:
      type: object
      properties:
        macAddress:
          type: string
          example: 5C:0F:FB:11:F1:6E
    Mute:
      type: object
      properties:
        mute:
          type: boolean
    NetworkInterfaceDetails:
      type: object
      properties:
        active:
          type: boolean
        dhcp_server:
          type: string
          description: Only available for wlan / on Android R+
        dns:
          type: array
          items:
            type: string
        gateway:
          type: string
        ip_address:
          type: string
        ip_type:
          type: string
          description: Only available for wlan / on Android R+
        link_capability:
          type: boolean
        linking:
          type: string
        mac_address:
          type: string
        member_interfaces:
          type: array
          items:
            type: string
        netmask:
          type: string
        nic_name:
          type: string
        nic_type:
          type: string
        transmission_mode:
          type: string
    NetworkInterfaceDetailsResponse:
      type: object
      properties:
        current_active_wan:
          type: string
          description: Name of current active interface
        nic:
          type: array
          items:
            $ref: '#/components/schemas/NetworkInterfaceDetails'
        num_of_nic:
          type: integer
          format: int32
          description: Number of network interface in total
    PowerResponse:
      type: object
      properties:
        status:
          type: string
          enum:
          - active
          - standby
          example: active
    RotationChangeRequest:
      type: object
      properties:
        rotation:
          type: integer
          format: int32
          description: "Degree in clockwise:<br/><br/>0: 0 degree<br/>1: 90 degree<br/>2:\
            \ 180 degree<br/>3: 270 degree"
          example: 0
      required:
      - rotation
    RotationResponse:
      type: object
      properties:
        rotation:
          type: integer
          format: int32
          description: "Degree in clockwise:<br/><br/>0: 0 degree<br/>1: 90 degree<br/>2:\
            \ 180 degree<br/>3: 270 degree"
          example: 0
    ScreenBrightnessData:
      type: object
      properties:
        brightness:
          type: integer
          format: int32
          description: Screen brightness level
          example: 50
          maximum: 100
          minimum: 0
      required:
      - brightness
    ScreenConfigData:
      type: object
      properties:
        baudRate:
          type: integer
          format: int32
          description: Baud rate for the screen communication protocol
          example: 9600
        binaryMode:
          type: boolean
          description: Binary mode for the screen communication protocol
          example: false
        brand:
          type: string
          description: brand of the screen
          example: LG
      required:
      - baudRate
      - binaryMode
      - brand
    ScreenInputData:
      type: object
      properties:
        input:
          type: string
          description: "Input source for the screen. Valid values are HDMI1, HDMI2,\
            \ AV, RGB, etc."
          enum:
          - CADTV
          - ATV
          - CATV
          - AV
          - AV1
          - AV2
          - COMPONENT1
          - COMPONENT2
          - RGB
          - HDMI1
          - HDMI2
          - HDMI3
          - HDMI4
          example: HDMI1
      required:
      - input
    ScreenMuteData:
      type: object
      properties:
        mute:
          type: boolean
          description: True indicates the screen is muted.
          example: true
      required:
      - mute
    ScreenPowerData:
      type: object
      properties:
        power:
          type: boolean
          description: True indicates the screen power is on.
          example: false
      required:
      - power
    ScreenRawRequest:
      type: object
      properties:
        hexCode:
          type: string
          description: Hex code to be sent to the screen
          example: "90"
          pattern: "^[0-9A-Fa-f]{2}$"
      required:
      - hexCode
    ScreenVolumeData:
      type: object
      properties:
        volume:
          type: integer
          format: int32
          description: Screen volume level
          example: 50
          maximum: 100
          minimum: 0
      required:
      - volume
    Screenshot:
      type: object
      properties:
        filename:
          type: string
          description: The filename of the screenshot resource.
          example: screenshot_2023-04-20_16-26-52-747.jpg
        timestamp:
          type: string
          description: "The timestamp when the screenshot was captured, in format:\
            \ EEE MMM dd HH:mm:ss zzz yyyy"
          example: Thu Apr 20 18:08:48 GMT+08:00 2023
        uri:
          type: string
          description: The URI of the screenshot resource.
          example: http://localhost:8090/api/v2/system/screenshot/0/image
    SerialNumberResponse:
      type: object
      properties:
        serialNumber:
          type: string
          example: 107-12345678
    Storage:
      type: object
      description: Storage used
      properties:
        app:
          type: integer
          format: int64
          description: The size of the app (in byte)
          example: 8192
        cache:
          type: integer
          format: int64
          description: The size of all cached data (int byte)
          example: 516096
        data:
          type: integer
          format: int64
          description: The size of all data (in byte)
          example: 1146881
    StorageInfo:
      type: object
      properties:
        free:
          type: string
          example: "2000000000"
        total:
          type: string
          example: "4000000000"
    SystemApplicationInstallRequestBody:
      type: object
      properties:
        url:
          type: string
    SystemInfo:
      type: object
      properties:
        uptime:
          type: integer
          format: int64
          description: System uptime in milliseconds
    TVStatus:
      type: object
      properties:
        active_port:
          type: integer
          format: int32
          description: "The HDMI port number is/to activate. 1 means HDMI 1, 0 for\
            \ unknown."
          example: 1
          maximum: 4
          minimum: 0
        device:
          type: array
          description: List of device names connected to TV
          example:
          - H200
          - ""
          - ""
          - ""
          items:
            type: string
            description: List of device names connected to TV
            example: "[\"H200\",\"\",\"\",\"\"]"
            readOnly: true
          readOnly: true
        power_status:
          type: integer
          format: int32
          description: "The power status of TV. 0: TV off, 1: TV on, 2: unknown (HDMI\
            \ not connected), 3: unknown (HDMI connected but STB standby), 4: unknown\
            \ (HDMI connected and STB not in standby, but no CEC data replied), 5:\
            \ unknown (others)"
          enum:
          - 0
          - 1
          - 2
          - 3
          - 4
          - 5
          readOnly: true
    UpgradeRequest:
      type: object
      properties:
        uri:
          type: string
          example: http://www.webstorage.com/25.5.2021.3.zip
      required:
      - uri
    Volume:
      type: object
      properties:
        volume:
          type: integer
          format: int32
          maximum: 100
          minimum: 0
    ZapperChannelChange:
      type: object
      example:
        name: "2"
      properties:
        desc:
          type: string
        name:
          type: string
