Summary

The Sony FWBA35 series is Sony's professional BRAVIA display line (43"/50"/55"/65"/75"/85") for digital-signage and commercial installations. This spec covers the IP control surface documented at pro-bravia.sony.net/remote-display-control/rest-api/, which is shared across the BRAVIA Pro family (BA35, BZ40L/BZ35L/BZ30L, BZ40P/BZ35P/BZ30P, BZ35J, BZ35F, etc.). The control protocol is JSON-RPC 2.0 over HTTP (and WebSocket for some videoScreen calls; Bluetooth SPP on videoScreen.getSceneSetting), with three authentication levels: none, generic, and private. A pre-shared key (PSK) is required in the HTTP header for generic and private calls.

Transport

protocols:
  - http
  # WebSocket and Bluetooth SPP transports are documented only for specific
  # endpoints (videoScreen.getSceneSetting / setSceneSetting list both http,
  # ws and Bluetooth SPP). They are not used for the rest of the API surface.
addressing:
  base_url: "/"          # source uses http://<Base URL>/<service>; host = display IP
  port: 80               # UNRESOLVED: source never states a port; 80 is the HTTP default, mark unresolved
auth:
  type: pre_shared_key   # source: "PSK information must be included in the POST header"
  # per-method authentication level: "none" | "generic" | "private"
  # - none     : open (no header)
  # - generic  : PSK header required
  # - private  : PSK header + session handshake
  notes: "Some endpoints (e.g. getRemoteControllerInfo) require a registered client key first. Per-endpoint auth levels are recorded in the Actions section."

Traits

- powerable       # setPowerStatus, getPowerStatus
- queryable       # many getXxx APIs return state
- routable        # setPlayContent, getCurrentExternalInputsStatus, getSourceList
- levelable       # setAudioVolume, setPictureQualitySettings
- app_launchable  # setActiveApp, prepareAppUpload, installApp
- screencastable  # getScreenshot, setScreenRotation
- encryptable     # getPublicKey, encrypted encKey field

Actions

# Service: guide
- id: getSupportedApiInfo
  label: Get Supported API Info (guide)
  kind: query
  service: guide
  command: "POST http://<host>{port}/guide  body: {\"method\":\"getSupportedApiInfo\",\"id\":5,\"params\":[{\"services\":[\"system\",\"avContent\"]}],\"version\":\"1.0\"}"
  auth_level: none
  params:
    - name: services
      type: string-array
      description: 'Service names to query. null/empty = all services.'

# Service: appControl
- id: prepareAppUpload
  label: Prepare App Upload (BZxxx only, localhost)
  kind: action
  service: appControl
  command: "POST http://127.0.0.1{port}/appControl  body: {\"method\":\"prepareAppUpload\",\"id\":104,\"params\":[],\"version\":\"1.0\"}"
  auth_level: generic
  notes: "BZxxx series (PKG 6.2512+, generation 5.7.0+), localhost only."

- id: uninstallApp
  label: Uninstall App (BZxxx only, localhost)
  kind: action
  service: appControl
  command: "POST http://127.0.0.1{port}/appControl  body: {\"method\":\"uninstallApp\",\"id\":106,\"params\":[{\"packageName\":\"com.sony.dtv.b2b.sample\"}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: packageName
      type: string
  notes: "BZxxx series (PKG 6.2512+, generation 5.7.0+), localhost only."

- id: installApp
  label: Install App (BZxxx only, localhost)
  kind: action
  service: appControl
  command: "POST http://127.0.0.1{port}/appControl  body: {\"method\":\"installApp\",\"id\":105,\"params\":[{\"assetId\":\"<assetId>\",\"afterInstallAction\":\"startApplication\",\"uri\":\"android-app://com.sony.dtv.b2b.sample\"}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: assetId
      type: string
    - name: afterInstallAction
      type: string
      description: '"startApplication" or omitted'
    - name: uri
      type: string
  notes: "BZxxx series (PKG 6.2512+, generation 5.7.0+), localhost only."

- id: getTextForm_v1_1
  label: Get Text Form (software keyboard, v1.1)
  kind: query
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"getTextForm\",\"id\":60,\"params\":[{}],\"version\":\"1.1\"}"
  auth_level: private
  notes: "BZ40P/BZ35P/BZ30P: Japan only. Other models: Japan and EU."

- id: setTextForm_v1_1
  label: Set Text Form (software keyboard, v1.1, encrypted)
  kind: action
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"setTextForm\",\"id\":601,\"params\":[{\"encKey\":\"<rsa-encrypted-key>\",\"text\":\"<utf8-or-encrypted>\"}],\"version\":\"1.1\"}"
  auth_level: generic
  notes: "BZ40P/BZ35P/BZ30P: Japan only. Other models: Japan and EU."

- id: setTextForm_v1_0
  label: Set Text Form (software keyboard, v1.0, plaintext)
  kind: action
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"setTextForm\",\"id\":601,\"params\":[\"hello world!!\"],\"version\":\"1.0\"}"
  auth_level: generic
  notes: "BZ40P/BZ35P/BZ30P: Japan only. Other models: Japan and EU."

- id: terminateApps
  label: Terminate All Apps
  kind: action
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"terminateApps\",\"id\":55,\"params\":[],\"version\":\"1.0\"}"
  auth_level: generic

- id: setActiveApp
  label: Launch Application
  kind: action
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"setActiveApp\",\"id\":601,\"params\":[{\"uri\":\"localapp://webappruntime?url=http%3A%2F%2Fexample.com%2F\"}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: uri
      type: string
      description: 'localapp://webappruntime?url= / ?manifest= / ?auid='

- id: getApplicationList
  label: Get Application List
  kind: query
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"getApplicationList\",\"id\":60,\"params\":[],\"version\":\"1.0\"}"
  auth_level: private

- id: getWebAppStatus
  label: Get WebApp Status
  kind: query
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"getWebAppStatus\",\"id\":1,\"params\":[],\"version\":\"1.0\"}"
  auth_level: private

- id: getApplicationStatusList
  label: Get Application Status List
  kind: query
  service: appControl
  command: "POST http://<host>{port}/appControl  body: {\"method\":\"getApplicationStatusList\",\"id\":55,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

# Service: audio
- id: setAudioVolume_v1_0
  label: Set Audio Volume (v1.0)
  kind: action
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"setAudioVolume\",\"id\":601,\"params\":[{\"volume\":\"18\",\"target\":\"speaker\"}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: target
      type: string
      description: '"" | "speaker" | "headphone"'
    - name: volume
      type: string
      description: '"N" (set), "+N" (increase), "-N" (decrease) as string'

- id: getSpeakerSettings
  label: Get Speaker Settings
  kind: query
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"getSpeakerSettings\",\"id\":67,\"params\":[{\"target\":\"tvPosition\"}],\"version\":\"1.0\"}"
  auth_level: none
  notes: "BZ40P/BZ35P/BZ30P: not supported."

- id: getVolumeInformation
  label: Get Volume Information
  kind: query
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"getVolumeInformation\",\"id\":33,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: setAudioMute
  label: Set Audio Mute
  kind: action
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"setAudioMute\",\"id\":601,\"params\":[{\"status\":true}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: status
      type: boolean

- id: setAudioVolume_v1_2
  label: Set Audio Volume (v1.2)
  kind: action
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"setAudioVolume\",\"id\":98,\"params\":[{\"volume\":\"5\",\"ui\":\"on\",\"target\":\"speaker\"}],\"version\":\"1.2\"}"
  auth_level: generic
  params:
    - name: target
      type: string
    - name: volume
      type: string
    - name: ui
      type: string
      description: '"on" | "off" | null'

- id: setSoundSettings
  label: Set Sound Settings
  kind: action
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"setSoundSettings\",\"id\":5,\"params\":[{\"settings\":[{\"value\":\"speaker\",\"target\":\"outputTerminal\"}]}],\"version\":\"1.1\"}"
  auth_level: generic
  params:
    - name: settings
      type: object-array
      description: 'Array of {target, value}; target: "outputTerminal"; value: "speaker"|"speaker_hdmi"|"hdmi"|"audioSystem"'

- id: setSpeakerSettings
  label: Set Speaker Settings
  kind: action
  service: audio
  command: "POST http://<host>{port}/audio  body: {\"method\":\"setSpeakerSettings\",\"id\":62,\"params\":[{\"settings\":[{\"value\":\"wallMount\",\"target\":\"tvPosition\"}]}],\"version\":\"1.0\"}"
  auth_level: generic
  notes: "BZ40P/BZ35P/BZ30P: not supported."

# Service: avContent
- id: setPlayContent
  label: Set Play Content (switch input)
  kind: action
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"setPlayContent\",\"id\":101,\"params\":[{\"uri\":\"extInput:hdmi?port=2\"}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: uri
      type: string
      description: 'e.g. extInput:hdmi?port=2'

- id: getCurrentExternalInputsStatus_v1_1
  label: Get Current External Inputs Status (v1.1)
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getCurrentExternalInputsStatus\",\"id\":105,\"params\":[],\"version\":\"1.1\"}"
  auth_level: none

- id: getCurrentExternalInputsStatus_v1_0
  label: Get Current External Inputs Status (v1.0)
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getCurrentExternalInputsStatus\",\"id\":105,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: getPlayingContentInfo
  label: Get Playing Content Info
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getPlayingContentInfo\",\"id\":103,\"params\":[],\"version\":\"1.0\"}"
  auth_level: private

- id: getContentCount_v1_0
  label: Get Content Count (v1.0)
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getContentCount\",\"id\":11,\"params\":[{\"source\":\"extInput:hdmi\"}],\"version\":\"1.0\"}"
  auth_level: private

- id: getContentCount_v1_1
  label: Get Content Count (v1.1)
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getContentCount\",\"id\":11,\"params\":[{\"source\":\"extInput:hdmi\"}],\"version\":\"1.1\"}"
  auth_level: private

- id: getContentList_v1_5
  label: Get Content List (v1.5)
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getContentList\",\"id\":88,\"params\":[{\"stIdx\":0,\"cnt\":50,\"uri\":\"extInput:hdmi\"}],\"version\":\"1.5\"}"
  auth_level: private

- id: getSchemeList
  label: Get Scheme List
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getSchemeList\",\"id\":1,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: getSourceList
  label: Get Source List
  kind: query
  service: avContent
  command: "POST http://<host>{port}/avContent  body: {\"method\":\"getSourceList\",\"id\":1,\"params\":[{\"scheme\":\"extInput\"}],\"version\":\"1.0\"}"
  auth_level: none

# Service: encryption
- id: getPublicKey
  label: Get RSA Public Key
  kind: query
  service: encryption
  command: "POST http://<host>{port}/encryption  body: {\"method\":\"getPublicKey\",\"id\":1,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

# Service: system
- id: getScreenshot
  label: Get Screenshot (BZxxx, localhost)
  kind: query
  service: system
  command: "POST http://127.0.0.1{port}/system  body: {\"method\":\"getScreenshot\",\"id\":51,\"params\":[{\"plane\":\"video\"}],\"version\":\"1.0\"}"
  auth_level: private
  notes: "BZxxx series (PKG 6.2512+, generation 5.7.0+), localhost only."

- id: setPowerSavingMode
  label: Set Power Saving Mode
  kind: action
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"setPowerSavingMode\",\"id\":52,\"params\":[{\"mode\":\"pictureOff\"}],\"version\":\"1.0\"}"
  auth_level: generic
  params:
    - name: mode
      type: string
      description: '"off" | "low" | "high" | "pictureOff"'

- id: getCurrentTime_v1_0
  label: Get Current Time (v1.0)
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getCurrentTime\",\"id\":51,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: getCurrentTime_v1_1
  label: Get Current Time (v1.1, with TZ/DST)
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getCurrentTime\",\"id\":51,\"params\":[],\"version\":\"1.1\"}"
  auth_level: none

- id: getNetworkSettings
  label: Get Network Settings
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getNetworkSettings\",\"id\":2,\"params\":[{\"netif\":\"eth0\"}],\"version\":\"1.0\"}"
  auth_level: generic

- id: getInterfaceInformation
  label: Get Interface Information
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getInterfaceInformation\",\"id\":33,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: getRemoteDeviceSettings
  label: Get Remote Device Settings
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getRemoteDeviceSettings\",\"id\":44,\"params\":[{\"target\":\"accessPermission\"}],\"version\":\"1.0\"}"
  auth_level: none

- id: getLEDIndicatorStatus
  label: Get LED Indicator Status
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getLEDIndicatorStatus\",\"id\":45,\"params\":[],\"version\":\"1.0\"}"
  auth_level: generic

- id: getPowerSavingMode
  label: Get Power Saving Mode
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getPowerSavingMode\",\"id\":51,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: getPowerStatus
  label: Get Power Status
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getPowerStatus\",\"id\":50,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none
  notes: "Some devices may not respond when in power-off state."

- id: getRemoteControllerInfo
  label: Get Remote Controller Info (IRCC codes)
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getRemoteControllerInfo\",\"id\":54,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none
  notes: "Returns IRCC base64 codes for each remote button (Power, Home, VolumeUp, ...)."

- id: getSystemInformation_v1_0
  label: Get System Information (v1.0)
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getSystemInformation\",\"id\":33,\"params\":[],\"version\":\"1.0\"}"
  auth_level: private

- id: getSystemInformation_v1_7
  label: Get System Information (v1.7, with FW/Pro mode)
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getSystemInformation\",\"id\":33,\"params\":[],\"version\":\"1.7\"}"
  auth_level: private

- id: getSystemSupportedFunction
  label: Get System Supported Function (e.g. WOL)
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getSystemSupportedFunction\",\"id\":55,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none

- id: getWolMode
  label: Get Wake-on-LAN Mode
  kind: query
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"getWolMode\",\"id\":50,\"params\":[],\"version\":\"1.0\"}"
  auth_level: generic

- id: requestReboot
  label: Request Reboot
  kind: action
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"requestReboot\",\"id\":10,\"params\":[],\"version\":\"1.0\"}"
  auth_level: generic

- id: setLEDIndicatorStatus
  label: Set LED Indicator Status
  kind: action
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"setLEDIndicatorStatus\",\"id\":53,\"params\":[{\"mode\":\"Demo\",\"status\":\"true\"}],\"version\":\"1.1\"}"
  auth_level: generic

- id: setPowerStatus
  label: Set Power Status
  kind: action
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"setPowerStatus\",\"id\":55,\"params\":[{\"status\":false}],\"version\":\"1.0\"}"
  auth_level: generic
  notes: "Power-on request is supported only in 'Sleep' mode. If Remote Start setting is OFF, power-on returns an error."

- id: setWolMode
  label: Set Wake-on-LAN Mode
  kind: action
  service: system
  command: "POST http://<host>{port}/system  body: {\"method\":\"setWolMode\",\"id\":55,\"params\":[{\"enabled\":false}],\"version\":\"1.0\"}"
  auth_level: generic

# Service: video
- id: getScreenRotation
  label: Get Screen Rotation (BZxxx, localhost)
  kind: query
  service: video
  command: "POST http://127.0.0.1{port}/video  body: {\"method\":\"getScreenRotation\",\"id\":52,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none
  notes: "BZxxx series (PKG 6.2512+, generation 5.7.0+), localhost only."

- id: setScreenRotation
  label: Set Screen Rotation (BZxxx, localhost)
  kind: action
  service: video
  command: "POST http://127.0.0.1{port}/video  body: {\"method\":\"setScreenRotation\",\"id\":53,\"params\":[{\"rotation\":0}],\"version\":\"1.0\"}"
  auth_level: generic
  notes: "BZxxx series (PKG 6.2512+, generation 5.7.0+), localhost only."

- id: getPictureQualitySettings_v1_0
  label: Get Picture Quality Settings (v1.0)
  kind: query
  service: video
  command: "POST http://<host>{port}/video  body: {\"method\":\"getPictureQualitySettings\",\"id\":52,\"params\":[{\"target\":\"color\"}],\"version\":\"1.0\"}"
  auth_level: none

- id: getPictureQualitySettings_v1_1
  label: Get Picture Quality Settings (v1.1)
  kind: query
  service: video
  command: "POST http://<host>{port}/video  body: {\"method\":\"getPictureQualitySettings\",\"id\":52,\"params\":[{\"target\":\"color\"}],\"version\":\"1.1\"}"
  auth_level: none

- id: setPictureQualitySettings_v1_0
  label: Set Picture Quality Settings (v1.0)
  kind: action
  service: video
  command: "POST http://<host>{port}/video  body: {\"method\":\"setPictureQualitySettings\",\"id\":12,\"params\":[{\"settings\":[{\"value\":\"2\",\"target\":\"color\"}]}],\"version\":\"1.0\"}"
  auth_level: generic

- id: setPictureQualitySettings_v1_1
  label: Set Picture Quality Settings (v1.1, multi-target)
  kind: action
  service: video
  command: "POST http://<host>{port}/video  body: {\"method\":\"setPictureQualitySettings\",\"id\":12,\"params\":[{\"settings\":[{\"value\":\"2\",\"target\":\"contentType\"},{\"value\":\"standard\",\"target\":\"pictureMode\"},{\"value\":\"50\",\"target\":\"brightness\"},{\"value\":\"50\",\"target\":\"color\"}]}],\"version\":\"1.1\"}"
  auth_level: generic
  notes: "hdmiSignalFormat / hdmiSignalFormatVrr must be one-target-per-request to avoid failures."

# Service: videoScreen
- id: getSceneSetting
  label: Get Scene Setting
  kind: query
  service: videoScreen
  command: "POST http://<host>{port}/videoScreen  body: {\"method\":\"getSceneSetting\",\"id\":79,\"params\":[],\"version\":\"1.0\"}"
  auth_level: none
  notes: "Also reachable via ws:// and Bluetooth SPP. BZ40P/BZ35P/BZ30P: not supported."

- id: setSceneSetting
  label: Set Scene Setting
  kind: action
  service: videoScreen
  command: "POST http://<host>{port}/videoScreen  body: {\"method\":\"setSceneSetting\",\"id\":40,\"params\":[{\"value\":\"auto\"}],\"version\":\"1.0\"}"
  auth_level: generic
  notes: "BZ40P/BZ35P/BZ30P: not supported."

Feedbacks

- id: power_status
  type: enum
  values: [standby, active]
- id: volume
  type: integer
  range: [0, 100]   # maxVolume/minVolume reported by getVolumeInformation
- id: mute
  type: boolean
- id: current_time
  type: string
  description: ISO 8601 (v1.0) or {dateTime, timeZoneOffsetMinute, dstOffsetMinute} (v1.1)
- id: led_indicator_mode
  type: enum
  values: [Demo, AutoBrightnessAdjust, Dark, SimpleResponse, Off]
- id: led_indicator_status
  type: enum
  values: ["true", "false", "null"]
- id: power_saving_mode
  type: enum
  values: [off, low, high, pictureOff]
- id: input_status
  type: object
  description: Array of {uri, title, connection, label, icon, status} from getCurrentExternalInputsStatus v1.1
- id: playing_content
  type: object
  description: {uri, source, title} from getPlayingContentInfo
- id: volume_information
  type: object
  description: Array of {target, volume, mute, maxVolume, minVolume} from getVolumeInformation
- id: speaker_settings
  type: object
  description: Array of {target, currentValue} from getSpeakerSettings (tvPosition/subwooferLevel/subwooferFreq/subwooferPhase/subwooferPower)
- id: picture_quality_settings
  type: object
  description: Array of {target, currentValue, isAvailable, candidate[]} from getPictureQualitySettings
- id: scene_setting
  type: object
  description: {currentValue, candidate[]} from getSceneSetting (auto | auto24pSync | general)
- id: remote_access_permission
  type: enum
  values: [on, off]    # from getRemoteDeviceSettings.accessPermission
- id: wol_mode
  type: boolean
- id: network_settings
  type: object-array
  description: Array of {netif, hwAddr, ipAddrV4, ipAddrV6, netmask, gateway, dns[]} from getNetworkSettings
- id: system_information
  type: object
  description: getSystemInformation result; v1.7 adds fwVersion, androidOs, webAppRuntimeVersion, mode (Normal|ProSettings|Pro)
- id: remote_controller_info
  type: object
  description: {bundled, type} + array of {name, value} where value is the IRCC base64 code
- id: application_list
  type: object-array
  description: [{title, uri, icon}] from getApplicationList
- id: webapp_status
  type: object
  description: {active:bool, url} from getWebAppStatus
- id: application_status_list
  type: object-array
  description: [{name, status}] where name in {textInput, cursorDisplay, webBrowse} and status in {on, off}
- id: screenshot_data
  type: string
  description: Base64-encoded 320x180 / 1920x1080 jpeg from getScreenshot
- id: public_key
  type: string
  description: RSA public key (PEM-like) from getPublicKey
- id: content_list
  type: object-array
  description: Array of {uri, title, index} from getContentList
- id: content_count
  type: integer
- id: scheme_list
  type: string-array
- id: source_list
  type: string-array
- id: supported_api_info
  type: object-array
  description: getSupportedApiInfo result: [{service, protocols, apis:[{name, versions:[{version, protocols?, authLevel?}]}], notifications?}]
- id: screen_rotation
  type: integer
  values: [0, 90, 180, 270]

Variables

# Per-endpoint settable enums / ranges. Values are sourced from the parameter
# tables in the source; the display enforces device-specific minimums/maximums.
- id: audio_volume
  type: integer
  range_source: getVolumeInformation.maxVolume / minVolume
  description: 'setAudioVolume accepts "N" | "+N" | "-N" as string'
- id: audio_mute
  type: boolean
- id: output_terminal
  type: enum
  values: [speaker, speaker_hdmi, hdmi, audioSystem]
- id: speaker_setting
  type: enum
  description: |
    Per target:
      tvPosition:     [tableTop, wallMount]
      subwooferLevel:  0..24 (step 1)
      subwooferFreq:   0..30 (step 1)
      subwooferPhase:  [normal, reverse]
      subwooferPower:  [on, off]
- id: picture_quality_target
  type: enum
  values: [color, brightness, contrast, sharpness, pictureMode, lightSensor, colorSpace, colorTemperature, autoPictureMode, hdrMode, autoLocalDimming, xtendedDynamicRange, contentType]
- id: scene_setting_value
  type: enum
  values: [auto, auto24pSync, general]
- id: led_indicator_mode
  type: enum
  values: [Demo, AutoBrightnessAdjust, Dark, SimpleResponse, Off]
- id: power_saving_mode_value
  type: enum
  values: [off, low, high, pictureOff]
- id: screen_rotation_value
  type: enum
  values: [0, 90, 180, 270]
- id: screen_rotation
  type: integer
  values: [0, 90, 180, 270]
- id: external_input_uri
  type: string
  description: 'e.g. extInput:hdmi?port=1, extInput:component?port=1, extInput:cec?type=player&port=1, extInput:widi'
- id: app_uri
  type: string
  description: 'setActiveApp accepts localapp://webappruntime?url= | ?manifest= | ?auid='
- id: wol_mode
  type: boolean
- id: led_status
  type: enum
  values: ["true", "false", "null"]

Events

# The source mentions WebSocket / Bluetooth SPP for videoScreen service and
# error responses are synchronous, but the source also describes
# "notifications" inside getSupportedApiInfo. The source does not document
# specific unsolicited event payloads, so event shape is UNRESOLVED.
# No action required: clients poll getXxx endpoints. Source does mention
# "Long Polling timeout" error 40000 implying long-poll is supported but the
# exact event surface is not enumerated.

Macros

# Source documents an explicit app upload + install flow in appControl:
- id: app_upload_and_install
  label: Upload and Install APK
  steps:
    - action: prepareAppUpload
      note: get assetId (UUIDv4, expires after 5 minutes)
    - action: http_post
      target: "http://{display_ip}/sony/appupload/{assetId}"
      note: POST the APK file (PSK in header)
    - action: installApp
      params:
        assetId: "<from step 1>"
        afterInstallAction: "startApplication"
        uri: "android-app://<package>"
  notes: "Documented in source 'Appendix 1: The application upload and install process'."

Safety

confirmation_required_for:
  - requestReboot          # reboots the display
  - setPowerStatus true    # powers on, requires Sleep mode + Remote Start ON
  - installApp             # installs APK; long-lived system change
  - uninstallApp
interlocks:
  - "setPowerStatus(true) is rejected unless device is in Sleep mode and Remote Start (Settings > Network) is ON."
  - "prepareAppUpload / installApp / uninstallApp / getScreenshot / setScreenRotation / getScreenRotation are BZxxx-only and localhost-only."
  - "setTextForm / getTextForm (appControl) are BZ40P/BZ35P/BZ30P: Japan only; other models: Japan + EU."
  - "getSpeakerSettings / setSpeakerSettings / getSceneSetting / setSceneSetting are not supported on BZ40P/BZ35P/BZ30P."
# UNRESOLVED: explicit electrical / mechanical safety warnings (voltage, mounting) are not in this REST API reference.

Notes

Source document is the Sony Pro BRAVIA REST API reference (pro-bravia.sony.net/remote-display-control/rest-api/reference), covering BA35 / BZ40L / BZ35L / BZ30L / BZ35J / BZ35F and the JP-only BZ40P/BZ35P/BZ30P lines. The BA35 series is the EU/Asia BRAVIA Pro line; the protocol is shared with the BZ-series and is JSON-RPC 2.0 over HTTP. Authentication is per-endpoint (none / generic / private) using a PSK in the HTTP header. Some endpoints explicitly require localhost (127.0.0.1) and firmware PKG 6.2512+ / generation 5.7.0+ — these are BZxxx-only and may not apply to BA35; check firmware generation via getSystemInformation before invoking them.

IRCC codes for the supplied remote are returned by getRemoteControllerInfo (base64-encoded). Use setPlayContent with extInput:hdmi?port=N to switch inputs.

Error model: HTTP 200 with JSON-RPC error array [code, "reason phrase"]. System codes 0-32767; user codes 32768-65535. Per-service ranges enumerated at the bottom of the source (system 40200-40399, videoScreen 40600-40799, audio 40800-40899, avContent 41000-41099, appControl 41400-41499, encryption 42400-42499).

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/serial-control/command
  - https://pro-bravia.sony.net/remote-display-control/serial-control
  - https://pro-bravia.sony.net/remote-display-control/ircc-ip
retrieved_at: 2026-06-12T04:25:41.568Z
last_checked_at: 2026-06-12T19:44:57.886Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T19:44:57.886Z
matched_actions: 56
action_count: 56
confidence: medium
summary: "All 56 spec actions matched exactly to source JSON-RPC method entries with correct versions, params, and transport parameters confirmed. (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "BA35-specific PKG / generation firmware support is not stated in the source. APIs that are explicit \"BZxxx series only\" or \"BZ40P/BZ35P/BZ30P only\" are marked as such below."
- "source never states a port; 80 is the HTTP default, mark unresolved"
- "explicit electrical / mechanical safety warnings (voltage, mounting) are not in this REST API reference."
- "HTTP port number is not stated in source; defaulting to 80 is an assumption, mark as unresolved."
- "BA35-specific PKG / generation firmware coverage is not stated; only BZxxx and BZ40P/BZ35P/BZ30P coverage is explicit in source."
- "No serial (RS-232 / SDCP) commands are in this source. The recovery notes mention RS-232 ports exist on Sony TVs but the SDCP/IRCC reference is a separate document not refined here."

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