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.

musicstreamingoauthcatalogrecommendations
AuthenticationOAuthRequires an OAuth flow; expect app registration.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score77out of 100
Authentication8/25OAuth flow required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 77 on greatapis.com
<a href="https://greatapis.com/api/spotify/"><img src="https://greatapis.com/badge/spotify.svg" alt="Scored 77 on greatapis.com"></a>

Auth quickstart

  1. Register an app / run the OAuth flow to obtain a bearer token.
  2. Send it as an Authorization headerAuthorization: Bearer <token>
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Servers
https://api.spotify.com/v1
Auth
oauth_2_0
Albums8
GET/albumsGet Several Albums
Responses
StatusDescriptionSchema
200
401
403
429
GET/albums/{id}Get Album
Responses
StatusDescriptionSchema
200
401
403
429
GET/albums/{id}/tracksGet Album Tracks
Responses
StatusDescriptionSchema
200
401
403
429
GET/browse/new-releasesGet New Releases
Parameters
NameInRequiredType
countryquerynostring
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/albumsGet User's Saved Albums
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/albumsSave Albums for Current User
Request body

application/json

Responses
StatusDescriptionSchema
200The album is saved
401
403
429
DELETE/me/albumsRemove Users' Saved Albums
Request body

application/json

Responses
StatusDescriptionSchema
200Album(s) have been removed from the library
401
403
429
GET/me/albums/containsCheck User's Saved Albums
Responses
StatusDescriptionSchema
200
401
403
429
Artists5
GET/artistsGet Several Artists
Parameters
NameInRequiredType
idsqueryyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/artists/{id}Get Artist
Responses
StatusDescriptionSchema
200
401
403
429
GET/artists/{id}/albumsGet Artist's Albums
Responses
StatusDescriptionSchema
200
401
403
429
GET/artists/{id}/related-artistsGet Artist's Related Artists
Responses
StatusDescriptionSchema
200
401
403
429
GET/artists/{id}/top-tracksGet Artist's Top Tracks
Responses
StatusDescriptionSchema
200
401
403
429
Audiobooks7
GET/audiobooksGet Several Audiobooks
Responses
StatusDescriptionSchema
200
401
403
429
GET/audiobooks/{id}Get an Audiobook
Responses
StatusDescriptionSchema
200
401
403
429
GET/audiobooks/{id}/chaptersGet Audiobook Chapters
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/audiobooksGet User's Saved Audiobooks
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/audiobooksSave Audiobooks for Current User
Responses
StatusDescriptionSchema
200Audiobook(s) are saved to the library
401
403
429
DELETE/me/audiobooksRemove User's Saved Audiobooks
Responses
StatusDescriptionSchema
200Audiobook(s) have been removed from the library
401
403
429
GET/me/audiobooks/containsCheck User's Saved Audiobooks
Responses
StatusDescriptionSchema
200
401
403
429
Categories2
GET/browse/categoriesGet Several Browse Categories
Parameters
NameInRequiredType
countryquerynostring
localequerynostring
Responses
StatusDescriptionSchema
200
401
403
429
GET/browse/categories/{category_id}Get Single Browse Category
Parameters
NameInRequiredType
category_idpathyesstring
countryquerynostring
localequerynostring
Responses
StatusDescriptionSchema
200
401
403
429
Chapters2
GET/chaptersGet Several Chapters
Responses
StatusDescriptionSchema
200
401
403
429
GET/chapters/{id}Get a Chapter
Responses
StatusDescriptionSchema
200
401
403
429
Episodes6
GET/episodesGet Several Episodes
Parameters
NameInRequiredType
idsqueryyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/episodes/{id}Get Episode
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/episodesGet User's Saved Episodes
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/episodesSave Episodes for Current User
Parameters
NameInRequiredType
idsqueryyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200Episode saved
401
403
429
DELETE/me/episodesRemove User's Saved Episodes
Request body

application/json

Responses
StatusDescriptionSchema
200Episode removed
401
403
429
GET/me/episodes/containsCheck User's Saved Episodes
Parameters
NameInRequiredType
idsqueryyesstring
Responses
StatusDescriptionSchema
200
401
403
429
Genres1
GET/recommendations/available-genre-seedsGet Available Genre Seeds
Responses
StatusDescriptionSchema
200
401
403
429
Markets1
GET/marketsGet Available Markets
Responses
StatusDescriptionSchema
200A markets object with an array of country codes
401
403
429
Player15
GET/me/playerGet Playback State
Responses
StatusDescriptionSchema
200
204Playback not available or active
401
403
429
PUT/me/playerTransfer Playback
Request body

application/json

Responses
StatusDescriptionSchema
204Playback transferred
401
403
429
GET/me/player/currently-playingGet Currently Playing Track
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/player/devicesGet Available Devices
Responses
StatusDescriptionSchema
200
401
403
429
POST/me/player/nextSkip To Next
Parameters
NameInRequiredType
device_idquerynostring
Responses
StatusDescriptionSchema
204Command sent
401
403
429
PUT/me/player/pausePause Playback
Parameters
NameInRequiredType
device_idquerynostring
Responses
StatusDescriptionSchema
204Playback paused
401
403
429
PUT/me/player/playStart/Resume Playback
Parameters
NameInRequiredType
device_idquerynostring
Request body

application/json

Responses
StatusDescriptionSchema
204Playback started
401
403
429
POST/me/player/previousSkip To Previous
Parameters
NameInRequiredType
device_idquerynostring
Responses
StatusDescriptionSchema
204Command sent
401
403
429
GET/me/player/queueGet the User's Queue
Responses
StatusDescriptionSchema
200
401
403
429
POST/me/player/queueAdd Item to Playback Queue
Parameters
NameInRequiredType
uriqueryyesstring
device_idquerynostring
Responses
StatusDescriptionSchema
204Command received
401
403
429
GET/me/player/recently-playedGet Recently Played Tracks
Parameters
NameInRequiredType
limitquerynointeger
afterquerynointeger
beforequerynointeger
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/player/repeatSet Repeat Mode
Parameters
NameInRequiredType
statequeryyesstring
device_idquerynostring
Responses
StatusDescriptionSchema
204Command sent
401
403
429
PUT/me/player/seekSeek To Position
Parameters
NameInRequiredType
position_msqueryyesinteger
device_idquerynostring
Responses
StatusDescriptionSchema
204Command sent
401
403
429
PUT/me/player/shuffleToggle Playback Shuffle
Parameters
NameInRequiredType
statequeryyesboolean
device_idquerynostring
Responses
StatusDescriptionSchema
204Command sent
401
403
429
PUT/me/player/volumeSet Playback Volume
Parameters
NameInRequiredType
volume_percentqueryyesinteger
device_idquerynostring
Responses
StatusDescriptionSchema
204Command sent
401
403
429
Playlists13
GET/browse/categories/{category_id}/playlistsGet Category's Playlists
Parameters
NameInRequiredType
category_idpathyesstring
countryquerynostring
Responses
StatusDescriptionSchema
200
401
403
429
GET/browse/featured-playlistsGet Featured Playlists
Parameters
NameInRequiredType
countryquerynostring
localequerynostring
timestampquerynostring
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/playlistsGet Current User's Playlists
Parameters
NameInRequiredType
offsetquerynointeger
Responses
StatusDescriptionSchema
200
401
403
429
GET/playlists/{playlist_id}Get Playlist
Parameters
NameInRequiredType
fieldsquerynostring
Responses
StatusDescriptionSchema
200
401
403
429
PUT/playlists/{playlist_id}Change Playlist Details
Request body

application/json

Responses
StatusDescriptionSchema
200Playlist updated
401
403
429
GET/playlists/{playlist_id}/imagesGet Playlist Cover Image
Responses
StatusDescriptionSchema
200
401
403
429
PUT/playlists/{playlist_id}/imagesAdd Custom Playlist Cover Image
Responses
StatusDescriptionSchema
200Image uploaded
401
403
429
GET/playlists/{playlist_id}/tracksGet Playlist Items
Parameters
NameInRequiredType
fieldsquerynostring
Responses
StatusDescriptionSchema
200
401
403
429
POST/playlists/{playlist_id}/tracksAdd Items to Playlist
Parameters
NameInRequiredType
positionquerynointeger
urisquerynostring
Request body

application/json

Responses
StatusDescriptionSchema
201
401
403
429
PUT/playlists/{playlist_id}/tracksUpdate Playlist Items
Parameters
NameInRequiredType
urisquerynostring
Request body

application/json

Responses
StatusDescriptionSchema
200
401
403
429
DELETE/playlists/{playlist_id}/tracksRemove Playlist Items
Request body

application/json

Responses
StatusDescriptionSchema
200
401
403
429
GET/users/{user_id}/playlistsGet User's Playlists
Parameters
NameInRequiredType
offsetquerynointeger
Responses
StatusDescriptionSchema
200
401
403
429
POST/users/{user_id}/playlistsCreate Playlist
Request body

application/json

Responses
StatusDescriptionSchema
201
401
403
429
Search1
GET/searchSearch for Item
Parameters
NameInRequiredType
qqueryyesstring
typequeryyesarray
limitquerynointeger
offsetquerynointeger
include_externalquerynostring
Responses
StatusDescriptionSchema
200
401
403
429
Shows7
GET/me/showsGet User's Saved Shows
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/showsSave Shows for Current User
Responses
StatusDescriptionSchema
200Show saved
401
403
429
DELETE/me/showsRemove User's Saved Shows
Responses
StatusDescriptionSchema
200Show removed
401
403
429
GET/me/shows/containsCheck User's Saved Shows
Responses
StatusDescriptionSchema
200
401
403
429
GET/showsGet Several Shows
Responses
StatusDescriptionSchema
200
401
403
429
GET/shows/{id}Get Show
Responses
StatusDescriptionSchema
200
401
403
429
GET/shows/{id}/episodesGet Show Episodes
Responses
StatusDescriptionSchema
200
401
403
429
Tracks10
GET/audio-analysis/{id}Get Track's Audio Analysis
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/audio-featuresGet Tracks' Audio Features
Parameters
NameInRequiredType
idsqueryyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/audio-features/{id}Get Track's Audio Features
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/tracksGet User's Saved Tracks
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/tracksSave Tracks for Current User
Request body

application/json

Responses
StatusDescriptionSchema
200Track saved
401
403
429
DELETE/me/tracksRemove User's Saved Tracks
Request body

application/json

Responses
StatusDescriptionSchema
200Track removed
401
403
429
GET/me/tracks/containsCheck User's Saved Tracks
Responses
StatusDescriptionSchema
200
401
403
429
GET/recommendationsGet Recommendations
Parameters
NameInRequiredType
limitquerynointeger
seed_artistsqueryyesstring
seed_genresqueryyesstring
seed_tracksqueryyesstring
min_acousticnessquerynonumber
max_acousticnessquerynonumber
target_acousticnessquerynonumber
min_danceabilityquerynonumber
max_danceabilityquerynonumber
target_danceabilityquerynonumber
min_duration_msquerynointeger
max_duration_msquerynointeger
target_duration_msquerynointeger
min_energyquerynonumber
max_energyquerynonumber
target_energyquerynonumber
min_instrumentalnessquerynonumber
max_instrumentalnessquerynonumber
target_instrumentalnessquerynonumber
min_keyquerynointeger
max_keyquerynointeger
target_keyquerynointeger
min_livenessquerynonumber
max_livenessquerynonumber
target_livenessquerynonumber
min_loudnessquerynonumber
max_loudnessquerynonumber
target_loudnessquerynonumber
min_modequerynointeger
max_modequerynointeger
target_modequerynointeger
min_popularityquerynointeger
max_popularityquerynointeger
target_popularityquerynointeger
min_speechinessquerynonumber
max_speechinessquerynonumber
target_speechinessquerynonumber
min_tempoquerynonumber
max_tempoquerynonumber
target_tempoquerynonumber
min_time_signaturequerynointeger
max_time_signaturequerynointeger
target_time_signaturequerynointeger
min_valencequerynonumber
max_valencequerynonumber
target_valencequerynonumber
Responses
StatusDescriptionSchema
200
401
403
429
GET/tracksGet Several Tracks
Responses
StatusDescriptionSchema
200
401
403
429
GET/tracks/{id}Get Track
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200
401
403
429
Users10
GET/meGet Current User's Profile
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/followingGet Followed Artists
Parameters
NameInRequiredType
typequeryyesstring
afterquerynostring
limitquerynointeger
Responses
StatusDescriptionSchema
200
401
403
429
PUT/me/followingFollow Artists or Users
Parameters
NameInRequiredType
typequeryyesstring
idsqueryyesstring
Request body

application/json

Responses
StatusDescriptionSchema
204Artist or user followed
401
403
429
DELETE/me/followingUnfollow Artists or Users
Parameters
NameInRequiredType
typequeryyesstring
idsqueryyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200Artist or user unfollowed
401
403
429
GET/me/following/containsCheck If User Follows Artists or Users
Parameters
NameInRequiredType
typequeryyesstring
idsqueryyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/me/top/{type}Get User's Top Items
Parameters
NameInRequiredType
typepathyesstring
time_rangequerynostring
Responses
StatusDescriptionSchema
200
401
403
429
PUT/playlists/{playlist_id}/followersFollow Playlist
Request body

application/json

Responses
StatusDescriptionSchema
200Playlist followed
401
403
429
DELETE/playlists/{playlist_id}/followersUnfollow Playlist
Responses
StatusDescriptionSchema
200Playlist unfollowed
401
403
429
GET/playlists/{playlist_id}/followers/containsCheck if Users Follow Playlist
Parameters
NameInRequiredType
idsqueryyesstring
Responses
StatusDescriptionSchema
200
401
403
429
GET/users/{user_id}Get User's Profile
Responses
StatusDescriptionSchema
200
401
403
429

Try it

Developer reference

Base URLhttps://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