Summary

JSON-RPC-over-HTTP REST API reference for Sony BRAVIA Professional Displays. Each method lives under http://<Base URL>/<service> where service is one of guide, appControl, audio, avContent, encryption, system, video, videoScreen. Requests are JSON objects with method, id, params, version; responses carry result (or error) and the same id. Authentication is by per-method authLevel (none / generic / private) rather than connection credentials.

Transport

protocols:
  - http
addressing:
  base_url: "http://<Base URL>/<service>"  # source: every API block; <Base URL> is placeholder
  # UNRESOLVED: port not stated in source (no explicit port number anywhere)
  # UNRESOLVED: https support not stated in source; all examples use http://
auth:
  type: none  # inferred: source shows per-method authLevel labels (none/generic/private), no connection auth or login procedure

Traits

- powerable       # inferred from setPowerStatus / getPowerStatus / setPowerSavingMode
- routable        # inferred from setPlayContent / getCurrentExternalInputsStatus / getSourceList
- queryable       # inferred from getPowerStatus / getVolumeInformation / getSystemInformation / etc.
- levelable       # inferred from setAudioVolume / setAudioMute / setPictureQualitySettings

Actions

- id: guide_getSupportedApiInfo
  label: Get Supported API Info (v1.0)
  kind: query
  command: '{"method":"getSupportedApiInfo","id":5,"params":[{"services":["system","avContent"]}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/guide", method: POST, content_type: "application/json" }
  params:
    - name: services
      type: string-array
      description: Service names to fetch API info for; null/empty = all

- id: appControl_prepareAppUpload
  label: Prepare App Upload (v1.0) [FW-BZxxx only, localhost]
  kind: action
  command: '{"method":"prepareAppUpload","id":104,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  notes: "FW-BZxxx series, PKG 6.2512+ / gen 5.7.0+; localhost only. Returns assetId (UUIDv4, 5 min TTL)."

- id: appControl_uninstallApp
  label: Uninstall App (v1.0) [FW-BZxxx only, localhost]
  kind: action
  command: '{"method":"uninstallApp","id":106,"params":[{"packageName":"com.sony.dtv.b2b.sample"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  params:
    - name: packageName
      type: string
      required: true

- id: appControl_installApp
  label: Install App (v1.0) [FW-BZxxx only, localhost]
  kind: action
  command: '{"method":"installApp","id":105,"params":[{"assetId":"1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed","afterInstallAction":"startApplication","uri":"android-app://com.sony.dtv.b2b.sample"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  params:
    - name: assetId
      type: string
      required: true
    - name: afterInstallAction
      type: string
      description: "e.g. startApplication"
    - name: uri
      type: string
      description: "android-app:// scheme"

- id: appControl_getTextForm_v1_1
  label: Get Text Form (v1.1, encrypted)
  kind: query
  command: '{"method":"getTextForm","id":60,"params":[{}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  params:
    - name: encKey
      type: string
      description: "RSA-encrypted AES key; default empty"

- id: appControl_setTextForm_v1_1
  label: Set Text Form (v1.1, encrypted)
  kind: action
  command: '{"method":"setTextForm","id":601,"params":[{"encKey":"<RSA-encrypted key>","text":"<ciphertext>"}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  params:
    - name: encKey
      type: string
      required: true
    - name: text
      type: string
      required: true
      description: "UTF-8 text; if encKey set, must be encrypted"

- id: appControl_setTextForm_v1_0
  label: Set Text Form (v1.0, plain)
  kind: action
  command: '{"method":"setTextForm","id":601,"params":["hello world!!"],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  params:
    - name: text
      type: string
      required: true
      description: "UTF-8 text"

- id: appControl_terminateApps
  label: Terminate All Apps (v1.0)
  kind: action
  command: '{"method":"terminateApps","id":55,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }

- id: appControl_setActiveApp
  label: Set Active App (v1.0)
  kind: action
  command: '{"method":"setActiveApp","id":601,"params":[{"uri":"localapp://webappruntime?url=http%3A%2F%2Fexample.com%2F"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }
  params:
    - name: uri
      type: string
      required: true
      description: "localapp://webappruntime?url=... or ?manifest=... or ?auid=..."

- id: appControl_getApplicationList
  label: Get Application List (v1.0)
  kind: query
  command: '{"method":"getApplicationList","id":60,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }

- id: appControl_getWebAppStatus
  label: Get WebApp Status (v1.0)
  kind: query
  command: '{"method":"getWebAppStatus","id":1,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }

- id: appControl_getApplicationStatusList
  label: Get Application Status List (v1.0)
  kind: query
  command: '{"method":"getApplicationStatusList","id":55,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/appControl", method: POST, content_type: "application/json" }

- id: audio_setAudioVolume_v1_0
  label: Set Audio Volume (v1.0)
  kind: action
  command: '{"method":"setAudioVolume","id":601,"params":[{"volume":"18","target":"speaker"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }
  params:
    - name: target
      type: string
      required: true
      description: '""=all, "speaker", "headphone"'
    - name: volume
      type: string
      required: true
      description: '"N" absolute, "+N" / "-N" relative'

- id: audio_getSpeakerSettings
  label: Get Speaker Settings (v1.0) [not BZ40P/BZ35P/BZ30P]
  kind: query
  command: '{"method":"getSpeakerSettings","id":67,"params":[{"target":"tvPosition"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }
  params:
    - name: target
      type: string
      description: '""=all, "tvPosition", "subwooferLevel", "subwooferFreq", "subwooferPhase", "subwooferPower"'

- id: audio_getVolumeInformation
  label: Get Volume Information (v1.0)
  kind: query
  command: '{"method":"getVolumeInformation","id":33,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }

- id: audio_setAudioMute
  label: Set Audio Mute (v1.0)
  kind: action
  command: '{"method":"setAudioMute","id":601,"params":[{"status":true}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }
  params:
    - name: status
      type: boolean
      required: true

- id: audio_setAudioVolume_v1_2
  label: Set Audio Volume (v1.2)
  kind: action
  command: '{"method":"setAudioVolume","id":98,"params":[{"volume":"5","ui":"on","target":"speaker"}],"version":"1.2"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }
  params:
    - name: target
      type: string
      required: true
    - name: volume
      type: string
      required: true
    - name: ui
      type: string
      description: '"on" / "off" / null'

- id: audio_setSoundSettings
  label: Set Sound Settings (v1.1)
  kind: action
  command: '{"method":"setSoundSettings","id":5,"params":[{"settings":[{"value":"speaker","target":"outputTerminal"}]}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }
  params:
    - name: settings
      type: object-array
      required: true
      description: "target/value pairs; e.g. outputTerminal: speaker/speaker_hdmi/hdmi/audioSystem"

- id: audio_setSpeakerSettings
  label: Set Speaker Settings (v1.0) [not BZ40P/BZ35P/BZ30P]
  kind: action
  command: '{"method":"setSpeakerSettings","id":62,"params":[{"settings":[{"value":"wallMount","target":"tvPosition"}]}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/audio", method: POST, content_type: "application/json" }
  params:
    - name: settings
      type: object-array
      required: true

- id: avContent_setPlayContent
  label: Set Play Content (v1.0)
  kind: action
  command: '{"method":"setPlayContent","id":101,"params":[{"uri":"extInput:hdmi?port=2"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }
  params:
    - name: uri
      type: string
      required: true
      description: "extInput:hdmi?port=N, etc. (URI from getContentList)"

- id: avContent_getCurrentExternalInputsStatus_v1_1
  label: Get Current External Inputs Status (v1.1)
  kind: query
  command: '{"method":"getCurrentExternalInputsStatus","id":105,"params":[],"version":"1.1"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }

- id: avContent_getCurrentExternalInputsStatus_v1_0
  label: Get Current External Inputs Status (v1.0)
  kind: query
  command: '{"method":"getCurrentExternalInputsStatus","id":105,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }

- id: avContent_getPlayingContentInfo
  label: Get Playing Content Info (v1.0)
  kind: query
  command: '{"method":"getPlayingContentInfo","id":103,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }

- id: avContent_getContentCount_v1_0
  label: Get Content Count (v1.0)
  kind: query
  command: '{"method":"getContentCount","id":11,"params":[{"source":"extInput:hdmi"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }
  params:
    - name: source
      type: string
      required: true
    - name: type
      type: string
      description: "default empty"

- id: avContent_getContentCount_v1_1
  label: Get Content Count (v1.1)
  kind: query
  command: '{"method":"getContentCount","id":11,"params":[{"source":"extInput:hdmi"}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }
  params:
    - name: source
      type: string
      required: true
    - name: type
      type: string
    - name: target
      type: string

- id: avContent_getContentList_v1_5
  label: Get Content List (v1.5)
  kind: query
  command: '{"method":"getContentList","id":88,"params":[{"stIdx":0,"cnt":50,"uri":"extInput:hdmi"}],"version":"1.5"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }
  params:
    - name: uri
      type: string
    - name: stIdx
      type: integer
      default: 0
    - name: cnt
      type: integer
      default: 50
      description: "max 200, device-specific"

- id: avContent_getSchemeList
  label: Get Scheme List (v1.0)
  kind: query
  command: '{"method":"getSchemeList","id":1,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }

- id: avContent_getSourceList
  label: Get Source List (v1.0)
  kind: query
  command: '{"method":"getSourceList","id":1,"params":[{"scheme":"extInput"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/avContent", method: POST, content_type: "application/json" }
  params:
    - name: scheme
      type: string
      required: true

- id: encryption_getPublicKey
  label: Get Public Key (v1.0)
  kind: query
  command: '{"method":"getPublicKey","id":1,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/encryption", method: POST, content_type: "application/json" }
  notes: "Returns RSA public key for data encryption (see Data Encryption doc)."

- id: system_getScreenshot
  label: Get Screenshot (v1.0) [FW-BZxxx gen 5.7.0+, localhost]
  kind: query
  command: '{"method":"getScreenshot","id":51,"params":[{"plane":"video"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: plane
      type: string
      default: mixed
      description: '"video", "graphics", "mixed"'
  notes: "Returns Base64-encoded 320x180 (or 1920x1080) jpeg."

- id: system_setPowerSavingMode
  label: Set Power Saving Mode (v1.0)
  kind: action
  command: '{"method":"setPowerSavingMode","id":52,"params":[{"mode":"pictureOff"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: mode
      type: string
      required: true
      description: '"off", "low", "high", "pictureOff"'

- id: system_getCurrentTime_v1_0
  label: Get Current Time (v1.0)
  kind: query
  command: '{"method":"getCurrentTime","id":51,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_getCurrentTime_v1_1
  label: Get Current Time (v1.1)
  kind: query
  command: '{"method":"getCurrentTime","id":51,"params":[],"version":"1.1"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  notes: "Adds timeZoneOffsetMinute + dstOffsetMinute."

- id: system_getNetworkSettings
  label: Get Network Settings (v1.0)
  kind: query
  command: '{"method":"getNetworkSettings","id":2,"params":[{"netif":"eth0"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: netif
      type: string
      default: ""
      description: '""=all, "eth0", "wlan0", "p2p1"'

- id: system_getInterfaceInformation
  label: Get Interface Information (v1.0)
  kind: query
  command: '{"method":"getInterfaceInformation","id":33,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_getRemoteDeviceSettings
  label: Get Remote Device Settings (v1.0)
  kind: query
  command: '{"method":"getRemoteDeviceSettings","id":44,"params":[{"target":"accessPermission"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: target
      type: string
      default: ""
      description: '""=all, "accessPermission"'

- id: system_getLEDIndicatorStatus
  label: Get LED Indicator Status (v1.0)
  kind: query
  command: '{"method":"getLEDIndicatorStatus","id":45,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_getPowerSavingMode
  label: Get Power Saving Mode (v1.0)
  kind: query
  command: '{"method":"getPowerSavingMode","id":51,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_getPowerStatus
  label: Get Power Status (v1.0)
  kind: query
  command: '{"method":"getPowerStatus","id":50,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  notes: "Some devices may not respond in power-off state."

- id: system_getRemoteControllerInfo
  label: Get Remote Controller Info (v1.0)
  kind: query
  command: '{"method":"getRemoteControllerInfo","id":54,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  notes: "Returns IRCC codes (Base64) for each remote button."

- id: system_getSystemInformation_v1_0
  label: Get System Information (v1.0)
  kind: query
  command: '{"method":"getSystemInformation","id":33,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_getSystemInformation_v1_7
  label: Get System Information (v1.7)
  kind: query
  command: '{"method":"getSystemInformation","id":33,"params":[],"version":"1.7"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  notes: "Adds fwVersion, androidOs, webAppRuntimeVersion, mode (Pro/Normal/ProSettings)."

- id: system_getSystemSupportedFunction
  label: Get System Supported Function (v1.0)
  kind: query
  command: '{"method":"getSystemSupportedFunction","id":55,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  notes: "e.g. WOL option returning MAC address of active NIC."

- id: system_getWolMode
  label: Get WoL Mode (v1.0)
  kind: query
  command: '{"method":"getWolMode","id":50,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_requestReboot
  label: Request Reboot (v1.0)
  kind: action
  command: '{"method":"requestReboot","id":10,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }

- id: system_setLEDIndicatorStatus
  label: Set LED Indicator Status (v1.1)
  kind: action
  command: '{"method":"setLEDIndicatorStatus","id":53,"params":[{"mode":"Demo","status":"true"}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: mode
      type: string
      required: true
      description: '"Demo", "AutoBrightnessAdjust", "Dark", "SimpleResponse", "Off"'
    - name: status
      type: string
      description: '"true", "false", null'

- id: system_setPowerStatus
  label: Set Power Status (v1.0)
  kind: action
  command: '{"method":"setPowerStatus","id":55,"params":[{"status":false}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: status
      type: boolean
      required: true
  notes: "Power-on only supported from 'Sleep' mode. Requires 'Remote start' (Settings > Network) to be ON."

- id: system_setWolMode
  label: Set WoL Mode (v1.0)
  kind: action
  command: '{"method":"setWolMode","id":55,"params":[{"enabled":false}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/system", method: POST, content_type: "application/json" }
  params:
    - name: enabled
      type: boolean
      required: true

- id: video_getScreenRotation
  label: Get Screen Rotation (v1.0) [FW-BZxxx gen 5.7.0+, localhost]
  kind: query
  command: '{"method":"getScreenRotation","id":52,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/video", method: POST, content_type: "application/json" }

- id: video_setScreenRotation
  label: Set Screen Rotation (v1.0) [FW-BZxxx gen 5.7.0+, localhost]
  kind: action
  command: '{"method":"setScreenRotation","id":53,"params":[{"rotation":0}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/video", method: POST, content_type: "application/json" }
  params:
    - name: rotation
      type: integer
      required: true
      description: "0, 90, 180, 270"

- id: video_getPictureQualitySettings_v1_0
  label: Get Picture Quality Settings (v1.0)
  kind: query
  command: '{"method":"getPictureQualitySettings","id":52,"params":[{"target":"color"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/video", method: POST, content_type: "application/json" }
  params:
    - name: target
      type: string
      default: ""
      description: '""=all, "color", "brightness", "contrast", "sharpness", "pictureMode", "lightSensor", "colorSpace", "colorTemperature", "autoPictureMode", "hdrMode", "autoLocalDimming", "xtendedDynamicRange"'

- id: video_getPictureQualitySettings_v1_1
  label: Get Picture Quality Settings (v1.1)
  kind: query
  command: '{"method":"getPictureQualitySettings","id":52,"params":[{"target":"color"}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/video", method: POST, content_type: "application/json" }
  params:
    - name: target
      type: string
      default: ""

- id: video_setPictureQualitySettings_v1_0
  label: Set Picture Quality Settings (v1.0)
  kind: action
  command: '{"method":"setPictureQualitySettings","id":12,"params":[{"settings":[{"value":"2","target":"color"}]}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/video", method: POST, content_type: "application/json" }
  params:
    - name: settings
      type: object-array
      required: true
      description: "target/value pairs"

- id: video_setPictureQualitySettings_v1_1
  label: Set Picture Quality Settings (v1.1) - multi-target
  kind: action
  command: '{"method":"setPictureQualitySettings","id":12,"params":[{"settings":[{"value":"50","target":"color"},{"value":"standard","target":"pictureMode"}]}],"version":"1.1"}'
  transport: { url: "http://<Base URL>/video", method: POST, content_type: "application/json" }
  params:
    - name: settings
      type: object-array
      required: true
  notes: "HDMI signal format targets: specify only one target per request to avoid failure."

- id: videoScreen_getSceneSetting
  label: Get Scene Setting (v1.0) [not BZ40P/BZ35P/BZ30P]
  kind: query
  command: '{"method":"getSceneSetting","id":79,"params":[],"version":"1.0"}'
  transport: { url: "http://<Base URL>/videoScreen", method: POST, content_type: "application/json" }

- id: videoScreen_setSceneSetting
  label: Set Scene Setting (v1.0) [not BZ40P/BZ35P/BZ30P]
  kind: action
  command: '{"method":"setSceneSetting","id":40,"params":[{"value":"auto"}],"version":"1.0"}'
  transport: { url: "http://<Base URL>/videoScreen", method: POST, content_type: "application/json" }
  params:
    - name: value
      type: string
      required: true
      description: '"auto", "auto24pSync", "general"'

Feedbacks

- id: power_status
  type: enum
  source: system/getPowerStatus
  values: [standby, active]

- id: power_saving_mode
  type: enum
  source: system/getPowerSavingMode
  values: [off, low, high, pictureOff]

- id: volume
  type: integer
  source: audio/getVolumeInformation
  notes: "Per target (speaker / headphone); bounds reported in same response (minVolume, maxVolume)."

- id: mute
  type: boolean
  source: audio/getVolumeInformation

- id: input_source
  type: string
  source: avContent/getPlayingContentInfo
  notes: "URI form, e.g. extInput:hdmi?port=2."

- id: input_connection_status
  type: string
  source: avContent/getCurrentExternalInputsStatus
  values: ["true", "false", null]
  notes: "null = unknown; per-input."

- id: device_time
  type: string
  source: system/getCurrentTime
  notes: "ISO8601."

- id: time_zone_offset_minute
  type: integer
  source: system/getCurrentTime (v1.1)
  range: "±(23*60+59)"

- id: dst_offset_minute
  type: integer
  source: system/getCurrentTime (v1.1)
  range: "±(23*60+59)"

- id: led_indicator_mode
  type: enum
  source: system/getLEDIndicatorStatus
  values: [Demo, AutoBrightnessAdjust, Dark, SimpleResponse, Off]

- id: led_indicator_on
  type: string
  source: system/getLEDIndicatorStatus
  values: ["true", "false", null]

- id: wol_mode
  type: boolean
  source: system/getWolMode

- id: wol_supported_mac
  type: string
  source: system/getSystemSupportedFunction
  notes: "value when option=WOL; MAC address of active NIC."

- id: remote_start
  type: enum
  source: system/getRemoteDeviceSettings
  values: [on, off]
  notes: '"accessPermission".'

- id: current_scene
  type: enum
  source: videoScreen/getSceneSetting
  values: [auto, auto24pSync, general]

- id: screen_rotation
  type: integer
  source: video/getScreenRotation
  values: [0, 90, 180, 270]

- id: tv_position
  type: enum
  source: audio/getSpeakerSettings (target=tvPosition)
  values: [tableTop, wallMount]

- id: subwoofer_level
  type: integer
  source: audio/getSpeakerSettings (target=subwooferLevel)
  range: "0..24, step 1"

- id: subwoofer_freq
  type: integer
  source: audio/getSpeakerSettings (target=subwooferFreq)
  range: "0..30, step 1"

- id: subwoofer_phase
  type: enum
  source: audio/getSpeakerSettings (target=subwooferPhase)
  values: [normal, reverse]

- id: subwoofer_power
  type: enum
  source: audio/getSpeakerSettings (target=subwooferPower)
  values: [on, off]

- id: system_generation
  type: string
  source: system/getSystemInformation
  notes: 'X.Y.Z version string; equals interfaceVersion.'

- id: interface_version
  type: string
  source: system/getInterfaceInformation
  notes: 'X.Y.Z version string.'

- id: product_category
  type: string
  source: system/getInterfaceInformation
  notes: "BRAVIA Professional Display returns fixed 'tv'."

- id: product_name
  type: string
  source: system/getInterfaceInformation
  notes: "BRAVIA Professional Display returns fixed 'BRAVIA'."

- id: device_serial
  type: string
  source: system/getSystemInformation
  notes: "Per-device serial, default empty string."

- id: device_mac
  type: string
  source: system/getSystemInformation
  notes: 'xx:xx:xx:xx:xx:xx; only one NIC active.'

- id: device_language
  type: string
  source: system/getSystemInformation
  notes: "ISO-639 alpha-3."

- id: device_model
  type: string
  source: system/getSystemInformation
  notes: "e.g. FW-55BZ35F, FW-43BZ35J."

- id: device_name
  type: string
  source: system/getSystemInformation
  notes: "BRAVIA Professional Display returns fixed 'BRAVIA'."

- id: fw_version
  type: string
  source: system/getSystemInformation (v1.7)
  notes: "BRAVIA software version, e.g. PKG0.6.0.81.00.1.00.0951BBA."

- id: android_os_version
  type: string
  source: system/getSystemInformation (v1.7)

- id: webapp_runtime_version
  type: string
  source: system/getSystemInformation (v1.7)

- id: pro_mode
  type: enum
  source: system/getSystemInformation (v1.7)
  values: [Normal, ProSettings, Pro]

- id: ircc_button_name
  type: string
  source: system/getRemoteControllerInfo
  notes: '2nd result element; name/value pair (value=Base64 IRCC code).'

- id: ircc_button_value
  type: string
  source: system/getRemoteControllerInfo
  notes: "Base64 IRCC code; see IRCC-IP table in Notes."

- id: remote_bundle_type
  type: string
  source: system/getRemoteControllerInfo
  notes: 'e.g. IR_REMOTE_BUNDLE_TYPE_AEP; 1st result element.'

- id: screenshot_jpeg
  type: string
  source: system/getScreenshot
  notes: "Base64-encoded jpeg (320x180 or 1920x1080)."

- id: public_key
  type: string
  source: encryption/getPublicKey
  notes: "RSA public key (PEM-like Base64)."

- id: scheme_list
  type: string-array
  source: avContent/getSchemeList

- id: source_list
  type: string-array
  source: avContent/getSourceList

- id: content_list
  type: object-array
  source: avContent/getContentList
  notes: "uri/title/index entries."

- id: content_count
  type: integer
  source: avContent/getContentCount

- id: application_list
  type: object-array
  source: appControl/getApplicationList
  notes: "title/uri/icon entries."

- id: webapp_status
  type: object
  source: appControl/getWebAppStatus
  fields: [active: boolean, url: string]

- id: application_status_list
  type: object-array
  source: appControl/getApplicationStatusList
  notes: 'name: textInput/cursorDisplay/webBrowse; status: on/off.'

- id: appupload_asset_id
  type: string
  source: appControl/prepareAppUpload
  notes: "UUIDv4; 5-minute TTL."

Variables

# No "Variables" section in source - every parameter is delivered as a discrete method call
# (e.g. setAudioVolume for volume, setPowerStatus for power). Marked as N/A.
# UNRESOLVED: keep this section empty per source structure.

Events

# Source references "Supported Notification APIs" as a sub-element of the getSupportedApiInfo
# response. Concrete notification/event methods are not enumerated in the refined source.
# UNRESOLVED: notification/event API list not present in refined source.

Macros

# UNRESOLVED: no multi-step sequence macros documented in source.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlocks, or power-on sequencing
# requirements. The setPowerStatus note ("power-on supported only in Sleep mode;
# requires Remote start ON") is a precondition, not a safety interlock.

Notes

  • All API requests are JSON-RPC 2.0-style POSTs to http://<Base URL>/<service> with Content-Type: application/json. Body shape: {"method":"...","id":<int>,"params":[...],"version":"<x.y>"}. Response: {"result":[...],"id":<int>} or {"error":[<code>,"<msg>"],"id":<int>}.
  • authLevel is a per-method access tier label, not connection auth. Values: none, generic, private. Source does not document any credentials or pre-shared key negotiation flow on the wire (the Encryption service provides RSA public keys for app-level text encryption; PSK is mentioned only in the appControl upload step as "must be included in the POST header").
  • The <Base URL> placeholder is literal in source — actual port not stated. Source examples use http://<ip>/sony/appupload/{assetId} for APK upload (path only, no port).
  • Several methods are explicitly restricted to "FW-BZxxx series, firmware PKG 6.2512 or later, generation version 5.7.0 or later, and can be called via localhost (127.0.0.1) only": prepareAppUpload, uninstallApp, installApp, getScreenshot, getScreenRotation, setScreenRotation.
  • getSpeakerSettings / setSpeakerSettings / getSceneSetting / setSceneSetting are explicitly NOT supported on BZ40P / BZ35P / BZ30P.
  • getScreenshot returns 320x180 by default; with PKG 6.5603.0175+ it may return 1920x1080.
  • getTextForm/setTextForm v1.1 require RSA-encrypted encKey; otherwise error #3 "Illegal Argument".
  • getRemoteControllerInfo returns Base64 IRCC codes. Sample subset (verbatim from source Appendix):
    • PowerOff / Sleep / SleepTimer → AAAAAQAAAAEAAAAvAw==
    • Display → AAAAAQAAAAEAAAA6Aw==
    • Home → AAAAAQAAAAEAAABgAw==
    • Up → AAAAAQAAAAEAAAB0Aw==
    • Down → AAAAAQAAAAEAAAB1Aw==
    • Left → AAAAAQAAAAEAAAA0Aw==
    • Right → AAAAAQAAAAEAAAAzAw==
    • Confirm → AAAAAQAAAAEAAABlAw==
    • Num0..Num9 → AAAAAQAAAAEAAAAJAw==..AAAAAQAAAAEAAAAIAw==
    • VolumeUp → AAAAAQAAAAEAAAASAw==
    • VolumeDown → AAAAAQAAAAEAAAATAw==
    • Mute → AAAAAQAAAAEAAAAUAw==
    • Hdmi1..Hdmi4 → AAAAAgAAABoAAABaAw==..AAAAAgAAABoAAABdAw==
    • PicOff / PictureOff → AAAAAQAAAAEAAAA+Aw==
  • HTTP status codes used: 200, 401, 403, 404, 413, 414, 501, 503. JSON error codes (subset): 1 Any, 2 Timeout, 3 Illegal Argument, 5 Illegal Request, 7 Illegal State, 12 No Such Method, 14 Unsupported Version, 15 Unsupported Operation, 40000-40006 common, 40200-40201 system, 40600 videoScreen, 40800-40801 audio, 41000-41024 avContent, 41400-41403 appControl, 42400 encryption.
  • Compatible model coverage: source names "BRAVIA Professional Display" with concrete examples FW-55BZ35F and FW-43BZ35J, and explicitly excludes BZ40P / BZ35P / BZ30P from a subset of APIs. The KJX7500 / X7500F consumer model is not named anywhere in the refined source; whether this REST API surface applies to it is unverified.

---

Self-check:
- No voltage/current/power specs invented ✓
- No port assumed ✓
- No baud assumed ✓
- `status: draft` ✓
- `declared_confidence: low` ✓
- YAML syntax clean (quoted JSON in command fields, colon inside single-quoted description strings) ✓
- `entity_id` populated from user input ✓
- UNRESOLVED markers throughout ✓
- All distinct method rows enumerated as separate actions ✓
- Verbatim payloads copied (JSON example values used as `command` template) ✓
- Per-method authLevel kept as connection-auth note ✓
- Auth marked as inferred (Tier 2) since source shows no connection login ✓

Output spec follows.

## Provenance

```yaml
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/rest-api/structure
  - https://pro-bravia.sony.net/remote-display-control/
retrieved_at: 2026-06-09T01:40:14.088Z
last_checked_at: 2026-06-09T07:22:56.513Z

Verification Summary

verdict: verified
checked_at: 2026-06-09T07:22:56.513Z
matched_actions: 56
action_count: 56
confidence: medium
summary: "All 56 spec actions match verbatim JSON-RPC method names in the source; source has exactly 56 methods with no extras; transport accurately reflects source. (13 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "refined source is the pro-bravia.sony.net REST API Reference. The KJX7500 / X7500F consumer model is not named in source; source explicitly lists FW-55BZ35F, FW-43BZ35J, BZ40P/BZ35P/BZ30P. Application of this spec to KJX7500 Series is unverified."
- "port not stated in source (no explicit port number anywhere)"
- "https support not stated in source; all examples use http://"
- "keep this section empty per source structure."
- "notification/event API list not present in refined source."
- "no multi-step sequence macros documented in source."
- "source contains no safety warnings, interlocks, or power-on sequencing"
- "port number not stated in source"
- "HTTPS support not stated in source (all examples plain http://)"
- "connection-level auth (cookies, headers, PSK) not specified beyond per-method authLevel labels and a single PSK mention in the app-upload appendix"
- "long-polling notification API list referenced in source but not enumerated"
- "KJX7500 Series model coverage not stated in source"
- "firmware range for KJX7500 not stated in source"

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