Skip to content

fix(spotify)!: adapt wrapper to Spotify API breaking changes (2026-02-11)#446

Closed
Copilot wants to merge 11 commits intomasterfrom
copilot/update-spotify-api-wrapper
Closed

fix(spotify)!: adapt wrapper to Spotify API breaking changes (2026-02-11)#446
Copilot wants to merge 11 commits intomasterfrom
copilot/update-spotify-api-wrapper

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Feb 11, 2026

Spotify is removing/replacing several Web API endpoints and response fields starting 2026-02-11. This updates the Java wrapper to match the new API surface.

Removed endpoints

  • Batch gets: GET /albums, /artists, /tracks, /episodes, /shows
  • Browse: GET /browse/categories, /browse/categories/{id}, /browse/new-releases
  • Artists: GET /artists/{id}/top-tracks
  • Users: GET /users/{id}, GET /users/{id}/playlists
  • Type-specific library mutations: PUT|DELETE /me/{albums,tracks,episodes,shows} — replaced by unified endpoints

New unified library endpoints

  • PUT /me/librarySaveToLibraryRequest accepts Spotify URIs
  • DELETE /me/libraryRemoveFromLibraryRequest accepts Spotify URIs
// Old: type-specific
spotifyApi.saveTracksForUser("id1", "id2").build().execute();
// New: unified, URI-based
spotifyApi.saveToLibrary("spotify:track:id1", "spotify:track:id2").build().execute();

Updated endpoints

  • CreatePlaylistRequest: POST /users/{user_id}/playlistsPOST /me/playlists
// Old
spotifyApi.createPlaylist("user_id", "My Playlist").build();
// New
spotifyApi.createPlaylist("My Playlist").build();

Model field removals

Model Removed fields
Album availableMarkets, externalIds, label, popularity
AlbumSimplified albumGroup, availableMarkets
Artist followers, popularity
Track availableMarkets, externalIds, linkedFrom, popularity
TrackSimplified availableMarkets, linkedFrom
Show / ShowSimplified availableMarkets, publisher
User country, email, followers, product

Playlist field renames

Per Spotify's schema change, playlist item fields are renamed across Playlist, PlaylistSimplified, and PlaylistTrack:

  • Playlist.getTracks()getItems()
  • PlaylistSimplified.getTracks()getItems()
  • PlaylistTrack.getTrack()getItem()

JSON keys updated accordingly ("tracks""items", "track""item").

⚠️ Breaking changes

This is a major breaking change for consumers. Method removals, signature changes, and field renames will require callers to update their code.

Original prompt

This section details on the original issue you should resolve

<issue_title>fix(spotify)!: major changes to the api starting 2026-02-11</issue_title>
<issue_description>## 📌 Important: Spotify Developer Platform Changes (Not Controlled by This Project)

Spotify has announced upcoming changes to Spotify for Developers that will affect Development Mode applications and Web API access.

This project is a community-maintained Java API wrapper, developed by voluntary contributors and not affiliated with Spotify in any way.
The rules described below are Spotify’s decisions, not policies set or endorsed by this repository or its maintainers.

🔗 Spotify announcement: Update on Developer Access and Platform Security (Posted Feb 6, 2026)


⚠️ Current state of this library

  • The Java API wrapper has not yet been updated to reflect Spotify’s newly announced restrictions.
  • As Spotify begins enforcing these changes, issues are expected to appear (auth failures, missing endpoint access, quota errors, etc.).
  • These changes are as frustrating for maintainers as they are for users — they are imposed externally and cannot be overridden here.
  • The maintainers will not be updating the code immediately, but PRs adapting to the new Spotify constraints are welcome.

Please keep in mind: if something breaks due to these changes, it is not something maintainers can “fix” on Spotify’s behalf.


🔄 Summary of what Spotify is changing

Spotify is tightening access to its developer platform, particularly for Development Mode apps.

Starting February 11, 2026 (new apps)

All newly created Development Mode Client IDs will have these restrictions:

  • A Spotify Premium account is required
  • One Development Mode Client ID per developer
  • Up to 5 authorized users per Client ID
  • Access limited to a smaller subset of Web API endpoints

Starting March 9, 2026 (existing apps)

The same rules will be applied retroactively to all existing Development Mode integrations.


🧪 What this means for users of this wrapper

  • Development Mode is now explicitly limited to learning, experimentation, and personal, non-commercial use
  • Projects that previously worked may:
    • Fail authorization
    • Lose access to endpoints
    • Encounter stricter quotas or unexplained API errors
  • These failures may occur without any change to this library’s code

If your app stops working around these dates, the cause is almost certainly Spotify platform enforcement, not a regression in this repository.


💬 Where to discuss these changes (please read)

Questions, complaints, or feedback about Spotify’s policy changes should not be opened as issues in this repository.

The maintainers cannot resolve platform-level decisions and do not have a direct channel to Spotify.

👉 Please direct discussion to Spotify’s official community thread instead:
https://community.spotify.com/t5/Community-Prep/February-2026-Spotify-for-Developers-update-thread/m-p/7330564

Issues opened here should be limited to:

  • Wrapper bugs unrelated to Spotify policy
  • Concrete PRs adapting to the new constraints
  • Reproducible technical issues that can be addressed within this codebase

Thank you for understanding the limits of what a community-maintained project can realistically support under externally imposed platform changes.
</issue_description>

Comments on the Issue (you are @copilot in this section)

@dargmuesli # Technical details

🔄 Endpoint Changes

❌ Removed Endpoints

  • Create Playlist for User
    POST /users/{user_id}/playlists
    Create a playlist for a Spotify user.
    ➡️ Use POST /me/playlists instead

  • Get Artist's Top Tracks
    GET /artists/{id}/top-tracks
    Get Spotify catalog information about an artist's top tracks by country.

  • Get Available Markets
    GET /markets
    Get the list of markets where Spotify is available.

  • Get New Releases
    GET /browse/new-releases
    Get a list of new album releases featured in Spotify.

  • Get Several Albums
    GET /albums

  • Get Several Artists
    GET /artists

  • Get Several Audiobooks
    GET /audiobooks

  • Get Several Browse Categories
    GET /browse/categories

  • Get Several Chapters
    GET /chapters

  • Get Several Episodes
    GET /episodes

  • Get Several Shows
    GET /shows

  • Get Several Tracks
    GET /tracks

  • Get Single Browse Category
    GET /browse/categories/{id}

  • Get User's Playlists
    GET /users/{id}/playlists

  • Get User's Profile
    GET /users/{id}


➕ Added Endpoints

  • Save to Library
    PUT /me/library
    Save a list of Spotify URIs to the user's library.

  • **Remove...


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 10 commits February 11, 2026 10:50
…moveFromLibrary, update createPlaylist signature

Co-authored-by: dargmuesli <[email protected]>
Remove field declarations, constructor parameters, getters, builder
setters, builder fields, JSON deserialization code, and unused imports
(CountryCode, ProductType). Update toString() accordingly. Update
GetCurrentUsersProfileRequestTest to remove assertions on removed fields.

Co-authored-by: dargmuesli <[email protected]>
- Update createPlaylist() calls to match new single-param signature
- Update expected URL to /v1/me/playlists
- Rename getTracks() to getItems() on Playlist
- Rename getTrack() to getItem() on PlaylistTrack
- Update JSON fixtures: "tracks" -> "items", "track" -> "item"

Co-authored-by: dargmuesli <[email protected]>
Copilot AI changed the title [WIP] Fix outdated Spotify API wrapper for upcoming changes fix(spotify)!: adapt wrapper to Spotify API breaking changes (2026-02-11) Feb 11, 2026
Copilot AI requested a review from dargmuesli February 11, 2026 11:36
@dargmuesli
Copy link
Copy Markdown
Member

#448

@dargmuesli dargmuesli closed this Feb 11, 2026
@dargmuesli dargmuesli deleted the copilot/update-spotify-api-wrapper branch February 11, 2026 15:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(spotify)!: major changes to the api starting 2026-02-11

2 participants