Summary
Denon HEOS N 10Gb is a network-connected wireless multi-room music player. This spec covers the HEOS Command Line Interface (CLI), accessed over a TCP telnet socket (port 1255): controllers send ASCII command strings in heos://command_group/command?attribute=value form terminated by \r\n, and receive JSON responses (also \r\n-terminated). The CLI supports player/group management, playback transport, volume/mute, queue management, music-source browsing/search, and unsolicited change events.
Transport
protocols:
- tcp
addressing:
port: 1255
auth:
type: none # inferred: no connection-level auth procedure in source; HEOS account sign_in is optional and only required for online music services
Traits
# Inferred from command evidence in source:
- levelable # inferred: set_volume / volume_up / volume_down (level 0-100), per-player and per-group
- queryable # inferred: get_players, get_play_state, get_volume, get_mute, get_queue, etc.
- routable # inferred: play_input routes an input source to same or another player (pid/spid)
Actions
# System commands
- id: register_for_change_events
label: Register For Change Events
kind: action
command: "heos://system/register_for_change_events?enable={enable}"
params:
- name: enable
type: string
description: "on or off; on enables unsolicited change events (off by default)"
- id: check_account
label: HEOS Account Check
kind: query
command: "heos://system/check_account"
params: []
- id: sign_in
label: HEOS Account Sign In
kind: action
command: "heos://system/sign_in?un={un}&pw={pw}"
params:
- name: un
type: string
description: HEOS account username
- name: pw
type: string
description: HEOS account password
- id: sign_out
label: HEOS Account Sign Out
kind: action
command: "heos://system/sign_out"
params: []
- id: heart_beat
label: HEOS System Heart Beat
kind: query
command: "heos://system/heart_beat"
params: []
- id: reboot
label: HEOS Speaker Reboot
kind: action
command: "heos://system/reboot"
params: []
# Note from source: reboots only the HEOS device the controller is connected to via CLI port.
- id: prettify_json_response
label: Prettify JSON Response
kind: action
command: "heos://system/prettify_json_response?enable={enable}"
params:
- name: enable
type: string
description: "on or off; prettifies JSON responses for telnet use"
# Player commands
- id: get_players
label: Get Players
kind: query
command: "heos://player/get_players"
params: []
- id: get_player_info
label: Get Player Info
kind: query
command: "heos://player/get_player_info?pid={pid}"
params:
- name: pid
type: string
description: Player id returned by get_players or get_groups
- id: get_play_state
label: Get Play State
kind: query
command: "heos://player/get_play_state?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: set_play_state
label: Set Play State
kind: action
command: "heos://player/set_play_state?pid={pid}&state={state}"
params:
- name: pid
type: string
description: Player id
- name: state
type: string
description: "play, pause, or stop"
- id: get_now_playing_media
label: Get Now Playing Media
kind: query
command: "heos://player/get_now_playing_media?pid={pid}"
params:
- name: pid
type: string
description: Player id returned by get_players or get_groups
- id: get_volume
label: Get Volume
kind: query
command: "heos://player/get_volume?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: set_volume
label: Set Volume
kind: action
command: "heos://player/set_volume?pid={pid}&level={level}"
params:
- name: pid
type: string
description: Player id
- name: level
type: integer
description: Player volume level, 0 to 100
- id: volume_up
label: Volume Up
kind: action
command: "heos://player/volume_up?pid={pid}&step={step}"
params:
- name: pid
type: string
description: Player id
- name: step
type: integer
description: Volume step level, 1 to 10 (default 5)
- id: volume_down
label: Volume Down
kind: action
command: "heos://player/volume_down?pid={pid}&step={step}"
params:
- name: pid
type: string
description: Player id
- name: step
type: integer
description: Volume step level, 1 to 10 (default 5)
- id: get_mute
label: Get Mute
kind: query
command: "heos://player/get_mute?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: set_mute
label: Set Mute
kind: action
command: "heos://player/set_mute?pid={pid}&state={state}"
params:
- name: pid
type: string
description: Player id
- name: state
type: string
description: "on or off"
- id: toggle_mute
label: Toggle Mute
kind: action
command: "heos://player/toggle_mute?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: get_play_mode
label: Get Play Mode
kind: query
command: "heos://player/get_play_mode?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: set_play_mode
label: Set Play Mode
kind: action
command: "heos://player/set_play_mode?pid={pid}&repeat={repeat}&shuffle={shuffle}"
params:
- name: pid
type: string
description: Player id
- name: repeat
type: string
description: "on_all, on_one, or off"
- name: shuffle
type: string
description: "on or off"
- id: get_queue
label: Get Queue
kind: query
command: "heos://player/get_queue?pid={pid}&range={range}"
params:
- name: pid
type: string
description: Player id
- name: range
type: string
description: "Optional 'start#,end#' record index (starts from 0); omitting returns up to 100 records per response"
- id: play_queue
label: Play Queue Item
kind: action
command: "heos://player/play_queue?pid={pid}&qid={qid}"
params:
- name: pid
type: string
description: Player id
- name: qid
type: string
description: Queue id for song returned by get_queue
- id: remove_from_queue
label: Remove Item(s) From Queue
kind: action
command: "heos://player/remove_from_queue?pid={pid}&qid={qid_list}"
params:
- name: pid
type: string
description: Player id
- name: qid_list
type: string
description: Comma-separated list of queue ids returned by get_queue
- id: save_queue
label: Save Queue As Playlist
kind: action
command: "heos://player/save_queue?pid={pid}&name={name}"
params:
- name: pid
type: string
description: Player id
- name: name
type: string
description: New playlist name, limited to 128 unicode characters
- id: clear_queue
label: Clear Queue
kind: action
command: "heos://player/clear_queue?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: play_next
label: Play Next
kind: action
command: "heos://player/play_next?pid={pid}"
params:
- name: pid
type: string
description: Player id
- id: play_previous
label: Play Previous
kind: action
command: "heos://player/play_previous?pid={pid}"
params:
- name: pid
type: string
description: Player id
# Group commands
- id: get_groups
label: Get Groups
kind: query
command: "heos://group/get_groups"
params: []
- id: get_group_info
label: Get Group Info
kind: query
command: "heos://group/get_group_info?gid={gid}"
params:
- name: gid
type: string
description: Group id returned by get_groups
- id: set_group
label: Set Group (Create / Modify / Ungroup)
kind: action
command: "heos://group/set_group?pid={pid_list}"
params:
- name: pid_list
type: string
description: "Comma-separated player ids; first pid is group leader. Multiple pids create/modify a group; a single leader pid ungroups all players in that group"
- id: group_get_volume
label: Get Group Volume
kind: query
command: "heos://group/get_volume?gid={gid}"
params:
- name: gid
type: string
description: Group id
- id: group_set_volume
label: Set Group Volume
kind: action
command: "heos://group/set_volume?gid={gid}&level={level}"
params:
- name: gid
type: string
description: Group id
- name: level
type: integer
description: Group volume level, 0 to 100
- id: group_volume_up
label: Group Volume Up
kind: action
command: "heos://group/volume_up?gid={gid}&step={step}"
params:
- name: gid
type: string
description: Group id
- name: step
type: integer
description: Group volume step level, 1 to 10 (default 5)
- id: group_volume_down
label: Group Volume Down
kind: action
command: "heos://group/volume_down?gid={gid}&step={step}"
params:
- name: gid
type: string
description: Group id
- name: step
type: integer
description: Group volume step level, 1 to 10 (default 5)
- id: group_get_mute
label: Get Group Mute
kind: query
command: "heos://group/get_mute?gid={gid}"
params:
- name: gid
type: string
description: Group id
- id: group_set_mute
label: Set Group Mute
kind: action
command: "heos://group/set_mute?gid={gid}&state={state}"
params:
- name: gid
type: string
description: Group id
- name: state
type: string
description: "on or off"
- id: group_toggle_mute
label: Toggle Group Mute
kind: action
command: "heos://group/toggle_mute?gid={gid}"
params:
- name: gid
type: string
description: Group id
# Browse commands
- id: get_music_sources
label: Get Music Sources
kind: query
command: "heos://browse/get_music_sources"
params: []
- id: get_source_info
label: Get Source Info
kind: query
command: "heos://browse/get_source_info?sid={sid}"
params:
- name: sid
type: string
description: Source id returned by get_music_sources (or by browse for heos_server / heos_service types)
- id: browse_source
label: Browse Source
kind: query
command: "heos://browse/browse?sid={sid}"
params:
- name: sid
type: string
description: Source id; used for browsing 'heos_server' / 'heos_service' sources and top music view
- id: browse_source_containers
label: Browse Source Containers
kind: query
command: "heos://browse/browse?sid={sid}&cid={cid}&range={range}"
params:
- name: sid
type: string
description: Source id
- name: cid
type: string
description: Container id returned by browse or search
- name: range
type: string
description: "Optional 'start#,end#' (starts from 0); omitting returns up to 50 or 100 records depending on service"
- id: get_search_criteria
label: Get Source Search Criteria
kind: query
command: "heos://browse/get_search_criteria?sid={sid}"
params:
- name: sid
type: string
description: Source id
- id: search
label: Search
kind: query
command: "heos://browse/search?sid={sid}&search={search}&scid={scid}&range={range}"
params:
- name: sid
type: string
description: Source id
- name: search
type: string
description: Search string limited to 128 unicode characters; may contain '*' wildcard if supported by scid
- name: scid
type: string
description: Search criteria id returned by get_search_criteria
- name: range
type: string
description: "Optional 'start#,end#' (starts from 0)"
- id: play_stream
label: Play Station (Play Stream)
kind: action
command: "heos://browse/play_stream?pid={pid}&sid={sid}&cid={cid}&mid={mid}&name={name}"
params:
- name: pid
type: string
description: Player id
- name: sid
type: string
description: Source id
- name: cid
type: string
description: Container id used to browse current container; ignore when no cid (e.g. station from Search)
- name: mid
type: string
description: Media id of 'station' media type returned by browse or search
- name: name
type: string
description: Station name returned by browse
- id: play_preset
label: Play Preset Station
kind: action
command: "heos://browse/play_preset?pid={pid}&preset={preset}"
params:
- name: pid
type: string
description: Player id
- name: preset
type: integer
description: Station offset in HEOS Favorites, 1 and above
- id: play_input
label: Play Input Source (Same Speaker)
kind: action
command: "heos://browse/play_input?pid={pid}&input={input}"
params:
- name: pid
type: string
description: Player id of the selected speaker
- name: input
type: string
description: "Input source name, e.g. inputs/aux_in_1, inputs/line_in_1, inputs/coax_in_1, inputs/optical_in_1, inputs/hdmi_in_1, inputs/hdmi_arc_1, inputs/cable_sat, inputs/dvd, inputs/bluray, inputs/game, inputs/mediaplayer, inputs/cd, inputs/tuner, inputs/hdradio, inputs/tvaudio, inputs/phono; validity depends on source HEOS device type"
- id: play_input_remote
label: Play Input Source (Another Speaker)
kind: action
command: "heos://browse/play_input?pid={pid}&spid={spid}&input={input}"
params:
- name: pid
type: string
description: Player id of destination HEOS speaker
- name: spid
type: string
description: Player id of the HEOS device acting as the source
- name: input
type: string
description: Input source name (see play_input)
- id: play_stream_obsolete
label: Play Stream (Obsolete sid Variant)
kind: action
command: "heos://browse/play_stream?pid={pid}&sid={sid}&mid={mid}"
params:
- name: pid
type: string
description: Player id
- name: sid
type: string
description: Source id
- name: mid
type: string
description: Media id
# Source marks this variant OBSOLETE; use play_input instead.
- id: add_container_to_queue
label: Add Container to Queue with Options
kind: action
command: "heos://browse/add_to_queue?pid={pid}&sid={sid}&cid={cid}&aid={aid}"
params:
- name: pid
type: string
description: Player id
- name: sid
type: string
description: Source id
- name: cid
type: string
description: 'Playable' container id returned by browse or search
- name: aid
type: integer
description: "Add criteria: 1 play now, 2 play next, 3 add to end, 4 replace and play"
- id: add_track_to_queue
label: Add Track to Queue with Options
kind: action
command: "heos://browse/add_to_queue?pid={pid}&sid={sid}&cid={cid}&mid={mid}&aid={aid}"
params:
- name: pid
type: string
description: Player id
- name: sid
type: string
description: Source id
- name: cid
type: string
description: Container id used to browse/search current container
- name: mid
type: string
description: Media id of 'track' media type returned by browse or search
- name: aid
type: integer
description: "Add criteria: 1 play now, 2 play next, 3 add to end, 4 replace and play"
- id: rename_playlist
label: Rename HEOS Playlist
kind: action
command: "heos://browse/rename_playlist?sid={sid}&cid={cid}&name={name}"
params:
- name: sid
type: string
description: Source id; select HEOS source to get HEOS playlists
- name: cid
type: string
description: Container id returned in Get HEOS Playlists
- name: name
type: string
description: New playlist name limited to 128 unicode characters
- id: delete_playlist
label: Delete HEOS Playlist
kind: action
command: "heos://browse/delete_playlist?sid={sid}&cid={cid}"
params:
- name: sid
type: string
description: Source id; select HEOS source to get HEOS playlists
- name: cid
type: string
description: Container id returned in Get HEOS Playlists
- id: retrieve_metadata
label: Retrieve Album Metadata
kind: query
command: "heos://browse/retrieve_metadata?sid={sid}&cid={cid}"
params:
- name: sid
type: string
description: "Source id; supported sources are Rhapsody / Napster"
- name: cid
type: string
description: Album id returned by browse or get_now_playing_media (Rhapsody/Napster album ids)
- id: get_service_options
label: Get Service Options for Now Playing Screen (Obsolete)
kind: query
command: "heos://browse/get_service_options?sid={sid}"
params:
- name: sid
type: string
description: Source id
# Source marks this command OBSOLETE; get_now_playing_media now includes options.
- id: set_service_option
label: Set Service Option
kind: action
command: "heos://browse/set_service_option?sid={sid}&option={option}&mid={mid}"
params:
- name: sid
type: string
description: Source id
- name: option
type: integer
description: "Option id: 1 Add Track to Library (Rhapsody), 2 Add Album to Library (Rhapsody), 3 Add Station to Library (Rhapsody), 4 Add Playlist to Library (Rhapsody), 5 Remove Track from Library (Rhapsody), 6 Remove Album from Library (Rhapsody), 7 Remove Station from Library (Rhapsody), 8 Remove Playlist from Library (Rhapsody), 11 Thumbs Up (Pandora), 12 Thumbs Down (Pandora), 13 Create New Station (Pandora, iHeartRadio; optional scid and range params), 19 Add Station to HEOS Favorites (optional pid, or sid/cid/mid on browse screen), 20 Remove from HEOS Favorites"
- name: mid
type: string
description: "Optional; media/container id or name depending on option (mid for track/station ids, cid for album/playlist ids, name for Create New Station search string, pid for options 11/12/19)"
Feedbacks
# Populated from query-response payloads documented in source:
- id: players
type: list
description: "Player list: name, pid, gid (optional), model, version, network (wired|wifi), lineout (1 variable|2 fixed), control (1 None|2 IR|3 Trigger|4 Network, only when lineout=2)"
- id: groups
type: list
description: "Group list: name, gid, players[] each with name, pid, role (leader or member)"
- id: play_state
type: enum
values: [play, pause, stop]
- id: now_playing_media
type: object
description: "Payload: type (song|station), song, album, artist, station (when type=station), image_url, mid, qid, sid, options[]"
- id: volume_level
type: integer
description: Volume level 0 to 100 (per player via get_volume; per group via group/get_volume)
- id: mute_state
type: enum
values: [on, off]
- id: play_mode
type: object
description: "repeat (on_all|on_one|off) and shuffle (on|off), via get_play_mode"
- id: queue
type: list
description: "Queue items: song, album, artist, image_url, qid, mid, album_id; max 100 records per response"
- id: music_sources
type: list
description: "Source list: name, image_url, type (music_service|heos_service|heos_server|dlna_server), sid"
- id: account_status
type: enum
values: [signed_in, signed_out]
Variables
# No settable parameters beyond the discrete actions above; volume, mute, and
# play mode are all covered by dedicated set/toggle actions.
# UNRESOLVED: none applicable from source
Events
# Unsolicited change events; only sent after register_for_change_events?enable=on.
- id: sources_changed
description: '{ "heos": { "command": "event/sources_changed" } }'
- id: players_changed
description: '{ "heos": { "command": "event/players_changed" } }'
- id: groups_changed
description: '{ "heos": { "command": "event/groups_changed" } }'
- id: source_data_changed
description: '{ "heos": { "command": "event/source_data_changed", "message": "sid=''source_id''" } }'
- id: player_state_changed
description: '{ "heos": { "command": "event/player_state_changed", "message": "pid=''player_id''&state=''play_state''" } }'
- id: player_now_playing_changed
description: '{ "heos": { "command": "event/player_now_playing_changed", "message": "pid=''player_id''" } }'
- id: player_now_playing_progress
description: '{ "heos": { "command": "event/player_now_playing_progress", "message": "pid=player_id&cur_pos=position_ms&duration=duration_ms" } }'
- id: player_playback_error
description: '{ "heos": { "command": "event/player_playback_error", "message": "pid=player_id&error=Could Not Download" } }'
- id: player_queue_changed
description: '{ "heos": { "command": "event/player_queue_changed", "message": "pid=''player_id''" } }'
- id: player_volume_changed
description: '{ "heos": { "command": "event/player_volume_changed", "message": "pid=''player_id''&level=''vol_level''" } }'
- id: player_mute_changed
description: '{ "heos": { "command": "event/player_mute_changed", "message": "pid=''player_id''&state=''on_or_off''" } }'
- id: repeat_mode_changed
description: '{ "heos": { "command": "event/repeat_mode_changed", "message": "pid=''player_id''&repeat=''on_all_or_on_one_or_off''" } }'
- id: shuffle_mode_changed
description: '{ "heos": { "command": "event/shuffle_mode_changed", "message": "pid=''player_id''&shuffle=''on_or_off''" } }'
- id: group_changed
description: '{ "heos": { "command": "event/group_changed", "message": "gid=''group_id''" } }'
- id: group_volume_changed
description: '{ "heos": { "command": "event/group_volume_changed", "message": "gid=''group_id''&level=''vol_level''" } }'
- id: group_mute_changed
description: '{ "heos": { "command": "event/group_mute_changed", "message": "gid=''group_id''&state=''on_or_off''" } }'
- id: user_changed
description: '{ "heos": { "command": "event/user_changed", "message": "signed_out or signed_in&un=<current user name>" } }'
Macros
# Driver initialization sequence from source Section 2.1.1:
- id: driver_initialization
steps:
- "heos://system/register_for_change_events?enable=off"
- "heos://system/sign_in?un={un}&pw={pw}" # only if user credentials available
- "heos://player/get_players"
- "heos://browse/get_music_sources"
- "heos://group/get_groups"
- "heos://player/get_queue?pid={pid}"
- "heos://player/get_now_playing_media?pid={pid}"
- "heos://player/get_volume?pid={pid}"
- "heos://player/get_play_state?pid={pid}"
- "heos://system/register_for_change_events?enable=on"
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings or interlock procedures.
# Note: system/reboot restarts the connected device; source states no interlock requirements.
Notes
- Connection: telnet-style TCP socket to port 1255. Device discoverable via UPnP SSDP; M-SEARCH search target (ST) is
urn:schemas-denon-com:device:ACT-Denon:1. IP can also be set statically. - One socket connection to a single HEOS speaker controls all HEOS speakers on the network; do not connect to every speaker. Controllers may open multiple connections (typically one for events, one for user actions). Maximum 32 simultaneous socket connections per speaker.
- Framing: commands and JSON responses are delimited by
\r\n. Commands are ASCIIheos://URI strings; responses are JSON withheos(command/result/message) and optionalpayload. - URL encoding required in attribute values:
&→%26,=→%3D,%→%25. Strings received in browse responses are already encoded and can be reused directly. - Browse/search commands may return an interim
{"heos": {"message": "command under process"}}response when data cannot be populated immediately. - CLI module runs dormant until first socket connection; allow time for player discovery before issuing player commands, and expect an initial spew of events on connect (hence the un-register-first init sequence).
- HEOS account changes made in the HEOS app do not reflect via CLI until re sign-in; provide sign-out/sign-in in controller UI.
- Custom argument
SEQUENCE=<number>may be added to browse commands to correlate command/response. - External input distribution limitation: an external input can be distributed to only one player or one group at a time and cannot be re-selected while already playing.
- Error responses carry
result: "fail"withmessagecontainingeid=<code>&text=<text>; codes 1–17 documented (e.g. 1 unrecognized command, 6 invalid credentials, 8 user not logged in, 13 processing previous command, 17 reached skip limit). - Supported online services: Deezer, iHeartRadio, Napster, Pandora, Rhapsody, SoundCloud, SiriusXM, Tidal, TuneIn, Amazon Music; plus local USB media, DLNA servers, HEOS Favorites/Playlists/History, and HEOS aux inputs.
Provenance
source_domains:
- assets.denon.com
source_urls:
- https://assets.denon.com/documentmaster/us/heos_cli_protocol_specification_290616.pdf
retrieved_at: 2026-09-15T18:43:02.596Z
last_checked_at: 2026-09-15T22:16:27.268Z
Verification Summary
verdict: verified
checked_at: 2026-09-15T22:16:27.268Z
matched_actions: 56
action_count: 56
confidence: medium
summary: "All 56 spec actions match source 4.1-4.4 commands literally; transport port 1255 verified; no source commands unrepresented. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility not stated in source"
- "source documents no power on/off commands (reboot only)"
- "device hardware specifications (voltage, power) not in source"
- "none applicable from source"
- "source contains no safety warnings or interlock procedures."
- "protocol version number not stated in source"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0