Summary
The NAD T758 V3i MultiZone Series is an AV receiver featuring BluOS network streaming. This spec covers the BluOS Custom Integration API (v1.7), an HTTP-based control interface on TCP port 11000 that accepts HTTP GET requests and returns UTF-8 XML responses. It provides playback control, volume management, play queue manipulation, preset recall, content browsing/searching, player grouping, input selection, Bluetooth mode control, doorbell chime, and player reboot.
Transport
protocols:
- http
addressing:
base_url: "http://{player_ip}:11000"
port: 11000
auth:
type: none # inferred: no auth procedure in source
Traits
traits:
- powerable # inferred: reboot command available
- levelable # inferred: volume level and mute commands present
- queryable # inferred: /Status, /SyncStatus, /Volume queries return state
- routable # inferred: input selection commands present
Actions
actions:
- id: play
label: Play
kind: action
params:
- name: seek
type: integer
description: "Jump to position in current track (seconds)"
- name: id
type: integer
description: "Track ID in queue to play (used with seek)"
- name: url
type: string
description: "URL-encoded stream URL to play"
- id: pause
label: Pause
kind: action
params:
- name: toggle
type: integer
description: "Set to 1 to 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: shuffle
label: Shuffle
kind: action
params:
- name: state
type: integer
description: "0 to disable shuffle, 1 to enable shuffle"
- id: repeat
label: Repeat
kind: action
params:
- name: state
type: integer
description: "0 = repeat queue, 1 = repeat track, 2 = repeat off"
- id: set_volume
label: Set Volume
kind: action
params:
- name: level
type: integer
description: "Absolute volume level 0-100"
- name: db
type: integer
description: "Relative volume change in dB (positive or negative)"
- name: abs_db
type: number
description: "Absolute volume in dB"
- name: tell_slaves
type: integer
description: "0 = this player only, 1 = all grouped players"
- id: mute_on
label: Mute On
kind: action
params: []
- id: mute_off
label: Mute Off
kind: action
params: []
- id: delete_track
label: Delete Track
kind: action
params:
- name: id
type: integer
description: "Track position in play 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: clear_queue
label: Clear Queue
kind: action
params: []
- 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, or +1 for next, or -1 for previous"
- id: browse
label: Browse Content
kind: action
params:
- name: key
type: string
description: "Browse key from previous response (URL-encoded)"
- name: withContextMenuItems
type: integer
description: "Set to 1 to include inline context menu"
- id: search
label: Search Content
kind: action
params:
- name: key
type: string
description: "Search key from browse response"
- name: q
type: string
description: "Search text"
- id: group_add_slave
label: Group Add Slave
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 Slaves
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 Slave
kind: action
params:
- name: slave
type: string
description: "IP address of secondary player"
- name: port
type: integer
description: "Port of secondary player"
- id: group_remove_slaves
label: Group Remove Multiple Slaves
kind: action
params:
- name: slaves
type: string
description: "Comma-separated IP addresses"
- name: ports
type: string
description: "Comma-separated port numbers"
- id: reboot
label: Reboot Player
kind: action
params:
- name: yes
type: string
description: "Any value to confirm reboot (POST command)"
- id: doorbell
label: Doorbell Chime
kind: action
params:
- name: play
type: integer
description: "Always 1"
- id: select_input_active
label: Select Active Input
kind: action
params:
- name: url
type: string
description: "URL value from /RadioBrowse?service=Capture response"
- id: select_input_index
label: Select Input by Index
kind: action
params:
- name: inputIndex
type: integer
description: "1-based index from /Settings?id=capture (firmware v3.8.0-v4.2.0)"
- id: select_input_type_index
label: Select Input by 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: bluetooth_mode
label: Change Bluetooth Mode
kind: action
params:
- name: bluetoothAutoplay
type: integer
description: "0=Manual, 1=Automatic, 2=Guest, 3=Disabled"
- id: streaming_action
label: Streaming Radio Action
kind: action
params:
- name: service
type: string
description: "Service name"
- name: action
type: string
description: "Action URL from /Status response <action> element"
Feedbacks
feedbacks:
- id: playback_status
type: xml
description: "Returns playback state, track info, volume, shuffle, repeat, etag, and more via /Status"
fields:
- name: state
values: [play, pause, stop, stream, connecting]
- name: volume
description: "Volume level 0-100, -1 for fixed"
- name: mute
values: ["0", "1"]
- name: shuffle
values: ["0", "1"]
- name: repeat
values: ["0", "1", "2"]
- name: artist
- name: album
- name: name
description: "Track title"
- name: secs
description: "Seconds elapsed in current track"
- name: totlen
description: "Total track length in seconds"
- name: etag
description: "Opaque value for long-polling change detection"
- name: syncStat
description: "ID indicating /SyncStatus change"
- id: sync_status
type: xml
description: "Returns player info, grouping, volume, model via /SyncStatus"
fields:
- name: name
description: "Player name"
- name: model
description: "Player model ID"
- name: modelName
- name: brand
- name: volume
description: "Volume 0-100, -1 for fixed"
- name: mute
values: ["0", "1"]
- name: group
description: "Group name"
- name: etag
- name: syncStat
- name: initialized
values: ["true", "false"]
- id: volume_status
type: xml
description: "Returns current volume level, dB, mute state via /Volume"
fields:
- name: volume
description: "Volume level 0-100"
- name: db
description: "Volume in dB"
- name: mute
values: ["0", "1"]
- name: muteVolume
description: "Unmuted volume level 0-100"
- name: muteDb
description: "Unmuted volume in dB"
- id: playlist_status
type: xml
description: "Returns play queue info via /Playlist"
fields:
- name: name
description: "Queue name"
- name: length
description: "Number of tracks"
- name: id
description: "Unique queue ID"
- name: modified
values: ["0", "1"]
- id: presets_list
type: xml
description: "Returns all presets via /Presets"
fields:
- name: id
description: "Preset ID"
- name: name
description: "Preset name"
- name: url
description: "Preset source URL"
- name: image
description: "Image URL"
- id: doorbell_status
type: xml
description: "Returns doorbell chime status"
fields:
- name: enable
- name: volume
- name: chime
description: "Chime audio path"
Variables
variables:
- id: volume_level
type: integer
min: 0
max: 100
description: "Player volume level percentage; -1 means fixed volume"
- id: volume_db
type: number
description: "Player volume in dB"
- id: mute_state
type: enum
values: [muted, unmuted]
description: "Mute state"
- id: shuffle_state
type: enum
values: [off, on]
- id: repeat_state
type: enum
values: [queue, track, off]
description: "0=repeat queue, 1=repeat track, 2=repeat off"
- id: bluetooth_mode
type: enum
values: [manual, automatic, guest, disabled]
Events
# UNRESOLVED: no unsolicited event/notification mechanism described in source
# Long-polling via etag/timeout is the closest mechanism (poll-based, not push)
Macros
# UNRESOLVED: no multi-step sequences explicitly described in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing
# requirements found in source. Reboot command noted but no safety constraints specified.
Notes
- All API commands are HTTP GET requests (except reboot which is POST) returning UTF-8 XML.
- Default TCP port is 11000 for all BluOS players. CI580 uses ports 11000, 11010, 11020, 11030 for its four nodes.
- Port discovery should be performed via mDNS (services
musc.tcpandmusp.tcp) or LSDP (UDP broadcast on port 11430). - Long-polling is supported on
/Statusand/SyncStatususingtimeoutandetagparameters. Recommended polling interval for/Statusis 100 seconds; for/SyncStatusis 180 seconds. - Without long-polling, restrict polling to at most once every 30 seconds.
- Input selection has three methods depending on firmware version: active input via
/Play?url=, index-based via/Play?inputIndex=(firmware v3.8.0–v4.2.0), and type-index via/Play?inputTypeIndex=(firmware v4.2.0+). - Input types for
inputTypeIndex: spdif, analog, coax, bluetooth, arc, earc, phono, computer, aesebu, balanced, microphone. - Available inputs must be discovered via
/RadioBrowse?service=Captureor/Settings?id=capture&schemaVersion=32. - Grouped players: secondary player requests are proxied to the primary player for most commands.
- LSDP discovery protocol uses UDP broadcast on port 11430 with binary packet format (header + message blocks).
- Volume range is typically -80..0 dB but configurable via BluOS Controller app.
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-04-29T09:36:17.768Z
last_checked_at: 2026-06-02T22:09:51.420Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:09:51.420Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions traced to source (dip-safe re-verify). (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility not stated in source"
- "exact number and types of physical inputs specific to T758 V3i not enumerated (source is generic BluOS CI API)"
- "no unsolicited event/notification mechanism described in source"
- "no multi-step sequences explicitly described in source"
- "no safety warnings, interlock procedures, or power-on sequencing"
- "exact physical inputs (HDMI, analog, optical count) specific to T758 V3i not stated — must be discovered at runtime"
- "firmware version compatibility range not stated"
- "maximum number of grouped players not stated"
- "error response format partially described (<error><message>) but full error codes not enumerated"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0