Summary

Yamaha CRX-N470 is a MusicCast-enabled CD receiver controllable via Yamaha Extended Control (YXC) REST API over HTTP. The API provides zone management (power, volume, mute, input selection), tuner control (AM/FM/DAB), Network/USB playback and browsing, CD playback, and system configuration. Events are pushed via UDP unicast.

Transport

protocols:
  - http
addressing:
  base_url: "http://{host}/YamahaExtendedControl"
  # UNRESOLVED: port not explicitly stated in API overview; UPnP example shows :80 for a WXC-50 but may differ per device
auth:
  type: none  # inferred: no auth procedure in source

Traits

traits:
  - powerable    # inferred from zone setPower command
  - queryable    # inferred from getStatus, getDeviceInfo, getPlayInfo queries
  - routable     # inferred from zone setInput command
  - levelable    # inferred from zone setVolume, tone control commands

Actions

actions:
  # ── System ──
  - id: system_getDeviceInfo
    label: Get Device Info
    kind: query
    command: "GET /v1/system/getDeviceInfo"
    params: []

  - id: system_getFeatures
    label: Get Features
    kind: query
    command: "GET /v1/system/getFeatures"
    params: []

  - id: system_getNetworkStatus
    label: Get Network Status
    kind: query
    command: "GET /v1/system/getNetworkStatus"
    params: []

  - id: system_getFuncStatus
    label: Get Function Status
    kind: query
    command: "GET /v1/system/getFuncStatus"
    params: []

  - id: system_setAutoPowerStandby
    label: Set Auto Power Standby
    kind: action
    command: "GET /v1/system/setAutoPowerStandby?enable={enable}"
    params:
      - name: enable
        type: boolean
        description: "true to enable, false to disable"

  - id: system_getLocationInfo
    label: Get Location Info
    kind: query
    command: "GET /v1/system/getLocationInfo"
    params: []

  - id: system_sendIrCode
    label: Send IR Code
    kind: action
    command: "GET /v1/system/sendIrCode?code={code}"
    params:
      - name: code
        type: string
        description: "IR code in 8-digit hex"

  # ── Zone ──
  - id: zone_getStatus
    label: Get Zone Status
    kind: query
    command: "GET /v1/{zone}/getStatus"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"

  - id: zone_getSoundProgramList
    label: Get Sound Program List
    kind: query
    command: "GET /v1/{zone}/getSoundProgramList"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"

  - id: zone_setPower
    label: Set Zone Power
    kind: action
    command: "GET /v1/{zone}/setPower?power={power}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: power
        type: string
        description: "Power state: on / standby / toggle"

  - id: zone_setSleep
    label: Set Zone Sleep Timer
    kind: action
    command: "GET /v1/{zone}/setSleep?sleep={sleep}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: sleep
        type: integer
        description: "Sleep time in minutes: 0 / 30 / 60 / 90 / 120"

  - id: zone_setVolume
    label: Set Zone Volume
    kind: action
    command: "GET /v1/{zone}/setVolume?volume={volume}&step={step}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: volume
        type: integer
        description: "Volume value per getFeatures range, or 'up'/'down'"
      - name: step
        type: integer
        description: "Step value when volume is up/down (optional)"

  - id: zone_setMute
    label: Set Zone Mute
    kind: action
    command: "GET /v1/{zone}/setMute?enable={enable}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: enable
        type: boolean
        description: "true to mute, false to unmute"

  - id: zone_setInput
    label: Set Zone Input
    kind: action
    command: "GET /v1/{zone}/setInput?input={input}&mode={mode}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: input
        type: string
        description: "Input ID from getFeatures"
      - name: mode
        type: string
        description: "Select mode, e.g. autoplay_disabled (optional)"

  - id: zone_setSoundProgram
    label: Set Zone Sound Program
    kind: action
    command: "GET /v1/{zone}/setSoundProgram?program={program}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: program
        type: string
        description: "Sound Program ID from getFeatures"

  - id: zone_prepareInputChange
    label: Prepare Input Change
    kind: action
    command: "GET /v1/{zone}/prepareInputChange?input={input}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: input
        type: string
        description: "Input ID to prepare"

  # ── Tuner ──
  - id: tuner_getPresetInfo
    label: Get Tuner Preset Info
    kind: query
    command: "GET /v1/tuner/getPresetInfo?band={band}"
    params:
      - name: band
        type: string
        description: "Band: common / am / fm / dab (per getFeatures preset type)"

  - id: tuner_getPlayInfo
    label: Get Tuner Play Info
    kind: query
    command: "GET /v1/tuner/getPlayInfo"
    params: []

  - id: tuner_setFreq
    label: Set Tuner Frequency
    kind: action
    command: "GET /v1/tuner/setFreq?band={band}&tuning={tuning}&num={num}"
    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
        description: "Frequency in kHz (only when tuning=direct)"

  - id: tuner_recallPreset
    label: Recall Tuner Preset
    kind: action
    command: "GET /v1/tuner/recallPreset?zone={zone}&band={band}&num={num}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: band
        type: string
        description: "common / am / fm / dab per preset type"
      - name: num
        type: integer
        description: "Preset number per getFeatures range"

  - id: tuner_switchPreset
    label: Switch Tuner Preset
    kind: action
    command: "GET /v1/tuner/switchPreset?dir={dir}"
    params:
      - name: dir
        type: string
        description: "next / previous"

  - id: tuner_storePreset
    label: Store Tuner Preset
    kind: action
    command: "GET /v1/tuner/storePreset?num={num}"
    params:
      - name: num
        type: integer
        description: "Preset number per getFeatures range"

  - id: tuner_setDabService
    label: Set DAB Service
    kind: action
    command: "GET /v1/tuner/setDabService?dir={dir}"
    params:
      - name: dir
        type: string
        description: "next / previous"

  # ── Network/USB ──
  - id: netusb_getPresetInfo
    label: Get Net/USB Preset Info
    kind: query
    command: "GET /v1/netusb/getPresetInfo"
    params: []

  - id: netusb_getPlayInfo
    label: Get Net/USB Play Info
    kind: query
    command: "GET /v1/netusb/getPlayInfo"
    params: []

  - id: netusb_setPlayback
    label: Set Net/USB Playback
    kind: action
    command: "GET /v1/netusb/setPlayback?playback={playback}"
    params:
      - name: playback
        type: string
        description: "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
    command: "GET /v1/netusb/toggleRepeat"
    params: []

  - id: netusb_toggleShuffle
    label: Toggle Net/USB Shuffle
    kind: action
    command: "GET /v1/netusb/toggleShuffle"
    params: []

  - id: netusb_getListInfo
    label: Get Net/USB List Info
    kind: query
    command: "GET /v1/netusb/getListInfo?input={input}&index={index}&size={size}&lang={lang}"
    params:
      - name: input
        type: string
        description: "Net/USB input ID"
      - name: index
        type: integer
        description: "Reference index (multiple of 8), e.g. 0, 8, 16..."
      - name: size
        type: integer
        description: "Max list elements to retrieve (1-8)"
      - name: lang
        type: string
        description: "en / ja / fr / de / es / ru / it / zh (optional)"

  - id: netusb_setListControl
    label: Set Net/USB List Control
    kind: action
    command: "GET /v1/netusb/setListControl?list_id={list_id}&type={type}&index={index}&zone={zone}"
    params:
      - name: list_id
        type: string
        description: "main / auto_complete / search_artist / search_track (optional)"
      - name: type
        type: string
        description: "select / play / return"
      - name: index
        type: integer
        description: "Element position 0-64999 (required for select/play)"
      - name: zone
        type: string
        description: "Target zone for playback (optional, default main)"

  - id: netusb_setSearchString
    label: Set Net/USB Search String
    kind: action
    command: "POST /v1/netusb/setSearchString"
    params:
      - name: list_id
        type: string
        description: "main / auto_complete / search_artist / search_track (optional)"
      - name: string
        type: string
        description: "Search text"
      - name: index
        type: integer
        description: "Element index for select+search (optional, 0-64999)"

  - id: netusb_recallPreset
    label: Recall Net/USB Preset
    kind: action
    command: "GET /v1/netusb/recallPreset?zone={zone}&num={num}"
    params:
      - name: zone
        type: string
        description: "Target zone: main / zone2 / zone3 / zone4"
      - name: num
        type: integer
        description: "Preset number per getFeatures range"

  - id: netusb_storePreset
    label: Store Net/USB Preset
    kind: action
    command: "GET /v1/netusb/storePreset?num={num}"
    params:
      - name: num
        type: integer
        description: "Preset number per getFeatures range"

  - id: netusb_getAccountStatus
    label: Get Net/USB Account Status
    kind: query
    command: "GET /v1/netusb/getAccountStatus"
    params: []

  - id: netusb_switchAccount
    label: Switch Net/USB Account
    kind: action
    command: "GET /v1/netusb/switchAccount?input={input}&index={index}&timeout={timeout}"
    params:
      - name: input
        type: string
        description: "Target input ID, e.g. pandora"
      - name: index
        type: integer
        description: "Account index 0-7"
      - name: timeout
        type: integer
        description: "Timeout in ms (0 = max, range 0-60000)"

  - id: netusb_getServiceInfo
    label: Get Net/USB Service Info
    kind: query
    command: "GET /v1/netusb/getServiceInfo?input={input}&type={type}&timeout={timeout}"
    params:
      - name: input
        type: string
        description: "pandora / rhapsody / napster"
      - name: type
        type: string
        description: "account_list / licensing / activation_code"
      - name: timeout
        type: integer
        description: "Timeout in ms (0 = max, range 0-60000)"

  # ── CD ──
  - id: cd_getPlayInfo
    label: Get CD Play Info
    kind: query
    command: "GET /v1/cd/getPlayInfo"
    params: []

  - id: cd_setPlayback
    label: Set CD Playback
    kind: action
    command: "GET /v1/cd/setPlayback?playback={playback}&num={num}"
    params:
      - name: playback
        type: string
        description: "play / stop / pause / previous / next / fast_reverse_start / fast_reverse_end / fast_forward_start / fast_forward_end / track_select"
      - name: num
        type: integer
        description: "Track number 1-512 (only for track_select)"

  - id: cd_toggleTray
    label: Toggle CD Tray
    kind: action
    command: "GET /v1/cd/toggleTray"
    params: []

  - id: cd_toggleRepeat
    label: Toggle CD Repeat
    kind: action
    command: "GET /v1/cd/toggleRepeat"
    params: []

  - id: cd_toggleShuffle
    label: Toggle CD Shuffle
    kind: action
    command: "GET /v1/cd/toggleShuffle"
    params: []

Feedbacks

feedbacks:
  - id: zone_power_state
    type: enum
    values: [on, standby]
    description: "Zone power status from getStatus"

  - id: zone_volume
    type: integer
    description: "Zone volume value, range per getFeatures"

  - id: zone_mute
    type: boolean
    description: "Zone mute status"

  - id: zone_input
    type: string
    description: "Current zone input ID"

  - id: zone_sleep_timer
    type: integer
    description: "Sleep timer in minutes: 0 / 30 / 60 / 90 / 120"

  - id: zone_sound_program
    type: string
    description: "Current sound program ID"

  - id: netusb_playback_status
    type: enum
    values: [play, stop, pause, fast_reverse, fast_forward]
    description: "Net/USB playback status"

  - id: netusb_repeat
    type: enum
    values: [off, one, all]
    description: "Net/USB repeat setting"

  - id: netusb_shuffle
    type: enum
    values: [off, on, songs, albums]
    description: "Net/USB shuffle setting"

  - id: cd_device_status
    type: enum
    values: [open, close, ready, not_ready]
    description: "CD device status"

  - id: cd_playback_status
    type: enum
    values: [play, stop, pause, fast_reverse, fast_forward]
    description: "CD playback status"

  - id: cd_repeat
    type: enum
    values: [off, one, all, folder, a-b]
    description: "CD repeat setting"

  - id: cd_shuffle
    type: enum
    values: [off, on, folder, program]
    description: "CD shuffle setting"

  - id: response_code
    type: integer
    description: "API response code: 0 = success, see Response Code List for errors"

Variables

variables:
  - id: zone_volume
    type: integer
    description: "Zone volume level, min/max/step from getFeatures"
    min: null  # UNRESOLVED: determined at runtime via getFeatures
    max: null
    step: null

  - id: zone_max_volume
    type: integer
    description: "Max volume setting per zone"

  - id: tone_control_bass
    type: integer
    description: "Tone control bass level"

  - id: tone_control_treble
    type: integer
    description: "Tone control treble level"

  - id: dimmer
    type: integer
    description: "Dimmer setting, -1 for auto, 0+ for manual"

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

Events

events:
  - id: zone_power_event
    description: "Zone power changed (on/standby)"
    fields:
      - name: power
        type: string
        values: [on, standby]

  - id: zone_input_event
    description: "Zone input changed"
    fields:
      - name: input
        type: string

  - id: zone_volume_event
    description: "Zone volume changed"
    fields:
      - name: volume
        type: integer

  - id: zone_mute_event
    description: "Zone mute changed"
    fields:
      - name: mute
        type: boolean

  - id: zone_status_event
    description: "Other zone info changed; retrieve via getStatus"
    fields:
      - name: status_updated
        type: boolean

  - id: system_func_status_event
    description: "System function status changed; retrieve via getFuncStatus"
    fields:
      - name: func_status_updated
        type: boolean

  - id: system_location_event
    description: "Location info changed; retrieve via getLocationInfo"
    fields:
      - name: location_info_updated
        type: boolean

  - id: tuner_play_info_event
    description: "Tuner playback info changed; retrieve via tuner/getPlayInfo"
    fields:
      - name: play_info_updated
        type: boolean

  - id: tuner_preset_event
    description: "Tuner preset info changed; retrieve via tuner/getPresetInfo"
    fields:
      - name: preset_info_updated
        type: boolean

  - id: netusb_play_info_event
    description: "Net/USB playback info changed; retrieve via netusb/getPlayInfo"
    fields:
      - name: play_info_updated
        type: boolean

  - id: netusb_play_error_event
    description: "Net/USB playback error"
    fields:
      - name: play_error
        type: integer

  - id: netusb_account_event
    description: "Net/USB account info changed; retrieve via getAccountStatus"
    fields:
      - name: account_updated
        type: boolean

  - id: netusb_preset_event
    description: "Net/USB preset info changed; retrieve via netusb/getPresetInfo"
    fields:
      - name: preset_info_updated
        type: boolean

  - id: netusb_list_info_event
    description: "Net/USB list info changed; retrieve via getListInfo"
    fields:
      - name: list_info_updated
        type: boolean

  - id: netusb_play_time_event
    description: "Net/USB playback time update"
    fields:
      - name: play_time
        type: integer

  - id: cd_device_status_event
    description: "CD device status changed (open/close/ready/not_ready)"
    fields:
      - name: device_status
        type: string

  - id: cd_play_info_event
    description: "CD playback info changed; retrieve via cd/getPlayInfo"
    fields:
      - name: play_info_updated
        type: boolean

  - id: cd_play_time_event
    description: "CD playback time update"
    fields:
      - name: play_time
        type: integer

notes: |
  Events require HTTP request headers X-AppName and X-AppPort to subscribe.
  Event subscription times out after 10 minutes if no further request is sent.
  getListInfo is blocking and may take up to 30 seconds; all other commands are rejected during that time.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures found in source

Notes

YXC (Yamaha Extended Control) is a REST API over HTTP for MusicCast-enabled devices. The CRX-N470 supports this API but its exact feature set (zone count, input list, sound programs, volume range) must be discovered at runtime via /v1/system/getFeatures. Events are delivered as UDP unicast to the port specified in the X-AppPort header. API version is v1; backward compatibility is assured unless otherwise specified. Device discovery uses UPnP M-Search for MediaRenderer devices with Yamaha-specific tags.

The setSearchString endpoint uses POST with a JSON body; all other endpoints use GET with query parameters.

Input IDs include: cd, tuner, phono, hdmi1-hdmi8, av1-av7, aux1-aux2, optical1-optical2, coaxial1-coaxial2, bluetooth, server, net_radio, pandora, spotify, siriusxm, airplay, qobuz, mc_link, and others — actual availability is device-specific.

Provenance

source_domains:
  - raw.githubusercontent.com
  - github.com
  - home-assistant.io
source_urls:
  - https://raw.githubusercontent.com/rsc-dev/pyamaha/master/doc/YXC_API_Spec_Basic.pdf
  - https://github.com/rsc-dev/pyamaha
  - https://www.home-assistant.io/integrations/yamaha_musiccast/
retrieved_at: 2026-06-12T02:38:34.272Z
last_checked_at: 2026-06-12T20:01:02.483Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T20:01:02.483Z
matched_actions: 41
action_count: 41
confidence: medium
summary: "All 41 spec actions have exact path matches in the source and the source documents exactly these 41 endpoints; transport base URL confirmed verbatim. (10 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "specific CRX-N470 input list, zone count, and feature set not stated — must be queried at runtime via /system/getFeatures"
- "firmware version compatibility range not stated in source"
- "port not explicitly stated in API overview; UPnP example shows :80 for a WXC-50 but may differ per device"
- "determined at runtime via getFeatures"
- "no safety warnings or interlock procedures found in source"
- "TCP/HTTP port not explicitly stated in the API overview section"
- "firmware version compatibility range not stated"
- "exact zone count and input list for CRX-N470 not stated — query getFeatures at runtime"
- "volume min/max/step values not stated — query getFeatures at runtime"
- "no safety or interlock procedures documented in source"

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