Atlas / Categories / Music / Spotify Music — entry 028 of 32
Spotify Verified Jul 2026
Spotify's Web API exposes the same catalog and personalization data that powers the Spotify apps: search, track/album/artist metadata, audio features, playlists, and OAuth-scoped access to a user's library and player state. Every endpoint requires an OAuth 2.0 token, from client-credentials grants for plain catalog reads up to full authorization-code flows for acting on a user's own account, and interactive playback control additionally requires the calling user to hold Spotify Premium. Registering an app and calling the API is free, with request volume throttled over a rolling 30-second window.
music streaming oauth catalog recommendations
Authentication OAuth Requires an OAuth flow; expect app registration.
HTTPS Supported Traffic is encrypted in transit.
CORS Enabled Callable directly from browser JavaScript.
Pricing Free No paid tier — free for the documented use case.
Formats JSON Responses can be requested as JSON.
GreatAPIs Score Score 77 out of 100
Authentication 8/25 OAuth flow required
Pricing 20/20 Free to use
Docs 20/20 Machine-readable spec file bundled
Formats 9/15 Single response format
Freshness 20/20 Verified within 6 months
Embed this badge <a href="https://greatapis.com/api/spotify/"><img src="https://greatapis.com/badge/spotify.svg" alt="Scored 77 on greatapis.com"></a>
Auth quickstart Register an app / run the OAuth flow to obtain a bearer token. Send it as an Authorization header Authorization: Bearer <token>Stored key No key stored Clear key
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints Albums 8 GET /albumsGet Several Albums
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /albums/{id}Get Album
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /albums/{id}/tracksGet Album Tracks
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /browse/new-releasesGet New Releases
Parameters Name In Required Type countryquery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/albumsGet User's Saved Albums
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/albumsSave Albums for Current User
Request body application/json
Responses Status Description Schema 200The album is saved — 401— — 403— — 429— —
DELETE /me/albumsRemove Users' Saved Albums
Request body application/json
Responses Status Description Schema 200Album(s) have been removed from the library — 401— — 403— — 429— —
GET /me/albums/containsCheck User's Saved Albums
Responses Status Description Schema 200— — 401— — 403— — 429— —
Artists 5 GET /artistsGet Several Artists
Parameters Name In Required Type idsquery yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /artists/{id}Get Artist
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /artists/{id}/albumsGet Artist's Albums
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /artists/{id}/related-artistsGet Artist's Related Artists
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /artists/{id}/top-tracksGet Artist's Top Tracks
Responses Status Description Schema 200— — 401— — 403— — 429— —
Audiobooks 7 GET /audiobooksGet Several Audiobooks
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /audiobooks/{id}Get an Audiobook
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /audiobooks/{id}/chaptersGet Audiobook Chapters
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/audiobooksGet User's Saved Audiobooks
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/audiobooksSave Audiobooks for Current User
Responses Status Description Schema 200Audiobook(s) are saved to the library — 401— — 403— — 429— —
DELETE /me/audiobooksRemove User's Saved Audiobooks
Responses Status Description Schema 200Audiobook(s) have been removed from the library — 401— — 403— — 429— —
GET /me/audiobooks/containsCheck User's Saved Audiobooks
Responses Status Description Schema 200— — 401— — 403— — 429— —
Categories 2 GET /browse/categoriesGet Several Browse Categories
Parameters Name In Required Type countryquery no string localequery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /browse/categories/{category_id}Get Single Browse Category
Parameters Name In Required Type category_idpath yes string countryquery no string localequery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
Chapters 2 GET /chaptersGet Several Chapters
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /chapters/{id}Get a Chapter
Responses Status Description Schema 200— — 401— — 403— — 429— —
Episodes 6 GET /episodesGet Several Episodes
Parameters Name In Required Type idsquery yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /episodes/{id}Get Episode
Parameters Name In Required Type idpath yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/episodesGet User's Saved Episodes
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/episodesSave Episodes for Current User
Parameters Name In Required Type idsquery yes string
Request body application/json
Responses Status Description Schema 200Episode saved — 401— — 403— — 429— —
DELETE /me/episodesRemove User's Saved Episodes
Request body application/json
Responses Status Description Schema 200Episode removed — 401— — 403— — 429— —
GET /me/episodes/containsCheck User's Saved Episodes
Parameters Name In Required Type idsquery yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
Genres 1 GET /recommendations/available-genre-seedsGet Available Genre Seeds
Responses Status Description Schema 200— — 401— — 403— — 429— —
Markets 1 GET /marketsGet Available Markets
Responses Status Description Schema 200A markets object with an array of country codes — 401— — 403— — 429— —
Player 15 GET /me/playerGet Playback State
Responses Status Description Schema 200— — 204Playback not available or active — 401— — 403— — 429— —
PUT /me/playerTransfer Playback
Request body application/json
Responses Status Description Schema 204Playback transferred — 401— — 403— — 429— —
GET /me/player/currently-playingGet Currently Playing Track
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/player/devicesGet Available Devices
Responses Status Description Schema 200— — 401— — 403— — 429— —
POST /me/player/nextSkip To Next
Parameters Name In Required Type device_idquery no string
Responses Status Description Schema 204Command sent — 401— — 403— — 429— —
PUT /me/player/pausePause Playback
Parameters Name In Required Type device_idquery no string
Responses Status Description Schema 204Playback paused — 401— — 403— — 429— —
PUT /me/player/playStart/Resume Playback
Parameters Name In Required Type device_idquery no string
Request body application/json
Responses Status Description Schema 204Playback started — 401— — 403— — 429— —
POST /me/player/previousSkip To Previous
Parameters Name In Required Type device_idquery no string
Responses Status Description Schema 204Command sent — 401— — 403— — 429— —
GET /me/player/queueGet the User's Queue
Responses Status Description Schema 200— — 401— — 403— — 429— —
POST /me/player/queueAdd Item to Playback Queue
Parameters Name In Required Type uriquery yes string device_idquery no string
Responses Status Description Schema 204Command received — 401— — 403— — 429— —
GET /me/player/recently-playedGet Recently Played Tracks
Parameters Name In Required Type limitquery no integer afterquery no integer beforequery no integer
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/player/repeatSet Repeat Mode
Parameters Name In Required Type statequery yes string device_idquery no string
Responses Status Description Schema 204Command sent — 401— — 403— — 429— —
PUT /me/player/seekSeek To Position
Parameters Name In Required Type position_msquery yes integer device_idquery no string
Responses Status Description Schema 204Command sent — 401— — 403— — 429— —
PUT /me/player/shuffleToggle Playback Shuffle
Parameters Name In Required Type statequery yes boolean device_idquery no string
Responses Status Description Schema 204Command sent — 401— — 403— — 429— —
PUT /me/player/volumeSet Playback Volume
Parameters Name In Required Type volume_percentquery yes integer device_idquery no string
Responses Status Description Schema 204Command sent — 401— — 403— — 429— —
Playlists 13 GET /browse/categories/{category_id}/playlistsGet Category's Playlists
Parameters Name In Required Type category_idpath yes string countryquery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /browse/featured-playlistsGet Featured Playlists
Parameters Name In Required Type countryquery no string localequery no string timestampquery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/playlistsGet Current User's Playlists
Parameters Name In Required Type offsetquery no integer
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /playlists/{playlist_id}Get Playlist
Parameters Name In Required Type fieldsquery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /playlists/{playlist_id}Change Playlist Details
Request body application/json
Responses Status Description Schema 200Playlist updated — 401— — 403— — 429— —
GET /playlists/{playlist_id}/imagesGet Playlist Cover Image
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /playlists/{playlist_id}/imagesAdd Custom Playlist Cover Image
Responses Status Description Schema 200Image uploaded — 401— — 403— — 429— —
GET /playlists/{playlist_id}/tracksGet Playlist Items
Parameters Name In Required Type fieldsquery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
POST /playlists/{playlist_id}/tracksAdd Items to Playlist
Parameters Name In Required Type positionquery no integer urisquery no string
Request body application/json
Responses Status Description Schema 201— — 401— — 403— — 429— —
PUT /playlists/{playlist_id}/tracksUpdate Playlist Items
Parameters Name In Required Type urisquery no string
Request body application/json
Responses Status Description Schema 200— — 401— — 403— — 429— —
DELETE /playlists/{playlist_id}/tracksRemove Playlist Items
Request body application/json
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /users/{user_id}/playlistsGet User's Playlists
Parameters Name In Required Type offsetquery no integer
Responses Status Description Schema 200— — 401— — 403— — 429— —
POST /users/{user_id}/playlistsCreate Playlist
Request body application/json
Responses Status Description Schema 201— — 401— — 403— — 429— —
Search 1 GET /searchSearch for Item
Parameters Name In Required Type qquery yes string typequery yes array limitquery no integer offsetquery no integer include_externalquery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
Shows 7 GET /me/showsGet User's Saved Shows
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/showsSave Shows for Current User
Responses Status Description Schema 200Show saved — 401— — 403— — 429— —
DELETE /me/showsRemove User's Saved Shows
Responses Status Description Schema 200Show removed — 401— — 403— — 429— —
GET /me/shows/containsCheck User's Saved Shows
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /showsGet Several Shows
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /shows/{id}Get Show
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /shows/{id}/episodesGet Show Episodes
Responses Status Description Schema 200— — 401— — 403— — 429— —
Tracks 10 GET /audio-analysis/{id}Get Track's Audio Analysis
Parameters Name In Required Type idpath yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /audio-featuresGet Tracks' Audio Features
Parameters Name In Required Type idsquery yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /audio-features/{id}Get Track's Audio Features
Parameters Name In Required Type idpath yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/tracksGet User's Saved Tracks
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/tracksSave Tracks for Current User
Request body application/json
Responses Status Description Schema 200Track saved — 401— — 403— — 429— —
DELETE /me/tracksRemove User's Saved Tracks
Request body application/json
Responses Status Description Schema 200Track removed — 401— — 403— — 429— —
GET /me/tracks/containsCheck User's Saved Tracks
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /recommendationsGet Recommendations
Parameters Name In Required Type limitquery no integer seed_artistsquery yes string seed_genresquery yes string seed_tracksquery yes string min_acousticnessquery no number max_acousticnessquery no number target_acousticnessquery no number min_danceabilityquery no number max_danceabilityquery no number target_danceabilityquery no number min_duration_msquery no integer max_duration_msquery no integer target_duration_msquery no integer min_energyquery no number max_energyquery no number target_energyquery no number min_instrumentalnessquery no number max_instrumentalnessquery no number target_instrumentalnessquery no number min_keyquery no integer max_keyquery no integer target_keyquery no integer min_livenessquery no number max_livenessquery no number target_livenessquery no number min_loudnessquery no number max_loudnessquery no number target_loudnessquery no number min_modequery no integer max_modequery no integer target_modequery no integer min_popularityquery no integer max_popularityquery no integer target_popularityquery no integer min_speechinessquery no number max_speechinessquery no number target_speechinessquery no number min_tempoquery no number max_tempoquery no number target_tempoquery no number min_time_signaturequery no integer max_time_signaturequery no integer target_time_signaturequery no integer min_valencequery no number max_valencequery no number target_valencequery no number
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /tracksGet Several Tracks
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /tracks/{id}Get Track
Parameters Name In Required Type idpath yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
Users 10 GET /meGet Current User's Profile
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/followingGet Followed Artists
Parameters Name In Required Type typequery yes string afterquery no string limitquery no integer
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /me/followingFollow Artists or Users
Parameters Name In Required Type typequery yes string idsquery yes string
Request body application/json
Responses Status Description Schema 204Artist or user followed — 401— — 403— — 429— —
DELETE /me/followingUnfollow Artists or Users
Parameters Name In Required Type typequery yes string idsquery yes string
Request body application/json
Responses Status Description Schema 200Artist or user unfollowed — 401— — 403— — 429— —
GET /me/following/containsCheck If User Follows Artists or Users
Parameters Name In Required Type typequery yes string idsquery yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /me/top/{type}Get User's Top Items
Parameters Name In Required Type typepath yes string time_rangequery no string
Responses Status Description Schema 200— — 401— — 403— — 429— —
PUT /playlists/{playlist_id}/followersFollow Playlist
Request body application/json
Responses Status Description Schema 200Playlist followed — 401— — 403— — 429— —
DELETE /playlists/{playlist_id}/followersUnfollow Playlist
Responses Status Description Schema 200Playlist unfollowed — 401— — 403— — 429— —
GET /playlists/{playlist_id}/followers/containsCheck if Users Follow Playlist
Parameters Name In Required Type idsquery yes string
Responses Status Description Schema 200— — 401— — 403— — 429— —
GET /users/{user_id}Get User's Profile
Responses Status Description Schema 200— — 401— — 403— — 429— —
Developer reference Base URL https://api.spotify.com/v1
Rate limit Dynamic — calculated over a rolling 30-second window; a higher ceiling applies in extended quota mode
Key endpoints GET /search GET /tracks/{id} GET /artists/{id} GET /me/player GET /recommendations