-
-
Notifications
You must be signed in to change notification settings - Fork 288
feat!: Spotify Web API breaking changes for 2026-02-11 #448
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
…ethods in SpotifyApi.java Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
- Remove 20 deprecated request classes (GET several/top, POST/GET user-specific, PUT/DELETE per-type library) - Remove corresponding 20 test classes and 12 test fixtures - Remove 28 builder methods from SpotifyApi.java - Add SaveToLibraryRequest (PUT /me/library) and RemoveFromLibraryRequest (DELETE /me/library) - Add saveToLibrary() and removeFromLibrary() builder methods to SpotifyApi.java Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
…om Album model Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
…ds from Track model Remove field declarations, constructor assignments, getter methods, Builder setter methods, and JsonUtil deserialization code for the four fields. Also remove unused imports (CountryCode, ExternalId, TrackLink, Gson) and update toString method. Update GetTrackRequestTest to remove assertions for removed fields. Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
…fied Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
…ied, and PlaylistTrack Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
…ints Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## beta #448 +/- ##
=============================================
- Coverage 66.64% 49.72% -16.92%
+ Complexity 672 579 -93
=============================================
Files 184 242 +58
Lines 7264 8605 +1341
Branches 1151 1050 -101
=============================================
- Hits 4841 4279 -562
- Misses 1520 3528 +2008
+ Partials 903 798 -105 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
@copilot make sure to apply the changes to the sources in the |
… step - Remove 20 example files for deleted endpoints - Add SaveToLibraryExample and RemoveFromLibraryExample - Fix pre-existing SavedEpisode import bug in GetUsersSavedEpisodesExample - Add compile-examples Maven profile to compile examples with project sources - Add CI step to compile examples during builds Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Done in 9988692. Removed 20 example files for deleted endpoints, added |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Updates this Java Spotify Web API wrapper for the Spotify Web API breaking changes effective 2026-02-11, removing endpoints/fields Spotify no longer serves and introducing the new unified /me/library save/remove operations.
Changes:
- Removed request classes, tests, fixtures, and examples for endpoints Spotify removed (e.g.,
/users/{id},/tracks,/albums,/browse/*, etc.). - Added new library endpoints:
SaveToLibraryRequest(PUT/me/library) andRemoveFromLibraryRequest(DELETE/me/library), plus examples and tests. - Updated models/fixtures for response changes (notably playlist
tracks→itemsand playlist itemtrack→item, plus removed fields like popularity/followers/available_markets in several models).
Reviewed changes
Copilot reviewed 106 out of 106 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/java/se/michaelthelin/spotify/requests/data/library/SaveToLibraryRequest.java | Adds PUT /me/library request implementation. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/RemoveFromLibraryRequest.java | Updates request to DELETE /me/library with uris body. |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/PlaylistTrack.java | Renames playlist entry track→item and updates JSON parsing. |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/PlaylistSimplified.java | Renames tracks→items and updates JSON parsing. |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/Playlist.java | Renames tracks→items and updates JSON parsing. |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/TrackSimplified.java | Removes fields no longer returned (e.g., available markets / linked-from). |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/AlbumSimplified.java | Removes fields no longer returned (e.g., album_group / available_markets). |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/Artist.java | Removes fields no longer returned (e.g., followers / popularity). |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/ShowSimplified.java | Removes fields no longer returned (e.g., available_markets / publisher). |
| src/main/java/se/michaelthelin/spotify/model_objects/specification/Show.java | Removes fields no longer returned (e.g., available_markets / publisher). |
| src/main/java/se/michaelthelin/spotify/requests/data/users_profile/GetUsersProfileRequest.java | Removes deleted endpoint request (GET /users/{id}). |
| src/main/java/se/michaelthelin/spotify/requests/data/tracks/GetSeveralTracksRequest.java | Removes deleted endpoint request (GET /tracks). |
| src/main/java/se/michaelthelin/spotify/requests/data/shows/GetSeveralShowsRequest.java | Removes deleted endpoint request (GET /shows). |
| src/main/java/se/michaelthelin/spotify/requests/data/playlists/GetListOfUsersPlaylistsRequest.java | Removes deleted endpoint request (GET /users/{id}/playlists). |
| src/main/java/se/michaelthelin/spotify/requests/data/playlists/CreatePlaylistRequest.java | Removes deleted endpoint request (POST /users/{id}/playlists). |
| src/main/java/se/michaelthelin/spotify/requests/data/library/SaveShowsForCurrentUserRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/SaveEpisodesForCurrentUserRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/SaveAlbumsForCurrentUserRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/RemoveUsersSavedTracksRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/RemoveUsersSavedShowsRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/RemoveUsersSavedEpisodesRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/library/RemoveAlbumsForCurrentUserRequest.java | Removes deprecated library endpoint request. |
| src/main/java/se/michaelthelin/spotify/requests/data/episodes/GetSeveralEpisodesRequest.java | Removes deleted endpoint request (GET /episodes). |
| src/main/java/se/michaelthelin/spotify/requests/data/browse/GetListOfNewReleasesRequest.java | Removes deleted endpoint request (GET /browse/new-releases). |
| src/main/java/se/michaelthelin/spotify/requests/data/browse/GetListOfCategoriesRequest.java | Removes deleted endpoint request (GET /browse/categories). |
| src/main/java/se/michaelthelin/spotify/requests/data/browse/GetCategoryRequest.java | Removes deleted endpoint request (GET /browse/categories/{id}). |
| src/main/java/se/michaelthelin/spotify/requests/data/artists/GetSeveralArtistsRequest.java | Removes deleted endpoint request (GET /artists). |
| src/main/java/se/michaelthelin/spotify/requests/data/artists/GetArtistsTopTracksRequest.java | Removes deleted endpoint request (GET /artists/{id}/top-tracks). |
| src/main/java/se/michaelthelin/spotify/requests/data/albums/GetSeveralAlbumsRequest.java | Removes deleted endpoint request (GET /albums). |
| src/test/java/se/michaelthelin/spotify/requests/data/library/SaveToLibraryRequestTest.java | Adds test coverage for PUT /me/library (currently light assertions). |
| src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveFromLibraryRequestTest.java | Adds test coverage for DELETE /me/library (currently light assertions). |
| src/test/java/se/michaelthelin/spotify/requests/data/users_profile/GetUsersProfileRequestTest.java | Removes tests for deleted endpoint (GET /users/{id}). |
| src/test/java/se/michaelthelin/spotify/requests/data/users_profile/GetCurrentUsersProfileRequestTest.java | Updates assertions for removed User fields (country/email/followers/product). |
| src/test/java/se/michaelthelin/spotify/requests/data/tracks/GetTrackRequestTest.java | Updates assertions for removed Track fields (available_markets/external_ids/popularity). |
| src/test/java/se/michaelthelin/spotify/requests/data/shows/GetShowRequestTest.java | Updates assertions for removed Show fields (available_markets/publisher). |
| src/test/java/se/michaelthelin/spotify/requests/data/shows/GetSeveralShowsRequestTest.java | Removes tests for deleted endpoint (GET /shows). |
| src/test/java/se/michaelthelin/spotify/requests/data/playlists/GetPlaylistsItemsRequestTest.java | Updates tests for playlist item track→item. |
| src/test/java/se/michaelthelin/spotify/requests/data/playlists/GetPlaylistRequestTest.java | Updates tests for playlist tracks→items. |
| src/test/java/se/michaelthelin/spotify/requests/data/playlists/GetListOfUsersPlaylistsRequestTest.java | Removes tests for deleted endpoint (GET /users/{id}/playlists). |
| src/test/java/se/michaelthelin/spotify/requests/data/playlists/CreatePlaylistRequestTest.java | Removes tests for deleted endpoint (POST /users/{id}/playlists). |
| src/test/java/se/michaelthelin/spotify/requests/data/playlists/CreatePlaylistRequestNumericStringTest.java | Removes tests tied to removed request. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/SaveTracksForUserRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/SaveShowsForCurrentUserRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/SaveEpisodesForCurrentUserRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/SaveAlbumsForCurrentUserRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveUsersSavedTracksRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveUsersSavedShowsRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveUsersSavedEpisodesRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveAlbumsForCurrentUserRequestTest.java | Removes tests for deprecated library endpoint. |
| src/test/java/se/michaelthelin/spotify/requests/data/episodes/GetSeveralEpisodesRequestTest.java | Removes tests for deleted endpoint (GET /episodes). |
| src/test/java/se/michaelthelin/spotify/requests/data/browse/GetListOfNewReleasesRequestTest.java | Removes tests for deleted endpoint (GET /browse/new-releases). |
| src/test/java/se/michaelthelin/spotify/requests/data/browse/GetListOfCategoriesRequestTest.java | Removes tests for deleted endpoint (GET /browse/categories). |
| src/test/java/se/michaelthelin/spotify/requests/data/browse/GetCategoryRequestTest.java | Removes tests for deleted endpoint (GET /browse/categories/{id}). |
| src/test/java/se/michaelthelin/spotify/requests/data/artists/GetSeveralArtistsRequestTest.java | Removes tests for deleted endpoint (GET /artists). |
| src/test/java/se/michaelthelin/spotify/requests/data/artists/GetArtistsAlbumsRequestTest.java | Updates assertions for removed album_group. |
| src/test/java/se/michaelthelin/spotify/requests/data/artists/GetArtistRequestTest.java | Updates assertions for removed followers/popularity. |
| src/test/java/se/michaelthelin/spotify/requests/data/albums/GetSeveralAlbumsRequestTest.java | Removes tests for deleted endpoint (GET /albums). |
| src/test/java/se/michaelthelin/spotify/requests/data/albums/GetAlbumRequestTest.java | Updates assertions for removed album fields (available_markets/external_ids/label/popularity). |
| src/test/fixtures/requests/data/search/simplified/SearchPlaylistsRequest.json | Renames playlist tracks object to items in fixture. |
| src/test/fixtures/requests/data/playlists/GetPlaylistsItemsRequest.json | Renames playlist entry track to item in fixture. |
| src/test/fixtures/requests/data/playlists/GetPlaylistsItemsRequest_Episode.json | Renames playlist entry track to item in fixture. |
| src/test/fixtures/requests/data/playlists/GetPlaylistRequest.json | Renames playlist tracks to items and entry track to item. |
| src/test/fixtures/requests/data/playlists/GetListOfUsersPlaylistsRequest_UserWith$.json | Renames playlist tracks to items in fixture. |
| src/test/fixtures/requests/data/playlists/GetListOfCurrentUsersPlaylistsRequest.json | Renames playlist tracks to items in fixture. |
| src/test/fixtures/requests/data/browse/GetListOfFeaturedPlaylistsRequest.json | Renames playlist tracks to items in fixture. |
| src/test/fixtures/requests/data/browse/GetCategorysPlaylistsRequest.json | Renames playlist tracks to items in fixture. |
| src/test/fixtures/requests/data/users_profile/GetUsersProfileRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/shows/GetSeveralShowsRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/playlists/GetListOfUsersPlaylistsRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/playlists/CreatePlaylistRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/browse/GetListOfNewReleasesRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/browse/GetListOfCategoriesRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/browse/GetCategoryRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/artists/GetSeveralArtistsRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/artists/GetArtistsTopTracksRequest.json | Removes fixture for deleted endpoint. |
| src/test/fixtures/requests/data/albums/GetSeveralAlbumsRequest.json | Removes fixture for deleted endpoint. |
| examples/data/playlists/GetPlaylistsItemsExample.java | Updates example for getItem() rename. |
| examples/data/library/SaveToLibraryExample.java | Adds example for PUT /me/library. |
| examples/data/library/RemoveFromLibraryExample.java | Adds example for DELETE /me/library. |
| examples/data/library/GetUsersSavedEpisodesExample.java | Fixes SavedEpisode import path. |
| examples/data/users_profile/GetUsersProfileExample.java | Removes example for deleted endpoint. |
| examples/data/tracks/GetSeveralTracksExample.java | Removes example for deleted endpoint. |
| examples/data/shows/GetSeveralShowsExample.java | Removes example for deleted endpoint. |
| examples/data/playlists/GetListOfUsersPlaylistsExample.java | Removes example for deleted endpoint. |
| examples/data/playlists/CreatePlaylistExample.java | Removes example for deleted endpoint. |
| examples/data/library/SaveTracksForUserExample.java | Removes example for deprecated endpoint. |
| examples/data/library/SaveShowsForCurrentUserExample.java | Removes example for deprecated endpoint. |
| examples/data/library/SaveEpisodesForCurrentUserExample.java | Removes example for deprecated endpoint. |
| examples/data/library/SaveAlbumsForCurrentUserExample.java | Removes example for deprecated endpoint. |
| examples/data/library/RemoveUsersSavedTracksExample.java | Removes example for deprecated endpoint. |
| examples/data/library/RemoveUsersSavedShowsExample.java | Removes example for deprecated endpoint. |
| examples/data/episodes/GetSeveralEpisodesExample.java | Removes example for deleted endpoint. |
| examples/data/browse/GetListOfNewReleasesExample.java | Removes example for deleted endpoint. |
| examples/data/browse/GetListOfCategoriesExample.java | Removes example for deleted endpoint. |
| examples/data/browse/GetCategoryExample.java | Removes example for deleted endpoint. |
| examples/data/artists/GetSeveralArtistsExample.java | Removes example for deleted endpoint. |
| examples/data/artists/GetArtistsTopTracksExample.java | Removes example for deleted endpoint. |
| examples/data/albums/GetSeveralAlbumsExample.java | Removes example for deleted endpoint. |
| pom.xml | Adds compile-examples profile (and plugin config) to compile examples in CI. |
| .github/workflows/ci.yml | Adds CI step to compile examples via Maven profile. |
Comments suppressed due to low confidence (4)
src/test/java/se/michaelthelin/spotify/requests/data/library/SaveToLibraryRequestTest.java:31
shouldComplyWithReferenceonly asserts the auth header and URI. Since this request now sends a JSON body, the test should also assert theContent-Type: application/jsonheader and that theurisbody parameter is present (similar to other request tests usingassertHasHeader/assertHasBodyParameter).
src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveFromLibraryRequestTest.java:31shouldComplyWithReferencecurrently doesn't verify the JSON request body/header. SinceremoveFromLibraryis a JSON-body DELETE, add assertions forContent-Type: application/jsonand for theurisbody parameter (mirroring other request tests).
src/test/java/se/michaelthelin/spotify/requests/data/library/SaveToLibraryRequestTest.java:43- This method overrides ITest.shouldReturnDefault; it is advisable to add an Override annotation.
src/test/java/se/michaelthelin/spotify/requests/data/library/RemoveFromLibraryRequestTest.java:43 - This method overrides ITest.shouldReturnDefault; it is advisable to add an Override annotation.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
src/main/java/se/michaelthelin/spotify/model_objects/specification/PlaylistSimplified.java
Outdated
Show resolved
Hide resolved
src/main/java/se/michaelthelin/spotify/model_objects/specification/Playlist.java
Show resolved
Hide resolved
src/main/java/se/michaelthelin/spotify/model_objects/specification/PlaylistTrack.java
Show resolved
Hide resolved
src/main/java/se/michaelthelin/spotify/requests/data/library/SaveToLibraryRequest.java
Show resolved
Hide resolved
|
@copilot apply changes based on the comments in this thread |
…request execute methods - PlaylistSimplified.setItems(): update @param tracks → items - Playlist.setItems(): update Javadoc wording and @param tracks → items - PlaylistTrack.setItem(): update Javadoc wording and @param track → item - SaveToLibraryRequest.execute(): add @OverRide annotation - RemoveFromLibraryRequest.execute(): add @OverRide annotation Co-authored-by: dargmuesli <4778485+dargmuesli@users.noreply.github.com>
Applied all four review comments in b51a79f: fixed Javadoc |
compile-examplesMaven profile (pom.xml)Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.