Summary
The NAD T777 Series uses the BluOS platform (BluOS Custom Integration API v1.7) for network control. All commands are sent as HTTP GET requests to the player's IP address on port 11000; the player responds with UTF-8 encoded XML data. This spec covers playback control, volume control, play queue management, presets, content browsing, player grouping, and input selection as documented in the BluOS Custom Integration API.
Transport
protocols:
- http
addressing:
port: 11000
base_url: http://<player_ip>:11000
auth:
type: none # inferred: no auth procedure in source
Traits
traits:
- queryable # inferred from query command examples (/Status, /SyncStatus, /Volume, /Playlist, /Presets)
- levelable # inferred from volume control commands (/Volume with level, db, abs_db, mute parameters)
- routable # inferred from input selection commands (/Play?url=, /Play?inputTypeIndex=)
Actions
# Playback Control
- id: play
label: Play
kind: action
params:
- name: seek
type: integer
description: Optional. Jump to specified position in current track (seconds). Only valid if /Status includes <totlen>.
- name: url
type: string
description: Optional. URL-encoded stream URL to play directly.
- id: pause
label: Pause
kind: action
params:
- name: toggle
type: integer
description: Optional. If set to 1, toggles the current pause state.
- id: stop
label: Stop
kind: action
params: []
- id: skip
label: Skip to Next Track
kind: action
params: []
- id: back
label: Back / Previous Track
kind: action
params: []
- id: shuffle
label: Set Shuffle
kind: action
params:
- name: state
type: integer
description: "0 to disable shuffle, 1 to enable shuffle."
- id: repeat
label: Set Repeat
kind: action
params:
- name: state
type: integer
description: "0 = repeat queue, 1 = repeat current track, 2 = repeat off."
# Volume Control
- id: set_volume
label: Set Volume
kind: action
params:
- name: level
type: integer
description: Absolute volume level 0-100.
- name: tell_slaves
type: integer
description: Optional. 0 = only this player; 1 = all grouped players.
- id: set_volume_db
label: Set Volume (Absolute dB)
kind: action
params:
- name: abs_db
type: number
description: Absolute volume level in dB.
- name: tell_slaves
type: integer
description: Optional. 0 = only this player; 1 = all grouped players.
- id: adjust_volume_db
label: Adjust Volume (Relative dB)
kind: action
params:
- name: db
type: number
description: Relative volume change in dB (positive = up, negative = down). Typical value ±2 dB.
- name: tell_slaves
type: integer
description: Optional. 0 = only this player; 1 = all grouped players.
- id: mute
label: Mute
kind: action
params: []
- id: unmute
label: Unmute
kind: action
params: []
# Streaming radio station actions
- id: radio_action
label: Radio Station Action (Skip/Back/Love/Ban)
kind: action
params:
- name: service
type: string
description: Service name (e.g. Slacker).
- name: action_url
type: string
description: Action URL as provided in the <action> element from /Status response.
# Play Queue Management
- id: list_queue
label: List Play Queue
kind: action
params:
- name: start
type: integer
description: Optional. First queue entry (0-based) for pagination.
- name: end
type: integer
description: Optional. Last queue entry for pagination.
- id: delete_track
label: Delete Track from Queue
kind: action
params:
- name: id
type: integer
description: Track id (position) to remove from the queue.
- id: move_track
label: Move Track in Queue
kind: action
params:
- name: old
type: integer
description: Current position of the track.
- name: new
type: integer
description: Destination position for the track.
- id: clear_queue
label: Clear Play Queue
kind: action
params: []
- id: save_queue
label: Save Play Queue as Playlist
kind: action
params:
- name: name
type: string
description: Name for the saved playlist.
# Presets
- id: list_presets
label: List Presets
kind: action
params: []
- id: load_preset
label: Load Preset
kind: action
params:
- name: id
type: string
description: "Preset id to load, or '+1' for next preset, or '-1' for previous preset."
# Content Browsing
- id: browse
label: Browse Music Content
kind: action
params:
- name: key
type: string
description: Optional. URL-encoded browse key from a previous response. Absent for top-level browse.
- name: withContextMenuItems
type: integer
description: Optional. Set to 1 to include inline context menus.
- id: search
label: Search Music Content
kind: action
params:
- name: key
type: string
description: Search key from searchKey attribute of a previous response.
- name: q
type: string
description: Search string.
# Player Grouping
- id: add_slave
label: Group Player(s) to Primary
kind: action
params:
- name: slave
type: string
description: IP address of the secondary player to add. For multiple players use 'slaves' (comma-separated).
- name: port
type: integer
description: Port of the secondary player (default 11000).
- name: group
type: string
description: Optional. Group name; BluOS assigns default if omitted.
- id: remove_slave
label: Remove Player(s) from Group
kind: action
params:
- name: slave
type: string
description: IP address of the secondary player to remove. For multiple players use 'slaves' (comma-separated).
- name: port
type: integer
description: Port of the secondary player.
# Player Reboot
- id: reboot
label: Reboot Player
kind: action
params: []
# Note: sent as HTTP POST to /reboot with parameter yes=1
# Doorbell Chime
- id: doorbell
label: Play Doorbell Chime
kind: action
params:
- name: play
type: integer
description: Always 1.
# Input Selection
- id: select_input_url
label: Select Active Input by URL
kind: action
params:
- name: url
type: string
description: URL-encoded input URL from /RadioBrowse?service=Capture response.
- id: select_input_by_type_index
label: Select Input by Type and Index (BluOS v4.2.0+)
kind: action
params:
- name: inputTypeIndex
type: string
description: "Format: type-index. Types: spdif, analog, coax, bluetooth, arc, earc, phono, computer, aesebu, balanced, microphone. Example: spdif-2 for Optical Input 2."
- id: select_input_by_index
label: Select Input by Index (BluOS v3.8.0-v4.2.0)
kind: action
params:
- name: inputIndex
type: integer
description: Index (1-based) of input from /Settings?id=capture response; Bluetooth excluded.
# Bluetooth Mode
- id: set_bluetooth_mode
label: Set Bluetooth Mode
kind: action
params:
- name: bluetoothAutoplay
type: integer
description: "0 = Manual, 1 = Automatic, 2 = Guest, 3 = Disabled."
- id: radio_browse
label: Browse Radio or Input Sources
kind: action
params:
- name: service
type: string
description: "Service to browse. Use 'Capture' to retrieve available input source URLs for input selection via select_input_url."
- id: get_capture_settings
label: Get Capture Input Settings
kind: action
params:
- name: id
type: string
description: "Settings group id. Use 'capture' to retrieve external input sources and their indices for use with select_input_by_index."
- name: schemaVersion
type: integer
description: "Optional. Settings schema version (e.g., 32 for the latest schema version)."
Feedbacks
# Playback Status (/Status)
- id: playback_status
label: Playback Status
type: object
description: "Returns playback and volume state. Key fields: state (play/pause/stop/stream/connecting), volume (0-100 or -1 for fixed), mute (0/1), title1, title2, title3, artist, album, shuffle (0/1), repeat (0/1/2), totlen, secs, service, streamFormat, syncStat."
endpoint: /Status
polling_note: "Long polling supported via timeout and etag parameters. Recommended long-poll interval: 100s. Regular polling: no faster than every 30s."
# Player / Group Sync Status (/SyncStatus)
- id: sync_status
label: Player and Group Sync Status
type: object
description: "Returns player name, volume, mute state, group membership, model, brand, and IP/port of master and slaves. Key fields: volume, mute, name, model, brand, group, master, slave(s)."
endpoint: /SyncStatus
polling_note: "Long polling supported. Recommended interval: 180s."
# Volume (/Volume query)
- id: volume_state
label: Volume State
type: object
description: "Returns current volume (0-100 or -1 for fixed), mute state (0/1), volume in dB, muteDb, muteVolume."
endpoint: /Volume
# Play Queue (/Playlist)
- id: queue_status
label: Play Queue Status
type: object
description: "Returns queue length, id, name, modified flag, and optionally track details."
endpoint: /Playlist
# Presets (/Presets)
- id: presets_list
label: Presets List
type: object
description: "Returns list of presets (id, name, url, image) and the prid."
endpoint: /Presets
# Sync with /Status via syncStat field for /SyncStatus changes
Variables
# UNRESOLVED: no settable parameters distinct from Actions found in source beyond what is covered above
Events
# Long-polling on /Status and /SyncStatus provides unsolicited-style change notification when state changes.
# No push/unsolicited notification mechanism (webhook, socket, etc.) described in source beyond long polling.
# UNRESOLVED: whether BluOS sends any true unsolicited UDP or TCP notifications outside LSDP discovery
Macros
# UNRESOLVED: no multi-step macros described explicitly in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures described in source.
# Note: /reboot sends a soft reboot; no confirmation described in API.
Notes
Protocol note: Despite the input label "RS-232C," the source document (BluOS Custom Integration API v1.7) documents an HTTP/TCP REST-style protocol only. All requests are HTTP GET (except /reboot which is HTTP POST) to http://<player_ip>:11000/<endpoint>. No serial/RS-232 command table was found in the source.
Port: 11000 is used for all standard BluOS players. The NAD CI580 (a multi-streamer chassis) uses ports 11000, 11010, 11020, 11030 for nodes 1–4 respectively. Actual port should be discovered via mDNS (services musc._tcp and musp._tcp) or LSDP (Lenbrook Service Discovery Protocol, UDP broadcast port 11430).
Long polling: BluOS supports long polling for /Status and /SyncStatus. Use timeout (seconds) and etag (from previous response root attribute) parameters. Do not poll faster than once per second even with long polling; regular polling no faster than once per 30 seconds.
Input selection firmware variants: /Play?inputTypeIndex= is for BluOS firmware v4.2.0 and newer. /Play?inputIndex= is for firmware v3.8.0 to v4.2.0. Use /RadioBrowse?service=Capture + /Play?url= for the URL-based method (all firmware).
Player grouping terminology: BluOS calls the main player the "primary player" and attached players "secondary players." Requests directed to a secondary player for playback control are internally proxied to the primary player.
Response format: All responses are UTF-8 encoded XML. The root element varies by endpoint. Undocumented response attributes should be ignored per API guidance.
Discovery: LSDP (Lenbrook Service Discovery Protocol) uses UDP broadcast on port 11430. Class ID 0x0001 = BluOS Player (_musc._tcp).
Provenance
source_domains:
- bluos.io
source_urls:
- https://bluos.io/wp-content/uploads/2025/06/BluOS-Custom-Integration-API_v1.7.pdf
retrieved_at: 2026-05-19T04:27:33.193Z
last_checked_at: 2026-06-10T00:28:10.994Z
Verification Summary
verdict: verified
checked_at: 2026-06-10T00:28:10.994Z
matched_actions: 32
action_count: 32
confidence: medium
summary: "All 32 spec actions match documented BluOS API endpoints; transport values are source-verbatim; all 35 source-side command units are represented across actions and feedbacks. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "The input \"Known protocol: RS-232C\" conflicts with the source document, which describes an HTTP/TCP API only. No RS-232 or serial command table was found in the source. This spec documents the HTTP control interface as found in the source. If a separate RS-232 spec exists for this device, it is not covered here."
- "no settable parameters distinct from Actions found in source beyond what is covered above"
- "whether BluOS sends any true unsolicited UDP or TCP notifications outside LSDP discovery"
- "no multi-step macros described explicitly in source"
- "no safety warnings or interlock procedures described in source."
- "RS-232/serial command set for the NAD T777 Series not found in this source document. If serial control is required, a separate source document covering the RS-232 protocol is needed."
- "Authentication — source describes no login/auth procedure; inferred none required."
- "Firmware version compatibility range for NAD T777 Series specifically not stated; BluOS API v1.7 referenced generically across NAD, Bluesound, DALI products."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0