diff --git a/Makefile b/Makefile index 90c4de5..af71d6b 100644 --- a/Makefile +++ b/Makefile @@ -125,6 +125,9 @@ test-http-client: /workdir/power_on.http \ /workdir/get_bmx_services.http \ /workdir/get_sourceproviders.http \ + /workdir/get_software_update.http \ + /workdir/get_soundtouch_updates.http \ + /workdir/get_streaming_token.http \ /workdir/get_provider_settings.http \ /workdir/tunein_playback_station.http \ /workdir/set_preset_6.http \ diff --git a/tests/integration/http-client/get_provider_settings.http b/tests/integration/http-client/get_provider_settings.http index a241d1c..b469b04 100644 --- a/tests/integration/http-client/get_provider_settings.http +++ b/tests/integration/http-client/get_provider_settings.http @@ -25,10 +25,10 @@ User-Agent: Bose_Lisa/27.0.6 var settings = response.body.getElementsByTagName("providerSetting"); for (var i = 0; i < settings.length; i++) { var setting = settings[i]; - client.assert(setting.getElementsByTagName("boseId").length > 0, "Setting " + i + " missing 'boseId'"); - client.assert(setting.getElementsByTagName("keyName").length > 0, "Setting " + i + " missing 'keyName'"); - client.assert(setting.getElementsByTagName("value").length > 0, "Setting " + i + " missing 'value'"); - client.assert(setting.getElementsByTagName("providerId").length > 0, "Setting " + i + " missing 'providerId'"); + client.assert(setting.getElementsByTagName("boseId")[0].textContent.length > 0, "Setting " + i + " missing or empty 'boseId'"); + client.assert(setting.getElementsByTagName("keyName")[0].textContent.length > 0, "Setting " + i + " missing or empty 'keyName'"); + client.assert(setting.getElementsByTagName("value")[0].textContent.length > 0, "Setting " + i + " missing or empty 'value'"); + client.assert(setting.getElementsByTagName("providerId")[0].textContent.length > 0, "Setting " + i + " missing or empty 'providerId'"); } }); %} diff --git a/tests/integration/http-client/get_software_update.http b/tests/integration/http-client/get_software_update.http new file mode 100644 index 0000000..a2232b9 --- /dev/null +++ b/tests/integration/http-client/get_software_update.http @@ -0,0 +1,22 @@ +### GET /streaming/software/update/account/{{accountId}} +GET {{host}}/streaming/software/update/account/{{accountId}} +User-Agent: Bose_Lisa/27.0.6 +Accept: application/vnd.bose.streaming-v1.2+xml +Authorization: Bearer {{token}} +Content-Type: application/vnd.bose.streaming-v1.2+xml + +> {% + client.test("Request executed successfully", function() { + client.assert(response.status === 200, "Response status is not 200"); + }); + + client.test("Response content-type is correct", function() { + var type = response.contentType.mimeType; + client.assert(type === "application/vnd.bose.streaming-v1.2+xml", "Expected 'application/vnd.bose.streaming-v1.2+xml' but received '" + type + "'"); + }); + + client.test("Response body structure", function() { + client.assert(response.body.getElementsByTagName("software_update").length > 0, "Missing 'software_update' root element"); + client.assert(response.body.getElementsByTagName("softwareUpdateLocation").length > 0, "Missing 'softwareUpdateLocation' element"); + }); +%} diff --git a/tests/integration/http-client/get_soundtouch_updates.http b/tests/integration/http-client/get_soundtouch_updates.http new file mode 100644 index 0000000..7965f6f --- /dev/null +++ b/tests/integration/http-client/get_soundtouch_updates.http @@ -0,0 +1,20 @@ +### GET /updates/soundtouch +GET {{host}}/updates/soundtouch?serialnumber={{serialNumber}} +User-Agent: Bose_Lisa/27.0.6 +Accept: */* + +> {% + client.test("Request executed successfully", function() { + client.assert(response.status === 200, "Response status is not 200"); + }); + + client.test("Response content-type is correct", function() { + var type = response.contentType.mimeType; + client.assert(type === "application/vnd.bose.streaming-v1.2+xml", "Expected 'application/vnd.bose.streaming-v1.2+xml' but received '" + type + "'"); + }); + + client.test("Response body structure", function() { + client.assert(response.body.getElementsByTagName("INDEX").length > 0, "Missing 'INDEX' root element"); + client.assert(response.body.getElementsByTagName("DEVICE").length > 0, "Missing 'DEVICE' elements"); + }); +%} diff --git a/tests/integration/http-client/get_sourceproviders.http b/tests/integration/http-client/get_sourceproviders.http index 490a955..926dcee 100644 --- a/tests/integration/http-client/get_sourceproviders.http +++ b/tests/integration/http-client/get_sourceproviders.http @@ -18,17 +18,21 @@ Accept: application/vnd.bose.streaming-v1.2+xml client.assert(response.body.getElementsByTagName("sourceprovider").length > 0, "Missing 'sourceprovider' elements"); }); - client.test("Check specific source providers", function() { + client.test("Check source providers", function() { var providers = response.body.getElementsByTagName("sourceprovider"); + client.assert(providers.length > 0, "No 'sourceprovider' elements found"); + var foundSpotify = false; var foundTuneIn = false; - for (var i = 0; i < providers.length; i++) { var provider = providers[i]; var id = provider.getAttribute("id"); var nameElement = provider.getElementsByTagName("name")[0]; var name = nameElement ? nameElement.textContent : ""; + client.assert(id && id.length > 0, "Source provider at index " + i + " missing or empty 'id' attribute"); + client.assert(name && name.length > 0, "Source provider at index " + i + " missing or empty 'name' element"); + if (id === "15" && name === "SPOTIFY") { foundSpotify = true; } diff --git a/tests/integration/http-client/get_streaming_token.http b/tests/integration/http-client/get_streaming_token.http new file mode 100644 index 0000000..907c5d1 --- /dev/null +++ b/tests/integration/http-client/get_streaming_token.http @@ -0,0 +1,24 @@ +### GET /streaming/device/{{deviceId}}/streaming_token +GET {{host}}/streaming/device/{{deviceId}}/streaming_token +User-Agent: Bose_Lisa/27.0.6 +Accept: application/vnd.bose.streaming-v1.2+xml +Authorization: Bearer {{token}} +Content-Type: application/vnd.bose.streaming-v1.2+xml + +> {% + client.test("Request executed successfully", function() { + client.assert(response.status === 200, "Response status is not 200"); + }); + + client.test("Response content-type is correct", function() { + var type = response.contentType.mimeType; + client.assert(type === "application/vnd.bose.streaming-v1.2+xml", "Expected 'application/vnd.bose.streaming-v1.2+xml' but received '" + type + "'"); + }); + + client.test("Response body structure", function() { + client.assert(response.body.getElementsByTagName("bearertoken").length > 0, "Missing 'bearertoken' element"); + var tokenValue = response.body.getElementsByTagName("bearertoken")[0].getAttribute("value"); + client.assert(tokenValue.startsWith("Bearer "), "Token value should start with 'Bearer '"); + client.assert(tokenValue.length > 7, "Bearer token should not be empty"); + }); +%} diff --git a/tests/integration/http-client/http-client.env.json b/tests/integration/http-client/http-client.env.json index 4f35de0..4e5a5b4 100644 --- a/tests/integration/http-client/http-client.env.json +++ b/tests/integration/http-client/http-client.env.json @@ -14,6 +14,7 @@ "deviceName": "SoundTouch-11", "spotifyUserId": "13570", "spotifyToken": "example-spotify-token", + "spotifyRefreshToken": "example-spotify-refresh-token", "spotifyDisplayName": "For Lovers, Not Killers", "bmxApiKey": "bmx-api-key" }, @@ -32,6 +33,7 @@ "deviceName": "SoundTouch-12", "spotifyUserId": "13570", "spotifyToken": "example-spotify-token", + "spotifyRefreshToken": "example-spotify-refresh-token", "spotifyDisplayName": "For Lovers, Not Killers", "bmxApiKey": "bmx-api-key" } diff --git a/tests/integration/http-client/post_oauth_token.http b/tests/integration/http-client/post_oauth_token.http new file mode 100644 index 0000000..54b1b50 --- /dev/null +++ b/tests/integration/http-client/post_oauth_token.http @@ -0,0 +1,37 @@ +### POST /oauth/device/{{deviceId}}/music/musicprovider/15/token/cs3 +POST {{host}}/oauth/device/{{deviceId}}/music/musicprovider/15/token/cs3 +Accept: */* +Authorization: Bearer {{token}} +Content-Type: application/json + +{ + "code": "", + "grant_type": "refresh_token", + "redirect_uri": "", + "refresh_token": "{{spotifyRefreshToken}}" +} + +> {% + client.test("Request executed successfully", function() { + client.assert(response.status === 200, "Response status is not 200"); + }); + + client.test("Response content type is JSON", function() { + var type = response.contentType.mimeType; + client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'"); + }); + + client.test("Response body has expected structure", function() { + client.assert(response.body.hasOwnProperty("access_token"), "Response body missing 'access_token'"); + client.assert(response.body.access_token.length > 0, "access_token is empty"); + + client.assert(response.body.hasOwnProperty("expires_in"), "Response body missing 'expires_in'"); + client.assert(typeof response.body.expires_in === "number", "expires_in is not a number"); + + client.assert(response.body.hasOwnProperty("scope"), "Response body missing 'scope'"); + client.assert(response.body.scope.length > 0, "scope is empty"); + + client.assert(response.body.hasOwnProperty("token_type"), "Response body missing 'token_type'"); + client.assert(response.body.token_type === "Bearer", "token_type is not 'Bearer'"); + }); +%} diff --git a/tests/integration/http-client/post_recent.http b/tests/integration/http-client/post_recent.http new file mode 100644 index 0000000..643e70f --- /dev/null +++ b/tests/integration/http-client/post_recent.http @@ -0,0 +1,66 @@ +### POST /streaming/account/{{accountId}}/device/{{deviceId}}/recent +POST {{host}}/streaming/account/{{accountId}}/device/{{deviceId}}/recent +User-Agent: Bose_Lisa/27.0.6 +Accept: application/vnd.bose.streaming-v1.2+xml +Authorization: Bearer {{token}} +Content-Type: application/vnd.bose.streaming-v1.2+xml + + + + 2026-03-29T21:33:00+00:00 + 14774275 + SMOOTH JAZZ + /v1/playback/station/s166521 + stationurl + + +> {% + client.test("Request executed successfully", function() { + client.assert(response.status === 201, "Response status is not 201"); + }); + + client.test("Response content-type is correct", function() { + var type = response.contentType.mimeType; + client.assert(type === "application/vnd.bose.streaming-v1.2+xml", "Expected 'application/vnd.bose.streaming-v1.2+xml' but received '" + type + "'"); + }); + + client.test("Response body structure", function() { + var recent = response.body.getElementsByTagName("recent")[0]; + client.assert(recent !== null, "Missing 'recent' root element"); + client.assert(recent.getAttribute("id").length > 0, "Missing or empty 'id' attribute on 'recent' element"); + + client.assert(recent.getElementsByTagName("contentItemType")[0].textContent.length > 0, "Missing or empty 'contentItemType'"); + client.assert(recent.getElementsByTagName("createdOn")[0].textContent.length > 0, "Missing or empty 'createdOn'"); + client.assert(recent.getElementsByTagName("lastplayedat")[0].textContent.length > 0, "Missing or empty 'lastplayedat'"); + client.assert(recent.getElementsByTagName("location")[0].textContent.length > 0, "Missing or empty 'location'"); + client.assert(recent.getElementsByTagName("name")[0].textContent.length > 0, "Missing or empty 'name'"); + + var source = recent.getElementsByTagName("source")[0]; + client.assert(source !== null, "Missing 'source' element"); + client.assert(source.getAttribute("id").length > 0, "Missing or empty 'source' id"); + client.assert(source.getAttribute("type").length > 0, "Missing or empty 'source' type"); + + var source_createdOn = source.getElementsByTagName("createdOn"); + if (source_createdOn.length > 0) { + client.assert(source_createdOn[0].textContent.length > 0, "Empty source 'createdOn'"); + } + var credential = source.getElementsByTagName("credential")[0]; + client.assert(credential.getAttribute("type").length > 0, "Missing or empty credential 'type'"); + client.assert(credential.textContent.length > 0, "Missing or empty credential value"); + client.assert(source.getElementsByTagName("name")[0] !== null, "Missing source 'name'"); + client.assert(source.getElementsByTagName("sourceproviderid")[0].textContent.length > 0, "Missing or empty source 'sourceproviderid'"); + client.assert(source.getElementsByTagName("sourcename")[0] !== null, "Missing source 'sourcename'"); + var source_sourceSettings = source.getElementsByTagName("sourceSettings"); + if (source_sourceSettings.length > 0) { + client.assert(source_sourceSettings[0] !== null, "Missing 'sourceSettings'"); + } + var source_updatedOn = source.getElementsByTagName("updatedOn"); + if (source_updatedOn.length > 0) { + client.assert(source_updatedOn[0].textContent.length > 0, "Empty source 'updatedOn'"); + } + client.assert(source.getElementsByTagName("username")[0] !== null, "Missing source 'username'"); + + client.assert(recent.getElementsByTagName("sourceid")[0].textContent.length > 0, "Missing or empty 'sourceid'"); + client.assert(recent.getElementsByTagName("updatedOn")[0].textContent.length > 0, "Missing or empty 'updatedOn'"); + }); +%} diff --git a/tests/interactions_20260328-103522-477978.md b/tests/interactions_20260328-103522-477978.md index 504da42..1af0305 100644 --- a/tests/interactions_20260328-103522-477978.md +++ b/tests/interactions_20260328-103522-477978.md @@ -28,24 +28,24 @@ Interactions for `20260328-103522-477978/`: | 0024 | self | | GET /streaming/account/{{accountId}}/full | 200 OK | ./self/streaming/account/{accountId}/full/0024-20260328-103733.945-GET.http | | 0025 | mirror | | GET /streaming/account/{{accountId}}/full | 200 OK | ./mirror/streaming/account/{accountId}/full/0025-20260328-103734.751-GET.http | | 0026 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0026-20260328-103735.894-GET.http | -| 0027 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0027-20260328-103735.914-GET.http | -| 0028 | self | | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0028-20260328-103735.931-GET.http | +| 0027 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0027-20260328-103735.914-GET.http | +| 0028 | self | ☑ | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0028-20260328-103735.931-GET.http | | 0029 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0029-20260328-103735.954-GET.http | | 0030 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0030-20260328-103736.065-GET.http | -| 0031 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0031-20260328-103736.093-GET.http | +| 0031 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0031-20260328-103736.093-GET.http | | 0032 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0032-20260328-103736.130-GET.http | | 0033 | self | | POST /oauth/device/{{device_id}}/music/musicprovider/15/token/cs3 | 200 OK | ./self/oauth/device/{device_id}/music/musicprovider/15/token/cs3/0033-20260328-103737.874-POST.http | | 0034 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/presets | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/presets/0034-20260328-103905.297-GET.http | -| 0035 | self | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0035-20260328-103905.306-GET.http | +| 0035 | self | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0035-20260328-103905.306-GET.http | | 0036 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/presets | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/presets/0036-20260328-103905.479-GET.http | -| 0037 | mirror | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0037-20260328-103905.669-GET.http | -| 0038 | self | | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0038-20260328-103905.929-GET.http | -| 0039 | self | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0039-20260328-104218.080-GET.http | -| 0040 | mirror | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0040-20260328-104218.267-GET.http | -| 0041 | self | | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0041-20260328-104218.524-GET.http | -| 0042 | self | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0042-20260328-104325.629-GET.http | -| 0043 | mirror | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0043-20260328-104325.814-GET.http | -| 0044 | self | | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0044-20260328-104326.087-GET.http | +| 0037 | mirror | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0037-20260328-103905.669-GET.http | +| 0038 | self | ☑ | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0038-20260328-103905.929-GET.http | +| 0039 | self | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0039-20260328-104218.080-GET.http | +| 0040 | mirror | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0040-20260328-104218.267-GET.http | +| 0041 | self | ☑ | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0041-20260328-104218.524-GET.http | +| 0042 | self | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0042-20260328-104325.629-GET.http | +| 0043 | mirror | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0043-20260328-104325.814-GET.http | +| 0044 | self | ☑ | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0044-20260328-104326.087-GET.http | | 0045 | upstream | | DELETE https://streaming.bose.com/streaming/account/{{accountId}}/device/{{device_id}} | 400 Bad Request | ./upstream/streaming/account/{accountId}/device/{device_id}/0045-20260328-104348.987-DELETE.http | | 0046 | self | | DELETE /streaming/account/{{accountId}}/device/{{device_id}} | 400 Bad Request | ./self/streaming/account/{accountId}/device/{device_id}/0046-20260328-104348.988-DELETE.http | | 0047 | mirror | | DELETE /streaming/account/{{accountId}}/device/{{device_id}} | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/0047-20260328-104348.989-DELETE.http | @@ -60,25 +60,25 @@ Interactions for `20260328-103522-477978/`: | 0056 | self | | GET /streaming/account/{{accountId}}/full | 200 OK | ./self/streaming/account/{accountId}/full/0056-20260328-105135.102-GET.http | | 0057 | mirror | | GET /streaming/account/{{accountId}}/full | 200 OK | ./mirror/streaming/account/{accountId}/full/0057-20260328-105135.727-GET.http | | 0058 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0058-20260328-105138.259-GET.http | -| 0059 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0059-20260328-105138.265-GET.http | +| 0059 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0059-20260328-105138.265-GET.http | | 0060 | self | ☑ | POST /streaming/support/customersupport | 200 OK | ./self/streaming/support/customersupport/0060-20260328-105138.304-POST.http | | 0061 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0061-20260328-105138.369-GET.http | | 0062 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0062-20260328-105138.442-GET.http | -| 0063 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0063-20260328-105138.464-GET.http | +| 0063 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0063-20260328-105138.464-GET.http | | 0064 | mirror | ☑ | POST /streaming/support/customersupport | 200 OK | ./mirror/streaming/support/customersupport/0064-20260328-105138.499-POST.http | | 0065 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0065-20260328-105138.554-GET.http | | 0066 | upstream | | GET https://events.api.bosecm.com/v1/blacklist/{{device_id}} | 405 Method Not Allowed | ./upstream/v1/blacklist/{device_id}/0066-20260328-105138.587-GET.http | | 0067 | self | | GET /v1/blacklist/{{device_id}} | 405 Method Not Allowed | ./self/v1/blacklist/{device_id}/0067-20260328-105138.588-GET.http | -| 0068 | self | | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0068-20260328-105138.703-GET.http | +| 0068 | self | ☑ | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0068-20260328-105138.703-GET.http | | 0069 | self | ☑ | GET / | 200 OK | ./self/root/0069-20260328-105138.868-GET.http | -| 0070 | self | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0070-20260328-105139.565-GET.http | +| 0070 | self | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0070-20260328-105139.565-GET.http | | 0071 | self | ☑ | GET /streaming/sourceproviders | 200 OK | ./self/streaming/sourceproviders/0071-20260328-105139.581-GET.http | | 0072 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0072-20260328-105139.612-GET.http | -| 0073 | mirror | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0073-20260328-105139.857-GET.http | +| 0073 | mirror | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0073-20260328-105139.857-GET.http | | 0074 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0074-20260328-105139.861-GET.http | | 0075 | self | | GET /streaming/account/{{accountId}}/full | 200 OK | ./self/streaming/account/{accountId}/full/0075-20260328-105140.030-GET.http | | 0076 | mirror | | GET /streaming/account/{{accountId}}/full | 200 OK | ./mirror/streaming/account/{accountId}/full/0076-20260328-105140.172-GET.http | -| 0077 | self | | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0077-20260328-105140.196-GET.http | +| 0077 | self | ☑ | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0077-20260328-105140.196-GET.http | | 0078 | upstream | | GET https://events.api.bosecm.com/v1/blacklist/{{device_id}} | 405 Method Not Allowed | ./upstream/v1/blacklist/{device_id}/0078-20260328-105146.094-GET.http | | 0079 | self | | GET /v1/blacklist/{{device_id}} | 405 Method Not Allowed | ./self/v1/blacklist/{device_id}/0079-20260328-105146.094-GET.http | | 0080 | self | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./self/v1/scmudc/{device_id}/0080-20260328-105146.457-POST.http | @@ -104,16 +104,16 @@ Interactions for `20260328-103522-477978/`: | 0100 | self | | GET /streaming/account/{{accountId}}/full | 200 OK | ./self/streaming/account/{accountId}/full/0100-20260328-105552.656-GET.http | | 0101 | mirror | | GET /streaming/account/{{accountId}}/full | 200 OK | ./mirror/streaming/account/{accountId}/full/0101-20260328-105552.796-GET.http | | 0102 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0102-20260328-105554.172-GET.http | -| 0103 | self | | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0103-20260328-105554.207-GET.http | -| 0104 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0104-20260328-105554.210-GET.http | +| 0103 | self | ☑ | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0103-20260328-105554.207-GET.http | +| 0104 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0104-20260328-105554.210-GET.http | | 0105 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0105-20260328-105554.216-GET.http | | 0106 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0106-20260328-105554.347-GET.http | | 0107 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0107-20260328-105554.395-GET.http | -| 0108 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0108-20260328-105554.406-GET.http | +| 0108 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0108-20260328-105554.406-GET.http | | 0109 | self | | POST /oauth/device/{{device_id}}/music/musicprovider/15/token/cs3 | 200 OK | ./self/oauth/device/{device_id}/music/musicprovider/15/token/cs3/0109-20260328-105556.138-POST.http | -| 0110 | self | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0110-20260328-105606.529-GET.http | -| 0111 | mirror | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0111-20260328-105606.699-GET.http | -| 0112 | self | | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0112-20260328-105606.961-GET.http | +| 0110 | self | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0110-20260328-105606.529-GET.http | +| 0111 | mirror | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0111-20260328-105606.699-GET.http | +| 0112 | self | ☑ | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0112-20260328-105606.961-GET.http | | 0113 | self | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./self/v1/scmudc/{device_id}/0113-20260328-105612.425-POST.http | | 0114 | self | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./self/v1/scmudc/{device_id}/0114-20260328-105612.493-POST.http | | 0115 | self | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./self/v1/scmudc/{device_id}/0115-20260328-105612.582-POST.http | @@ -124,35 +124,35 @@ Interactions for `20260328-103522-477978/`: | 0120 | mirror | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./mirror/v1/scmudc/{device_id}/0120-20260328-105614.649-POST.http | | 0121 | self | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./self/v1/scmudc/{device_id}/0121-20260328-111412.273-POST.http | | 0122 | mirror | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./mirror/v1/scmudc/{device_id}/0122-20260328-111412.689-POST.http | -| 0123 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0123-20260328-170446.020-GET.http | -| 0124 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0124-20260328-170446.206-GET.http | -| 0125 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0125-20260328-202258.172-GET.http | -| 0126 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0126-20260328-202258.374-GET.http | -| 0127 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0127-20260328-202300.656-GET.http | -| 0128 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0128-20260328-202300.841-GET.http | -| 0129 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0129-20260328-205953.361-GET.http | -| 0130 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0130-20260328-205953.560-GET.http | -| 0131 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0131-20260328-210005.518-GET.http | -| 0132 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0132-20260328-210005.707-GET.http | -| 0133 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0133-20260329-094502.893-GET.http | -| 0134 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0134-20260329-094503.109-GET.http | -| 0135 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0135-20260329-094510.575-GET.http | -| 0136 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0136-20260329-094510.907-GET.http | -| 0137 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0137-20260329-102911.229-GET.http | -| 0138 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0138-20260329-102911.443-GET.http | -| 0139 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0139-20260329-102923.636-GET.http | -| 0140 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0140-20260329-102923.807-GET.http | -| 0141 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0141-20260329-155214.420-GET.http | -| 0142 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0142-20260329-155216.805-GET.http | -| 0143 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0143-20260329-155221.905-GET.http | -| 0144 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0144-20260329-155222.082-GET.http | +| 0123 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0123-20260328-170446.020-GET.http | +| 0124 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0124-20260328-170446.206-GET.http | +| 0125 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0125-20260328-202258.172-GET.http | +| 0126 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0126-20260328-202258.374-GET.http | +| 0127 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0127-20260328-202300.656-GET.http | +| 0128 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0128-20260328-202300.841-GET.http | +| 0129 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0129-20260328-205953.361-GET.http | +| 0130 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0130-20260328-205953.560-GET.http | +| 0131 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0131-20260328-210005.518-GET.http | +| 0132 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0132-20260328-210005.707-GET.http | +| 0133 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0133-20260329-094502.893-GET.http | +| 0134 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0134-20260329-094503.109-GET.http | +| 0135 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0135-20260329-094510.575-GET.http | +| 0136 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0136-20260329-094510.907-GET.http | +| 0137 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0137-20260329-102911.229-GET.http | +| 0138 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0138-20260329-102911.443-GET.http | +| 0139 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0139-20260329-102923.636-GET.http | +| 0140 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0140-20260329-102923.807-GET.http | +| 0141 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0141-20260329-155214.420-GET.http | +| 0142 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0142-20260329-155216.805-GET.http | +| 0143 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0143-20260329-155221.905-GET.http | +| 0144 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0144-20260329-155222.082-GET.http | | 0145 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/recents | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/recents/0145-20260329-185442.017-GET.http | | 0146 | upstream | | GET https://streaming.bose.com/streaming/account/{{accountId}}/device/{{device_id}}/recents | 200 OK | ./upstream/streaming/account/{accountId}/device/{device_id}/recents/0146-20260329-185442.128-GET.http | | 0147 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/recents | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/recents/0147-20260329-185442.130-GET.http | -| 0148 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0148-20260329-193915.264-GET.http | -| 0149 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0149-20260329-193915.468-GET.http | -| 0150 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0150-20260329-215246.808-GET.http | -| 0151 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0151-20260329-215247.001-GET.http | +| 0148 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0148-20260329-193915.264-GET.http | +| 0149 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0149-20260329-193915.468-GET.http | +| 0150 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0150-20260329-215246.808-GET.http | +| 0151 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0151-20260329-215247.001-GET.http | | 0152 | self | ☑ | GET / | 200 OK | ./self/root/0152-20260329-233126.264-GET.http | | 0153 | self | ☑ | GET /mgmt/spotify/accounts | 200 OK | ./self/mgmt/spotify/accounts/0153-20260329-233126.506-GET.http | | 0154 | self | ☑ | GET /mgmt/spotify/accounts | 200 OK | ./self/mgmt/spotify/accounts/0154-20260329-233126.515-GET.http | @@ -200,11 +200,11 @@ Interactions for `20260328-103522-477978/`: | 0196 | mirror | | POST /bmx/tunein/v1/report?stream_id=e536753726&guide_id=s166521&listen_id=1774819980&stream_type=liveRadio | 200 OK | ./mirror/bmx/tunein/v1/report/0196-20260329-233306.072-POST.http | | 0197 | upstream | | POST https://content.api.bose.io/bmx/tunein/v1/report?stream_id=e536753726&guide_id=s166521&listen_id=1774819980&stream_type=liveRadio | 200 OK | ./upstream/bmx/tunein/v1/report/0197-20260329-233306.182-POST.http | | 0198 | self | | POST /bmx/tunein/v1/report?stream_id=e536753726&guide_id=s166521&listen_id=1774819980&stream_type=liveRadio | 200 OK | ./self/bmx/tunein/v1/report/0198-20260329-233306.184-POST.http | -| 0199 | self | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0199-20260329-233317.196-GET.http | +| 0199 | self | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./self/streaming/software/update/account/{accountId}/0199-20260329-233317.196-GET.http | | 0200 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/presets | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/presets/0200-20260329-233317.206-GET.http | | 0201 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/presets | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/presets/0201-20260329-233317.394-GET.http | -| 0202 | mirror | | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0202-20260329-233317.409-GET.http | -| 0203 | self | | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0203-20260329-233317.838-GET.http | +| 0202 | mirror | ☑ | GET /streaming/software/update/account/{{accountId}} | 200 OK | ./mirror/streaming/software/update/account/{accountId}/0202-20260329-233317.409-GET.http | +| 0203 | self | ☑ | GET /updates/soundtouch?serialnumber=_serial_ | 200 OK | ./self/updates/soundtouch/0203-20260329-233317.838-GET.http | | 0204 | self | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./self/v1/scmudc/{device_id}/0204-20260329-233330.871-POST.http | | 0205 | mirror | | PUT /streaming/account/{{accountId}}/device/{{device_id}}/preset/6 | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/preset/6/0205-20260329-233331.093-PUT.http | | 0206 | upstream | | PUT https://streaming.bose.com/streaming/account/{{accountId}}/device/{{device_id}}/preset/6 | 500 Internal Server Error | ./upstream/streaming/account/{accountId}/device/{device_id}/preset/6/0206-20260329-233331.096-PUT.http | @@ -239,10 +239,10 @@ Interactions for `20260328-103522-477978/`: | 0235 | self | | GET /streaming/account/{{accountId}}/full | 200 OK | ./self/streaming/account/{accountId}/full/0235-20260329-233507.099-GET.http | | 0236 | mirror | ☑ | POST /v1/scmudc/{{device_id}} | 200 OK | ./mirror/v1/scmudc/{device_id}/0236-20260329-233507.137-POST.http | | 0237 | mirror | | GET /streaming/account/{{accountId}}/full | 200 OK | ./mirror/streaming/account/{accountId}/full/0237-20260329-233507.277-GET.http | -| 0238 | self | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0238-20260329-233508.639-GET.http | -| 0239 | self | | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0239-20260329-233508.642-GET.http | +| 0238 | self | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./self/streaming/account/{accountId}/device/{device_id}/group/0238-20260329-233508.639-GET.http | +| 0239 | self | ☑ | GET /streaming/device/{{device_id}}/streaming_token | 200 OK | ./self/streaming/device/{device_id}/streaming_token/0239-20260329-233508.642-GET.http | | 0240 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0240-20260329-233508.755-GET.http | -| 0241 | mirror | | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0241-20260329-233508.809-GET.http | +| 0241 | mirror | ☑ | GET /streaming/account/{{accountId}}/device/{{device_id}}/group/ | 200 OK | ./mirror/streaming/account/{accountId}/device/{device_id}/group/0241-20260329-233508.809-GET.http | | 0242 | self | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./self/streaming/account/{accountId}/provider_settings/0242-20260329-233508.866-GET.http | | 0243 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0243-20260329-233508.968-GET.http | | 0244 | mirror | ☑ | GET /streaming/account/{{accountId}}/provider_settings | 200 OK | ./mirror/streaming/account/{accountId}/provider_settings/0244-20260329-233509.041-GET.http |