Summary

MusicCast device controlled via Yamaha Extended Control API (YXC) over Ethernet/WiFi. REST/HTTP transport with JSON payloads. Supports multi-zone power, volume, input routing, sound program selection, tuner, Net/USB playback, and CD. No authentication required. Events delivered via UDP unicast.

Transport

protocols:
  - http
addressing:
  base_url: http://{host}/YamahaExtendedControl  # {host} = device IP address
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable
- routable
- queryable
- levelable

Actions

- id: setPower
  label: Set Power
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone (main / zone2 / zone3 / zone4)
    - name: power
      type: string
      description: Power state (on / standby / toggle)

- id: setVolume
  label: Set Volume
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone (main / zone2 / zone3 / zone4)
    - name: volume
      type: integer
      description: Volume value (range from getFeatures)
    - name: step
      type: integer
      required: false
      description: Step value if volume is "up" or "down"

- id: setMute
  label: Set Mute
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: enable
      type: boolean
      description: Mute state

- id: setInput
  label: Select Input
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: input
      type: string
      description: Input ID (hdmi1 / hdmi2 / usb / server / net_radio / pandora / spotify / airplay / cd / tuner / etc.)
    - name: mode
      type: string
      required: false
      description: Select mode (autoplay_disabled)

- id: setSoundProgram
  label: Set Sound Program
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: program
      type: string
      description: Sound program ID (munich / vienna / chamber / straight / etc.)

- id: setSleep
  label: Set Sleep Timer
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: sleep
      type: integer
      description: Sleep time in minutes (0 / 30 / 60 / 90 / 120)

- id: prepareInputChange
  label: Prepare Input Change
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: input
      type: string
      description: Input ID

- id: setAutoPowerStandby
  label: Set Auto Power Standby
  kind: action
  params:
    - name: enable
      type: boolean
      description: Enable/disable auto power standby

- id: sendIrCode
  label: Send IR Code
  kind: action
  params:
    - name: code
      type: string
      description: IR code in 8-digit hex

- id: setFreq
  label: Set Tuner Frequency
  kind: action
  params:
    - name: band
      type: string
      description: Band (am / fm)
    - name: tuning
      type: string
      description: Tuning method (up / down / cancel / auto_up / auto_down / tp_up / tp_down / direct)
    - name: num
      type: integer
      required: false
      description: Frequency in kHz (valid only when tuning=direct)

- id: recallPreset
  label: Recall Tuner Preset
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: band
      type: string
      description: Preset band type (common / am / fm / dab)
    - name: num
      type: integer
      description: Preset number

- id: storePreset
  label: Store Tuner Preset
  kind: action
  params:
    - name: num
      type: integer
      description: Preset number

- id: switchPreset
  label: Switch Tuner Preset
  kind: action
  params:
    - name: dir
      type: string
      description: Direction (next / previous)

- id: setDabService
  label: Set DAB Service
  kind: action
  params:
    - name: dir
      type: string
      description: Direction (next / previous)

- id: netusb_setPlayback
  label: Set Net/USB Playback
  kind: action
  params:
    - name: playback
      type: string
      description: Playback command (play / stop / pause / play_pause / previous / next / fast_reverse_start / fast_reverse_end / fast_forward_start / fast_forward_end)

- id: netusb_toggleRepeat
  label: Toggle Net/USB Repeat
  kind: action

- id: netusb_toggleShuffle
  label: Toggle Net/USB Shuffle
  kind: action

- id: netusb_recallPreset
  label: Recall Net/USB Preset
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: num
      type: integer
      description: Preset number

- id: netusb_storePreset
  label: Store Net/USB Preset
  kind: action
  params:
    - name: num
      type: integer
      description: Preset number

- id: setListControl
  label: Set List Control
  kind: action
  params:
    - name: list_id
      type: string
      required: false
      description: List ID (main / auto_complete / search_artist / search_track)
    - name: type
      type: string
      description: Control type (select / play / return)
    - name: index
      type: integer
      required: false
      description: Element position in list
    - name: zone
      type: string
      required: false
      description: Target zone for playback

- id: setSearchString
  label: Set Search String
  kind: action
  params:
    - name: list_id
      type: string
      required: false
      description: List ID
    - name: string
      type: string
      description: Search text
    - name: index
      type: integer
      required: false
      description: Element index

- id: cd_setPlayback
  label: Set CD Playback
  kind: action
  params:
    - name: playback
      type: string
      description: Playback command (play / stop / pause / previous / next / fast_reverse_start / fast_reverse_end / fast_forward_start / fast_forward_end / track_select)
    - name: num
      type: integer
      required: false
      description: Track number (valid only when playback=track_select)

- id: cd_toggleTray
  label: Toggle CD Tray
  kind: action

- id: cd_toggleRepeat
  label: Toggle CD Repeat
  kind: action

- id: cd_toggleShuffle
  label: Toggle CD Shuffle
  kind: action

Feedbacks

- id: getDeviceInfo
  type: object
  description: Retrieve basic device info (model name, API version, network module version, etc.)

- id: getFeatures
  type: object
  description: Retrieve feature info (func_list, zone info, input list, range_step values, sound programs, tuner/netusb capabilities)

- id: getNetworkStatus
  type: object
  description: Retrieve network setup/information (connection type, DHCP, IP address, MAC address, MusicCast network status)

- id: getFuncStatus
  type: object
  description: Retrieve overall system function status (auto power standby, IR sensor, speakers, headphone, dimmer)

- id: getLocationInfo
  type: object
  description: Retrieve Location info (ID, name, zone list, stereo pair status)

- id: zone_getStatus
  type: object
  description: Retrieve zone status (power, sleep, volume, mute, input, sound_program, tone_control, equalizer, balance, subwoofer_volume, etc.)
  params:
    - name: zone
      type: string
      description: Target zone (main / zone2 / zone3 / zone4)

- id: getSoundProgramList
  type: array
  description: Retrieve list of available sound programs for a zone

- id: tuner_getPresetInfo
  type: object
  description: Retrieve tuner preset info
  params:
    - name: band
      type: string
      description: Band (common / am / fm / dab)

- id: tuner_getPlayInfo
  type: object
  description: Retrieve tuner playback info (band, frequency, RDS, DAB info)

- id: netusb_getPresetInfo
  type: object
  description: Retrieve Net/USB preset info

- id: netusb_getPlayInfo
  type: object
  description: Retrieve Net/USB playback info (input, playback state, repeat, shuffle, play_time, artist, album, track, albumart_url)

- id: netusb_getListInfo
  type: object
  description: Retrieve Net/USB list info (menu_layer, max_line, list_info with text, thumbnail, attribute)
  params:
    - name: input
      type: string
      description: Target input
    - name: index
      type: integer
      description: Reference index (must be multiple of 8)
    - name: size
      type: integer
      description: Max list size (1-8)
    - name: lang
      type: string
      required: false
      description: Language (en / ja / fr / de / es / ru / it / zh)

- id: netusb_getAccountStatus
  type: object
  description: Retrieve streaming service account info (registered status, login status, trial time left)

- id: netusb_getServiceInfo
  type: object
  description: Retrieve streaming service info (account_list / licensing / activation_code)

- id: cd_getPlayInfo
  type: object
  description: Retrieve CD playback info (device_status, playback, repeat, shuffle, play_time, track_number, total_tracks, artist, album, track)

- id: response_code
  type: integer
  values: [0, 1, 2, 3, 4, 5, 6, 99, 100-112]
  description: |
    Standard response codes:
    0 = success, 1 = initializing, 2 = internal error, 3 = invalid request,
    4 = invalid parameter, 5 = guarded, 6 = timeout, 99 = firmware updating,
    100s = streaming service errors (100=access error, 103=wrong password, 104=account expired, etc.)

Variables

# All settable parameters via GET/POST are documented in Actions and Feedbacks.
# Tunable variables (from zone getStatus responses):
- id: volume
  type: integer
  description: Zone volume (range from getFeatures, e.g. 0-194)

- id: tone_control
  type: object
  description: Tone control settings (bass, treble)

- id: equalizer
  type: object
  description: Equalizer settings (mode, low, mid, high)

- id: balance
  type: integer
  description: Speaker L/R balance (negative=left, positive=right)

- id: dialogue_level
  type: integer
  description: Dialogue level setting

- id: dialogue_lift
  type: integer
  description: Dialogue lift setting

- id: subwoofer_volume
  type: integer
  description: Subwoofer volume

- id: bass_extension
  type: boolean
  description: Bass extension status

- id: link_control
  type: string
  description: Link control setting (standard / stability / speed)

- id: link_audio_delay
  type: string
  description: Link audio delay setting (lip_sync / audio_sync / audio_sync_on / audio_sync_off)

- id: dimmer
  type: integer
  description: Dimmer setting (-1=auto, 0+=manual)

- id: sleep
  type: integer
  description: Sleep timer in minutes (0/30/60/90/120)

- id: auto_power_standby
  type: boolean
  description: Auto power standby enabled/disabled

- id: sound_program
  type: string
  description: Selected sound program

- id: repeat
  type: string
  description: Repeat setting (off / one / all / folder / program)

- id: shuffle
  type: string
  description: Shuffle setting (off / on / songs / albums / folder)

Events

# UDP unicast events (X-AppName + X-AppPort header required, port 41100 default for MusicCast Controller)
# Event notifications timed out after 10 minutes of inactivity.

- id: system_event
  type: object
  description: System events
  fields:
    - bluetooth_info_updated: boolean
    - func_status_updated: boolean
    - location_info_updated: boolean
    - name_text_updated: boolean

- id: main_zone_event
  type: object
  description: Main zone events
  fields:
    - power: string (on/standby)
    - input: string
    - volume: integer
    - mute: boolean
    - status_updated: boolean

- id: tuner_event
  type: object
  description: Tuner events
  fields:
    - play_info_updated: boolean
    - preset_info_updated: boolean

- id: netusb_event
  type: object
  description: Net/USB events
  fields:
    - play_error: integer
    - play_message: string
    - account_updated: boolean
    - play_time: integer
    - preset_info_updated: boolean
    - play_info_updated: boolean
    - list_info_updated: boolean
    - preset_control: object (type, num, result)

- id: cd_event
  type: object
  description: CD events
  fields:
    - device_status: string (open/close/ready/not_ready)
    - play_time: integer
    - play_info_updated: boolean

- id: dist_event
  type: object
  description: Link distribution events
  fields:
    - dist_info_updated: boolean

- id: device_id_event
  type: string
  description: Device ID (available on API v1.17+)

Macros

# Multi-step sequences from source (Section 12):

- id: browse_and_play_usb
  label: Browse USB and Play File
  description: |
    1. send prepareInputChange (input=usb)
    2. optionally send setInput (input=usb, mode=autoplay_disabled)
    3. send getListInfo (input=usb, index=0, size=8) to get root list
    4. send setListControl (list_id=main, type=select, index=N) to navigate into folder
    5. repeat getListInfo with index=0/8/16... to get all pages
    6. send setListControl (list_id=main, type=play, index=N) to play target file
  note: getListInfo blocks all other commands for up to 30 seconds while fetching full list

- id: search_and_play_pandora
  label: Search and Play Pandora
  description: |
    1. send setSearchString (list_id=search_artist or search_track, string="query")
    2. send setListControl (list_id=search_artist/search_track, type=select, index=N) to select result
    3. send setListControl (list_id=main, type=play, index=N) to start playback

Safety

confirmation_required_for: []
interlocks:
  - description: Zone B (physical) maps to zone2 in YXC protocol
  - description: Input change to USB requires prepareInputChange before browsing
  - description: getListInfo command blocks all other commands for up to 30 seconds
# UNRESOLVED: no explicit safety warnings or interlock procedures in source

Notes

Base URL pattern: http://{host}/YamahaExtendedControl/v1/

Event transport: UDP unicast. App must send X-AppName: MusicCast/XXX and X-AppPort: YYY in request header to receive events. Default event port: 41100. Events timeout after 10 minutes inactivity.

API versioning: v1 in URI. Backward compatibility assured for <= current API version (read via getDeviceInfo). API version 1.17 required for device_id field and switchPreset.

Device discovery: via UPnP M-Search, identify manufacturer="Yamaha Corporation", check for yamaha:X_device tag, confirm yamaha:X_yxcControlURL = /YamahaExtendedControl/v1/

Response codes: 0=success, 1=initializing, 2=internal error, 3=invalid request, 4=invalid parameter, 5=guarded, 6=timeout, 99=firmware updating. 100s = streaming errors.

Port number: UNRESOLVED: no explicit HTTP port stated in source. URLBase example uses port 80 but not explicitly documented as default.

Provenance

source_domains:
  - raw.githubusercontent.com
  - github.com
source_urls:
  - https://raw.githubusercontent.com/rsc-dev/pyamaha/master/doc/YXC_API_Spec_Basic.pdf
  - https://github.com/opctim/yamaha-extended-control-openapi
retrieved_at: 2026-05-19T04:51:05.122Z
last_checked_at: 2026-06-02T22:16:29.059Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T22:16:29.059Z
matched_actions: 25
action_count: 25
confidence: medium
summary: "All 25 spec actions traced to source (dip-safe re-verify). (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "TrueX-90A model not explicitly named in source; inferred from Convex entity bootstrap"
- "no explicit safety warnings or interlock procedures in source"
- "no explicit HTTP port stated in source. URLBase example uses port 80 but not explicitly documented as default."
- "firmware compatibility range not stated"
- "exact voltage/power specs not in source"
- "port number not explicitly stated, only demonstrated in URLBase example"

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