Summary
The WiiM Amp is a network-connected streaming amplifier controlled via an HTTPS-based HTTP API. Commands are issued as GET requests to https://<ip>/httpapi.asp?command=<cmd> with responses in JSON or plain text. This spec covers playback control, volume/mute, EQ, source input switching, alarms, device management, and track metadata queries.
Transport
protocols:
- http
addressing:
base_url: "https://{ip}/httpapi.asp?command={command}"
port: null # UNRESOLVED: port number not stated in source; standard HTTPS implied but not confirmed
auth:
type: UNRESOLVED # source does not state an authentication procedure
Traits
traits:
- powerable # inferred from shutdown/reboot commands
- queryable # inferred from getPlayerStatus, getStatusEx, getMetaInfo, etc.
- levelable # inferred from volume control (0-100)
- routable # inferred from source input switching (line-in, bluetooth, optical, udisk, wifi)
Actions
actions:
- id: play_url
label: Play Audio URL
kind: action
params:
- name: url
type: string
description: URL pointing to an audio stream
command: setPlayerCmd:play:{url}
response: OK
- id: play_playlist
label: Play Playlist
kind: action
params:
- name: url
type: string
description: URL to m3u or ASX playlist
- name: index
type: integer
description: Start index in the playlist
command: setPlayerCmd:playlist:{url}:{index}
response: OK
- id: pause
label: Pause
kind: action
params: []
command: setPlayerCmd:pause
- id: resume
label: Resume
kind: action
params: []
command: setPlayerCmd:resume
- id: toggle_pause_play
label: Toggle Pause/Play
kind: action
params: []
command: setPlayerCmd:onepause
description: If paused, resume; otherwise pause.
- id: previous_track
label: Previous Track
kind: action
params: []
command: setPlayerCmd:prev
- id: next_track
label: Next Track
kind: action
params: []
command: setPlayerCmd:next
- id: seek
label: Seek
kind: action
params:
- name: position
type: integer
description: Position in seconds (0 to duration)
command: setPlayerCmd:seek:{position}
- id: stop
label: Stop
kind: action
params: []
command: setPlayerCmd:stop
- id: set_volume
label: Set Volume
kind: action
params:
- name: value
type: integer
description: Volume level (0-100)
command: setPlayerCmd:vol:{value}
- id: mute
label: Mute
kind: action
params:
- name: mute
type: integer
description: "1 to mute, 0 to unmute"
command: setPlayerCmd:mute:{mute}
- id: set_loop_mode
label: Set Loop Mode
kind: action
params:
- name: mode
type: integer
description: "0 = sequence no loop, 1 = single loop, 2 = shuffle loop, -1 = sequence loop"
command: setPlayerCmd:loopmode:{mode}
- id: eq_on
label: EQ On
kind: action
params: []
command: EQOn
response: '{"status":"OK"} or {"status":"Failed"}'
- id: eq_off
label: EQ Off
kind: action
params: []
command: EQOff
response: '{"status":"OK"} or {"status":"Failed"}'
- id: eq_load
label: Load EQ Preset
kind: action
params:
- name: name
type: string
description: "One of: Flat, Acoustic, Bass Booster, Bass Reducer, Classical, Dance, Deep, Electronic, Hip-Hop, Jazz, Latin, Loudness, Lounge, Piano, Pop, R&B, Rock, Small Speakers, Spoken Word, Treble Booster, Treble Reducer, Vocal Booster"
command: EQLoad:{name}
response: '{"status":"OK"} or {"status":"Failed"}'
- id: switch_source
label: Switch Source Input
kind: action
params:
- name: mode
type: string
description: "One of: line-in, bluetooth, optical, udisk, wifi"
command: setPlayerCmd:switchmode:{mode}
- id: play_preset
label: Play Preset
kind: action
params:
- name: number
type: integer
description: Preset number (1-12)
command: MCUKeyShortClick:{number}
- id: set_alarm
label: Set Alarm
kind: action
params:
- name: n
type: integer
description: "Alarm index (0-2, max 3 alarms)"
- name: trigger
type: integer
description: "0=cancel, 1=once, 2=every day, 3=every week (by day), 4=every week (by bitmask), 5=every month"
- name: operation
type: integer
description: "0=shell execute, 1=playback or ring, 2=stop playback"
- name: time
type: string
description: "HHMMSS in UTC"
- name: day
type: string
description: "UNRESOLVED: presence and format depend on trigger (omit for trigger 0 or 2; YYYYMMDD for trigger 1; 2-byte day-of-week for trigger 3; 2-byte weekday bitmask for trigger 4; 2-byte day-of-month for trigger 5)"
- name: url
type: string
description: "UNRESOLVED: shell path or playback URL, should be less than 256 bytes"
command: setAlarmClock:{n}:{trigger}:{operation}:{time}[:{day}][:{url}]
- id: stop_alarm
label: Stop Current Alarm
kind: action
params: []
command: alarmStop
- id: reboot
label: Reboot
kind: action
params: []
command: reboot
response: '{"status":"OK"}'
- id: shutdown
label: Shutdown
kind: action
params:
- name: sec
type: integer
description: "Seconds until shutdown; 0=immediate, -1=cancel previous timer"
command: setShutdown:{sec}
response: '{"status":"OK"} or {"status":"Failed"}'
- id: time_sync
label: Sync Time
kind: action
params:
- name: datetime
type: string
description: "YYYYMMDDHHMMSS in UTC"
command: timeSync:{datetime}
- id: set_audio_output_mode
label: Set Audio Output Mode
kind: action
params:
- name: mode
type: integer
description: "1=SPDIF, 2=AUX, 3=COAX"
command: setAudioOutputHardwareMode:{mode}
response: OK
- id: play_hex_playlist
label: Play Hex Playlist
kind: action
params:
- name: url
type: string
description: URL to m3u or ASX playlist; URL should be hexed
- name: index
type: integer
description: Start index in the playlist
command: setPlayerCmd:hex_playlist:{url}:{index}
- id: get_device_status
label: Get Device Status
kind: action
params: []
command: getStatusEx
- id: get_network_connection_state
label: Get Network Connection State
kind: action
params: []
command: wlanGetConnectState
- id: get_player_status
label: Get Player Status
kind: action
params: []
command: getPlayerStatus
- id: get_eq_status
label: Get EQ Status
kind: action
params: []
command: EQGetStat
- id: get_eq_list
label: Get EQ List
kind: action
params: []
command: EQGetList
- id: get_shutdown_timer
label: Get Shutdown Timer
kind: action
params: []
command: getShutdown
- id: get_alarm
label: Get Alarm
kind: action
params:
- name: n
type: integer
description: "0~2,currently support max 3 alarm"
command: getAlarmClock:{n}
- id: get_preset_list
label: Get Preset List
kind: action
params: []
command: getPresetInfo
- id: get_current_track_metadata
label: Get Current Track Metadata
kind: action
params: []
command: getMetaInfo
- id: get_audio_output_mode
label: Get Audio Output Mode
kind: action
params: []
command: getNewAudioOutputHardwareMode
Feedbacks
feedbacks:
- id: device_status
label: Device Status
type: json
command: getStatusEx
query_command: getStatusEx
description: Returns full device info including firmware, network, UUID, MAC, IP, capabilities, etc.
- id: network_connection_state
label: Network Connection State
type: enum
values: [PROCESS, PAIRFAIL, FAIL, OK]
command: wlanGetConnectState
query_command: wlanGetConnectState
description: Returns plain text status string (not JSON).
- id: player_status
label: Player Status
type: json
command: getPlayerStatus
query_command: getPlayerStatus
fields:
- name: type
description: "0=master/standalone, 1=slave"
- name: ch
description: "0=stereo, 1=left, 2=right"
- name: mode
description: "0=None, 1=AirPlay, 2=DLNA, 10-19=Wiimu playlist, 31=Spotify, 32=TIDAL, 40=AUX-In, 41=BT, 42=external storage, 43=Optical-In, 50=Mirror, 60=Voice mail, 99=Slave"
- name: loop
description: "0=all, 1=single, 2=shuffle loop, 3=shuffle no loop, 4=no shuffle no loop"
- name: status
description: "stop, play, loading, pause"
- name: curpos
description: Current position in ms
- name: totlen
description: Total duration in ms
- name: vol
description: Current volume
- name: mute
description: "0=unmuted, 1=muted"
- id: eq_status
label: EQ Status
type: enum
values: [On, Off]
command: EQGetStat
query_command: EQGetStat
response: '{"EQStat":"On"} or {"EQStat":"Off"}'
- id: eq_list
label: EQ Preset List
type: json_array
command: EQGetList
query_command: EQGetList
values: [Flat, Acoustic, "Bass Booster", "Bass Reducer", Classical, Dance, Deep, Electronic, "Hip-Hop", Jazz, Latin, Loudness, Lounge, Piano, Pop, "R&B", Rock, "Small Speakers", "Spoken Word", "Treble Booster", "Treble Reducer", "Vocal Booster"]
- id: shutdown_timer
label: Shutdown Timer
type: integer
command: getShutdown
query_command: getShutdown
description: Returns remaining seconds until shutdown.
- id: alarm_info
label: Alarm Info
type: json
command: getAlarmClock:{n}
query_command: getAlarmClock:{n}
params:
- name: n
type: integer
description: "Alarm index (0-2)"
- id: preset_list
label: Preset List
type: json
command: getPresetInfo
query_command: getPresetInfo
description: Returns list of configured presets with name, URL, source, and cover art URL.
- id: track_metadata
label: Current Track Metadata
type: json
command: getMetaInfo
query_command: getMetaInfo
fields:
- name: album
description: Album name
- name: title
description: Track title
- name: artist
description: Artist name
- name: albumArtURI
description: Album art URL
- name: sampleRate
description: Sample rate in Hz
- name: bitDepth
description: Bit depth
- id: audio_output_mode
label: Audio Output Mode
type: json
command: getNewAudioOutputHardwareMode
query_command: getNewAudioOutputHardwareMode
fields:
- name: hardware
description: "1=SPDIF, 2=AUX, 3=COAX"
- name: source
description: "BT source output: 0=disabled, 1=active"
- name: audiocast
description: "Audio cast output: 0=disabled, 1=active"
Variables
variables:
- id: volume
label: Volume
type: integer
min: 0
max: 100
command: setPlayerCmd:vol:{value}
- id: mute_state
label: Mute State
type: integer
values: [0, 1]
command: setPlayerCmd:mute:{value}
- id: loop_mode
label: Loop Mode
type: integer
values: [-1, 0, 1, 2]
command: setPlayerCmd:loopmode:{value}
- id: audio_output_hardware
label: Audio Output Hardware Mode
type: integer
values: [1, 2, 3]
command: setAudioOutputHardwareMode:{value}
Events
# UNRESOLVED: source does not describe unsolicited notifications or event subscription mechanism
Macros
# UNRESOLVED: source does not describe multi-step macro sequences
Safety
confirmation_required_for:
- reboot
- shutdown
interlocks: []
Notes
- All commands use HTTPS GET requests to
https://<ip>/httpapi.asp?command=<cmd>. - Responses are JSON unless otherwise noted (e.g.,
wlanGetConnectStatereturns plain text). - Volume range is 0–100. Mute uses 1 (muted) / 0 (unmuted).
- Source input modes:
line-in(also covers AUX-in),bluetooth,optical,udisk,wifi. - EQ presets must match the names returned by
EQGetListexactly. - Alarm clock supports up to 3 alarms (indices 0–2). Times are in UTC.
- Preset numbers range from 1 to 12.
- The
setPlayerCmd:hex_playlistvariant accepts a hex-encoded URL. - Authentication is UNRESOLVED: the source does not state an authentication procedure.
setAlarmClockarguments are conditional on the trigger value;dayandurlare optional depending on trigger type, andurlis limited to less than 256 bytes.
Provenance
source_domains:
- wiimhome.com
- github.com
- developer.arylic.com
source_urls:
- "https://www.wiimhome.com/pdf/HTTP%20API%20for%20WiiM%20Products.pdf"
- https://github.com/cvdlinden/wiim-httpapi/blob/main/openapi.md
- https://developer.arylic.com/httpapi/
- https://github.com/cvdlinden/wiim-httpapi
retrieved_at: 2026-04-29T15:03:42.082Z
last_checked_at: 2026-10-07T20:33:23.358Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T20:33:23.358Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 action units (34 actions plus 10 query feedbacks) match source commands with correct shapes. Transport base URL is supported and the unresolved fields are honest gaps. (13 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "port number not stated in source; standard HTTPS implied but not confirmed"
- "presence and format depend on trigger (omit for trigger 0 or 2; YYYYMMDD for trigger 1; 2-byte day-of-week for trigger 3; 2-byte weekday bitmask for trigger 4; 2-byte day-of-month for trigger 5)\""
- "shell path or playback URL, should be less than 256 bytes\""
- "source does not describe unsolicited notifications or event subscription mechanism"
- "source does not describe multi-step macro sequences"
- "the source does not state an authentication procedure."
- "port number not stated — standard HTTPS (443) is implied but not confirmed"
- "authentication procedure not stated in source"
- "no event/notification subscription mechanism described"
- "firmware version compatibility not stated"
- "maximum concurrent connection limit not stated"
- "command rate limits not stated"
- "error response codes beyond OK/Failed not documented"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0