Changes for version 0.015 - 2026-08-30
- BREAKING CHANGES
- create_playlist() drops the user_id argument; it now takes ($name, $public, $description) and posts to /v1/me/playlists (the old /v1/users/{user_id}/playlists endpoint returns 403)
- get_access_token() now takes an authorization code and returns true/false, storing the tokens on the object (it previously posted the literal string 'code' and could never succeed)
- NEW FEATURES
- Working OAuth authorization-code flow: authorize_url() builds the browser login URL, get_access_token() exchanges the code, refresh_access_token() renews via the stored refresh_token attribute
- unfollow_playlist() - DELETE /v1/playlists/{id}/followers
- BUG FIXES
- User playlist methods send the Authorization header even with force_client_auth disabled (previously 401 on every call)
- add_items_to_playlist() sends uris as a JSON array as the API requires; a bare string or arrayref is accepted
- search terms and extra query parameters are URI-escaped
- Endpoint migrations for the Spotify February 2026 API changes, including playlist /tracks -> /items and consolidated /v1/me/library endpoints; removed endpoints warn once per method
- OTHER
- Reverted the 0.014 split into WWW::Spotify::Client, ::Endpoint, and ::Response; the module is a single file again with the request machinery consolidated into shared _send_request/_build_url helpers. 0.014's fixes (SSL verification bypass removal, URI encoding, client_auth_required placement) are preserved in this line
- TESTING
- Mocked offline test suites for request building, the OAuth flow, and catalog methods (no credentials needed)
- Developer-only interactive live test (xt/author/live-user.t) that performs a real browser OAuth login and exercises user endpoints; skipped everywhere unless SPOTIFY_INTERACTIVE_TESTS=1
Documentation
Modules
Spotify Web API Wrapper