Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: 'You can use Spotify''s Web API to discover music and podcasts, manage your Spotify library, control audio playback, and much more. Browse our available Web API endpoints using the sidebar at left, or via the navigation bar on top of this page on smaller screens.
In order to make successful Web API requests your app will need a valid access token. One can be obtained through <a href="https://developer.spotify.com/documentation/general/guides/authorization-guide/">OAuth 2.0</a>.
The base URI for all Web API requests is `https://api.spotify.com/v1`.
Need help? See our <a href="https://developer.spotify.com/documentation/web-api/guides/">Web API guides</a> for more information, or visit the <a href="https://community.spotify.com/t5/Spotify-for-Developers/bd-p/Spotify_Developer">Spotify for Developers community forum</a> to ask questions and connect with other developers.
'
version: 1.0.0
title: Spotify Web Tracks API
termsOfService: https://developer.spotify.com/terms/
contact:
name: Spotify for Developers Community
url: https://community.spotify.com/t5/Spotify-for-Developers/bd-p/Spotify_Developer
servers:
- url: https://api.spotify.com/v1
tags:
- name: Tracks
paths:
/tracks/{id}:
get:
tags:
- Tracks
operationId: get-track
x-spotify-policy-list:
$ref: '#/components/x-spotify-policy/metadataWithMachineLearningPolicyList'
summary: 'Get Track
'
description: 'Get Spotify catalog information for a single track identified by its
unique Spotify ID.
'
parameters:
- name: id
required: true
in: path
schema:
title: Spotify Track ID
description: 'The [Spotify ID](/documentation/web-api/concepts/spotify-uris-ids)
for the track.
'
example: 11dFghVXANMlKmJXsNCbNl
type: string
- $ref: '#/components/parameters/QueryMarket'
responses:
'200':
$ref: '#/components/responses/OneTrack'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0: []
/tracks:
get:
deprecated: true
tags:
- Tracks
operationId: get-several-tracks
x-spotify-policy-list:
$ref: '#/components/x-spotify-policy/metadataWithMachineLearningPolicyList'
summary: 'Get Several Tracks
'
description: 'Get Spotify catalog information for multiple tracks based on their Spotify IDs.
'
parameters:
- $ref: '#/components/parameters/QueryMarket'
- name: ids
required: true
in: query
schema:
title: Spotify Track IDs
description: 'A comma-separated list of the [Spotify IDs](/documentation/web-api/concepts/spotify-uris-ids). For example: `ids=4iV5W9uYEdYUVa79Axb7Rh,1301WleyT98MSxVHPZCA6M`. Maximum: 50 IDs.
'
example: 7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B
type: string
responses:
'200':
$ref: '#/components/responses/ManyTracks'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0: []
/me/tracks:
get:
tags:
- Tracks
operationId: get-users-saved-tracks
summary: 'Get User''s Saved Tracks
'
description: 'Get a list of the songs saved in the current Spotify user''s ''Your Music'' library.
'
parameters:
- $ref: '#/components/parameters/QueryMarket'
- $ref: '#/components/parameters/QueryLimit'
- $ref: '#/components/parameters/QueryOffset'
responses:
'200':
$ref: '#/components/responses/PagingSavedTrackObject'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0:
- user-library-read
put:
deprecated: true
tags:
- Tracks
operationId: save-tracks-user
summary: 'Save Tracks for Current User
'
description: 'Save one or more tracks to the current user''s ''Your Music'' library.
**Note:** This endpoint is deprecated. Use [Save Items to Library](/documentation/web-api/reference/save-library-items) instead.
'
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: true
required:
- uris
properties:
ids:
type: array
description: 'A JSON array of the [Spotify IDs](/documentation/web-api/concepts/spotify-uris-ids). For example: `["4iV5W9uYEdYUVa79Axb7Rh", "1301WleyT98MSxVHPZCA6M"]`<br/>A maximum of 50 items can be specified in one request. _**Note**: if the `timestamped_ids` is present in the body, any IDs listed in the query parameters (deprecated) or the `ids` field in the body will be ignored._
'
items:
type: string
timestamped_ids:
type: array
description: 'A JSON array of objects containing track IDs with their corresponding timestamps. Each object must include a track ID and an `added_at` timestamp. This allows you to specify when tracks were added to maintain a specific chronological order in the user''s library.<br/>A maximum of 50 items can be specified in one request. _**Note**: if the `timestamped_ids` is present in the body, any IDs listed in the query parameters (deprecated) or the `ids` field in the body will be ignored._
'
items:
type: object
required:
- id
- added_at
properties:
id:
type: string
description: 'The [Spotify ID](/documentation/web-api/concepts/spotify-uris-ids) for the track.
'
added_at:
type: string
format: date-time
x-spotify-docs-type: Timestamp
description: 'The timestamp when the track was added to the library. Use ISO 8601 format with UTC timezone (e.g., `2023-01-15T14:30:00Z`). You can specify past timestamps to insert tracks at specific positions in the library''s chronological order. The API uses minute-level granularity for ordering, though the timestamp supports millisecond precision.
'
responses:
'200':
description: Track saved
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0:
- user-library-modify
delete:
deprecated: true
tags:
- Tracks
operationId: remove-tracks-user
summary: 'Remove User''s Saved Tracks
'
description: 'Remove one or more tracks from the current user''s ''Your Music'' library.
**Note:** This endpoint is deprecated. Use [Remove Items from Library](/documentation/web-api/reference/remove-library-items) instead.
'
parameters:
- $ref: '#/components/parameters/QueryTrackIds'
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: true
properties:
ids:
type: array
description: 'A JSON array of the [Spotify IDs](/documentation/web-api/concepts/spotify-uris-ids). For example: `["4iV5W9uYEdYUVa79Axb7Rh", "1301WleyT98MSxVHPZCA6M"]`<br/>A maximum of 50 items can be specified in one request. _**Note**: if the `ids` parameter is present in the query string, any IDs listed here in the body will be ignored._
'
items:
type: string
responses:
'200':
description: Track removed
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0:
- user-library-modify
/me/tracks/contains:
get:
tags:
- Tracks
operationId: check-users-saved-tracks
summary: 'Check User''s Saved Tracks
'
deprecated: true
description: 'Check if one or more tracks is already saved in the current Spotify user''s ''Your Music'' library.
**Note:** This endpoint is deprecated. Use [Check User''s Saved Items](/documentation/web-api/reference/check-library-contains) instead.
'
parameters:
- $ref: '#/components/parameters/QueryTrackIds'
responses:
'200':
$ref: '#/components/responses/ArrayOfBooleans'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0:
- user-library-read
/audio-features:
get:
deprecated: true
tags:
- Tracks
operationId: get-several-audio-features
x-spotify-policy-list:
- $ref: '#/components/x-spotify-policy/policies/MachineLearning'
summary: 'Get Several Tracks'' Audio Features
'
description: 'Get audio features for multiple tracks based on their Spotify IDs.
'
parameters:
- name: ids
required: true
in: query
schema:
title: Spotify Track IDs
description: 'A comma-separated list of the [Spotify IDs](/documentation/web-api/concepts/spotify-uris-ids)
for the tracks. Maximum: 100 IDs.
'
example: 7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B
type: string
responses:
'200':
$ref: '#/components/responses/ManyAudioFeatures'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0: []
/audio-features/{id}:
get:
deprecated: true
tags:
- Tracks
operationId: get-audio-features
x-spotify-policy-list:
- $ref: '#/components/x-spotify-policy/policies/MachineLearning'
summary: 'Get Track''s Audio Features
'
description: 'Get audio feature information for a single track identified by its unique
Spotify ID.
'
parameters:
- name: id
required: true
in: path
schema:
title: Spotify Track ID
description: 'The [Spotify ID](/documentation/web-api/concepts/spotify-uris-ids) for the track.
'
example: 11dFghVXANMlKmJXsNCbNl
type: string
responses:
'200':
$ref: '#/components/responses/OneAudioFeatures'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0: []
/audio-analysis/{id}:
get:
deprecated: true
tags:
- Tracks
operationId: get-audio-analysis
summary: 'Get Track''s Audio Analysis
'
description: 'Get a low-level audio analysis for a track in the Spotify catalog. The audio analysis describes the track’s structure and musical content, including rhythm, pitch, and timbre.
'
parameters:
- name: id
required: true
in: path
schema:
title: Spotify Track ID
description: 'The [Spotify ID](/documentation/web-api/concepts/spotify-uris-ids)
for the track.
'
example: 11dFghVXANMlKmJXsNCbNl
type: string
responses:
'200':
$ref: '#/components/responses/OneAudioAnalysis'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
security:
- oauth_2_0: []
/recommendations:
get:
deprecated: true
tags:
- Tracks
operationId: get-recommendations
x-spotify-policy-list:
- $ref: '#/components/x-spotify-policy/policies/MachineLearning'
summary: 'Get Recommendations
'
description: 'Recommendations are generated based on the available information for a given seed entity and matched against similar artists and tracks. If there is sufficient information about the provided seeds, a list of tracks will be returned together with pool size details.
For artists and tracks that are very new or obscure there might not be enough data to generate a list of tracks.
'
parameters:
- name: limit
required: false
in: query
schema:
title: Limit
description: 'The target size of the list of recommended tracks. For seeds with unusually small pools or when highly restrictive filtering is applied, it may be impossible to generate the requested number of recommended tracks. Debugging information for such cases is available in the response. Default: 20\. Minimum: 1\. Maximum: 100.
'
default: 20
example: 10
type: integer
minimum: 1
maximum: 100
- $ref: '#/components/parameters/QueryMarket'
- name: seed_artists
required: true
in: query
schema:
title: Spotify Artist ID Seeds
description: 'A comma separated list of [Spotify IDs](/documentation/web-api/concepts/spotify-uris-ids) for seed artists. Up to 5 seed values may be provided in any combination of `seed_artists`, `seed_tracks` and `seed_genres`.<br/> _**Note**: only required if `seed_genres` and `seed_tracks` are not set_.
'
example: 4NHQUGzhtTLFvgF5SZesLK
type: string
- name: seed_genres
required: true
in: query
schema:
title: Genres Seeds
description: 'A comma separated list of any genres in the set of [available genre seeds](/documentation/web-api/reference/get-recommendation-genres). Up to 5 seed values may be provided in any combination of `seed_artists`, `seed_tracks` and `seed_genres`.<br/> _**Note**: only required if `seed_artists` and `seed_tracks` are not set_.
'
example: classical,country
type: string
- name: seed_tracks
required: true
in: query
schema:
title: Spotify Track ID Seeds
description: 'A comma separated list of [Spotify IDs](/documentation/web-api/concepts/spotify-uris-ids) for a seed track. Up to 5 seed values may be provided in any combination of `seed_artists`, `seed_tracks` and `seed_genres`.<br/> _**Note**: only required if `seed_artists` and `seed_genres` are not set_.
'
example: 0c6xIDDpzE81m2q797ordA
type: string
- name: min_acousticness
required: false
in: query
schema:
title: Min. Acousticness
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
minimum: 0
maximum: 1
- name: max_acousticness
required: false
in: query
schema:
title: Max. Acousticness
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
minimum: 0
maximum: 1
- name: target_acousticness
required: false
in: query
schema:
title: Target Acousticness
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
minimum: 0
maximum: 1
- name: min_danceability
required: false
in: query
schema:
title: Min. Danceability
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
minimum: 0
maximum: 1
- name: max_danceability
required: false
in: query
schema:
title: Max. Danceability
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
minimum: 0
maximum: 1
- name: target_danceability
required: false
in: query
schema:
title: Target Danceability
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
minimum: 0
maximum: 1
- name: min_duration_ms
required: false
in: query
schema:
title: Min. Duration (ms)
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: integer
- name: max_duration_ms
required: false
in: query
schema:
title: Max. Duration (ms)
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: integer
- name: target_duration_ms
required: false
in: query
schema:
title: Target Duration (ms)
description: Target duration of the track (ms)
type: integer
- name: min_energy
required: false
in: query
schema:
title: Min. Energy
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
minimum: 0
maximum: 1
- name: max_energy
required: false
in: query
schema:
title: Max. Energy
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
minimum: 0
maximum: 1
- name: target_energy
required: false
in: query
schema:
title: Target Energy
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
minimum: 0
maximum: 1
- name: min_instrumentalness
required: false
in: query
schema:
title: Min. Instrumentalness
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
minimum: 0
maximum: 1
- name: max_instrumentalness
required: false
in: query
schema:
title: Max. Instrumentalness
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
minimum: 0
maximum: 1
- name: target_instrumentalness
required: false
in: query
schema:
title: Target Instrumentalness
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
minimum: 0
maximum: 1
- name: min_key
required: false
in: query
schema:
title: Min. Key
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: integer
minimum: 0
maximum: 11
- name: max_key
required: false
in: query
schema:
title: Max. Key
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: integer
minimum: 0
maximum: 11
- name: target_key
required: false
in: query
schema:
title: Target Key
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: integer
minimum: 0
maximum: 11
- name: min_liveness
required: false
in: query
schema:
title: Min. Liveness
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
minimum: 0
maximum: 1
- name: max_liveness
required: false
in: query
schema:
title: Max. Liveness
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
minimum: 0
maximum: 1
- name: target_liveness
required: false
in: query
schema:
title: Target Liveness
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
minimum: 0
maximum: 1
- name: min_loudness
required: false
in: query
schema:
title: Min. Loudness
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
- name: max_loudness
required: false
in: query
schema:
title: Max. Loudness
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
- name: target_loudness
required: false
in: query
schema:
title: Target Loudness
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
- name: min_mode
required: false
in: query
schema:
title: Min. Mode
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: integer
minimum: 0
maximum: 1
- name: max_mode
required: false
in: query
schema:
title: Max. Mode
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: integer
minimum: 0
maximum: 1
- name: target_mode
required: false
in: query
schema:
title: Target Mode
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: integer
minimum: 0
maximum: 1
- name: min_popularity
required: false
in: query
schema:
title: Min. Popularity
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: integer
minimum: 0
maximum: 100
- name: max_popularity
required: false
in: query
schema:
title: Max. Popularity
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: integer
minimum: 0
maximum: 100
- name: target_popularity
required: false
in: query
schema:
title: Target Popularity
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: integer
minimum: 0
maximum: 100
- name: min_speechiness
required: false
in: query
schema:
title: Min. Speechiness
description: 'For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `min_tempo=140` would restrict results to only those tracks with a tempo of greater than 140 beats per minute.
'
type: number
minimum: 0
maximum: 1
- name: max_speechiness
required: false
in: query
schema:
title: Max. Speechiness
description: 'For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, `max_instrumentalness=0.35` would filter out most tracks that are likely to be instrumental.
'
type: number
minimum: 0
maximum: 1
- name: target_speechiness
required: false
in: query
schema:
title: Target Speechiness
description: 'For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request `target_energy=0.6` and `target_danceability=0.8`. All target values will be weighed equally in ranking results.
'
type: number
minimum: 0
maximum: 1
- name: min_tempo
required: false
in: query
schema:
title: Min. Tempo
description: 'For each tunable track attribute, a hard floor on the s
# --- truncated at 32 KB (81 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spotify/refs/heads/main/openapi/spotify-tracks-api-openapi.yml