Unimplemented SoundTouch API Endpoints
Unimplemented SoundTouch API Endpoints
Last Updated: January 2026
Source: SoundTouch Plus Wiki
Current Implementation: 35 endpoints (including preset & navigation management discovered via SoundTouch Plus Wiki)
Wiki Documentation: 87 endpoints
Implementation Gap: 52 endpoints
This document provides comprehensive information about SoundTouch API endpoints documented in the community wiki but not yet implemented in this Go library. All examples are based on real device responses and extensive community testing.
Implementation Priority Matrix
๐ฅ Critical Priority (12 endpoints)
Essential user functionality that significantly impacts user experience.
๐ฏ High Priority (13 endpoints)
Smart home integration and advanced user features.
๐ Medium Priority (19 endpoints)
Professional features and system administration.
๐ง Low Priority (10 endpoints)
Specialized hardware-specific features.
Note: 6 critical priority endpoints have been implemented: preset management (storePreset, removePreset) and content navigation/station management (navigate, searchStation, addStation, removeStation). These endpoints were discovered through the comprehensive SoundTouch Plus Wiki, which documents additional functionality beyond the official API.
Critical Priority Implementation Candidates
Preset Management โ
IMPLEMENTED
Essential for saving and managing favorite stations and playlists.
POST /storePreset โ
REVERSE-ENGINEERED & IMPLEMENTED
Stores a preset to the device (maximum 6 presets).
Status: COMPLETE - Successfully implemented using endpoints documented in the SoundTouch Plus Wiki despite official API marking as “N/A”
- Client methods:
StorePreset(),StoreCurrentAsPreset(),RemovePreset() - CLI commands:
preset store,preset store-current,preset remove - Full content source support: Spotify, TuneIn, local music, etc.
- WebSocket events: Generates
presetsUpdatednotifications - Production ready: Tested with SoundTouch 10 & 20
Implementation Notes: RESOLVED - Special thanks to the SoundTouch Plus community for documenting these working endpoints
- If preset ID exists, overlay existing preset
- If content matches existing preset, move to specified slot
- Maximum 6 presets per device
- Supports all presetable content types
POST /removePreset โ
IMPLEMENTED
Removes an existing preset from the device.
Status: COMPLETE - Successfully implemented using endpoints from the SoundTouch Plus Wiki
- Client method:
RemovePreset(id) - CLI command:
preset remove --slot <1-6> - Generates
presetsUpdatedWebSocket events - Production ready and tested
GET /selectPreset โ
ALREADY AVAILABLE
Selects and plays a preset by ID.
Status: AVAILABLE - Implemented via key commands
- Client method:
SelectPreset(id)(uses key command approach) - CLI command:
preset select --slot <1-6> - Alternative: Direct key commands (
SendKey("PRESET_1")etc.)
Music Service Management
Critical for streaming service integration.
POST /setMusicServiceAccount ๐ฅ CRITICAL
Adds a music service account to the sources list.
Request Examples:
Pandora Service:
<credentials source="PANDORA" displayName="Pandora Music Service">
<user>YourPandoraUserId</user>
<pass>YourPandoraPassword$1pd</pass>
</credentials>Spotify Service:
<credentials source="SPOTIFY" displayName="Spotify Premium">
<user>YourSpotifyUserId</user>
<pass>YourSpotifyPassword</pass>
</credentials>NAS Music Library:
<credentials source="STORED_MUSIC" displayName="My NAS Media Library">
<user>d09708a1-5953-44bc-a413-123456789012/0</user>
<pass />
</credentials>Response:
<status>/setMusicServiceAccount</status>Implementation Notes:
- UPnP media servers must be detected first (check
/listMediaServers) - Note the
/0suffix for STORED_MUSIC user names - Spotify requires PREMIUM account for most operations
POST /removeMusicServiceAccount ๐ฅ CRITICAL
Removes an existing music service account.
Request Examples:
Remove Pandora:
<credentials source="PANDORA" displayName="Pandora Music Service">
<user>YourPandoraUserId</user>
<pass />
</credentials>Remove NAS Library:
<credentials source="STORED_MUSIC" displayName="My NAS Media Library">
<user>d09708a1-5953-44bc-a413-123456789012/0</user>
<pass />
</credentials>Content Discovery and Navigation โ
IMPLEMENTED
Essential for browsing music libraries and discovering new content.
POST /navigate โ
IMPLEMENTED
Retrieves child container items from music libraries.
Status: COMPLETE - Full navigation functionality implemented using endpoints documented in the SoundTouch Plus Wiki
- Client methods:
Navigate(),NavigateWithMenu(),NavigateContainer() - Helper methods:
GetTuneInStations(),GetPandoraStations(),GetStoredMusicLibrary() - CLI commands:
browse content,browse menu,browse container,browse tunein,browse pandora,browse stored-music - Supports all sources: TUNEIN, PANDORA, SPOTIFY, STORED_MUSIC
- Pagination support with configurable page sizes
- Production ready and tested
POST /search ๐ฅ CRITICAL
Searches music library containers.
Request Examples:
Search for tracks containing “christmas”:
<search source="STORED_MUSIC" sourceAccount="d09708a1-5953-44bc-a413-123456789012/0">
<startItem>1</startItem>
<numItems>1000</numItems>
<searchTerm filter="track">christmas</searchTerm>
<item>
<name>All Music</name>
<type>dir</type>
<ContentItem source="STORED_MUSIC" location="4" sourceAccount="d09708a1-5953-44bc-a413-123456789012/0" isPresetable="true" />
</item>
</search>Search for artists containing “MercyMe”:
<search source="STORED_MUSIC" sourceAccount="d09708a1-5953-44bc-a413-123456789012/0">
<startItem>1</startItem>
<numItems>1000</numItems>
<searchTerm filter="artist">MercyMe</searchTerm>
<item>
<name>All Artists</name>
<type>dir</type>
<ContentItem source="STORED_MUSIC" location="6" sourceAccount="d09708a1-5953-44bc-a413-123456789012/0" isPresetable="true" />
</item>
</search>Response Example:
<searchResponse source="STORED_MUSIC" sourceAccount="d09708a1-5953-44bc-a413-123456789012/0">
<totalItems>142</totalItems>
<items>
<item Playable="1">
<name>Christmas Gift</name>
<type>track</type>
<ContentItem source="STORED_MUSIC" location="4-7678 TRACK" sourceAccount="d09708a1-5953-44bc-a413-123456789012/0" isPresetable="true">
<itemName>Christmas Gift</itemName>
</ContentItem>
<artistName>NJS</artistName>
<albumName>Sound of Night</albumName>
</item>
</items>
</searchResponse>Station Management โ
IMPLEMENTED
Pandora and other music service station management.
POST /searchStation โ
IMPLEMENTED
Searches music services for stations to add.
Status: COMPLETE - Full station search functionality implemented using endpoints documented in the SoundTouch Plus Wiki
- Client methods:
SearchStation(),SearchTuneInStations(),SearchPandoraStations(),SearchSpotifyContent() - CLI commands:
station search,station search-tunein,station search-pandora,station search-spotify - Supports all major sources: TUNEIN, PANDORA, SPOTIFY
- Rich result categorization: songs, artists, stations
- Production ready and tested
POST /addStation โ
IMPLEMENTED
Adds a station to music service collection.
Status: COMPLETE - Station addition and immediate playback implemented using endpoints documented in the SoundTouch Plus Wiki
- Client method:
AddStation(source, sourceAccount, token, name) - CLI command:
station add --source <SOURCE> --token <TOKEN> --name <NAME> - Supports immediate playback after adding
- Works with tokens from search results
- Tested with TuneIn, Pandora, and Spotify
POST /removeStation โ
IMPLEMENTED
Removes a station from music service collection.
Status: COMPLETE - Station removal functionality implemented using endpoints documented in the SoundTouch Plus Wiki
- Client method:
RemoveStation(contentItem) - CLI command:
station remove --source <SOURCE> --location <LOCATION> - Handles playback interruption if removed station is playing
- Uses ContentItem from navigation/browse results
- Production ready and tested
Enhanced Playback Control
POST /userPlayControl ๐ฅ CRITICAL
Sends user play control commands.
Request Example:
<PlayControl>PLAY_CONTROL</PlayControl>Valid Control Values:
PAUSE_CONTROL- Pause currently playing contentPLAY_CONTROL- Play content that is paused or stoppedPLAY_PAUSE_CONTROL- Toggle play/pauseSTOP_CONTROL- Stop currently playing content
Response:
<status>/userPlayControl</status>POST /userRating ๐ฅ CRITICAL
Rates currently playing media (Pandora only).
Request Example:
<Rating>UP</Rating>Valid Rating Values:
UP- Thumbs up ratingDOWN- Thumbs down rating (stops current track)
Response:
<status>/userRating</status>System Information
GET /listMediaServers ๐ฅ CRITICAL
Returns detected UPnP/DLNA media servers.
Response Example:
<ListMediaServersResponse>
<media_server id="2f402f80-da50-11e1-9b23-123456789012" mac="0017886e13fe" ip="192.0.2.4" manufacturer="Signify" model_name="Philips hue bridge 2015" friendly_name="Hue Bridge (192.0.2.4)" model_description="Philips hue Personal Wireless Lighting" location="http://192.0.2.4:80/description.xml" />
<media_server id="d09708a1-5953-44bc-a413-123456789012" mac="S-1-5-21-240303764-901663538-1234567890-1001" ip="192.0.2.5" manufacturer="Microsoft Corporation" model_name="Windows Media Player Sharing" friendly_name="My NAS Media Library" model_description="" location="http://192.0.2.5:2869/upnphost/udhisapi.dll?content=uuid:d09708a1-5953-44bc-a413-123456789012" />
</ListMediaServersResponse>GET /serviceAvailability โ IMPLEMENTED
Returns source service availability status.
Implementation Status: โ
Complete - Available in pkg/client/client.go as GetServiceAvailability()
Response Example:
<serviceAvailability>
<services>
<service type="AIRPLAY" isAvailable="true" />
<service type="ALEXA" isAvailable="false" />
<service type="AMAZON" isAvailable="true" />
<service type="BLUETOOTH" isAvailable="false" reason="INVALID_SOURCE_TYPE" />
<service type="BMX" isAvailable="false" />
<service type="DEEZER" isAvailable="true" />
<service type="IHEART" isAvailable="true" />
<service type="LOCAL_INTERNET_RADIO" isAvailable="true" />
<service type="LOCAL_MUSIC" isAvailable="true" />
<service type="NOTIFICATION" isAvailable="false" />
<service type="PANDORA" isAvailable="true" />
<service type="SPOTIFY" isAvailable="true" />
<service type="TUNEIN" isAvailable="true" />
</services>
</serviceAvailability>Power Management
GET /standby ๐ฅ CRITICAL
Places device into standby mode.
Response:
<status>/standby</status>WebSocket Event: nowPlayingUpdated with source=“STANDBY”
GET /powerManagement ๐ฅ CRITICAL
Returns power state and battery capability.
Response Example:
<powerManagementResponse>
<powerState>FullPower</powerState>
<battery>
<capable>false</capable>
</battery>
</powerManagementResponse>GET /lowPowerStandby ๐ฅ CRITICAL
Places device into low-power mode.
Response:
<status>/lowPowerStandby</status>Implementation Notes:
- Device stops responding to API calls
- Must physically power on device to recover
- Use for complete power-down scenarios
High Priority Implementation Candidates
Notification System (ST-10 Series Only) โ
IMPLEMENTED
POST /speaker โ
IMPLEMENTED
Plays TTS messages or URL content for notifications.
CLI Usage:
# TTS with multiple languages
soundtouch-cli speaker tts --text "Hello World" --app-key YOUR_KEY --language EN --volume 70
# URL content playback
soundtouch-cli speaker url --url "https://example.com/audio.mp3" --app-key YOUR_KEY --volume 60
# Simple notification beep
soundtouch-cli speaker beepGo Client Usage:
// Text-to-Speech
client.PlayTTS("Hello World", "your-app-key", "EN", 70)
// URL content
client.PlayURL("https://example.com/audio.mp3", "your-app-key", "Service", "Message", "Reason", 60)
// Notification beep
client.PlayNotificationBeep()Implementation Features:
- โ Complete TTS support with multi-language (EN, DE, ES, FR, IT, NL, PT, RU, ZH, JA, etc.)
- โ URL content playback with custom metadata
- โ Volume control with automatic restoration
- โ Comprehensive CLI commands with help system
- โ Full validation and error handling
- โ Complete test suite and documentation
GET /playNotification โ
IMPLEMENTED
Plays a notification beep sound.
Implementation:
- โ
PlayNotificationBeep()method - โ
CLI command:
soundtouch-cli speaker beep - โ Proper error handling for unsupported devices
WiFi Management
POST /performWirelessSiteSurvey ๐ฏ HIGH
Gets list of detectable wireless networks.
Response Example:
<PerformWirelessSiteSurveyResponse error="none">
<items>
<item ssid="my_wireless_ssid" signalStrength="-58" secure="true">
<securityTypes>
<type>wpa_or_wpa2</type>
</securityTypes>
</item>
<item ssid="Imagine" signalStrength="-65" secure="true">
<securityTypes>
<type>wpa_or_wpa2</type>
</securityTypes>
</item>
</items>
</PerformWirelessSiteSurveyResponse>POST /addWirelessProfile ๐ฏ HIGH
Adds wireless profile configuration.
Request Example:
<addWirelessProfile timeout="30">
<profile ssid="YourSSIDName" password="YourSSIDPassword" securityType="wpa_or_wpa2"></profile>
</addWirelessProfile>Security Types:
none- No securitywep- WEPwpatkip- WPA/TKIPwpaaes- WPA/AESwpa2tkip- WPA2/TKIPwpa2aes- WPA2/AESwpa_or_wpa2- WPA/WPA2 (recommended)
Response:
<status>/addWirelessProfile</status>Setup Process:
- Connect to device WiFi (e.g.,
Bose ST XX (XXXXXXXX)) - Device has IP 192.0.2.1 during setup
- Add wireless profile
- End setup: POST to
/setupwith<setupState state="SETUP_WIFI_LEAVE" />
GET /getActiveWirelessProfile ๐ฏ HIGH
Gets current wireless profile configuration.
Response Example:
<GetActiveWirelessProfileResponse>
<ssid>my_wireless_ssid</ssid>
</GetActiveWirelessProfileResponse>Bluetooth Management
GET /enterBluetoothPairing ๐ฏ HIGH
Enters Bluetooth pairing mode.
Response:
<status>/enterBluetoothPairing</status>Implementation Notes:
- Device waits for compatible device to pair
- Bluetooth indicator turns blue when in pairing mode
- Emits ascending tone when pairing completes
- Source immediately switches to BLUETOOTH
- Device name appears in Bluetooth settings within seconds
GET /clearBluetoothPaired ๐ฏ HIGH
Clears all Bluetooth pairings.
Response Example:
<BluetoothInfo BluetoothMACAddress="34:15:13:45:2f:93" />Implementation Notes:
- All existing pairings are removed
- Previously paired devices can no longer connect
- Must re-pair each device after clearing
- Some devices emit descending tone when cleared
GET /bluetoothInfo ๐ฏ HIGH
Returns current Bluetooth configuration.
Response Example:
<status>/clearBluetoothPaired</status>Language and System Configuration
GET /language ๐ฏ HIGH
Returns current device language.
Response Example:
<sysLanguage>3</sysLanguage>Language Codes:
- 1 = Danish
- 2 = German
- 3 = English
- 4 = Spanish
- 5 = French
- 6 = Italian
- 7 = Dutch
- 8 = Swedish
- 9 = Japanese
- 10 = Simplified Chinese
- 11 = Traditional Chinese
- 12 = Korean
- 13 = Thai
- 15 = Czech
- 16 = Finnish
- 17 = Greek
- 18 = Norwegian
- 19 = Polish
- 20 = Portuguese
- 21 = Romanian
- 22 = Russian
- 23 = Slovenian
- 24 = Turkish
- 25 = Hungarian
POST /language ๐ฏ HIGH
Sets device language.
Request Example:
<sysLanguage>3</sysLanguage>Response:
<sysLanguage>3</sysLanguage>GET /soundTouchConfigurationStatus ๐ฏ HIGH
Returns device configuration status.
Response Example:
<SoundTouchConfigurationStatus status="SOUNDTOUCH_CONFIGURED" />Valid Status Values:
SOUNDTOUCH_CONFIGURED- Device configuration completeSOUNDTOUCH_NOT_CONFIGURED- Device not configuredSOUNDTOUCH_CONFIGURING- Configuration in progress
Software Update Management
GET /swUpdateCheck ๐ฏ HIGH
Gets latest available software update information.
Response Example:
<swUpdateCheckResponse deviceID="1004567890AA" indexFileUrl="https://worldwide.bose.com/updates/soundtouch">
<release revision="27.0.6.46330.5043500" />
</swUpdateCheckResponse>GET /swUpdateQuery ๐ฏ HIGH
Gets status of software update process.
Response Example:
<swUpdateQueryResponse deviceID="1004567890AA">
<state>IDLE</state>
<percentComplete>0</percentComplete>
<canAbort>false</canAbort>
</swUpdateQueryResponse>Update States:
IDLE- No update in progressDOWNLOADING- Downloading updateINSTALLING- Installing updateERROR- Update failed
Medium Priority Implementation Candidates
Source Selection Shortcuts
GET /selectLastSource ๐ MEDIUM
Selects the last source that was active.
Response:
<status>/selectLastSource</status>GET /selectLastSoundTouchSource ๐ MEDIUM
Selects last SoundTouch source.
Response:
<status>/selectLastSoundTouchSource</status>GET /selectLastWiFiSource ๐ MEDIUM
Selects last WiFi source.
Response:
<status>/selectLastWiFiSource</status>GET /selectLocalSource ๐ MEDIUM
Selects LOCAL source (only way to select LOCAL on some devices).
Response:
<status>/selectLocalSource</status>Group Management (ST-10 Stereo Pairs Only)
GET /getGroup ๐ MEDIUM
Gets current stereo pair configuration.
Response Example (paired):
<group id="1115893">
<name>Bose-ST10-1 + Bose-ST10-4</name>
<masterDeviceId>9070658C9D4A</masterDeviceId>
<roles>
<groupRole>
<deviceId>9070658C9D4A</deviceId>
<role>LEFT</role>
<ipAddress>192.0.2.131</ipAddress>
</groupRole>
<groupRole>
<deviceId>F45EAB3115DA</deviceId>
<role>RIGHT</role>
<ipAddress>192.0.2.134</ipAddress>
</groupRole>
</roles>
<senderIPAddress>192.0.2.131</senderIPAddress>
<status>GROUP_OK</status>
</group>Response Example (not paired):
<group />POST /addGroup ๐ MEDIUM
Creates new stereo pair group.
Request Example:
<group>
<name>Bose-ST10-1 + Bose-ST10-4</name>
<masterDeviceId>9070658C9D4A</masterDeviceId>
<roles>
<groupRole>
<deviceId>9070658C9D4A</deviceId>
<role>LEFT</role>
<ipAddress>192.0.2.131</ipAddress>
</groupRole>
<groupRole>
<deviceId>F45EAB3115DA</deviceId>
<role>RIGHT</role>
<ipAddress>192.0.2.134</ipAddress>
</groupRole>
</roles>
</group>Response: Same as GET /getGroup
WebSocket Event: groupUpdated sent to both devices
GET /removeGroup ๐ MEDIUM
Removes existing stereo pair group.
Response:
<group />WebSocket Event: groupUpdated sent to both devices
POST /updateGroup ๐ MEDIUM
Updates stereo pair group name.
Request Example:
<group id="1116267">
<name>Bose-ST10-1 + Bose-ST10-4 Group</name>
<masterDeviceId>9070658C9D4A</masterDeviceId>
<roles>
<groupRole>
<deviceId>9070658C9D4A</deviceId>
<role>LEFT</role>
<ipAddress>192.0.2.131</ipAddress>
</groupRole>
<groupRole>
<deviceId>F45EAB3115DA</deviceId>
<role>RIGHT</role>
<ipAddress>192.0.2.134</ipAddress>
</groupRole>
</roles>
</group>Advanced System Information
GET /systemtimeout ๐ MEDIUM
Gets current system timeout configuration.
Response Example:
<systemtimeout>
<powersaving_enabled>true</powersaving_enabled>
</systemtimeout>GET /rebroadcastlatencymode ๐ MEDIUM
Gets current rebroadcast latency mode.
Response Example:
<rebroadcastlatencymode mode="SYNC_TO_ZONE" controllable="true" />GET /DSPMonoStereo ๐ MEDIUM
Gets digital signal processor configuration.
Response Example:
<DSPMonoStereo deviceID="1004567890AA">
<mono enable="false" />
</DSPMonoStereo>GET /netStats ๐ MEDIUM
Returns network status configuration.
Response Example:
<network-data>
<devices>
<device deviceID="1004567890AA">
<deviceSerialNumber>P7277179802731234567890</deviceSerialNumber>
<interfaces>
<interface>
<name>eth0</name>
<mac-addr>1004567890AA</mac-addr>
<bindings>
<ipv4address>192.0.2.131</ipv4address>
</bindings>
<running>true</running>
<kind>Wireless</kind>
<ssid>my_network_ssid</ssid>
<rssi>Good</rssi>
<frequencyKHz>2452000</frequencyKHz>
</interface>
</interfaces>
</device>
</devices>
</network-data>Low Priority / Specialized Endpoints
Advanced Audio Features (ST-300 Hardware-Specific)
GET /audiospeakerattributeandsetting ๐ง LOW
Returns speaker attribute configuration.
Response Example:
<audiospeakerattributeandsetting>
<rear available="false" active="false" wireless="false" controllable="true" />
<subwoofer01 available="true" active="true" wireless="true" controllable="true" />
</audiospeakerattributeandsetting>GET /productcechdmicontrol ๐ง LOW
Gets HDMI CEC control configuration (ST-300 only).
POST /productcechdmicontrol ๐ง LOW
Sets HDMI CEC control configuration (ST-300 only).
GET /producthdmiassignmentcontrols ๐ง LOW
Gets HDMI assignment controls configuration (ST-300 only).
POST /producthdmiassignmentcontrols ๐ง LOW
Sets HDMI assignment controls configuration (ST-300 only).
System Administration Features
POST /swUpdateStart ๐ง LOW
Starts software update process.
Response:
<status>/swUpdateStart</status>POST /swUpdateAbort ๐ง LOW
Aborts software update process.
Response:
<status>/swUpdateAbort</status>GET /criticalError ๐ง LOW
Gets critical error information.
POST /factoryDefault ๐ง LOW
Performs factory reset of device.
Warning: This completely resets the device to factory defaults.
Implementation Guidelines
Device Compatibility Matrix
| Endpoint | ST-10 | ST-300 | ST-20 | ST-520 | Notes |
|---|---|---|---|---|---|
/playNotification | โ | โ | โ | โ | ST-10 III series only |
/speaker | โ | โ | โ | โ | ST-10 III series only |
/audiodspcontrols | โ | โ | โ | โ | Soundbar products |
/audioproducttonecontrols | โ | โ | โ | โ | Advanced audio devices |
/getGroup | โ | โ | โ | โ | Stereo pair support |
/productcechdmicontrol | โ | โ | โ | โ | HDMI-enabled devices |
Error Handling Best Practices
Capability Checking
// Always check capabilities before calling advanced features
capabilities, err := client.GetCapabilities()
if err != nil {
return fmt.Errorf("failed to get capabilities: %w", err)
}
if !capabilities.SupportsFeature("audiodspcontrols") {
return ErrFeatureNotSupported
}Timeout Handling
// Some endpoints timeout on unsupported devices
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := client.makeRequestWithTimeout(ctx, endpoint); err != nil {
if errors.Is(err, context.DeadlineExceeded) {
return ErrEndpointNotSupported
}
return err
}Graceful Degradation
// Provide fallback functionality when advanced features unavailable
if err := client.PlayNotification(); err != nil {
if errors.Is(err, ErrFeatureNotSupported) {
// Fallback to volume beep or other notification method
return client.SendKeyPress("VOLUME_UP")
}
return err
}WebSocket Events Generated
Many POST operations generate corresponding WebSocket events:
| Operation | WebSocket Event | Content |
|---|---|---|
โ
storePreset | โ
presetsUpdated | Updated preset list (IMPLEMENTED) |
โ
removePreset | โ
presetsUpdated | Updated preset list (IMPLEMENTED) |
addGroup | groupUpdated | Stereo pair configuration |
removeGroup | groupUpdated | Stereo pair configuration |
userPlayControl | nowPlayingUpdated | Playback state changes |
โ
addStation | None | Station immediately plays (IMPLEMENTED) |
โ
removeStation | nowPlayingUpdated | If removed station was playing (IMPLEMENTED) |
Security and Authentication
App Key Requirements
<!-- TTS and URL playback require app_key -->
<play_info>
<url>...</url>
<app_key>YourApplicationKey</app_key>
<!-- other fields -->
</play_info>Bearer Token Usage
// Use existing token system for authenticated requests
token, err := client.RequestToken()
if err != nil {
return err
}
client.SetAuthToken(token.Value)Music Service Specifics
Pandora Integration
- โ Station Management: Search, add, remove stations
- โ Ratings: Thumbs up/down support
- โ Navigation: Browse station collections
- โ ๏ธ Account Setup: Requires valid Pandora credentials
Spotify Integration
- โ Premium Required: Most operations require Spotify Premium
- โ URI Support: Full spotify:// URI support
- โ Playlists: Access to user playlists and saved music
- โ ๏ธ Account Setup: OAuth flow recommended
NAS/DLNA Libraries
- โ UPnP Discovery: Automatic media server detection
- โ Navigation: Full folder/album/artist browsing
- โ Search: Track, artist, album search within libraries
- โ ๏ธ Setup Required: Windows Media Player sharing or UPnP server
Testing Strategy
Real Device Testing
var deviceTests = []struct {
model string
endpoint string
supported bool
}{
{"ST-10", "/playNotification", true},
{"ST-300", "/playNotification", false},
{"ST-300", "/audiodspcontrols", true},
{"ST-10", "/audiodspcontrols", false},
}
func TestDeviceCompatibility(t *testing.T) {
for _, tt := range deviceTests {
t.Run(fmt.Sprintf("%s_%s", tt.model, tt.endpoint), func(t *testing.T) {
// Test endpoint on specific device model
})
}
}Integration Testing
- Unit tests for XML marshaling/unmarshaling
- Real device validation for each endpoint
- WebSocket event verification
- Error scenario testing
Implementation Priority Recommendations
Phase 1: Essential Features (4 weeks)
- โ
Preset Management:
(IMPLEMENTED)storePreset,removePreset,selectPreset - Music Services:
setMusicServiceAccount,removeMusicServiceAccount - โ
Content Discovery:
(IMPLEMENTED),navigate,searchrecents - โ
Station Management:
(IMPLEMENTED)searchStation,addStation,removeStation - Enhanced Controls:
userPlayControl,userRating
Phase 2: Smart Home Integration (3 weeks)
- Power Management:
standby,powerManagement,lowPowerStandby - Notifications:
speaker,playNotification - Network Management:
performWirelessSiteSurvey,addWirelessProfile - System Info:
(โ implemented),serviceAvailabilitylistMediaServers,language
Phase 3: Advanced Features (3 weeks)
- Bluetooth:
enterBluetoothPairing,clearBluetoothPaired - Software Updates:
swUpdateCheck,swUpdateQuery - Stereo Pairs:
getGroup,addGroup,removeGroup,updateGroup - Source Shortcuts:
selectLastSource,selectLastSoundTouchSource
Phase 4: Specialized Features (2 weeks)
- HDMI Controls:
productcechdmicontrol,producthdmiassignmentcontrols - System Administration:
factoryDefault,criticalError - Audio Processing:
audiospeakerattributeandsetting,DSPMonoStereo
Success Metrics
Functionality Coverage
- โ 87 total endpoints (from 23 current โ 87 wiki documented)
- โ Complete music service integration (Pandora, Spotify, NAS)
- โ Smart home automation ready (power, notifications, network)
- โ Professional audio features (advanced controls, HDMI)
Quality Assurance
- โ Real device testing on multiple SoundTouch models
- โ Comprehensive error handling with graceful degradation
- โ Complete documentation with XML examples
- โ WebSocket event integration for real-time updates
Developer Experience
- โ Type-safe Go implementations for all endpoints
- โ Device capability checking before endpoint calls
- โ Production-ready examples from community wiki
- โ Backward compatibility with existing implementations
Conclusion
The SoundTouch Plus Wiki provides comprehensive documentation for 64 additional endpoints that can transform this Go library from basic device control to complete SoundTouch ecosystem management.
Key Benefits:
- ๐ฏ 3.8x API Coverage: From 23 to 87 endpoints
- ๐ Complete Smart Home Integration: Power, notifications, network management
- ๐ต Full Music Service Support: Spotify, Pandora, NAS libraries
- โ Production-Ready: Real-world tested XML examples
- ๐ Comprehensive Documentation: Device compatibility matrix and examples
Implementation Path:
- Start with high-impact user features (presets, music services)
- Add smart home integration (power, notifications, network)
- Include advanced features (stereo pairs, updates, system admin)
- Maintain quality through real device testing and comprehensive error handling
This documentation provides the complete foundation for implementing all endpoints from the SoundTouch Plus Wiki, enabling this Go library to become the definitive SoundTouch integration solution for everything from basic home automation to professional audio installations.
All examples and XML structures are verified against real SoundTouch hardware and extensively tested by the SoundTouch Plus community.