Download OpenAPI specification:
The missing API specifications for your streaming device.
This api spec combines the APIs of 4 different APIs / domains your speaker contacts.
Retrieves a list of available streaming source providers
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <sourceProviders> <sourceprovider id="1"> <createdOn>2012-09-19T12:43:00.000+00:00</createdOn> <name>PANDORA</name> <updatedOn>2012-09-19T12:43:00.000+00:00</updatedOn> </sourceprovider> <sourceprovider id="15"> <createdOn>2014-03-17T15:30:27.000+00:00</createdOn> <name>SPOTIFY</name> <updatedOn>2014-03-17T15:30:27.000+00:00</updatedOn> </sourceprovider> </sourceProviders>
Adds a recent item to the device's recent history
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
| lastplayedat required | string <date-time> ISO 8601 timestamp when the item was last played |
| sourceid required | string Identifier of the source |
| name required | string Name of the content item |
| location required | string Location/path of the content item |
| contentItemType required | string Type of the content item |
<?xml version="1.0" encoding="UTF-8" ?> <recent> <lastplayedat>2025-11-01T17:32:59+00:00</lastplayedat> <sourceid>19989313</sourceid> <name>Radio TEDDY</name> <location>/v1/playback/station/s80044</location> <contentItemType>stationurl</contentItemType> </recent>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <recent id="2244536342"> <contentItemType>stationurl</contentItemType> <createdOn>2018-11-27T18:20:01.000+00:00</createdOn> <lastplayedat>2025-11-01T17:32:59.000+00:00</lastplayedat> <location>/v1/playback/station/s80044</location> <name>Radio TEDDY</name> <source id="19989313" type="Audio"> <createdOn>2018-08-11T08:55:41.000+00:00</createdOn> <credential type="token">eyDu=</credential> <name></name> <sourceproviderid>25</sourceproviderid> <sourcename></sourcename> <sourceSettings/> <updatedOn>2019-07-20T17:48:31.000+00:00</updatedOn> <username></username> </source> <sourceid>19989313</sourceid> <updatedOn>2025-11-01T17:33:00.574+00:00</updatedOn> </recent>
Retrieves a list of recent items played on the device
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <recents> <recent id="2560855517"> <contentItemType>tracklisturl</contentItemType> <createdOn>2025-12-13T17:14:28.000+00:00</createdOn> <lastplayedat>2025-12-14T14:15:59.000+00:00</lastplayedat> <location>/playback/container/c3BvdGlmeTphbGJ1bTowZ3BGWVZNbVV6VkVxeVAyeUh3cEha</location> <name>Ghostsitter 23 - Das Haus im Moor</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">mockToken123=</credential> <name>mockuser123</name> <sourceproviderid>15</sourceproviderid> <sourcename>mock@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mockuser123</username> </source> <sourceid>19989621</sourceid> <updatedOn>2025-12-14T14:16:05.000+00:00</updatedOn> </recent> <recent id="2244536335"> <contentItemType>stationurl</contentItemType> <createdOn>2018-11-27T18:20:01.000+00:00</createdOn> <lastplayedat>2025-12-14T12:32:00.000+00:00</lastplayedat> <location>/v1/playback/station/s80044</location> <name>Radio TEDDY</name> <source id="19989313" type="Audio"> <createdOn>2018-08-11T08:55:41.000+00:00</createdOn> <credential type="token">eyJmock=</credential> <name></name> <sourceproviderid>25</sourceproviderid> <sourcename></sourcename> <sourceSettings/> <updatedOn>2019-07-20T17:48:31.000+00:00</updatedOn> <username></username> </source> <sourceid>19989313</sourceid> <updatedOn>2025-12-14T12:32:05.000+00:00</updatedOn> </recent> </recents>
Retrieves a specific recent item by its ID
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
| recentId required | string Example: 2557568761 Recent item identifier |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <recent id="3332"> <contentItemType>tracklisturl</contentItemType> <createdOn>2025-11-08T21:07:34.000+00:00</createdOn> <lastplayedat>2025-11-08T21:15:53.000+00:00</lastplayedat> <location>/playback/container/c3BvdGlmeTp0cmFjazo0QnQ0VDRjM1c4UElrZEZuQVNLbXk5</location> <name>Zähne putzen</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">mockToken789xyz=</credential> <name>mockuser789xyz</name> <sourceproviderid>15</sourceproviderid> <sourcename>user@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mockuser789xyz</username> </source> <sourceid>19989621</sourceid> <updatedOn>2025-11-08T21:15:55.000+00:00</updatedOn> </recent>
Retrieves a list of presets configured for the device
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <presets> <preset buttonNumber="1"> <containerArt>http://cdn-radiotime-logos.tunein.com/s80044q.png</containerArt> <contentItemType>stationurl</contentItemType> <createdOn>2018-11-26T18:40:45.000+00:00</createdOn> <location>/v1/playback/station/s80044</location> <name>Radio TEDDY</name> <source id="19989313" type="Audio"> <createdOn>2018-08-11T08:55:41.000+00:00</createdOn> <credential type="token">eyJzZXJpYWwiOiAiZjUwY2JjZGItN2IxMi00NjJmLWE5ZTctZGEzMTg5NDcwMTU4In0=</credential> <name></name> <sourceproviderid>25</sourceproviderid> <sourcename></sourcename> <sourceSettings/> <updatedOn>2019-07-20T17:48:31.000+00:00</updatedOn> <username></username> </source> <updatedOn>2018-11-26T18:40:45.000+00:00</updatedOn> <username>Radio TEDDY</username> </preset> <preset buttonNumber="2"> <containerArt>https://mosaic.scdn.co/300/ab67616d0000b2732a4bc05d6d23b6a9a309e8f8ab67616d0000b2733d3c35cdbf9c51eefeaed7a7ab67616d0000b2738271a54c70aaae53e3da0c09ab67616d0000b273c4ec45569fc2db1edc44a465</containerArt> <contentItemType>tracklisturl</contentItemType> <createdOn>2018-11-14T18:27:39.000+00:00</createdOn> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDoyM1NNZHlPSEE2S2t6SG9QT0o1S1E5</location> <name>Radio Mix</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">AQCfoupV5pdDJvqVjVdOF5tUOvyB3mKqeUGyZgqSYk4imOvta8p4dJnCHCNZANz-x0O-W2aQ15ML38pyx1CdvNSdOjGPwg0IlYYfPKWgoS07kmdEfRpf1Vur-OIx46KF56pjsA</credential> <name>mock5zt8py3wuxy123xa431ge</name> <sourceproviderid>15</sourceproviderid> <sourcename>user@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mock5zt8py3wuxy123xa431ge</username> </source> <updatedOn>2021-02-21T20:19:16.000+00:00</updatedOn> <username>Radio Mix</username> </preset> <preset buttonNumber="3"> <containerArt>http://cdn-profiles.tunein.com/s25111/images/logoq.jpg?t=1</containerArt> <contentItemType>stationurl</contentItemType> <createdOn>2018-11-26T18:41:18.000+00:00</createdOn> <location>/v1/playback/station/s25111</location> <name>radioeins vom rbb</name> <source id="19989313" type="Audio"> <createdOn>2018-08-11T08:55:41.000+00:00</createdOn> <credential type="token">eyJzZXJpYWwiOiAiZjUwY2JjZGItN2IxMi00NjJmLWE5ZTctZGEzMTg5NDcwMTU4In0=</credential> <name></name> <sourceproviderid>25</sourceproviderid> <sourcename></sourcename> <sourceSettings/> <updatedOn>2019-07-20T17:48:31.000+00:00</updatedOn> <username></username> </source> <updatedOn>2018-11-26T18:41:18.000+00:00</updatedOn> <username>radioeins vom rbb</username> </preset> <preset buttonNumber="4"> <containerArt>https://mosaic.scdn.co/300/ab67616d0000b2735ca387be0b44d742bcee3317ab67616d0000b273627072ee659b0f3aaa0f537aab67616d0000b27364b153e7f4b060d9735c7d76ab67616d0000b2738ba1aaf88b157453fe12482d</containerArt> <contentItemType>tracklisturl</contentItemType> <createdOn>2018-11-26T18:47:06.000+00:00</createdOn> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDoyd0JCOGIzUWhDWXd5T0d2dE9id3dI</location> <name>Saisonal Simone Sommerland</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">AQCfoupV5pdDJvqVjVdOF5tUOvyB3mKqeUGyZgqSYk4imOvta8p4dJnCHCNZANz-x0O-W2aQ15ML38pyx1CdvNSdOjGPwg0IlYYfPKWgoS07kmdEfRpf1Vur-OIx46KF56pjsA</credential> <name>mock5zt8py3wuxy123xa431ge</name> <sourceproviderid>15</sourceproviderid> <sourcename>user@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mock5zt8py3wuxy123xa431ge</username> </source> <updatedOn>2022-11-17T19:35:37.000+00:00</updatedOn> <username>Saisonal Simone Sommerland</username> </preset> <preset buttonNumber="5"> <containerArt></containerArt> <contentItemType>tracklisturl</contentItemType> <createdOn>2018-11-14T18:27:23.000+00:00</createdOn> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDozN2k5ZFFaRjFFNG1zazBURmdzeVRG</location> <name>Ed Sheeran Radio</name> <source id="20260226" type="Audio"> <createdOn>2018-09-16T19:18:46.000+00:00</createdOn> <credential type="token_version_3">AQAHZ3A2USJzLX8CUEUPqIHOPpQihPpwcVO-0h2-g5-7SWRtIFfoQadeVu1Ud0TgVDkee7PyFnJbJUubZkrpv3A9jLaEeY991wSkXGG-EM_IlwvkRpASmwT3nbyixpVkSDw</credential> <name>bldfvhhzdsyw2d4cy3melcaco</name> <sourceproviderid>15</sourceproviderid> <sourcename>otheruser@example.com</sourcename> <sourceSettings/> <updatedOn>2019-12-20T14:31:09.000+00:00</updatedOn> <username>bldfvhhzdsyw2d4cy3melcaco</username> </source> <updatedOn>2020-01-26T12:45:13.000+00:00</updatedOn> <username>Ed Sheeran Radio</username> </preset> <preset buttonNumber="6"> <containerArt>https://image-cdn-fa.spotifycdn.com/image/ab67706c0000da843b38733ef58fbd3530776a42</containerArt> <contentItemType>tracklisturl</contentItemType> <createdOn>2018-08-11T09:53:48.000+00:00</createdOn> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDoybjZXMnA1QzBNQUQ5YTR6NXhUVDdu</location> <name>Komplett Entspannt</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">AQCfoupV5pdDJvqVjVdOF5tUOvyB3mKqeUGyZgqSYk4imOvta8p4dJnCHCNZANz-x0O-W2aQ15ML38pyx1CdvNSdOjGPwg0IlYYfPKWgoS07kmdEfRpf1Vur-OIx46KF56pjsA</credential> <name>mock5zt8py3wuxy123xa431ge</name> <sourceproviderid>15</sourceproviderid> <sourcename>user@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mock5zt8py3wuxy123xa431ge</username> </source> <updatedOn>2025-01-06T21:31:15.000+00:00</updatedOn> <username>Komplett Entspannt</username> </preset> </presets>
Unpairs the device from the marge account. This can be triggerd by calling:
POST http://<speaker-id>:8090/setMargeAccount
Accept: application/xml
Content-Type: application/xml
<UnPairDeviceWithAccount/>
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <status> <message>Device does not exist </message> <status-code>4012</status-code> </status>
Registers/pairs a device (speaker) to a marge account. Associates the device ID with the marge account ID. This can be triggerd by calling:
POST http://<speaker-id>:8090/setMargeAccount
Accept: application/xml
Content-Type: application/xml
<PairDeviceWithAccount>
<accountId>6921042</accountId>
<userAuthToken>Bearer test123</userAuthToken>
</PairDeviceWithAccount>
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceid required | string Device identifier |
| name required | string Device name |
| macaddress required | string MAC address of the device |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <device deviceid="587A628A4042"> <name>Kitchen</name> <macaddress>587A628A4042</macaddress> </device>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <device deviceid="587A628A4042"> <createdOn>2018-08-11T08:55:25.000+00:00</createdOn> <ipaddress></ipaddress> <name>Kitchen</name> <updatedOn>2026-01-02T11:12:09.074+00:00</updatedOn> </device>
Unclear. Returns 500 server error in testing. Endpoint called by Bose SoundTouch devices when they power on. Reports device information and diagnostic data including IP address.
object (PowerOnDevice) Device information for power on request | |
object (DiagnosticData) Diagnostic data including device and network information |
<?xml version="1.0" encoding="UTF-8" ?> <device-data> <device id="587A628A4042"> <serialnumber>P123456789101123456789</serialnumber> <firmware-version>27.0.6.46330.5043500 epdbuild.trunk.hepdswbld04.2022-08-04T11:20:29</firmware-version> <product product_code="SoundTouch 10 sm2" type="5"> <serialnumber>069236P81556160AE</serialnumber> </product> </device> <diagnostic-data> <device-landscape> <rssi>Good</rssi> <gateway-ip-address>192.168.178.1</gateway-ip-address> <macaddresses> <macaddress>587A628A4042</macaddress> <macaddress>40BD32BAB0EB</macaddress> </macaddresses><ip-address>192.168.178.50</ip-address> <network-connection-type>Wireless</network-connection-type> </device-landscape><network-landscape> <network-data xmlns="http://www.Bose.com/Schemas/2012-12/NetworkMonitor/" /> </network-landscape> </diagnostic-data> </device-data>
Updates or creates a preset for a specific button number on the device
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
| buttonNumber required | integer Example: 2 Preset button number (1-6) |
| buttonNumber required | integer Button number for the preset |
| sourceid required | string Identifier of the source |
| name required | string Name of the preset |
| username required | string Username associated with the preset |
| location required | string Location/path of the content |
| contentItemType required | string Type of content item |
| containerArt required | string URL to the container art |
<?xml version="1.0" encoding="UTF-8" ?> <preset buttonNumber="2"> <sourceid>19989621</sourceid> <name>Radio Mix</name> <username>Radio Mix</username> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDoyM1NNZHlPSEE2S2t6SG9QT0o1S1E5</location> <contentItemType>tracklisturl</contentItemType> <containerArt>https://image-cdn-ak.spotifycdn.com/image/ab67706c0000da84993ee084406c4089ad8f4b2a</containerArt> </preset>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <preset buttonNumber="2"> <containerArt>https://image-cdn-ak.spotifycdn.com/image/ab67706c0000da84993ee084406c4089ad8f4b2a</containerArt> <contentItemType>tracklisturl</contentItemType> <createdOn>2018-11-14T18:27:39.000+00:00</createdOn> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDoyM1NNZHlPSEE2S2t6SG9QT0o1S1E5</location> <name>Radio Mix</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">mockToken456xyz=</credential> <name>mockuser5zt8py3wuxy123</name> <sourceproviderid>15</sourceproviderid> <sourcename>user@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mockuser5zt8py3wuxy123</username> </source> <updatedOn>2025-12-28T16:38:41.000+00:00</updatedOn> <username>Radio Mix</username> </preset>
Removes the preset at the specified button number
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
| buttonNumber required | integer [ 1 .. 6 ] The preset button number (1-6) |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <status> <message>Not found</message> <status-code>404</status-code> </status>
Retrieves a preset for a specific button number on the device
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
| buttonNumber required | integer [ 1 .. 6 ] Example: 4 Preset button number (1-6) |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <preset buttonNumber="4"> <containerArt>https://mosaic.scdn.co/300/mockimageurl</containerArt> <contentItemType>tracklisturl</contentItemType> <createdOn>2018-11-26T18:47:06.000+00:00</createdOn> <location>/playback/container/c3BvdGlmeTpwbGF5bGlzdDoyd0JCOGIzUWhDWXd5T0d2dE9id3dI</location> <name>Seasonal Mix</name> <source id="19989621" type="Audio"> <createdOn>2018-08-11T09:52:31.000+00:00</createdOn> <credential type="token_version_3">mockToken789xyz=</credential> <name>mockuser789xyz</name> <sourceproviderid>15</sourceproviderid> <sourcename>user@example.com</sourcename> <sourceSettings/> <updatedOn>2018-11-26T18:42:27.000+00:00</updatedOn> <username>mockuser789xyz</username> </source> <updatedOn>2022-11-17T19:35:37.000+00:00</updatedOn> <username>mockuser789xyz</username> </preset>
Updates device name and metadata
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
| deviceid required | string Device identifier |
| name required | string Device name |
| macaddress required | string MAC address of the device |
<?xml version="1.0" encoding="UTF-8" ?> <device deviceid="587A628A4042"> <name>Test Device</name> <macaddress>587A628A4042</macaddress> </device>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <device deviceid="587A628A4042"> <createdOn>2018-08-11T08:55:25.000+00:00</createdOn> <ipaddress>192.168.178.33</ipaddress> <name>Test Device</name> <updatedOn>2026-01-02T11:12:09.074+00:00</updatedOn> </device>
Retrieves software update information for an account
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <software_update> <softwareUpdateLocation></softwareUpdateLocation> </software_update>
Endpoint called by Bose SoundTouch devices to submit customer support diagnostic data. Reports device information, firmware version, product details, and network diagnostic data. I believe the call is triggered when opening CS pages in the Bose Soundtuch app.
object (PowerOnDevice) Device information for power on request | |
object (DiagnosticData) Diagnostic data including device and network information |
<?xml version="1.0" encoding="UTF-8" ?><device-data><device id="587A628A4042"><serialnumber>P123456789101123456789</serialnumber><firmware-version>27.0.6.46330.5043500 epdbuild.trunk.hepdswbld04.2022-08-04T11:20:29</firmware-version><product product_code="SoundTouch 10 sm2" type="5"><serialnumber>069236P81556160AE</serialnumber></product></device><diagnostic-data><device-landscape><rssi>Good</rssi><gateway-ip-address>192.168.1.1</gateway-ip-address><macaddresses><macaddress>587A628A4042</macaddress><macaddress>40BD32BAB0EB</macaddress></macaddresses><ip-address>192.168.1.100</ip-address><network-connection-type>Wireless</network-connection-type></device-landscape><network-landscape><network-data xmlns="http://www.Bose.com/Schemas/2012-12/NetworkMonitor/" /></network-landscape></diagnostic-data></device-data>
Creates a new speaker group (stereo pair) with master device and roles
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| masterDeviceId required | string Device ID of the master device in the group |
| name required | string Name of the group |
required | object (GroupRoles) Container for group roles |
<?xml version="1.0" encoding="UTF-8"?> <group> <masterDeviceId>587A628A4042</masterDeviceId> <name>Living Room Stereo</name> <roles> <groupRole> <deviceId>587A628A4042</deviceId> <role>LEFT</role> </groupRole> <groupRole> <deviceId>44EAD8A18888</deviceId> <role>RIGHT</role> </groupRole> </roles> </group>
<?xml version="1.0" encoding="UTF-8"?> <group id="1225842"> <masterDeviceId>587A628A4042</masterDeviceId> <name>Living Room Stereo</name> <roles> <groupRole> <deviceId>587A628A4042</deviceId> <role>LEFT</role> </groupRole> <groupRole> <deviceId>44EAD8A18888</deviceId> <role>RIGHT</role> </groupRole> </roles> </group>
Retrieves group information for a device. Returns an empty group element if the device is not in a group
| accountId required | string^[0-9a-zA-Z-]+$ Example: 6921042 Account identifier |
| deviceId required | string Example: 587A628A4042 Device identifier |
<?xml version="1.0" encoding="UTF-8"?> <group id="1225842"> <masterDeviceId>587A628A4042</masterDeviceId> <name>Living Room Stereo</name> <roles> <groupRole> <deviceId>587A628A4042</deviceId> <role>LEFT</role> </groupRole> <groupRole> <deviceId>44EAD8A18888</deviceId> <role>RIGHT</role> </groupRole> </roles> </group>
Refreshes an OAuth token for a specific music provider
| deviceId required | string Example: 587A628A4042 Device identifier |
| providerId required | string Example: 15 Music provider identifier (e.g., 15 for Spotify) |
| tokenType required | string Example: cs3 Token type identifier |
| code | string Authorization code (empty for refresh token flow) |
| grant_type required | string OAuth grant type |
| redirect_uri | string Redirect URI (empty for refresh token flow) |
| refresh_token required | string Refresh token to exchange for new access token |
{- "code": "",
- "grant_type": "refresh_token",
- "redirect_uri": "",
- "refresh_token": "AQC-x0O-W2aVur-OIA"
}{- "access_token": "123fooAccessExampleToken",
- "token_type": "Bearer",
- "expires_in": 3600,
- "scope": "playlist-read-private playlist-read-collaborative streaming user-library-read user-library-modify playlist-modify-private playlist-modify-public user-read-email user-read-private user-top-read"
}Endpoint called by Bose SoundTouch devices to submit event data.
Events include playback state changes, source changes, button presses, and more.
Every submitted event has a type field. Types seen in the wild include:
| deviceId required | string Example: 587A628A4042 Device identifier |
required | object (EventEnvelope) Event envelope containing metadata |
required | object (EventPayload) Event payload containing device info and events |
{- "envelope": {
- "monoTime": 94118263,
- "payloadProtocolVersion": "3.1",
- "payloadType": "scmudc",
- "protocolVersion": "1.0",
- "time": "2026-01-09T08:02:32.874426+00:00",
- "uniqueId": "587A628A4042"
}, - "payload": {
- "deviceInfo": {
- "boseID": "6921042",
- "deviceID": "587A628A4042",
- "deviceType": "SoundTouch 20",
- "serialNumber": "P123456789101123456789",
- "softwareVersion": "27.0.6.46330.5043500 epdbuild.trunk.hepdswbld04.2022-08-04T11:20:29",
- "systemSerialNumber": "069236P81556160AE"
}, - "events": [
- {
- "data": {
- "source-state": "SPOTIFY"
}, - "monoTime": 94118263,
- "time": "2026-01-09T08:02:32.873379+00:00",
- "type": "source-state-changed"
}
]
}
}Returns the list of available BMX streaming services (TuneIn, Custom Stations, SiriusXM, Radioplayer). This endpoint provides service discovery for streaming audio providers.
{- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "askAgainAfter": 1230482,
- "bmx_services": [
- {
- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "askAdapter": false,
- "assets": {
- "color": "#000000",
- "description": "With TuneIn on SoundTouch, listen to more than 100,000 stations",
- "icons": {
}, - "name": "TuneIn",
- "shortDescription": "Over 100,000 radio stations"
}, - "authenticationModel": {
- "anonymousAccount": {
- "autoCreate": true,
- "enabled": true
}
}, - "id": {
- "name": "TUNEIN",
- "value": 25
}, - "streamTypes": [
- "liveRadio",
- "onDemand"
]
}
]
}Returns which streaming services can be added or removed from the user's account.
{- "services": [
- {
- "canAdd": true,
- "canRemove": false,
- "service": "TUNEIN"
}, - {
- "canAdd": false,
- "canRemove": true,
- "service": "SIRIUSXM_EVEREST"
}
]
}Returns stream URLs and metadata for a TuneIn radio station. Fetches real-time data from TuneIn APIs including available stream URLs, station name, logo, and playback configuration.
| stationId required | string Example: s80044 TuneIn station identifier (e.g., 's80044') |
{- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "audio": {
- "hasPlaylist": true,
- "isRealtime": true,
- "maxTimeout": 60,
- "streams": [
- {
- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "bufferingTimeout": 20,
- "connectingTimeout": 10,
- "hasPlaylist": true,
- "isRealtime": true,
}
]
}, - "isFavorite": false,
- "name": "Radio TEDDY",
- "streamType": "liveRadio"
}Returns playback information for custom radio streams. The stream data is provided as base64-encoded JSON in the 'data' query parameter. Supports user-defined radio station URLs.
| data required | string Example: data=eyJzdHJlYW1VcmwiOiJodHRwOi8vZXhhbXBsZS5jb20vc3RyZWFtIiwiaW1hZ2VVcmwiOiJodHRwOi8vZXhhbXBsZS5jb20vaW1nLnBuZyIsIm5hbWUiOiJUZXN0IFN0YXRpb24ifQ== Base64-encoded JSON containing stream information. JSON structure: {"streamUrl": "...", "imageUrl": "...", "name": "..."} |
{- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "audio": {
- "hasPlaylist": true,
- "isRealtime": true,
- "maxTimeout": 60,
- "streams": [
- {
- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "bufferingTimeout": 20,
- "connectingTimeout": 10,
- "hasPlaylist": true,
- "isRealtime": true,
}
]
}, - "isFavorite": false,
- "name": "Radio TEDDY",
- "streamType": "liveRadio"
}Refreshes a TuneIn JWT authentication token using a refresh token. Required for maintaining access to TuneIn authenticated features.
| grant_type required | string Value: "refresh_token" OAuth grant type |
| refresh_token required | string Refresh token to exchange for access token |
{- "grant_type": "refresh_token",
- "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Analytics endpoint for reporting playback events to TuneIn. This is a stub implementation that accepts and logs events but does not forward them.
| stream_id | string |
| guide_id | string |
| listen_id | string |
| stream_type | string Example: stream_type=liveRadio |
| timeStamp | string Timestamp of the event |
| eventType | string Enum: "START" "STOP" "PAUSE" "RESUME" "TIMED" Type of event |
| reason | string Reason for the event |
| reasonSubCode | string Sub-code providing additional detail about the reason |
| timeIntoTrack | integer Time into track in seconds |
| playbackDelay | integer Playback delay in milliseconds |
{- "timeStamp": "2025-10-31T05:38:55+0000",
- "eventType": "START",
- "reason": "USER_SELECT_PLAYABLE",
- "timeIntoTrack": 0,
- "playbackDelay": 6664
}{- "_links": {
- "bmx_services_availability": {
- "href": "/v1/navigate"
}, - "bmx_logout": {
- "href": "/v1/navigate"
}, - "bmx_navigate": {
- "href": "/v1/navigate"
}, - "bmx_token": {
- "href": "/v1/navigate"
}, - "bmx_favorite": {
- "href": "/v1/navigate"
}, - "bmx_nowplaying": {
- "href": "/v1/now-playing/station/s80044",
- "useInternalClient": "ALWAYS"
}, - "bmx_reporting": {
- "href": "/v1/navigate"
}, - "bmx_availability": {
- "href": "/v1/navigate"
}, - "self": {
- "href": "/v1/navigate"
}
}, - "nextReportIn": 1800
}