Summary
NAD AV receivers using the BluOS Custom Integration API v1.7, controllable via HTTP GET requests over TCP/IP. The API provides playback control, volume management, input selection, player grouping, content browsing, preset management, and more. Responses are UTF-8 encoded XML.
Transport
protocols:
- http
addressing:
base_url: "http://{player_ip}:11000/{request}"
port: 11000
auth:
type: UNRESOLVED # source does not state this (was inferred none: no auth procedure in source)
Traits
- powerable # inferred: soft reboot command present
- levelable # inferred: volume control commands present
- queryable # inferred: /Status and /SyncStatus query commands present
- routable # inferred: input selection commands present
Actions
- id: play
label: Play
kind: action
params:
- name: seek
type: integer
description: "Jump to position in seconds into current track"
- name: id
type: integer
description: "Track id in queue to play (0-based index)"
- name: url
type: string
description: "URL-encoded stream URL to play"
- id: pause
label: Pause
kind: action
params:
- name: toggle
type: integer
description: "If 1, toggle current pause state"
- id: stop
label: Stop
kind: action
params: []
- id: skip
label: Skip
kind: action
params: []
- id: back
label: Back
kind: action
params: []
- id: set_volume
label: Set Volume
kind: action
params:
- name: level
type: integer
description: "Absolute volume level 0-100"
- name: abs_db
type: number
description: "Set volume using absolute dB scale"
- name: db
type: number
description: "Relative volume change in dB (positive or negative)"
- name: tell_slaves
type: integer
description: "Grouped players: 0=only this player, 1=all in group"
- id: mute_on
label: Mute On
kind: action
params: []
- id: mute_off
label: Mute Off
kind: action
params: []
- id: shuffle
label: Set Shuffle
kind: action
params:
- name: state
type: integer
description: "0=off, 1=on"
- id: repeat
label: Set Repeat
kind: action
params:
- name: state
type: integer
description: "0=repeat queue, 1=repeat track, 2=repeat off"
- id: clear_queue
label: Clear Queue
kind: action
params: []
- id: delete_track
label: Delete Track
kind: action
params:
- name: id
type: integer
description: "Track position in queue to delete"
- id: move_track
label: Move Track
kind: action
params:
- name: old
type: integer
description: "Current position of track"
- name: new
type: integer
description: "Destination position"
- id: save_queue
label: Save Queue
kind: action
params:
- name: name
type: string
description: "Name for the saved playlist"
- id: load_preset
label: Load Preset
kind: action
params:
- name: id
type: string
description: "Preset id number, +1 for next, or -1 for previous"
- id: select_input
label: Select Input (Active)
kind: action
params:
- name: url
type: string
description: "URL from /RadioBrowse?service=Capture response"
- id: select_input_index
label: Select Input (Index)
kind: action
params:
- name: inputIndex
type: integer
description: "1-based input index from /Settings?id=capture (firmware < v4.2.0)"
- id: select_input_type_index
label: Select Input (Type-Index)
kind: action
params:
- name: inputTypeIndex
type: string
description: "Format: type-index (e.g. spdif-1, analog-1, arc-1). Firmware >= v4.2.0"
- id: group_add_slave
label: Group Add Player
kind: action
params:
- name: slave
type: string
description: "IP address of secondary player"
- name: port
type: integer
description: "Port of secondary player"
- name: group
type: string
description: "Optional group name"
- id: group_add_slaves
label: Group Add Multiple Players
kind: action
params:
- name: slaves
type: string
description: "Comma-separated IP addresses"
- name: ports
type: string
description: "Comma-separated port numbers"
- id: group_remove_slave
label: Group Remove Player
kind: action
params:
- name: slave
type: string
description: "IP address of player to remove"
- name: port
type: integer
description: "Port of player to remove"
- id: group_remove_slaves
label: Group Remove Multiple Players
kind: action
params:
- name: slaves
type: string
description: "Comma-separated IP addresses"
- name: ports
type: string
description: "Comma-separated port numbers"
- id: action_skip_radio
label: Radio Skip
kind: action
params:
- name: service
type: string
description: "Service name (e.g. Slacker)"
- name: skip
type: string
description: "Skip action value from /Status response"
- id: action_love_radio
label: Radio Love Track
kind: action
params:
- name: service
type: string
description: "Service name"
- name: love
type: string
description: "Love action value from /Status response"
- id: action_ban_radio
label: Radio Ban Track
kind: action
params:
- name: service
type: string
description: "Service name"
- name: ban
type: string
description: "Ban action value from /Status response"
- id: reboot
label: Soft Reboot
kind: action
params:
- name: yes
type: string
description: "Any value (e.g. 1). Sent as POST."
- id: doorbell
label: Doorbell Chime
kind: action
params:
- name: play
type: integer
description: "Always 1"
- id: set_bluetooth_mode
label: Set Bluetooth Mode
kind: action
params:
- name: bluetoothAutoplay
type: integer
description: "0=Manual, 1=Automatic, 2=Guest, 3=Disabled"
Feedbacks
- id: playback_status
type: xml
description: "/Status response with state, volume, track info, shuffle, repeat, mute, etag"
- id: sync_status
type: xml
description: "/SyncStatus response with player info, grouping, volume, mute, etag"
- id: volume_level
type: integer
description: "Current volume 0-100 (or -1 for fixed). From /Volume response."
- id: volume_db
type: number
description: "Current volume in dB. From /Volume response."
- id: mute_state
type: enum
values: ["0", "1"]
description: "0=unmuted, 1=muted. From /Volume or /Status response."
- id: playback_state
type: enum
values: [play, pause, stop, stream, connecting]
- id: play_queue
type: xml
description: "/Playlist response with queue name, length, track list"
- id: presets_list
type: xml
description: "/Presets response with preset id, name, url, image"
- id: browse_result
type: xml
description: "/Browse response with hierarchical content items"
Variables
- id: volume
type: integer
min: 0
max: 100
description: "Player volume level in percent"
- id: shuffle_state
type: enum
values: ["0", "1"]
description: "0=off, 1=on"
- id: repeat_state
type: enum
values: ["0", "1", "2"]
description: "0=repeat queue, 1=repeat track, 2=off"
- id: bluetooth_mode
type: enum
values: ["0", "1", "2", "3"]
description: "0=Manual, 1=Automatic, 2=Guest, 3=Disabled"
Events
# The API uses long polling (not push events). /Status and /SyncStatus support
# long-polling with timeout and etag parameters. No unsolicited notifications.
Macros
# UNRESOLVED: no multi-step sequences explicitly described in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures found in source
Notes
- All commands are HTTP GET requests except
/rebootwhich is a POST. - Responses are UTF-8 encoded XML.
- Default port is 11000 for all BluOS players. The NAD CI580 uses ports 11000, 11010, 11020, 11030 for its four streamer nodes.
- Port should be discovered via mDNS (services
musc.tcpandmusp.tcp) or LSDP (UDP broadcast on port 11430). - Long polling is supported for
/Status(recommended 100s timeout) and/SyncStatus(recommended 180s timeout). Without long polling, clients should poll at most once every 30 seconds. - The
/Statusetag is an opaque value; if unchanged the response is guaranteed unchanged. - The
secsfield in/Statusis not included in the etag calculation; clients must track playback position locally. - Input selection has three methods depending on firmware version:
/Play?url=(active inputs),/Play?inputIndex=(firmware < v4.2.0),/Play?inputTypeIndex=(firmware >= v4.2.0). - The LSDP discovery protocol uses UDP broadcast on port 11430 as an alternative to mDNS.
- The CI580 multi-zone player has four streamer nodes on one IP address, each using a different port.
- For grouped players, secondary players proxy most requests to the primary player internally.
Provenance
source_domains: []
source_urls: []
retrieved_at: 2026-10-01T07:05:26.642Z
last_checked_at: 2026-10-01T07:05:26.642Z
Verification Summary
verdict: verified
checked_at: 2026-10-01T07:05:26.642Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions map to documented BluOS endpoints; transport port 11000 and HTTP GET framing verified in source. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- /RadioBrowse
- /Settings
- /Sources
- /Artwork
- "specific NAD AV receiver model numbers not listed in this document — it covers all BluOS-based NAD players generically"
- "firmware version compatibility ranges not stated"
- "no multi-step sequences explicitly described in source"
- "no safety warnings or interlock procedures found in source"
- "specific NAD model numbers covered by this API are not listed"
- "maximum number of grouped players not stated"
- "error response codes and handling not fully documented"
- "model-specific source not located"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0