Summary

MusicCast device controlled via Yamaha Extended Control API (YXC) over Ethernet/WiFi. HTTP transport with JSON payloads. Supports multi-zone power, volume, input routing, sound program selection, tuner, Net/USB playback, and CD. Authentication requirements are UNRESOLVED. Events are delivered via UDP unicast; the source gives 41100 as an example MusicCast Controller event port, not as a default.

Transport

protocols:
  - http
addressing:
  base_url: http://{host}/YamahaExtendedControl  # {host} = device IP address
auth:
  type: UNRESOLVED

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); on API version 1.17 and later, "up" or "down" is also supported
    - name: step
      type: integer
      required: false
      description: Step value if volume is "up" or "down"; on API version 1.17 and later

- 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 from getFeatures
    - name: mode
      type: string
      required: false
      description: Select mode (autoplay_disabled; available on API version 1.12 and later)

- id: setSoundProgram
  label: Set Sound Program
  kind: action
  params:
    - name: zone
      type: string
      description: Target zone
    - name: program
      type: string
      description: Sound program ID from getFeatures

- 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 from getFeatures

- 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); tp_up and tp_down are for RDS band
    - 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 type from getFeatures (common for band-common presets / separate for per-band presets). The source example uses band=fm; its compatibility with the documented values is UNRESOLVED.
    - name: num
      type: integer
      description: Preset number from getFeatures

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

- id: switchPreset
  label: Switch Tuner Preset
  kind: action
  params:
    - name: dir
      type: string
      description: Direction (next / previous); available on API version 1.17 and later

- 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 from getFeatures

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

- 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); defaults to main if omitted
    - name: type
      type: string
      description: Control type (select / play / return)
    - name: index
      type: integer
      required: false
      description: Element position in list; required when type is select or play
    - name: zone
      type: string
      required: false
      description: Target zone for playback; defaults to main if omitted

- id: setSearchString
  label: Set Search String
  kind: action
  params:
    - name: list_id
      type: string
      required: false
      description: List ID (main / auto_complete / search_artist / search_track); defaults to main if omitted
    - name: string
      type: string
      description: Search text
    - name: index
      type: integer
      required: false
      description: Element index; valid only with list_id=main

- 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

- id: switchAccount
  label: Switch Account
  kind: action
  params:
    - name: input
      type: string
      description: Target Input ID (pandora)
    - name: index
      type: integer
      description: Switch account index (0 ~ 7)
    - name: timeout
      type: integer
      description: Timeout duration in ms (0`~`60000); 0 treats as maximum value

Feedbacks

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

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

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

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

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

- id: zone_getStatus
  query_command: /v1/<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
  query_command: /v1/<zone>/getSoundProgramList
  type: array
  description: Retrieve list of available sound programs for a zone

- id: tuner_getPresetInfo
  query_command: /v1/tuner/getPresetInfo?band=<band>
  type: object
  description: Retrieve tuner preset info
  params:
    - name: band
      type: string
      description: Band (common / separate; source example also uses fm, compatibility unresolved)

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

- id: netusb_getPresetInfo
  query_command: /v1/netusb/getPresetInfo
  type: object
  description: Retrieve Net/USB preset info

- id: netusb_getPlayInfo
  query_command: /v1/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
  query_command: /v1/netusb/getListInfo?input=<input>&index=<index>&size=<size>&lang=<lang>
  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); defaults to en if omitted

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

- id: netusb_getServiceInfo
  query_command: /v1/netusb/getServiceInfo?input=<input>&type=<type>&timeout=<timeout>
  type: object
  description: Retrieve streaming service info (account_list / licensing / activation_code)

- id: cd_getPlayInfo
  query_command: /v1/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 headers are required; 41100 is shown as the MusicCast Controller example port, not a documented default)
# Event notifications time 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. The app must send X-AppName: MusicCast/XXX and X-AppPort: YYY in request headers to receive events. The source's MusicCast Controller example uses event port 41100; no default event port is documented. Events time out after 10 minutes without another request from the registered device.

API versioning: v1 in URI. Backward compatibility is assured for API versions up to the current API version, which can be read via getDeviceInfo. API version 1.17 is required for the 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 is stated in the source. URLBase example uses port 80 but does not document it as a 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-10-07T17:16:13.411Z

Verification Summary

verdict: verified
checked_at: 2026-10-07T17:16:13.411Z
matched_actions: 41
action_count: 41
confidence: medium
summary: "All 41 action units match YXC endpoints in the source, the base URL is supported, auth is honestly UNRESOLVED, and every documented endpoint is represented. (5 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 is stated in the source. URLBase example uses port 80 but does not document it as a default."
- "firmware compatibility range not stated"
- "HTTP port is not explicitly stated; port 80 appears only in a URLBase example"
- "source applicability inferred: the manufacturer protocol document names no model; commands verified against it but not confirmed for this exact model"

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