Moving to Modern Streaming: Introducing AAC HLS on SoundCloud APIs

At SoundCloud, we’re always looking for ways to improve the listening experience for our creators, partners, and listeners. One of the biggest improvements we can make is at the very core: the audio streams themselves. Over the years, our API has returned a set of streaming URLs based on MP3 and Opus formats. While these formats served us well, it’s time to modernize. To provide higher quality, more consistent playback, and better support across devices, we’re moving to AAC-based HLS streams.

🚀 What’s changing?

Starting today, the streams endpoint (/tracks/{track_urn}/play) includes new HLS AAC transcodings:

  • hls_aac_160_url (standard quality, preferred format and bitrate)
  • hls_aac_96_url (alternative quality, depending on availability and can work as fallback to the 160k stream)

For a transition period, existing fields like http_mp3_128_url, hls_mp3_128_url, and hls_opus_64_url will remain available.

⏳ Deprecation Timeline

We plan to remove Progressive HTTP, HLS MP3 and HLS Opus transcodings from our APIs on November 15, 2025. The following fields will no longer be supported after that date:

  • http_mp3_128_url (Progressive HTTP MP3)
  • hls_mp3_128_url (HLS MP3)
  • hls_opus_64_url (HLS Opus)

preview_mp3_128_url will remain available for preview use cases.

✅ What you need to do

  • Migrate from MP3 / Opus to AAC

    • Replace http_mp3_128_url, hls_mp3_128_url, and hls_opus_64_url with the new AAC HLS streams.
    • Use hls_aac_160_url (preferred) or hls_aac_96_url where available.
  • Migrate from Progressive HTTP to HLS

    • Progressive MP3 playback (http_mp3_128_url) will no longer be supported.

Test your integration with the new URLs to ensure a smooth migration.

🔍 Example Response as of now

{
"http_mp3_128_url": "https://cf-media.sndcdn.com/trackid.128.mp3?...",
"hls_mp3_128_url": "https://cf-hls-media.sndcdn.com/playlist/trackid.128.mp3/playlist.m3u8?...",
"hls_aac_160_url": "https://playback.media-streaming.soundcloud.cloud/trackid/aac_160k/uuid/playlist.m3u8?...",
"hls_opus_64_url": "https://cf-hls-opus-media.sndcdn.com/playlist/uuid.64.opus/playlist.m3u8?...",
"preview_mp3_128_url": "https://cf-preview-media.sndcdn.com/preview/0/30/trackid.128.mp3?..."
}

🔍 Example Response after Nov 15, 2025

{
"hls_aac_160_url": "https://playback.media-streaming.soundcloud.cloud/trackid/aac_160k/uuid/playlist.m3u8?...",
"hls_aac_96_url": "https://playback.media-streaming.soundcloud.cloud/trackid/aac_96k/uuid/playlist.m3u8?...",
"preview_mp3_128_url": "https://cf-preview-media.sndcdn.com/preview/0/30/trackid.128.mp3?..."
}

💬 Feedback

We’d love to hear how the transition works for you. If you run into issues or need additional support, please open a discussion on GitHub. This change sets the foundation for better audio quality and playback reliability across SoundCloud integrations. We encourage you to migrate early and share your feedback.