Summary

Sony BRAVIA Professional Display (KDX9300 Series) controlled via JSON-RPC over HTTP REST API. Services: guide, appControl, audio, avContent, encryption, system, video, videoScreen. Authentication uses Pre-Shared Key (PSK) at three levels: none, generic, private.

Transport

protocols:
  - http
addressing:
  base_url: "http://{ip}/sony"
  # port: null  # UNRESOLVED: port number not stated in source
auth:
  type: psk
  description: "Pre-Shared Key sent in HTTP POST header. Three auth levels per API: none, generic, private."

Traits

traits:
  - powerable    # setPowerStatus, getPowerStatus present
  - queryable    # numerous get* query methods present
  - routable     # setPlayContent, getCurrentExternalInputsStatus, getContentList present
  - levelable    # setAudioVolume, setPictureQualitySettings present

Actions

actions:
  # ── guide service ──
  - id: getSupportedApiInfo
    label: Get Supported API Info
    kind: query
    service: guide
    description: "Returns supported services and API information for initialization."
    params:
      - name: services
        type: string-array
        required: false
        description: "Services to fetch API info for. Null/empty = all services."
    versions: ["1.0"]
    auth_level: none

  # ── appControl service ──
  - id: prepareAppUpload
    label: Prepare App Upload
    kind: action
    service: appControl
    description: "Launch upload server and return assetId for APK upload. Localhost only."
    params: []
    versions: ["1.0"]
    auth_level: generic

  - id: uninstallApp
    label: Uninstall App
    kind: action
    service: appControl
    description: "Uninstall application by package name. Localhost only."
    params:
      - name: packageName
        type: string
        required: true
        description: "Package name to uninstall."
    versions: ["1.0"]
    auth_level: generic

  - id: installApp
    label: Install App
    kind: action
    service: appControl
    description: "Install application from uploaded APK. Localhost only."
    params:
      - name: assetId
        type: string
        required: true
        description: "Asset ID from prepareAppUpload."
      - name: afterInstallAction
        type: string
        required: false
        description: "Action after install, e.g. 'startApplication'."
      - name: uri
        type: string
        required: false
        description: "Android-app scheme URI for post-install launch."
    versions: ["1.0"]
    auth_level: generic

  - id: setTextForm
    label: Set Text Form
    kind: action
    service: appControl
    description: "Input text on software keyboard field. v1.1 supports encrypted text via encKey."
    params:
      - name: text
        type: string
        required: true
        description: "Text data (UTF8). Encrypted if encKey set."
      - name: encKey
        type: string
        required: false
        description: "Encryption key encrypted by public key. v1.1 only."
    versions: ["1.0", "1.1"]
    auth_level: generic

  - id: terminateApps
    label: Terminate Apps
    kind: action
    service: appControl
    description: "Terminate all running applications."
    params: []
    versions: ["1.0"]
    auth_level: generic

  - id: setActiveApp
    label: Set Active App
    kind: action
    service: appControl
    description: "Launch application by URI."
    params:
      - name: uri
        type: string
        required: true
        description: "App URI, e.g. 'localapp://webappruntime?url=...'."
    versions: ["1.0"]
    auth_level: generic

  - id: getApplicationList
    label: Get Application List
    kind: query
    service: appControl
    description: "List applications launchable by setActiveApp."
    params: []
    versions: ["1.0"]
    auth_level: private

  - id: getWebAppStatus
    label: Get Web App Status
    kind: query
    service: appControl
    description: "Retrieve WebAppRuntime status and current URL."
    params: []
    versions: ["1.0"]
    auth_level: private

  - id: getApplicationStatusList
    label: Get Application Status List
    kind: query
    service: appControl
    description: "Status of textInput, cursorDisplay, webBrowse applications."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getTextForm
    label: Get Text Form
    kind: query
    service: appControl
    description: "Get current text input on software keyboard. v1.1 supports encryption."
    params:
      - name: encKey
        type: string
        required: false
        description: "Encryption key. v1.1 only."
    versions: ["1.1"]
    auth_level: private

  # ── audio service ──
  - id: setAudioVolume
    label: Set Audio Volume
    kind: action
    service: audio
    description: "Set audio volume level. Supports absolute (N), relative (+N, -N). v1.2 adds ui param."
    params:
      - name: target
        type: string
        required: true
        description: "Output target: '', 'speaker', 'headphone'."
      - name: volume
        type: string
        required: true
        description: "Volume: 'N' absolute, '+N' increase, '-N' decrease."
      - name: ui
        type: string
        required: false
        description: "Show volume UI: 'on', 'off'. v1.2 only."
    versions: ["1.0", "1.2"]
    auth_level: generic

  - id: getSpeakerSettings
    label: Get Speaker Settings
    kind: query
    service: audio
    description: "Current and supported speaker configuration settings."
    params:
      - name: target
        type: string
        required: false
        description: "Target: '', 'tvPosition', 'subwooferLevel', 'subwooferFreq', 'subwooferPhase', 'subwooferPower'."
    versions: ["1.0"]
    auth_level: none

  - id: getVolumeInformation
    label: Get Volume Information
    kind: query
    service: audio
    description: "Volume level and mute status per output target."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: setAudioMute
    label: Set Audio Mute
    kind: action
    service: audio
    description: "Set mute status."
    params:
      - name: status
        type: boolean
        required: true
        description: "true=mute, false=unmute."
    versions: ["1.0"]
    auth_level: generic

  - id: setSoundSettings
    label: Set Sound Settings
    kind: action
    service: audio
    description: "Change sound settings like output terminal."
    params:
      - name: settings
        type: object-array
        required: true
        description: "Array of target/value pairs. target 'outputTerminal': 'speaker', 'speaker_hdmi', 'hdmi', 'audioSystem'."
    versions: ["1.1"]
    auth_level: generic

  - id: setSpeakerSettings
    label: Set Speaker Settings
    kind: action
    service: audio
    description: "Change speaker settings (tvPosition, subwooferLevel, subwooferFreq, subwooferPhase, subwooferPower)."
    params:
      - name: settings
        type: object-array
        required: true
        description: "Array of target/value pairs for speaker configuration."
    versions: ["1.0"]
    auth_level: generic

  # ── avContent service ──
  - id: setPlayContent
    label: Set Play Content
    kind: action
    service: avContent
    description: "Play content specified by URI (e.g. switch to HDMI input)."
    params:
      - name: uri
        type: string
        required: true
        description: "Content URI, e.g. 'extInput:hdmi?port=2'."
    versions: ["1.0"]
    auth_level: generic

  - id: getCurrentExternalInputsStatus
    label: Get Current External Inputs Status
    kind: query
    service: avContent
    description: "Status of all external input sources (connection, label, icon, signal). v1.1 adds 'status' field."
    params: []
    versions: ["1.0", "1.1"]
    auth_level: none

  - id: getPlayingContentInfo
    label: Get Playing Content Info
    kind: query
    service: avContent
    description: "Currently playing content or selected input info."
    params: []
    versions: ["1.0"]
    auth_level: private

  - id: getContentCount
    label: Get Content Count
    kind: query
    service: avContent
    description: "Count of contents in a source. v1.1 adds 'target' param."
    params:
      - name: source
        type: string
        required: true
        description: "Source URI, e.g. 'extInput:hdmi'."
      - name: type
        type: string
        required: false
        description: "Content type filter."
      - name: target
        type: string
        required: false
        description: "Target filter. v1.1 only."
    versions: ["1.0", "1.1"]
    auth_level: private

  - id: getContentList
    label: Get Content List
    kind: query
    service: avContent
    description: "List contents under URI. Supports pagination via stIdx/cnt."
    params:
      - name: uri
        type: string
        required: false
        description: "Content URI. Null=all supported."
      - name: stIdx
        type: integer
        required: false
        description: "Start index for pagination. Default 0."
      - name: cnt
        type: integer
        required: false
        description: "Max items to return. Default 50, max 200."
    versions: ["1.5"]
    auth_level: private

  - id: getSchemeList
    label: Get Scheme List
    kind: query
    service: avContent
    description: "List URI schemes the device can handle."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getSourceList
    label: Get Source List
    kind: query
    service: avContent
    description: "List sources within a scheme."
    params:
      - name: scheme
        type: string
        required: true
        description: "Scheme name, e.g. 'extInput'."
    versions: ["1.0"]
    auth_level: none

  # ── encryption service ──
  - id: getPublicKey
    label: Get Public Key
    kind: query
    service: encryption
    description: "Request RSA public key for encrypted text transmission."
    params: []
    versions: ["1.0"]
    auth_level: none

  # ── system service ──
  - id: getScreenshot
    label: Get Screenshot
    kind: query
    service: system
    description: "Capture screenshot, returns 320x180 Base64 JPEG. Localhost only."
    params:
      - name: plane
        type: string
        required: false
        description: "Target plane: 'video', 'graphics', 'mixed'. Default 'mixed'."
    versions: ["1.0"]
    auth_level: private

  - id: setPowerSavingMode
    label: Set Power Saving Mode
    kind: action
    service: system
    description: "Change power saving mode."
    params:
      - name: mode
        type: string
        required: true
        description: "Mode: 'off', 'low', 'high', 'pictureOff'."
    versions: ["1.0"]
    auth_level: generic

  - id: getCurrentTime
    label: Get Current Time
    kind: query
    service: system
    description: "Device current time (ISO8601). v1.1 adds timezone and DST offset."
    params: []
    versions: ["1.0", "1.1"]
    auth_level: none

  - id: getNetworkSettings
    label: Get Network Settings
    kind: query
    service: system
    description: "Network interface settings (IP, MAC, gateway, DNS)."
    params:
      - name: netif
        type: string
        required: false
        description: "Interface: 'eth0', 'wlan0', 'p2p1', ''. Default ''=all."
    versions: ["1.0"]
    auth_level: generic

  - id: getInterfaceInformation
    label: Get Interface Information
    kind: query
    service: system
    description: "REST API interface info: productCategory, modelName, interfaceVersion."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getRemoteDeviceSettings
    label: Get Remote Device Settings
    kind: query
    service: system
    description: "Remote device access settings (accessPermission)."
    params:
      - name: target
        type: string
        required: false
        description: "Target: 'accessPermission', ''=all. Default ''."
    versions: ["1.0"]
    auth_level: none

  - id: getLEDIndicatorStatus
    label: Get LED Indicator Status
    kind: query
    service: system
    description: "Get current LED indicator mode and status."
    params: []
    versions: ["1.0"]
    auth_level: generic

  - id: getPowerSavingMode
    label: Get Power Saving Mode
    kind: query
    service: system
    description: "Current power saving mode setting."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getPowerStatus
    label: Get Power Status
    kind: query
    service: system
    description: "Current power status: 'standby' or 'active'."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getRemoteControllerInfo
    label: Get Remote Controller Info
    kind: query
    service: system
    description: "IRCC remote control button codes supported by device."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getSystemInformation
    label: Get System Information
    kind: query
    service: system
    description: "Device info (model, serial, MAC, generation, firmware). v1.7 adds fwVersion, androidOs, webAppRuntimeVersion, mode."
    params: []
    versions: ["1.0", "1.7"]
    auth_level: private

  - id: getSystemSupportedFunction
    label: Get System Supported Function
    kind: query
    service: system
    description: "Device capabilities (e.g. WOL MAC address)."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: getWolMode
    label: Get WoL Mode
    kind: query
    service: system
    description: "Wake-on-LAN mode enabled/disabled status."
    params: []
    versions: ["1.0"]
    auth_level: generic

  - id: requestReboot
    label: Request Reboot
    kind: action
    service: system
    description: "Reboot the device."
    params: []
    versions: ["1.0"]
    auth_level: generic

  - id: setLEDIndicatorStatus
    label: Set LED Indicator Status
    kind: action
    service: system
    description: "Set LED indicator mode and on/off status."
    params:
      - name: mode
        type: string
        required: true
        description: "Mode: 'Demo', 'AutoBrightnessAdjust', 'Dark', 'SimpleResponse', 'Off'."
      - name: status
        type: string
        required: false
        description: "'true'=on, 'false'=off, null=server decides."
    versions: ["1.1"]
    auth_level: generic

  - id: setPowerStatus
    label: Set Power Status
    kind: action
    service: system
    description: "Power on/off. Power-on only works in Sleep mode with Remote start enabled."
    params:
      - name: status
        type: boolean
        required: true
        description: "true=power on, false=power off."
    versions: ["1.0"]
    auth_level: generic

  - id: setWolMode
    label: Set WoL Mode
    kind: action
    service: system
    description: "Enable/disable Wake-on-LAN."
    params:
      - name: enabled
        type: boolean
        required: true
        description: "true=enabled, false=disabled."
    versions: ["1.0"]
    auth_level: generic

  # ── video service ──
  - id: getScreenRotation
    label: Get Screen Rotation
    kind: query
    service: video
    description: "Get current screen rotation (0, 90, 180, 270). Localhost only."
    params: []
    versions: ["1.0"]
    auth_level: none

  - id: setScreenRotation
    label: Set Screen Rotation
    kind: action
    service: video
    description: "Set screen rotation (0, 90, 180, 270). Localhost only."
    params:
      - name: rotation
        type: integer
        required: true
        description: "Rotation: 0, 90, 180, 270."
    versions: ["1.0"]
    auth_level: generic

  - id: getPictureQualitySettings
    label: Get Picture Quality Settings
    kind: query
    service: video
    description: "Current and supported picture quality settings (color, brightness, contrast, sharpness, pictureMode, etc.)."
    params:
      - name: target
        type: string
        required: false
        description: "Target: 'color', 'brightness', 'contrast', 'sharpness', 'pictureMode', 'lightSensor', 'colorSpace', 'colorTemperature', 'autoPictureMode', 'hdrMode', 'autoLocalDimming', 'xtendedDynamicRange', ''=all."
    versions: ["1.0"]
    auth_level: none

  - id: setPictureQualitySettings
    label: Set Picture Quality Settings
    kind: action
    service: video
    description: "Change picture quality settings."
    params:
      - name: settings
        type: object-array
        required: true
        description: "Array of target/value pairs for picture quality."
    versions: ["1.0"]
    auth_level: generic

  # ── videoScreen service ──
  - id: setSceneSetting
    label: Set Scene Setting
    kind: action
    service: videoScreen
    description: "Change scene setting for input source."
    params:
      - name: value
        type: string
        required: true
        description: "Scene: 'auto', 'auto24pSync', 'general'."
    versions: ["1.0"]
    auth_level: generic

Feedbacks

feedbacks:
  - id: power_state
    type: enum
    values: ["active", "standby"]
    description: "Power status from getPowerStatus."

  - id: volume_info
    type: object
    description: "Volume, mute, minVolume, maxVolume per target from getVolumeInformation."
    fields:
      - name: target
        type: string
        description: "'speaker' or 'headphone'."
      - name: volume
        type: integer
      - name: mute
        type: boolean
      - name: minVolume
        type: integer
      - name: maxVolume
        type: integer

  - id: playing_content
    type: object
    description: "Currently playing content from getPlayingContentInfo."
    fields:
      - name: uri
        type: string
      - name: source
        type: string
      - name: title
        type: string

  - id: external_inputs_status
    type: array
    description: "External input status from getCurrentExternalInputsStatus."
    item_fields:
      - name: uri
        type: string
      - name: title
        type: string
      - name: connection
        type: boolean
      - name: label
        type: string
      - name: icon
        type: string
      - name: status
        type: string

  - id: application_status
    type: array
    description: "Application status from getApplicationStatusList."
    item_fields:
      - name: name
        type: string
        description: "'textInput', 'cursorDisplay', 'webBrowse'."
      - name: status
        type: string
        description: "'on' or 'off'."

  - id: power_saving_mode
    type: enum
    values: ["off", "low", "high", "pictureOff"]
    description: "Current power saving mode from getPowerSavingMode."

  - id: led_indicator_status
    type: object
    description: "LED mode and status from getLEDIndicatorStatus."
    fields:
      - name: mode
        type: string
        description: "'Demo', 'AutoBrightnessAdjust', 'Dark', 'SimpleResponse', 'Off'."
      - name: status
        type: string
        description: "'true', 'false', null."

  - id: wol_mode
    type: boolean
    description: "WoL enabled/disabled from getWolMode."

  - id: network_settings
    type: array
    description: "Network interface info from getNetworkSettings."

  - id: system_information
    type: object
    description: "Device info from getSystemInformation."

  - id: current_time
    type: object
    description: "Device time from getCurrentTime."

  - id: web_app_status
    type: object
    description: "WebAppRuntime active status and URL from getWebAppStatus."

  - id: picture_quality_settings
    type: array
    description: "Picture quality settings from getPictureQualitySettings."

  - id: speaker_settings
    type: array
    description: "Speaker configuration from getSpeakerSettings."

  - id: screen_rotation
    type: integer
    description: "Screen rotation value (0, 90, 180, 270) from getScreenRotation."

Variables

variables:
  - id: audio_volume
    type: integer
    min: 0
    max: 100
    description: "Audio volume level. Set via setAudioVolume."

  - id: audio_mute
    type: boolean
    description: "Mute state. Set via setAudioMute."

  - id: power_status
    type: boolean
    description: "Power state. true=on, false=off. Set via setPowerStatus."

  - id: power_saving_mode
    type: enum
    values: ["off", "low", "high", "pictureOff"]
    description: "Power saving mode. Set via setPowerSavingMode."

  - id: scene_setting
    type: enum
    values: ["auto", "auto24pSync", "general"]
    description: "Scene setting. Set via setSceneSetting."

  - id: led_mode
    type: enum
    values: ["Demo", "AutoBrightnessAdjust", "Dark", "SimpleResponse", "Off"]
    description: "LED indicator mode. Set via setLEDIndicatorStatus."

  - id: wol_enabled
    type: boolean
    description: "Wake-on-LAN enabled. Set via setWolMode."

  - id: screen_rotation
    type: integer
    values: [0, 90, 180, 270]
    description: "Screen rotation. Set via setScreenRotation."

  - id: picture_quality
    type: object
    description: "Picture quality targets (color, brightness, contrast, etc.). Set via setPictureQualitySettings."

  - id: sound_settings
    type: object
    description: "Sound settings (outputTerminal). Set via setSoundSettings."

  - id: speaker_settings
    type: object
    description: "Speaker settings (tvPosition, subwooferLevel, etc.). Set via setSpeakerSettings."

Events

# UNRESOLVED: source documents notification APIs in getSupportedApiInfo response structure
# but does not enumerate specific notification events or their schemas.

Macros

# App upload and install sequence from source:
# 1. prepareAppUpload → get assetId
# 2. POST APK to http://{ip}/sony/appupload/{assetId} with PSK in header
# 3. installApp with assetId
# Timeout: assetId expires after 5 minutes of inactivity.

Safety

confirmation_required_for:
  - requestReboot
  - setPowerStatus
interlocks:
  - "setPowerStatus(power on) only works in Sleep mode with Remote start enabled."
  - "getScreenshot requires device in power-on state; returns error if display off or screen saver active."
# UNRESOLVED: no explicit safety warnings or interlock procedures found in source

Notes

  • All API calls use JSON-RPC over HTTP POST to http://{ip}/sony/{service} endpoint.
  • Request format: {"method": "...", "id": N, "params": [...], "version": "X.Y"}.
  • Three authentication levels per API: none (no PSK), generic (PSK required), private (PSK required).
  • Some APIs (prepareAppUpload, installApp, uninstallApp, getScreenshot, getScreenRotation, setScreenRotation) are localhost-only (127.0.0.1).
  • getRemoteControllerInfo returns IRCC base64 codes for remote control button emulation via separate IRCC endpoint (not documented in this source).
  • Volume range is 0-100 based on response examples (minVolume=0, maxVolume=100).
  • Content URI scheme: extInput:hdmi?port=N, extInput:component?port=N, extInputs:cec?type=...&port=N.

Provenance

source_domains:
  - pro-bravia.sony.net
source_urls:
  - https://pro-bravia.sony.net/remote-display-control/rest-api/reference/
  - https://pro-bravia.sony.net/remote-display-control/simple-ip-control/
  - https://pro-bravia.sony.net/remote-display-control/ircc-ip/
  - https://pro-bravia.sony.net/remote-display-control/serial-control/
  - https://pro-bravia.sony.net/remote-display-control/serial-control/command/
retrieved_at: 2026-05-27T15:15:11.753Z
last_checked_at: 2026-05-31T22:40:37.732Z

Verification Summary

verdict: verified
checked_at: 2026-05-31T22:40:37.732Z
matched_actions: 47
action_count: 47
confidence: medium
summary: "All 47 spec actions match verbatim JSON-RPC method names in the source with correct shapes and parameters; transport base_url and PSK auth confirmed. (8 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "port number not stated in source"
- "firmware version compatibility not stated in source"
- "source documents notification APIs in getSupportedApiInfo response structure"
- "no explicit safety warnings or interlock procedures found in source"
- "firmware version compatibility not stated"
- "IRCC endpoint for sending remote control codes referenced but not documented"
- "notification/websocket event subscription mechanism not documented"
- "maximum concurrent connection limit not specified"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0