`, ``, ``, [and more](https://developer.mozilla.org/en-US/docs/Web/HTML/Element)
while non-semantic elements like `` and `
`do not provide context about what to expect in them.
The four properties that constitute a semantic element are
* name (an element’s label),
* role (describes an element’s function like input or button),
* value (complements the role i.e. input=text) and
* state (communicates how elements are configured i.e. enabled, collapsed, etc).
**A11y Actions:**
1. Swap out all your non-semantic elements like `` and `
` for semantic elements
**Resources:**
* [State Descriptions on Android](https://medium.com/google-developer-experts/state-descriptions-on-android-b2029283871f)
Intensive Wins
--------------
Intensive wins are modifications that take a bit more time to implement in your application than accessibility [quick wins](https://developer.spotify.com/documentation/accessibility#quick-wins)
and [medium-term wins](https://developer.spotify.com/documentation/accessibility#medium-term-wins)
. These are key, and we strongly recommend that you prioritize incorporating them into your application.
### Master Assistive Technologies
Pick an assistive technology and get good at it, for example, talkback technology like voice-over or NVDA which is Open Source software (OSS) with lots of free examples.
### Master States in Accessibility
As mentioned in [the Semantics section](https://developer.spotify.com/documentation/accessibility#semantics)
, `states` are a semantic property assigned to elements that specify how content in an element is configured i.e. may be checked, enabled, expanded, hidden, current etc.
States and properties are categorized in four: (i) drag and drop attributes, (ii) live-region attributes, (iii) widget attributes and (iv) relationship attributes.
**A11y Actions:**
1. When defining elements, although optional, it is best practice to announce state for the sake of assistive technology users.
**Resources:**
1. [WCAG on states and properties](https://www.w3.org/TR/wai-aria/#states_and_properties)
---
# Spotify Android SDK | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/android#main)
Android
* [Overview](https://developer.spotify.com/documentation/android)
* Getting Started[Getting Started](https://developer.spotify.com/documentation/android/tutorials/getting-started)
Getting Started* [Introduction](https://developer.spotify.com/documentation/android/tutorials/getting-started#introduction)
* [Prepare your environment](https://developer.spotify.com/documentation/android/tutorials/getting-started#prepare-your-environment)
* [Create your app](https://developer.spotify.com/documentation/android/tutorials/getting-started#create-your-app)
* [Authorize your application](https://developer.spotify.com/documentation/android/tutorials/getting-started#authorize-your-application)
* [Connect to App Remote](https://developer.spotify.com/documentation/android/tutorials/getting-started#connect-to-app-remote)
* [Next Steps](https://developer.spotify.com/documentation/android/tutorials/getting-started#next-steps)
* [Source Code](https://developer.spotify.com/documentation/android/tutorials/getting-started#source-code)
* TutorialsTutorials
Tutorials* [Authorization](https://developer.spotify.com/documentation/android/tutorials/authorization)
* [Application Fingerprints](https://developer.spotify.com/documentation/android/tutorials/application-fingerprints)
* [Application Lifecycle](https://developer.spotify.com/documentation/android/tutorials/application-lifecycle)
* [Content Linking](https://developer.spotify.com/documentation/android/tutorials/content-linking)
* [Making Remote Calls](https://developer.spotify.com/documentation/android/tutorials/making-remote-calls)
* [Android Media Notifications](https://developer.spotify.com/documentation/android/tutorials/android-media-notifications)
* [Migrating from Token to Authorization Code Flow](https://developer.spotify.com/documentation/android/tutorials/migration-token-code)
Reference* [Android SDK Reference](https://developer.spotify.com/documentation/android/reference)
The Spotify Android SDK supports getting metadata for the currently playing track and context, issuing basic playback commands as well as initiating playback of tracks.
Info:The Android SDK is currently in Beta. The content and functionality is likely to change significantly without warning in future versions.
Getting started
---------------
The SDK consists of two libraries:
* **Authorization Library**. This library is responsible for authorizing your app and fetching the access token that later can be used to send requests to the Spotify Web API.
* **App Remote Library**. The app remote module allows you to control playback in the Spotify app after user logs in with the access token.

We provide a [Getting Started tutorial](https://developer.spotify.com/documentation/android/tutorials/getting-started)
to help you set up your build environment and get started with the Spotify Android SDK.
The tutorial leads you through the creation of a simple app that connects to the Spotify app, plays a playlist and subscribes to PlayerState. Within the download package you will also find a demo app with full source code to help get you started.
In order to use the SDK, your application will need to get the user's permission to control playback remotely first. The [authorization](https://developer.spotify.com/documentation/android/tutorials/authorization)
guide explains the two methods available to implement authorization in your Android application.
### Key features
* Lightweight library (less than 300k). No native code or processor architecture dependencies
* Playback always in sync with Spotify app
* Processing of playback and caching as well as network traffic is accounted for by the Spotify app
* Handles system integration such as audio focus, lockscreen controls and incoming calls
* Automatically handles track relinking for different regions
* Works offline and online and does not require Web API calls to get metadata for player state
Download
--------
The latest stable version of the Android SDK can be downloaded from [GitHub](https://github.com/spotify/android-sdk/releases)
.
### Requirements
* Minimum Android SDK Version 14
* Gson (version 2.6.1)
Documentation
-------------
The documentation is organized as follows:
* Concepts that clarify key topics
* Tutorials, which serve as an introduction to important topics when using Android SDK
* Reference, the API specification
API documentation
-----------------
The download packages includes comprehensive documentation of all API classes in the `/docs` folder. You can also read the documentation online for the [authentication library](https://spotify.github.io/android-sdk/auth-lib/docs/index.html)
and for the [app remote library](https://spotify.github.io/android-sdk/app-remote-lib/docs/index.html)
.
Frequently asked questions
--------------------------
### SpotifyAppRemote connect/disconnect v0.4.0 vs v0.5.0
` _10 // If your code looks like this for v0.4.0: _10 SpotifyAppRemote.CONNECTOR.disconnect(mSpotifyAppRemote); _10 SpotifyAppRemote.CONNECTOR.connect(this, mConnectionParams, mConnectionListener); _10 // you should change it to this as of v0.5.0: _10 SpotifyAppRemote.disconnect(mSpotifyAppRemote); _10 SpotifyAppRemote.connect(this, mConnectionParams, mConnectionListener); `
### I want the Spotify app to notify my app when Spotify is active. Is it possible?
You can register a broadcast receiver for an action "com.spotify.music.active". The broadcast is sent when a new track gets on top of the playing queue.
To listen to the broadcast add the next lines to your AndroidManifest.xml file:
` _10 _10 _10 _10 _10 `
To get more information on BroadcastReceivers, have a look at [the docs](https://developer.android.com/reference/android/content/BroadcastReceiver.html)
on the Android developer portal.
### Can I use Jackson instead of Gson?
Since version 0.2.0 of the SDK, [Gson](https://github.com/google/gson)
is used by default for serializing and deserializing the request, but the use of [Jackson](https://github.com/FasterXML/jackson)
is still supported. If you want to use Jackson, you need to configure it when connecting to Spotify:
` _10 ConnectionParams connectionParams = _10 new ConnectionParams.Builder(CLIENT_ID) _10 .setRedirectUri(REDIRECT_URI) _10 .setJsonMapper(JacksonMapper.create()) _10 .build(); _10 _10 SpotifyAppRemote.connect(this, connectionParams, connectionListener); `
Support
-------
Please report problems with this SDK through the [public issue tracker](https://github.com/spotify/android-sdk/issues)
on GitHub.
Legal
-----
Note that by using Spotify Android SDK, you accept our [Developer Terms of Service](https://developer.spotify.com/terms)
.
---
# Community | Spotify for Developers
[Skip to content](https://developer.spotify.com/community#main)
Community
=========
Read the latest posts from the developer community, talk with fellow developers on our forum and check out our latest videos and events. Share your ideas and feedback or show off your projects. Get involved!
What's new
----------
[Updating the Criteria for Web API Extended Access](https://developer.spotify.com/blog/2025-04-15-updating-the-criteria-for-web-api-extended-access)
Blog post
**April 15, 2025** | Spotify
[Increasing the security requirements for integrating with Spotify](https://developer.spotify.com/blog/2025-02-12-increasing-the-security-requirements-for-integrating-with-spotify)
Blog post
**February 12, 2025** | Spotify
[Introducing some changes to our Web API](https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api)
Blog post
**November 27, 2024** | Spotify
[Security Notice: Deprecation of TLS 1.0 and 1.1](https://developer.spotify.com/blog/2024-10-01-outdated-tls-protocol-deprecation)
Blog post
**October 1, 2024** | Spotify
[New Android SDK version: A Community update](https://developer.spotify.com/blog/2023-07-06-new-android-sdk-version)
Blog post
**July 6, 2023** | Alvaro Navarro
More news...
---
# Spotify Developer Terms | Spotify for Developers
[Skip to content](https://developer.spotify.com/terms#main)
Legal
* Developer Terms[Developer Terms](https://developer.spotify.com/terms)
Developer Terms* [Introduction](https://developer.spotify.com/terms#introduction)
* [Principles](https://developer.spotify.com/terms#principles)
* [Section I Acceptance of Terms](https://developer.spotify.com/terms#section-i-acceptance-of-terms)
* [Section II Definitions](https://developer.spotify.com/terms#section-ii-definitions)
* [Section III Licenses and Permissions](https://developer.spotify.com/terms#section-iii-licenses-and-permissions)
* [Section IV Restrictions](https://developer.spotify.com/terms#section-iv-restrictions)
* [Section V Users & Data](https://developer.spotify.com/terms#section-v-users--data)
* [Section VI Access, Usage and Quotas](https://developer.spotify.com/terms#section-vi-access-usage-and-quotas)
* [Section VII Intellectual Property & Confidential Information](https://developer.spotify.com/terms#section-vii-intellectual-property--confidential-information)
* [Section VIII Representations and Warranties, Limitation of Liability, Indemnification, Disclaimers, Release](https://developer.spotify.com/terms#section-viii-representations-and-warranties-limitation-of-liability-indemnification-disclaimers-release)
* [Section IX Other Legal Terms](https://developer.spotify.com/terms#section-ix--other-legal-terms)
* [Section X Arbitration Agreement](https://developer.spotify.com/terms#section-x-arbitration-agreement)
* [Appendix A Data Protection Appendix](https://developer.spotify.com/terms#appendix-a-data-protection-appendix)
* Developer Policy[Developer Policy](https://developer.spotify.com/policy)
Developer Policy* [I. Respect Users and Data](https://developer.spotify.com/policy#i-respect-users-and-data)
* [II. Respect Content and Creators](https://developer.spotify.com/policy#ii-respect-content-and-creators)
* [III. Some prohibited applications](https://developer.spotify.com/policy#iii-some-prohibited-applications)
* [IV. Streaming and Commercial Use](https://developer.spotify.com/policy#iv-streaming-and-commercial-use)
* [V. Widgets and Audio Preview Clips](https://developer.spotify.com/policy#v-widgets-and-audio-preview-clips)
* [VI. Naming and Branding](https://developer.spotify.com/policy#vi-naming-and-branding)
* [VII. Access, Usage and Quotas](https://developer.spotify.com/policy#vii-access-usage-and-quotas)
* Compliance Tips[Compliance Tips](https://developer.spotify.com/compliance-tips)
Compliance Tips* [Introduction](https://developer.spotify.com/compliance-tips#introduction)
* [Focus on the user](https://developer.spotify.com/compliance-tips#focus-on-the-user)
* [Use of content](https://developer.spotify.com/compliance-tips#use-of-content)
* [Disallowed use cases](https://developer.spotify.com/compliance-tips#disallowed-use-cases)
* [Special considerations of streaming](https://developer.spotify.com/compliance-tips#special-considerations-for-streaming)
* [Commercial Use](https://developer.spotify.com/compliance-tips#commercial-use)
Legal •Spotify Developer Terms
Spotify Developer Terms
=======================
Version 10, effective as of 15 May, 2025
Introduction
------------
Hello and welcome to the Spotify Developer Terms (the "**Developer Terms**")!
Please read these terms carefully before using our developer platform.
Principles
----------
When reviewing our Developer Terms, please keep in mind these two principles:
1. Our users are very important to us. Let’s work together to give them tools to access, discover, manage, and share content. While doing so, please respect their data and privacy settings.
2. We work hard to make sure that all of the content on Spotify is fully licensed so that we can compensate the people who have made it. And we have an obligation and a responsibility to make sure that this is reflected in what we support (or don’t) on our platform.
Section I Acceptance of Terms
-----------------------------
1. **Components of the Agreement**. The Developer Agreement (the “**Developer Agreement**”) is comprised of the following:
1. these Developer Terms, including the [Data Protection Appendix](https://developer.spotify.com/terms#appendix-a-data-protection-appendix)
and the [Developer Policy](https://developer.spotify.com/policy)
;
2. our [Terms and Conditions of Use](http://spotify.com/legal/end-user-agreement)
;
3. our [Branding Guidelines](https://developer.spotify.com/documentation/general/design-and-branding)
; and
4. the Documentation.
2. **Precedence.** If there is an irreconcilable conflict between these Developer Terms and any other document(s) comprising the Developer Agreement, these Developer Terms shall govern. Please note that if you use any of the Spotify Widget (defined below), you will be bound by the separate [Spotify Widget Terms](https://developer.spotify.com/documentation/widgets/terms/)
.
3. **Acceptance of Developer Agreement.** We invite you to review, download and use our Spotify Platform. Please note that this invitation is subject to your review of and agreement with the Developer Agreement. You are not required to agree to the Developer Agreement. However, if you reject the Developer Agreement, you do not have any right to use the Spotify Platform. If you use or otherwise access the Spotify Platform, you will be deemed to have accepted the Developer Agreement and entered into a legally binding contract with Spotify AB (“**Spotify**”, “**we**”, and sometimes “**us**”). You may not use the Spotify Platform for any purpose that is not expressly authorized in the Developer Agreement.
4. **Acceptance on Behalf of an Organization.** If you are developing on behalf of an organization, you agree to the terms of the Developer Agreement for that organization and promise that you have authority to bind that organization and its parents, subsidiaries, and sister companies to the Developer Agreement. In that case, “**you**” and “**your**” will refer to that organization, its parents, subsidiaries, and sister companies.
5. **Language.** In the event that the Developer Agreement, or any part thereof, is translated into other languages and there is a discrepancy between versions in different languages, the English language version shall prevail to the extent that such discrepancy is the result of an error in translation.
6. **Independent Contractors.** There is no joint venture, partnership, agency, or fiduciary relationship existing between you and Spotify, and the parties do not intend to create any such relationship by the Developer Agreement.
7. Capitalized terms not otherwise defined herein have the meaning given in our other terms and policies, including our [Terms and Conditions of Use](http://spotify.com/legal/end-user-agreement)
. The term “including” means “including without limitation.”
8. **If you are an Australian consumer or small business (as defined by Australian Consumer Law):** These terms do not exclude or limit any statutory rights or remedies you may have under Australian Consumer Law. However, to the extent permitted by the Australian Consumer Law, Spotify’s liability for any breach of the consumer guarantees is limited to (as elected by Spotify) the resupply of the goods or services to which the breach relates or the payment of the cost of replacing the goods or resupplying the services.
Section II Definitions
----------------------
Before we go any further, we think it would be helpful to define a few key terms. Any defined terms not set out in this section will be clearly defined elsewhere in these Developer Terms.
1. “**Approved Devices**” means only desktop computers, laptops, netbook PCs, tablets, mobile, and such other devices that we approve in writing from time to time.
2. “**Audio Preview Clips**” means 30-second preview clips accessible using the Spotify Platform.
3. “**Data Protection Appendix**” means the data protection appendix at [Appendix A](https://developer.spotify.com/terms#appendix-a-data-protection-appendix)
to these Developer Terms.
4. “**Developer Agreement**” has the meaning given to it in Section I.1.
5. “**Developer Website**” means the website at developer.spotify.com and its subdomains.
6. “**Documentation**” means the documents, texts and materials made available to you on our Developer Website.
7. “**Non-Streaming SDA**” is an SDA that does not provide any Streaming functionality.
8. “**Spotify Content**” means any content, data, information or material made available through the Spotify Platform, Spotify Service or by Spotify. This may include, among other things, sound recordings, short-form videos, cover art, musical works, podcasts, artist biographies, song lyrics, metadata, playlists, and user data including Spotify Personal Data.
9. “**Spotify Developer Application**” or “**SDA**” means any application, website or service that accesses the Spotify Service or Spotify Content through, or which incorporates, the Spotify Platform. Please note that Widgets are not included in the definition of an SDA.
10. “**Spotify Marks**” means all trademarks, service marks, logos, brand names, or trade names used to identify Spotify and its products or services.
11. “**Spotify Personal Data**” has the meaning given to it in the [Data Protection Appendix](https://developer.spotify.com/terms#appendix-a-data-protection-appendix)
.
12. “**Spotify Platform**” means our developer tools accessible (e.g. APIs, SDKs, Widgets) and documentation described on our Developer Website.
13. “**Spotify Service**” means the service, websites, software applications and clients provided by Spotify.
14. “**Streaming**” means using the Spotify Platform to enable playback of sound recordings available through the Spotify Service, including using the Spotify Platform to control a background Spotify application. Please note that the use of (i) Widgets or (ii) Audio Preview Clips, are not included in the definition of Streaming for purposes of these Developer Terms.
15. “**Streaming SDA**” is an SDA or Approved Device that provides Streaming functionality or some subset of Streaming functionality, regardless of whether it also provides additional functionality.
16. “**Term**” has the meaning given to it in Section IX.8
17. “**Widgets**” means the widgets made available via the Spotify Platform, including the Spotify Play Button (or any iteration thereof) and the Spotify Follow Button. As noted above, the use of Widgets are governed by the [Spotify Widget Terms of Use](https://developer.spotify.com/documentation/widgets/terms/)
.
Section III Licenses and Permissions
------------------------------------
1. **License to Developer.** Subject to and conditional upon your compliance at all times with the Developer Agreement, Spotify grants to you a limited, non-exclusive, non-transferable, non-sublicensable, revocable right during the Term to do the following:
1. **Streaming and Non-Streaming SDAs.** Use the Spotify Platform to develop and distribute Streaming SDAs and Non-Streaming SDAs that comply with the [Branding Guidelines](https://developer.spotify.com/documentation/general/design-and-branding/)
: (i) for private personal use; and (ii) on Approved Devices; and (iii) in accordance with the [Developer Policy](https://developer.spotify.com/policy)
.
2. **Spotify Platform.** Distribute the Spotify Platform only in binary form as part of an SDA, make a reasonable number of copies of the Spotify Platform, and use the Spotify Platform to access and use Spotify Content as necessary for the sole purpose of operating the SDA.
3. **Use the Spotify Marks.** Use any of the Spotify Marks found in the [Branding Guidelines](https://developer.spotify.com/documentation/general/design-and-branding/)
solely to promote your use, and the results of your use, of the Spotify Platform. You agree that, except for the limited license above, these Developer Terms do not grant you any rights to the Spotify Marks and that all goodwill generated through your use of such marks is to the sole benefit of Spotify. If you use any Spotify Marks, you will at no time contest or aid in contesting the validity or ownership of those Spotify Marks or Spotify’s rights in them, including applying to register any trademark, trade name or other designation that is confusingly similar to the Spotify Marks.
2. **No Grant of Proprietary Rights.** Except as expressly granted in these Developer Terms, neither party grants the other party any intellectual property rights or other proprietary rights. As between you and Spotify, Spotify, its corporate affiliates, and its applicable licensors retain all intellectual property rights (including all patent, trademark, copyright, trade secret, and other proprietary rights) in and to the Spotify Platform (including its documentation and specifications), Spotify Content, the Spotify Service, and any derivative works thereof.
3. **Third Party Software.** The Spotify Service and Spotify Platform may include open source software or third party software. Any such software is made available to you under the terms of the applicable licenses. Please review information here for the applicable notices and license terms related to the Spotify Platform.
4. **License to Spotify.** For the duration of these Developer Terms, you grant to us a paid-up, royalty-free, non-exclusive, worldwide, transferable, sublicensable, irrevocable right and license, under all of your intellectual property rights, to:
1. Use, perform, make available, display to the public, reproduce, distribute, and import your SDA and your name, likeness, or brand (which includes all of your trademarks, service marks, logos, brand names or trade names, your “**Marks**”) solely to the extent necessary for us to provide the Spotify Platform and Spotify Service;
2. Link to and direct users to your SDA; and
3. Sublicense the foregoing rights to our corporate affiliates or any third parties that are working with us as development partners, hosting facilities, and in similar capacities, in order to enable them to perform their services for us.
5. **Upon Termination.** Following the termination of the Developer Terms and upon written request from you, Spotify shall make commercially reasonable efforts, as determined in its sole discretion, to remove references and links to your SDA and any of your Marks from the Spotify Service. Spotify shall have no other obligation to delete copies of, or references or links to, your SDA.
Section IV Restrictions
-----------------------
1. **Our developer policy.** Make sure to read our [Developer Policy](https://developer.spotify.com/policy)
which sets out some of the key restrictions and principles when developing with the Spotify Platform.
2. **General restrictions.**
1. **Misuse of the Spotify Platform.** Do not misuse the Spotify Platform, including by
1. using the Spotify Platform or any Spotify Content to train a machine learning or AI model or otherwise ingesting Spotify Content into a machine learning or AI model;
2. modifying, editing, altering, creating derivative works, disassembling, decompiling, reverse-engineering, or extracting source code from the Spotify Platform (including any client libraries), Spotify Service, or Spotify Content (except to the extent such restrictions are expressly prohibited by law). You may adjust the size of metadata or cover art as necessary;
3. distributing or making copies of the Spotify Platform or making the Spotify Platform available to any person, except as expressly provided in these Developer Terms; or
4. interfering, or attempting to interfere, with the proper functioning or performance of the Spotify Platform or Spotify Service.
2. **Unauthorized access.** Do not facilitate unauthorized access to the Spotify Service or Spotify Content, including
1. enabling access to, or use of, the Spotify Service or Spotify Content in violation of the Developer Agreement;
2. attempting to circumvent or render ineffective any geographical restrictions, including IP address-based restrictions; or
3. facilitating “stream ripping” or other functionalities that make it easier for users to capture or otherwise make permanent copies of Spotify Content.
3. **Illegal or unauthorized purpose.** Do not use the Spotify Platform, Spotify Service or Spotify Content for any illegal or unauthorized purpose, including:
1. failing to comply with applicable laws and regulations; or
2. misusing Spotify Intellectual Property, such as using Spotify Marks as part of the name of your company or service.
4. **Improper use.** Do not improperly access, alter or store the Spotify Service or Spotify Content, including
1. using any robot, spider, site search/retrieval application, or other tool to retrieve, duplicate, or index any portion of the Spotify Service or Spotify Content (which includes playlist data) or collect information about Spotify users for any unauthorized purpose;
2. making excessive service calls that are not strictly required for the proper functioning of your SDA;
3. requesting, collecting, soliciting or otherwise obtaining access to user names, passwords, or other authentication credentials for the Spotify Service, other than through the means specifically provided for by the Spotify Platform and as strictly necessary to offer and operate your SDA.
5. **Transfer to third parties.** Except as otherwise set out in these Developer Terms, do not transfer Spotify Content to third parties, including directly or indirectly transferring any data (including aggregate, anonymous or derivative data) received from Spotify to, or use such data in connection with, any ad network, ad exchange, data broker, or other advertising or monetization-related toolset, even if a user consents to such transfer or use. You may transfer Spotify Content to third party data processors, such as server providers for providing your SDA and consistent with your privacy policy and the permissions users have given you. You are responsible for any acts or omissions of those third parties.
6. **Harmful code.** Do not use any viruses, worms, Trojan horses, or any other harmful code that could affect the Spotify Platform, Spotify Service, Spotify Content, Spotify users and/or their devices.
7. **Liability and reputation.** Do not take any action in connection with the Developer Agreement, that could:
1. create liability for Spotify;
2. adversely affect Spotify’s commercial reputation; or
3. otherwise reflect unfavorably on Spotify, including any action that may damage, disparage, or be detrimental to Spotify, the Spotify Service, Spotify Content, or Spotify’s content providers, corporate affiliates, and partners.
8. Do not use the Spotify Platform, Spotify Content, Spotify Service, or Spotify Marks in any way to promote or distribute an application, product, service, website, or other offering, including any SDA that:
1. is associated with, promotes, features, encourages, facilitates, or condones (a) illegal activity or the illegal or unauthorized use or sharing of audio and/or audiovisual content; (b) violence; (c) political positions or political candidates and/or religious causes; (d) the sale or advertisement of tobacco products, ammunition, firearms, and/or pornography;
2. contains content that (a) is illegal, obscene, sexually explicit, deceptive or fraudulent; (b) could be considered offensive, defamatory, malicious, or discriminatory in any way, including on the basis of race, disability, sex, sexual orientation, or religion, or otherwise violates the user guideline set out in the [Spotify Terms and Conditions of Use](http://spotify.com/legal/end-user-agreement)
;
3. infringes any intellectual property or other right of Spotify or any third party, including any right of privacy, publicity, copyright, trademark, patent, or contractual right; or
4. used to harass, embarrass, harm, or improperly target any Spotify user or artist.
3. **Storing Spotify Content**
1. **Storing and displaying content.**
1. Except as otherwise set out in these Developer Terms, you may not store, aggregate or create compilations or databases of Spotify Content, other than as strictly necessary to operate your SDA. You must use reasonable efforts to ensure that any data you display to users is the most up to date data available through the Spotify Platform, and to delete older data. Do not store Spotify Content indefinitely.
2. Spotify Personal Data (as defined in the Data Protection Appendix) must be stored and deleted in accordance with Section V.
2. **Local caching.** Do not locally cache any Spotify Content, except as strictly necessary to enhance the performance of your SDA and its functionality, and limited to the temporary caching of:
1. metadata and cover art; or
2. Conditional Downloads of sound recordings. Caching of Conditional Downloads of sound recordings must only be available to subscribers to the Premium Service. “**Conditional Downloads**” means time-limited offline syncing.
Section V Users & Data
----------------------
1. You agree that the Data Protection Appendix shall govern any processing by you of Spotify Personal Data (as defined in the Data Protection Appendix), and that it is expressly incorporated into these Developer Terms.
2. You agree not to circumvent any privacy features (e.g., opt outs) offered by Spotify, you, or by third parties.
3. You will only request the data you need to operate your SDA.
4. When users connect with your SDA, they may consent to the sharing of certain categories of Spotify Personal Data with you, with those categories selected by you in advance. For all other Spotify Personal Data obtained through use of the Spotify Platform, you must obtain explicit consent from the user who provided the data to us before using it for any purpose other than displaying it back to the user on your SDA.
5. You will not sell any Spotify Content or other data obtained from Spotify.
6. You will not email Spotify users unless you obtain their explicit consent or obtain their email address and permission through means other than Spotify.
7. You may only process Spotify Personal Data for as long as is necessary to provide your SDA to the applicable user, and consistent with the specific consent they’ve granted to you.
8. You must provide all users with a working and easily accessible mechanism to disconnect their Spotify Service account from your SDA at any time and provide clear instructions on how to do so. Further, when a user disconnects their Spotify Service account or otherwise expresses an intent to prevent your SDA from accessing their data, you agree to delete and no longer request or process any of that user’s Spotify Personal Data.
9. If Spotify informs you of a Spotify user having required rectification, erasure or restriction of processing of Spotify Personal Data to you, you must comply with such requests.
10. Prior to using the Spotify Platform, you must have in place industry standard security and protections for any Spotify Content (including Spotify Personal Data) in your possession and/or control. You are also responsible for the security measures used by third parties providing services to you.
11. You must display and require end users to agree to an enforceable end user agreement reflecting at least the following minimum terms:
1. not make any warranties or representations on behalf of Spotify and expressly disclaim all implied warranties with respect to the Spotify Platform, Spotify Service and Spotify Content, including the implied warranties of merchantability, fitness for a particular purpose and non-infringement;
2. prohibit modifying or creating derivative works based on the Spotify Platform, Spotify Service or Spotify Content;
3. prohibit decompiling, reverse-engineering, disassembling, and otherwise reducing the Spotify Platform, Spotify Service, and Spotify Content to source code or other human-perceivable form, to the full extent allowed by law;
4. state that you are responsible for your products and disclaim any liability on the part of third parties (e.g., Spotify);
5. state that Spotify is a third party beneficiary of your end user license agreement and privacy policy and is entitled to directly enforce your end user license agreement.
12. You must display a privacy policy to end users before they install or signup to your SDA. You will make a complete and accurate disclosure to end users of the privacy practices and policies applicable to your SDA, including notice to the end user:
1. that your collection and use of data is subject to your privacy policy;
2. of the information you collect from users;
3. about how you collect, use, and share that information;
4. about how users can contact you with inquiries regarding their information;
5. about your use of Cookies;
6. whether you allow third parties to place Cookies on users’ browsers in order to collect information about their browsing activities; and
7. about users’ options for Cookie management.
13. Any access, use, processing, and disclosure of Spotify Personal Data shall comply with (i) these Developer Terms; (ii) your end user agreement and privacy policy; (iii) the permissions and consents obtained from users, if applicable; (iv) the requirements of any data transfer solution implemented in accordance with paragraph 3 in the Data Protection Appendix; and (v) applicable laws and regulations.
14. If your application contains content submitted or provided by third parties, you must comply with the following rules:
1. In the United States, you must take all steps required to fall within the applicable safe harbors of the Digital Millennium Copyright Act including designating an agent to receive notices of claimed infringement, instituting a repeat infringer termination policy and implementing a “notice and takedown” process.
2. In other countries, you must comply with local copyright laws and implement an appropriate “notice and takedown” process upon receiving a notice of claimed infringement.
Section VI Access, Usage and Quotas
-----------------------------------
1. **Security Codes**
1. As described on our Developer Website, to access and use certain tools provided by the Spotify Platform, you must link your Spotify Service account to a developer account. You will be issued one or more unique I.D.s, client I.Ds, keys, passwords, security codes, or tokens (each a “**Security Code**”) for accessing the Spotify Platform and managing your account. You agree to provide Spotify with accurate, complete and updated registration and contact information.
2. You may only access your account with the Security Codes provided by Spotify and the appropriate Security Code must be embedded in your SDA, including in all updates and revisions, in a secure manner not accessible by third parties. You must use a separate Security Code for each SDA. You may not use more than one Security Code for each SDA. If you are developing a Streaming SDA, each call to the Spotify Platform must incorporate a valid Security Code.
3. You may not sell, transfer, sublicense or otherwise disclose your account or Security Codes to any other party or use it for any other purpose except in connection with your SDA.
4. You are responsible for maintaining the confidentiality of your account and Security Codes. You agree to notify Spotify immediately if you believe that your account or Security Codes have been compromised and cooperate with Spotify in the investigation of any compromised Security Codes. You are fully responsible for all activities that occur using your account and Security Codes, regardless of whether such activities are undertaken by you or a third party.
2. **Limitations on Use of Spotify Platform.** Spotify may limit the number of service calls that your SDA may make, the volume of Spotify Content that may be accessed, or anything else about the Spotify Service as Spotify deems appropriate, in its sole discretion, without notice. Spotify may use technical measures to prevent over-usage or stop usage of the Spotify Platform.
3. **App Reviews.** We may review your SDA for compliance from time to time, in our sole discretion. You will cooperate with our reviews and provide any information we request thereof.
4. **Monitoring Usage.** You agree that Spotify may monitor your use of, and collect usage data related to, the Spotify Platform to ensure quality, improve the Spotify Service and verify your compliance with the Developer Agreement. You agree not to block or interfere with such efforts and to provide us with reasonable access to information related to your compliance with the Developer Agreement. Spotify may use any technical means to overcome any interference. At our sole discretion we may request, and you will provide, proof that your SDA and any content within your SDA is properly licensed.
5. **Cooperation.** You agree to cooperate with Spotify in pursuing any violations of the prohibition against ripping or other capture of streamed content.
6. **Modification of Spotify Platform.** Spotify reserves the right to modify the Spotify Platform and to release subsequent versions of the Spotify Platform at any time without notice to you. You may be required to obtain and use the most recent version of the Spotify Platform in order for your SDA to function.
7. **Usage and Quotas.**
1. Spotify may use quotas and place use restrictions to ensure that the Spotify Platform is accessed and used as intended and in accordance with the Developer Agreement.
2. If your SDA reaches a quota limit, you may be eligible to apply for extended access using the forms provided to you. You must meet (and continue to meet) all eligibility and other criteria to be considered for extended access, as determined by Spotify, and complete all forms and applications as required by Spotify. This criteria may change at any time in accordance with these Developer Terms. In that case, your application for extended access must specify the use case for which you need the extension. Spotify makes no promise or guarantee that such extended access request will be approved.
3. If Spotify grants an additional quota, you must use the additional quota granted only for the use case that Spotify reviewed. If any of the information you provided to Spotify when requesting the quota changes, you must notify Spotify of the change by submitting the new information to Spotify prior to using the quota extension for a non-reviewed use case.
Section VII Intellectual Property & Confidential Information
------------------------------------------------------------
1. **Intellectual property.**
1. Spotify respects intellectual property rights, and expects you to do the same. The Spotify Platform, Spotify Service, Spotify Content and any Spotify Marks (our “**Intellectual Property**”) are the property of Spotify or Spotify’s licensors and protected by intellectual property rights. You do not have the right to use the Intellectual Property in any manner not covered by the Developer Agreement.
2. Nothing in the Developer Agreement shall be construed to convey, and by virtue of the Developer Agreement you will not acquire, any ownership interest in the Intellectual Property.
3. You will not contest, or assist others in contesting, the validity, enforceability, ownership, or title of any Intellectual Property. You agree not to attempt to use or register any trademark or domain name that includes the word “Spotify,” any other Spotify trademark, or any name that is confusingly similar to any of them.
4. Further, you may not remove or alter any copyright, copyright protection technology, trademark, or other intellectual property notice contained in or provided through Spotify’s Intellectual Property.
2. **Confidentiality.** In your interactions with Spotify, you may be given access to certain non-public information, software, specifications, or code (“**Confidential Information**”), which is confidential and proprietary to Spotify. You may use this Confidential Information only as necessary in exercising such rights as are granted to you in these Developer Terms. You may not disclose any of this Confidential Information to any third party without Spotify’s prior written consent. You further agree that you will protect this Confidential Information from any unauthorized use, access, or disclosure with no less than a reasonable degree of care than your own confidential information.
Section VIII Representations and Warranties, Limitation of Liability, Indemnification, Disclaimers, Release
-----------------------------------------------------------------------------------------------------------
1. **Representations and warranties**. In addition to any other representations, warranties and covenants made by you, you represent, warrant and covenant to Spotify that:
1. You have the legal capacity to enter into these Developer Terms;
2. Any and all information you provide to Spotify is and shall be true, accurate, complete and up to date;
3. You possess all authorizations, approvals, consents, licenses, permits, and other rights and permissions necessary to provide your SDA and perform your obligations hereunder;
4. You own or have secured all rights necessary to copy, display, distribute, render, and publicly perform all content (other than Spotify Content) on or within your SDA or website;
5. Your use of the Spotify Platform complies with all applicable laws and regulations, including any right of privacy, publicity, copyright, trademark, patent, trade secret or contractual right; and
6. Your use of the Spotify Platform shall not infringe any intellectual property or other rights of Spotify or any third party, including any right of copyright, trademark, patent, privacy, publicity, or contractual right.
2. **LIMITATION OF LIABILITY.** TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL SPOTIFY, ITS AFFILIATES, OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, SHAREHOLDERS, LICENSORS, LICENSEES, ASSIGNS OR SUCCESSORS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY: (I) INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE EXEMPLARY, OR CONSEQUENTIAL DAMAGES : (2) ANY LOSS OF USE, DATA, BUSINESS OR PROFITS (WHETHER DIRECT OR INDIRECT) ARISING OUT OF THE USE OF, OR INABILITY TO USE, THE SPOTIFY SERVICE, SPOTIFY CONTENT, OR THE SPOTIFY PLATFORM, INCLUDING ANY DAMAGES RESULTING THEREFROM, REGARDLESS OF THE FORM OF THE ACTION OR THE BASIS OF THE CLAIM, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. YOUR ONLY RIGHT WITH RESPECT TO ANY PROBLEMS OR DISSATISFACTION WITH THE SPOTIFY PLATFORM IS TO STOP USING THE SPOTIFY PLATFORM. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR CERTAIN TYPES OF DAMAGES REFERRED TO ABOVE (INCLUDING INCIDENTAL OR CONSEQUENTIAL DAMAGES). ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS AND EXCLUSIONS MAY NOT APPLY TO YOU. YOU AGREE THAT SPOTIFY’S AGGREGATE LIABILITY UNDER THESES DEVELOPER TERMS IS LIMITED TO FIVE HUNDRED DOLLARS ($500).
3. **INDEMNIFICATION**. YOU SHALL INDEMNIFY AND HOLD SPOTIFY AND ITS AFFILIATES, OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, SHAREHOLDERS, LICENSORS, LICENSEES, ASSIGNS OR SUCCESSORS HARMLESS FROM ANY CLAIM OR DEMAND (INCLUDING REASONABLE ATTORNEY FEES AND COSTS OF INVESTIGATION) MADE BY A THIRD PARTY DUE TO OR ARISING OUT OF OR RELATED TO YOUR USE OF THE SPOTIFY PLATFORM, SPOTIFY SERVICE OR SPOTIFY CONTENT OR YOUR VIOLATION OF THE TERMS OF THESE DEVELOPER TERMS OR YOUR VIOLATION OF ANY LAWS, REGULATIONS, OR THIRD PARTY RIGHTS.
4. **DISCLAIMERS.**
1. ANY USE OF THE SPOTIFY PLATFORM IS AT YOUR OWN RISK. THE SPOTIFY PLATFORM IS PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS. THERE IS NO WARRANTY, EXPRESSED OR IMPLIED, AS TO THE SPOTIFY PLATFORM, SPOTIFY SERVICE OR SPOTIFY CONTENT, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. NO ADVICE OR INFORMATION, WHETHER ORAL OR IN WRITING, OBTAINED BY YOU FROM SPOTIFY SHALL CREATE ANY WARRANTY ON BEHALF OF SPOTIFY IN THIS REGARD.
2. SPOTIFY EXPRESSLY DISCLAIMS ANY WARRANTY THAT: (I) THE SPOTIFY PLATFORM, SPOTIFY SERVICE OR SPOTIFY CONTENT WILL MEET ALL OF YOUR REQUIREMENTS; (II) THE OPERATION OF THE SPOTIFY PLATFORM, THE SPOTIFY SERVICE OR THE SPOTIFY CONTENT WILL BE UNINTERRUPTED, TIMELY, SECURE OR ERROR-FREE; OR (III) THE SPOTIFY PLATFORM, SPOTIFY SERVICE OR SPOTIFY CONTENT WILL PROVIDE RESULTS THAT ARE ACCURATE OR RELIABLE OR CONSISTENT WITH YOUR EXPECTATIONS.
3. Further, Spotify has no obligation to provide you or any users of your SDA with support, software upgrades, enhancements, or modifications to the Spotify Platform or Spotify Service. You are solely responsible for providing user support and any other technical assistance to your users.
5. **Limitations Period and Release.** You agree that any claim arising out of or related to the Spotify Platform, Spotify Service or Spotify Content or otherwise arising out of these Developer Terms must be brought within one year after the claim accrues. Otherwise such claim is permanently barred. In addition, if you have a dispute with one or more third parties (for example, Spotify users or account holders) in connection with the Spotify Platform, Spotify Service, Spotify Content, or these Developer Terms, you release Spotify and its corporate affiliates and any of their officers, directors, employees, agents, shareholders, licensors, licensees, assigns or successors, for any and all damages, liabilities, causes of action, judgments and claims arising out of or in any way connected with such disputes. To the extent that California Civil Code 1542 is applicable to you, you waive California Civil Code 1542 with respect to the foregoing claims described in this paragraph: “A general release does not extend to claims which the creditor does not know or suspect to exist in his favor at the time of executing the release, which if known by him must have materially affected his settlement with debtor.”
Section IX Other Legal Terms
----------------------------
1. **Entire Agreement.** The Developer Agreement constitutes the entire agreement between you and Spotify with respect to your use of the Spotify Platform and supersede any prior agreements, whether oral or written, concerning the subject matter of these Developer Terms, except and then only to the extent that you have entered into a Separate Agreement or the [Spotify Widgets Terms of Use](https://developer.spotify.com/documentation/widgets/terms/)
. A “**Separate Agreement**” is a written agreement between and executed by Spotify and you governing your use of the Spotify Platform.
2. **Changes to the Agreement.** We may revise these Developer Terms from time to time and the most current version will always be posted on our website, so please check it regularly. If a revision is material we will notify you (for example via our developer blog or by email). By continuing to access or use the Spotify Platform after revisions become effective, you agree to be bound by the revised Developer Terms. If you do not agree to the new terms, you must terminate these Developer Terms, stop using the Spotify Platform, delete all Spotify Content and cease all operation, promotion, distribution and support of all your products and services that rely on the Spotify Platform.
3. **Non-exclusive Agreement and Competition.**
1. These Developer Terms are a non-exclusive agreement. Please understand that Spotify and/or other third parties (including other developers) may be developing and may develop products and services that may be similar to or competitive with your SDA, website or other products or services provided by you. Nothing in these Developer Terms shall in any way restrict or preclude Spotify and/or such third parties from creating and fully exploiting such products, services or other business activities without any obligation to you.
2. If you provide Spotify with any feedback (including suggestions, comments, improvements, ideas, etc.), you assign all right, title and interest in and to such feedback to Spotify and acknowledge that we will be entitled to use, implement and exploit any such feedback in any manner without restriction, and without any obligation of confidentiality, attribution, accounting or compensation.
4. **Export.** You agree to comply with all applicable export and re-export control laws and regulations, including, without limitation, the EAR, and trade and economic sanctions maintained by OFAC. Specifically, you not to – directly or indirectly – use, sell, export, reexport, transfer, divert, release, or otherwise dispose of any products, software, or technology (including products derived from or based on such technology) received from Spotify under the Developer Agreement to any destination, entity, or person, or for any end-use prohibited by the EAR, trade and economic sanctions maintained by OFAC, or any applicable laws or regulations of the United States or any other jurisdiction without obtaining prior any required authorization from the competent government authorities as required by those laws and regulations.
5. **Assignment.** You may not assign any of your rights or delegate any of your duties under these Developer Terms, in whole or in part, to any person or entity. Spotify may assign, delegate or novate these Developer Terms or any part thereof to any third party without restrictions.
6. **Third Parties.** Each corporate affiliate of Spotify shall be a third party beneficiary to these Developer Terms, and such corporate affiliates shall be entitled to directly enforce, and rely upon, any provision of these Developer Terms which confers a benefit on them (including the right to enforce your end user license agreement). Other than the preceding sentence and Section V.12, nothing in these Developer Terms shall create any third party beneficiaries, or confer any rights in any third parties.
7. **Publicity.** You may not suggest a partnership with, sponsorship by, or endorsement by Spotify without Spotify’s prior written approval. You permit Spotify to make public statements about your use of the Spotify Platform at any time.
8. **Term, Suspension, Termination and Survival.**
1. These Developer Terms begin on either (i) the date you demonstrate your acceptance of the Developer Terms or (ii) when you first use the Spotify Platform, and shall continue until terminated (the “**Term**”) as permitted under these Developer Terms.
2. Compliance with the provisions of these Developer Terms is very important. Any licenses contained in these Developer Terms will terminate automatically and without notice if you fail to comply with them.
3. We may take enforcement action against you and your SDA, for example, if we believe in our sole discretion that: (a) you have not responded in a timely manner to our requests related to reviews, monitoring and audit; (b) you or your app has violated the Developer Agreement or any other applicable terms and policies or is negatively impacting the Spotify Platform, Spotify Content or associated creators or rightsholders; (c) in order to comply with applicable legal or regulatory requirements or to protect Spotify and its group companies from legal, reputational or regulatory liability.
4. We may take enforcement action at any time, including while we investigate your SDA. We may or may not notify you in advance. Enforcement can include revoking your Security Codes, disabling your SDA, restricting your, and your SDA’s, access to the Spotify Platform (including its functionality), requiring you to delete data, terminating the Developer Terms or Developer Agreement with you, or any other action that we deem appropriate.
5. We may suspend or end your access to the Spotify Platform or individual permissions that your SDA has not used or accessed within a 90-day period with or without notice to you.
6. Spotify may terminate these Developer Terms by notice to you of termination or by terminating your ability to use the Spotify Platform. You may terminate these Developer Terms by ceasing all use of the Spotify Platform and notifying Spotify.
7. Upon any termination or notice of any discontinuance, you must immediately cease and desist from using the Spotify Platform and delete all Spotify Content (including Spotify Personal Data) obtained through use of the Spotify Platform (including from your servers).
8. Spotify has no obligation to maintain, support, upgrade, or update the Spotify Platform or Spotify Service, or to provide all or any specific content. We use reasonable efforts to keep the Spotify Service and Spotify Platform operational, however, certain issues, such as technical maintenance, may from time to time result in temporary interruptions and Spotify and/or the owners of Spotify Content may remove any Spotify Content, all without notice. Except where prohibited by law, Spotify has no liability for any interruption, modification, or discontinuation of the Spotify Service, Spotify Platform, Spotify Content any function or feature thereof.
9. Sections III.2, III.4, III.5, IV, V, VI, VII, VIII.3, VIII.5, VIII.6, IX.8, IX.10, and X of these Developer Terms (or any section necessary to interpret such sections) shall survive any termination or expiration of these Developer Terms and will continue to bind you.
9. **Severability.** Should for any reason, or to any extent, any provision of these Developer Terms be held invalid or unenforceable, such invalidity or enforceability shall not affect or render invalid or unenforceable the remaining provisions of these Developer Terms and the application of that provision shall be enforced to the extent permitted by law.
10. **Governing Law and Venue.**
1. These Developer Terms are governed by and construed in accordance with the laws of the State of California without regard to conflicts of law principles, except to the extent California law is preempted by United States Federal Law, including the Federal Arbitration Act.
2. To the extent Section IX.10.a is not enforceable, these Developer Terms shall be governed by and construed in accordance with the laws of Sweden without regard to conflicts of law principles.
3. Any dispute, claim or controversy arising out or in connection with these Developer Terms that is not subject to mandatory arbitration under Section X shall be subject to the exclusive jurisdiction of the state and federal courts of San Francisco Country, California.
4. To the extent Section IX.10.c is not enforceable, any dispute, claim or controversy arising out of or in connection with these Developer Terms shall be subject to the exclusive jurisdiction of the courts of Sweden.
5. If you are an Australian consumer or small business (as defined by Australian Consumer Law) Sections IX 10.a to IX.10.d inclusive shall not apply, and these Developer Terms shall be governed by and construed in accordance with the laws of New South Wales, Australia and the courts of New South Wales, Australia will have exclusive jurisdiction over any dispute, claim or controversy arising out of or in connection with these Developer Terms.
11. **No Waiver.** The failure or delay by Spotify to exercise or enforce any right or provision of these Developer Terms or rights under applicable law shall not constitute a waiver of any such provisions or rights.
Section X Arbitration Agreement
-------------------------------
This Section X (the “**Arbitration Agreement**”) which requires mandatory arbitration, applies to you if your performance under these Developer Terms will occur in whole or in part in the United States. It also applies if any part of your performance under these Developer Terms will occur in any other jurisdiction in which this Section X is enforceable:
1. **Dispute Resolution and Arbitration.** You and Spotify agree that any dispute, claim, or controversy between you and Spotify arising in connection with or relating in any way to these Developer Terms or to your relationship with Spotify (whether based in contract, tort, statute, fraud, misrepresentation, or any other legal theory, and whether the claims arise during or after the termination of these Developer Terms) will be determined by mandatory binding individual (not class) arbitration. You and Spotify further agree that the arbitrator shall have the exclusive power to rule on his or her own jurisdiction pursuant to these Developer Terms, including any objections with respect to the existence, scope or validity of the arbitration agreement or to the arbitrability of any claim or counterclaim. Arbitration is more informal than a lawsuit in court. THERE IS NO JUDGE OR JURY IN ARBITRATION, AND COURT REVIEW OF AN ARBITRATION AWARD IS LIMITED. There may be more limited discovery than in court. The arbitrator must follow this agreement and can award the same damages and relief as a court (including attorney fees), except that the arbitrator may not award any relief, including declaratory or injunctive relief, benefiting anyone but the parties to the arbitration. This arbitration provision will survive termination of these Developer Terms.
2. **Exceptions.** Notwithstanding Section X.1 above, you and Spotify both agree that nothing in this Arbitration Agreement will be deemed to waive, preclude, or otherwise limit either of our rights, at any time, to (1) bring an individual action in a U.S. small claims court; (2) pursue enforcement actions through applicable U.S. federal, state, or local agencies where such actions are available; (3) bring an individual action seeking only temporary or preliminary injunctive relief in a court of law, pending a final ruling from an arbitrator.
3. **No Class or Representative Proceedings:** Class Action Waiver. YOU AND SPOTIFY AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE ACTION. Unless both you and Spotify agree, no arbitrator or judge may consolidate more than one person’s claims or otherwise preside over any form of a representative or class proceeding.
4. **Arbitration Rules:** U.S. Performance. This Section governs arbitration proceedings if your performance under these Developer Terms will occur entirely inside the United States. Either you or we may start arbitration proceedings. Any arbitration between you and Spotify will take place under the rules and procedures of the American Arbitration Association (“**AAA**”) then in force (the “**AAA Rules**”), as modified by this Arbitration Agreement. You and Spotify agree that the Federal Arbitration Act applies and governs the interpretation and enforcement of this provision (despite the choice of law provision above). The AAA Rules, as well as instructions on how to file an arbitration proceeding with the AAA, appear at [www.adr.org](http://www.adr.org/)
, or you may call the AAA at 1-800-778-7879. Any arbitration hearings will take place in New York, New York, or at a location mutually agreed upon by the parties, provided that if the claim is for $25,000 or less, you may choose whether the arbitration will be conducted (1) solely on the basis of documents submitted to the arbitrator; (2) through a telephonic hearing, which neither the parties nor witnesses need to attend in person; or (3) by an in-person hearing as established by the AAA Rules in the U.S. county (or parish) in which you have your principal place of business. If you choose to file an arbitration proceeding and your claim is for $10,000 or less, Spotify will (a) reimburse you for any AAA filing fee and (b) pay any other arbitration fees, including your share of arbitrator compensation, unless otherwise required by AAA rules or court order. If your claim is between $10,000 and $25,000, you will be responsible for the filing fee but Spotify will pay any other arbitration fees. If your claim exceeds $25,000, you will be responsible for the filing fee and for your share of any other fees, consistent with the AAA rules. Regardless of the manner in which the arbitration is conducted, the arbitrator shall issue a reasoned written decision sufficient to explain the essential findings and conclusions on which the decision and award, if any, are based. The arbitrator may make rulings and resolve disputes as to the payment and reimbursement of fees or expenses at any time during the proceeding and upon request from either party made within 14 days of the arbitrator’s ruling on the merits.
5. **Arbitration Rules: Non-U.S. Performance.** This Section governs arbitration proceedings if your performance under these Developer Terms will occur entirely outside the United States. Either you or we may start arbitration proceedings. Any dispute, claim or controversy arising out of or in connection with these Developer Terms shall be finally settled by arbitration in accordance with the Arbitration Rules of the Arbitration Institute of the Stockholm Chamber of Commerce (“**SCC Rules**”), as modified by this Arbitration Agreement, and administered by the Arbitration Institute of the Stockholm Chamber of Commerce (“**SCC**”). The SCC Rules, as well as instructions on how to file an arbitration proceeding with the SCC, appear at [https://sccinstitute.com/](https://sccinstitute.com/)
, or you may call the SCC at +46 8 555 100 00. Spotify can also help put you in touch with the SCC. The arbitral tribunal shall be composed of a sole arbitrator to be appointed by the SCC. The seat of the arbitration shall be Stockholm, Sweden, and the arbitration shall be held, and the award shall be rendered, in the English language. Any arbitration hearings will take place in Stockholm, Sweden, or at a location mutually agreed upon by the parties, provided that if the claim is for $25,000 or less, you may choose whether the arbitration will be conducted (1) solely on the basis of documents submitted to the arbitrator, or (2) through a telephonic hearing, which neither the parties nor witnesses need to attend in person. The award shall be final and binding on the parties and may be entered and enforced in any court having jurisdiction.
6. **Notice; Process.** A party who intends to seek arbitration must first send a written notice of the dispute to the other, by certified mail or Federal Express, UPS, or Express Mail (signature required), or in the event that we do not have a physical address on file for you, by electronic mail (“**Notice**”). Spotify’s address for Notice is: Spotify AB, Attn: Legal Department, 150 Greenwich St 62nd floor, New York, NY 10007, United States. The Notice must (1) describe the nature and basis of the claim or dispute; and (2) set forth the specific relief sought (“**Demand**”). We agree to use good faith efforts to resolve the claim directly, but if we do not reach an agreement to do so within 30 days after the Notice is received, you or Spotify may commence an arbitration proceeding. During the arbitration, the amount of any settlement offer made by you or Spotify shall not be disclosed to the arbitrator until after the arbitrator makes a final decision and award, if any. All documents and information disclosed in the course of the arbitration shall be kept strictly confidential by the recipient and shall not be used by the recipient for any purpose other than for purposes of the arbitration or the enforcement of arbitrator’s decision and award and shall not be disclosed except in confidence to persons who have a need to know for such purposes or as required by applicable law.
7. **Enforceability.** If any portion of this Arbitration Agreement is found to be unenforceable in court or in arbitration, then the entirety of the Arbitration Agreement shall be null and void and, in such case, the parties agree that the exclusive jurisdiction and venue described in Section IX.10. shall govern any action arising out of or related to these Developer Terms.
Appendix A Data Protection Appendix
-----------------------------------
This Data Protection Appendix (**Appendix**) shall apply if you (“**you**” or “**Developer**”) access, receive, use, store or otherwise process Spotify Personal Data . The parties agree that this Appendix shall be incorporated into, and form part of, the Developer Terms.
**1\. Definitions and Interpretation**
Terms defined in the Developer Agreement shall have the same meaning when used in this Appendix, unless defined differently in this Appendix.
For purposes of this Appendix, “**Affiliate**” shall mean any entity that directly or indirectly controls, is controlled by, or is under common control with a party; “**Applicable Laws**” shall mean all laws, regulations and regulatory policies, guidelines or industry codes of any competent industry body that are applicable to Spotify, Spotify Personal Data, the Spotify Service, you and the GDPR; “**Personal Data**” shall mean any data falling within the definition of “personal data” under the General Data Protection Regulation 2016/679 or any replacement legislation, as applicable and including the UK’s Data Protection Act 2018 (“**GDPR**”); “**Spotify**” shall mean the Spotify entity which is party to the Developer Terms; and “**Spotify Personal Data**” shall mean any Personal Data in respect of which Spotify or a Spotify Affiliate is a data controller, which you process in connection with the Developer Terms.
Terms defined in the GDPR, as applicable, shall have the same meaning when used in this Appendix, unless defined differently in this Appendix.
**2\. Your Role**
You acknowledge that you shall be acting as an independent Data Controller in respect of Spotify Personal Data. If circumstances arise where you are acting as a Data Processor on Spotify’s (or a Spotify Affiliate’s) behalf, you shall promptly, on request by Spotify, execute written contractual commitments which meet the requirements of Applicable Laws in relation to Data Processors.
You shall adhere to the obligations, requirements and standards set out in the GDPR in respect of any Spotify Personal Data, including: (a) the level of security and / or protection for Spotify Personal Data; (b) the rights of Spotify; and (c) the rights of the Data Subject(s), irrespective of: (i) the location of the Data Subject(s); (ii) the location of the Spotify Affiliate that is party to this Developer Terms; and (iii) your location.
**3\. Transfer of Personal Data Outside of the European Economic Area (“EEA”) or UK**
Before transferring Personal Data outside the EU/EEA/UK, you shall ensure that such transfer is fully compliant with Applicable Laws. In addition, you shall be solely responsible for procuring that you execute and deliver all such documents and perform all such acts as requested by Spotify for the purpose of giving full effect to this paragraph 3.
To the extent you are receiving personal data from Spotify as a data importer, you represent and warrant that with respect to such data, you: (i) shall ensure that an equivalent level of protection as offered by EU law will be provided to EU/EEA Data Subjects in the country you are processing Personal Data, and (ii) shall implement supplemental measures consistent with regulatory guidance (and remain consistent as further regulatory guidance is issued).
The EU standard contractual clauses adopted by decision of 4 June 2021 document number C/2021/3972 (module 1, controllers to controllers) (“SCCs”) shall apply to any transfers of Spotify Personal Data by Spotify under this DPA from the European Union (“EU”) and the European Economic Area (“EEA”) to you where you are in a third country for the purposes of GDPR.
You represent and warrant that you can comply with the SCCs and accept the transfer of Spotify Personal Data. To the extent you become unable to comply with the SCCs, you shall promptly notify Spotify and Spotify may terminate the Developer Agreement and your access to the Spotify Platform in its sole discretion.
For the purposes of the SCCs, the parties agree that Spotify AB is the “data exporter” and you are the “data importer“ and that:
For the purposes of Annex I of the Appendix to the SCCs, the following will apply:
A: **List of Parties**. The names and contact details of the parties shall be as set out in the applicable approval form for the services or their account.
B: **Description of Transfer**.
i. Data Subjects. The Personal Data transferred concern the following categories of Data Subjects: Spotify users
ii. Purpose and nature of the transfer(s). The transfer is made for the following purposes: To provide the ability for you to use the Spotify Platform in accordance with the Developer Agreement
iii. Categories of data. The Personal Data transferred concern the following categories of data: Spotify Personal Data
iv. Recipients. The Personal Data transferred may be disclosed only to the following recipients or categories of recipient: Data Processors appointed by you
v. Sensitive data. The Personal Data transferred concern the following categories of sensitive data: N/A
vi. Frequency. Continuous
vii. Period for which data will be retained. As set out in your privacy policy.
viii. Transfers to (sub) processors. Subject to clause 7(e) of the Developer Terms.
C: **Competent Supervisory Authority**. The relevant competent supervisory authority shall be the Swedish Authority for Privacy Protection.
For purposes of Annex II of the Appendix to the SCCs, the following will apply:
Data importer shall undertake appropriate technical and organizational security measures to protect personal data against the unauthorized or unlawful processing of personal data and against accidental loss or destruction of, or damage to, personal data. These measures should take into account available encryption technology and the costs of implementing the specific measures and must ensure a level of security appropriate to the harm that might result from a breach of security and the nature of the data to be protected.
**4\. Processing of Spotify Personal Data**
You must provide reasonable resources to your employees to enable processing of Spotify Personal Data in compliance with the Developer Agreement.
You shall only process Spotify Personal Data as is strictly necessary for the provision of your SDA.
Each of Spotify and you shall be solely responsible for its respective processing of Spotify Personal Data, including allowing Data Subjects to exercise their legal rights under Applicable Laws. You, to the extent that such a request affects Spotify’s processing of Personal Data, shall comply with all such requests in accordance with Applicable Laws.
You shall also be responsible for any acts and omissions of any third parties with which you share Spotify Personal Data.
You shall notify Spotify Party immediately if you become aware of, or suspect: (i) any breach of this Appendix; or (ii) a Personal Data breach which is likely to affect or invoke the other party’s obligations under Applicable Laws. The notifying party shall document all Personal Data breaches in accordance with Applicable Laws and fully cooperate with the other party to ensure compliance with Applicable Laws. Each party shall use reasonable endeavors to mitigate any damage suffered by a Data Subject.
**5\. Account Linking**
If your access to Spotify Personal Data is provided in connection with linking or otherwise integrating the Data Subject’s Spotify-provided account with your SDA, the following shall apply:
a. The account linking and / or integration request to Data Subjects shall include all information required to ensure it is compliant with Applicable Laws, including sufficient notice: (i) of which Spotify Personal Data you will access and the purpose of such processing; and (ii) that you will be responsible for your processing of such data in accordance with your privacy policy.
b. You shall allow Data Subjects to disconnect their Spotify-provided account by providing an easily accessible and usable mechanism to disconnect their Spotify-provided account from your SDA at any time, including clear instructions on how to do so.
c. If a Data Subject disconnects accounts as described in (b) above, or if Spotify or a Data Subject requests such disconnection, you shall discontinue accessing the applicable Spotify Personal Data and delete the applicable Spotify Personal Data in your possession or control within five (5) days.
**6\. Information Security Practices**
You shall implement and maintain all appropriate technical, administrative and organizational measures required to ensure a level of confidentiality and security appropriate to the risks represented by the processing and the nature of Spotify Personal Data, and to prevent unauthorized or unlawful processing of Spotify Personal Data, including measures against unauthorized or unlawful processing of Spotify Personal Data and against accidental loss, corruption, disclosure or destruction of, or damage to, Spotify Personal Data.
**7\. Obligation to Provide Information**
If requested by Spotify, you will keep Spotify informed of the contact details of your data protection representative. You shall provide Spotify with any information that Spotify reasonably requires in order for Spotify to comply with its obligations under Applicable Laws including to inform Data Subjects about your data processing activities and any data transfer solutions utilized by you.
**8\. Non-Sale**
Non-Sale. The exchange of Personal Data hereunder does not constitute a sale, as defined by Applicable Law (including the California Consumer Protection Act). As such, you are prohibited from processing (including retaining, using and disclosing) Personnel Data (i) for any purpose other than performing your obligations under the Developer Agreement; or (ii) outside of the direct business relationship with Spotify (including for a commercial or internal business purposes). You shall ensure that you and any processor or partner you engage to help perform your obligations under the Developer Agreement will not, directly or indirectly, make available Personal Data for any valuable consideration (monetary or otherwise). You hereby certify that you understand the undertakings and restrictions set out in this paragraph 8.
**9\. Security Incidents and Notices to Third Parties**
You agree to notify Spotify by sending an email to [security@spotify.com](mailto:security@spotify.com)
without undue delay (and in any event within twenty-four (24) hours) where you become aware of or reasonably suspects that Spotify Personal Data has been or may have been lost, damaged or subject to unauthorized access (a “**Security Incident**”) and to take reasonable steps to mitigate the impact of any such Security Incident. To the extent Spotify seeks the assistance of you, you agree to reasonably cooperate with Spotify to enable Spotify to comply with its obligations under Applicable Laws.
**10\. Governing Law**
Notwithstanding any other provision in the Developer Agreement, this Appendix shall be governed by, and interpreted in accordance with, the laws of Sweden.
---
# Authorization | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/web-api/concepts/authorization#main)
Web API
* [Overview](https://developer.spotify.com/documentation/web-api)
* [Getting started](https://developer.spotify.com/documentation/web-api/tutorials/getting-started)
* ConceptsConcepts
Concepts* [Access Token](https://developer.spotify.com/documentation/web-api/concepts/access-token)
* [API calls](https://developer.spotify.com/documentation/web-api/concepts/api-calls)
* [Apps](https://developer.spotify.com/documentation/web-api/concepts/apps)
* [Authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
* [Redirect URIs](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri)
* [Playlists](https://developer.spotify.com/documentation/web-api/concepts/playlists)
* [Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)
* [Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)
* [Scopes](https://developer.spotify.com/documentation/web-api/concepts/scopes)
* [Spotify URIs and IDs](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)
* [Track Relinking](https://developer.spotify.com/documentation/web-api/concepts/track-relinking)
* TutorialsTutorials
Tutorials* [Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
* [Authorization code PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
* [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
* [Implicit grant \[Deprecated\]](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
* [Refreshing tokens](https://developer.spotify.com/documentation/web-api/tutorials/refreshing-tokens)
* [Migration: Implicit grant to Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/migration-implicit-auth-code)
* [Migration: Insecure redirect URI](https://developer.spotify.com/documentation/web-api/tutorials/migration-insecure-redirect-uri)
* How-TosHow-Tos
How-Tos* [Display your Spotify profile data in a web app](https://developer.spotify.com/documentation/web-api/howtos/web-app-profile)
Reference
* AlbumsAlbums
Albums* [Get Album](https://developer.spotify.com/documentation/web-api/reference/get-an-album)
* [Get Several Albums](https://developer.spotify.com/documentation/web-api/reference/get-multiple-albums)
* [Get Album Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-albums-tracks)
* [Get User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-albums)
* [Save Albums for Current User](https://developer.spotify.com/documentation/web-api/reference/save-albums-user)
* [Remove Users' Saved Albums](https://developer.spotify.com/documentation/web-api/reference/remove-albums-user)
* [Check User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-albums)
* [Get New Releases](https://developer.spotify.com/documentation/web-api/reference/get-new-releases)
* ArtistsArtists
Artists* [Get Artist](https://developer.spotify.com/documentation/web-api/reference/get-an-artist)
* [Get Several Artists](https://developer.spotify.com/documentation/web-api/reference/get-multiple-artists)
* [Get Artist's Albums](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-albums)
* [Get Artist's Top Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-top-tracks)
* [Get Artist's Related Artists](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-related-artists)
* AudiobooksAudiobooks
Audiobooks* [Get an Audiobook](https://developer.spotify.com/documentation/web-api/reference/get-an-audiobook)
* [Get Several Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-multiple-audiobooks)
* [Get Audiobook Chapters](https://developer.spotify.com/documentation/web-api/reference/get-audiobook-chapters)
* [Get User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-audiobooks)
* [Save Audiobooks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-audiobooks-user)
* [Remove User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/remove-audiobooks-user)
* [Check User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-audiobooks)
* CategoriesCategories
Categories* [Get Several Browse Categories](https://developer.spotify.com/documentation/web-api/reference/get-categories)
* [Get Single Browse Category](https://developer.spotify.com/documentation/web-api/reference/get-a-category)
* ChaptersChapters
Chapters* [Get a Chapter](https://developer.spotify.com/documentation/web-api/reference/get-a-chapter)
* [Get Several Chapters](https://developer.spotify.com/documentation/web-api/reference/get-several-chapters)
* EpisodesEpisodes
Episodes* [Get Episode](https://developer.spotify.com/documentation/web-api/reference/get-an-episode)
* [Get Several Episodes](https://developer.spotify.com/documentation/web-api/reference/get-multiple-episodes)
* [Get User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-episodes)
* [Save Episodes for Current User](https://developer.spotify.com/documentation/web-api/reference/save-episodes-user)
* [Remove User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/remove-episodes-user)
* [Check User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-episodes)
* GenresGenres
Genres* [Get Available Genre Seeds](https://developer.spotify.com/documentation/web-api/reference/get-recommendation-genres)
* MarketsMarkets
Markets* [Get Available Markets](https://developer.spotify.com/documentation/web-api/reference/get-available-markets)
* PlayerPlayer
Player* [Get Playback State](https://developer.spotify.com/documentation/web-api/reference/get-information-about-the-users-current-playback)
* [Transfer Playback](https://developer.spotify.com/documentation/web-api/reference/transfer-a-users-playback)
* [Get Available Devices](https://developer.spotify.com/documentation/web-api/reference/get-a-users-available-devices)
* [Get Currently Playing Track](https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track)
* [Start/Resume Playback](https://developer.spotify.com/documentation/web-api/reference/start-a-users-playback)
* [Pause Playback](https://developer.spotify.com/documentation/web-api/reference/pause-a-users-playback)
* [Skip To Next](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-next-track)
* [Skip To Previous](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-previous-track)
* [Seek To Position](https://developer.spotify.com/documentation/web-api/reference/seek-to-position-in-currently-playing-track)
* [Set Repeat Mode](https://developer.spotify.com/documentation/web-api/reference/set-repeat-mode-on-users-playback)
* [Set Playback Volume](https://developer.spotify.com/documentation/web-api/reference/set-volume-for-users-playback)
* [Toggle Playback Shuffle](https://developer.spotify.com/documentation/web-api/reference/toggle-shuffle-for-users-playback)
* [Get Recently Played Tracks](https://developer.spotify.com/documentation/web-api/reference/get-recently-played)
* [Get the User's Queue](https://developer.spotify.com/documentation/web-api/reference/get-queue)
* [Add Item to Playback Queue](https://developer.spotify.com/documentation/web-api/reference/add-to-queue)
* PlaylistsPlaylists
Playlists* [Get Playlist](https://developer.spotify.com/documentation/web-api/reference/get-playlist)
* [Change Playlist Details](https://developer.spotify.com/documentation/web-api/reference/change-playlist-details)
* [Get Playlist Items](https://developer.spotify.com/documentation/web-api/reference/get-playlists-tracks)
* [Update Playlist Items](https://developer.spotify.com/documentation/web-api/reference/reorder-or-replace-playlists-tracks)
* [Add Items to Playlist](https://developer.spotify.com/documentation/web-api/reference/add-tracks-to-playlist)
* [Remove Playlist Items](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-playlist)
* [Get Current User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-list-of-current-users-playlists)
* [Get User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-list-users-playlists)
* [Create Playlist](https://developer.spotify.com/documentation/web-api/reference/create-playlist)
* [Get Featured Playlists](https://developer.spotify.com/documentation/web-api/reference/get-featured-playlists)
* [Get Category's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-categories-playlists)
* [Get Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/get-playlist-cover)
* [Add Custom Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/upload-custom-playlist-cover)
* SearchSearch
Search* [Search for Item](https://developer.spotify.com/documentation/web-api/reference/search)
* ShowsShows
Shows* [Get Show](https://developer.spotify.com/documentation/web-api/reference/get-a-show)
* [Get Several Shows](https://developer.spotify.com/documentation/web-api/reference/get-multiple-shows)
* [Get Show Episodes](https://developer.spotify.com/documentation/web-api/reference/get-a-shows-episodes)
* [Get User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-shows)
* [Save Shows for Current User](https://developer.spotify.com/documentation/web-api/reference/save-shows-user)
* [Remove User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/remove-shows-user)
* [Check User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-shows)
* TracksTracks
Tracks* [Get Track](https://developer.spotify.com/documentation/web-api/reference/get-track)
* [Get Several Tracks](https://developer.spotify.com/documentation/web-api/reference/get-several-tracks)
* [Get User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-tracks)
* [Save Tracks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-tracks-user)
* [Remove User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-user)
* [Check User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-tracks)
* [Get Several Tracks' Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-several-audio-features)
* [Get Track's Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-audio-features)
* [Get Track's Audio Analysis](https://developer.spotify.com/documentation/web-api/reference/get-audio-analysis)
* [Get Recommendations](https://developer.spotify.com/documentation/web-api/reference/get-recommendations)
* UsersUsers
Users* [Get Current User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-current-users-profile)
* [Get User's Top Items](https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks)
* [Get User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-users-profile)
* [Follow Playlist](https://developer.spotify.com/documentation/web-api/reference/follow-playlist)
* [Unfollow Playlist](https://developer.spotify.com/documentation/web-api/reference/unfollow-playlist)
* [Get Followed Artists](https://developer.spotify.com/documentation/web-api/reference/get-followed)
* [Follow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/follow-artists-users)
* [Unfollow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/unfollow-artists-users)
* [Check If User Follows Artists or Users](https://developer.spotify.com/documentation/web-api/reference/check-current-user-follows)
* [Check if Current User Follows Playlist](https://developer.spotify.com/documentation/web-api/reference/check-if-user-follows-playlist)
Authorization
=============
Authorization refers to the process of granting a user or application access permissions to Spotify data and features (e.g your application needs permission from a user to access their playlists).
Spotify implements the [OAuth 2.0](https://datatracker.ietf.org/doc/html/rfc6749)
authorization framework:

Where:
* _End User_ corresponds to the Spotify user. The _End User_ grants access to the protected resources (e.g. playlists, personal information, etc.)
* _My App_ is the client that requests access to the protected resources (e.g. a mobile or web app).
* _Server_ which hosts the protected resources and provides authentication and authorization via OAuth 2.0.
The access to the protected resources is determined by one or several _scopes_. Scopes enable your application to access specific functionality (e.g. read a playlist, modify your library or just streaming) on behalf of a user. The set of scopes you set during the authorization, determines the access permissions that the user is asked to grant. You can find detailed information about scopes in the [scopes documentation](https://developer.spotify.com/documentation/web-api/concepts/scopes)
.
The authorization process requires valid _client credentials_: a client ID and a client secret. You can follow the [Apps guide](https://developer.spotify.com/documentation/web-api/concepts/apps)
to learn how to generate them.
Once the authorization is granted, the authorization server issues an access token, which is used to make API calls on behalf the user or application.
The OAuth2 standard defines four grant types (or flows) to request and get an access token. Spotify implements the following ones:
* [Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
* [Authorization code with PKCE extension](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
* [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
* [Implicit grant](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
Info:
The implicit grant is deprecated and will be removed in the future. To learn more about the deprecation, see this [blog post](https://developer.spotify.com/blog/2025-02-12-increasing-the-security-requirements-for-integrating-with-spotify)
.
### Which OAuth flow should I use?
Choosing one flow over the rest depends on the application you are building:
* If you are developing a long-running application (e.g. web app running on the server) in which the user grants permission only once, and the client secret can be safely stored, then the [authorization code flow](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
is the recommended choice.
* In scenarios where storing the client secret is not safe (e.g. desktop, mobile apps or JavaScript web apps running in the browser), you can use the [authorization code with PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
, as it provides protection against attacks where the authorization code may be intercepted.
* For some applications running on the backend, such as CLIs or daemons, the system authenticates and authorizes the app rather than a user. For these scenarios, [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
is the typical choice. This flow does not include user authorization, so only endpoints that do not request user information (e.g. user profile data) can be accessed.
* The [implicit grant](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
has some important downsides: it returns the token in the URL instead of a trusted channel, and does not support refresh token. Thus, we don't recommend using this flow.
The following table summarizes the flows' behaviors:
| FLOW | Access User Resources | Requires Secret Key (Server-Side) | Access Token Refresh |
| --- | --- | --- | --- |
| Authorization code | Yes | Yes | Yes |
| Authorization code with PKCE | Yes | No | Yes |
| Client credentials | No | Yes | No |
| Implicit grant | Yes | No | No |
---
# API calls | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/web-api/concepts/api-calls#main)
Web API
* [Overview](https://developer.spotify.com/documentation/web-api)
* [Getting started](https://developer.spotify.com/documentation/web-api/tutorials/getting-started)
* ConceptsConcepts
Concepts* [Access Token](https://developer.spotify.com/documentation/web-api/concepts/access-token)
* [API calls](https://developer.spotify.com/documentation/web-api/concepts/api-calls)
* [Apps](https://developer.spotify.com/documentation/web-api/concepts/apps)
* [Authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
* [Redirect URIs](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri)
* [Playlists](https://developer.spotify.com/documentation/web-api/concepts/playlists)
* [Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)
* [Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)
* [Scopes](https://developer.spotify.com/documentation/web-api/concepts/scopes)
* [Spotify URIs and IDs](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)
* [Track Relinking](https://developer.spotify.com/documentation/web-api/concepts/track-relinking)
* TutorialsTutorials
Tutorials* [Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
* [Authorization code PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
* [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
* [Implicit grant \[Deprecated\]](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
* [Refreshing tokens](https://developer.spotify.com/documentation/web-api/tutorials/refreshing-tokens)
* [Migration: Implicit grant to Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/migration-implicit-auth-code)
* [Migration: Insecure redirect URI](https://developer.spotify.com/documentation/web-api/tutorials/migration-insecure-redirect-uri)
* How-TosHow-Tos
How-Tos* [Display your Spotify profile data in a web app](https://developer.spotify.com/documentation/web-api/howtos/web-app-profile)
Reference
* AlbumsAlbums
Albums* [Get Album](https://developer.spotify.com/documentation/web-api/reference/get-an-album)
* [Get Several Albums](https://developer.spotify.com/documentation/web-api/reference/get-multiple-albums)
* [Get Album Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-albums-tracks)
* [Get User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-albums)
* [Save Albums for Current User](https://developer.spotify.com/documentation/web-api/reference/save-albums-user)
* [Remove Users' Saved Albums](https://developer.spotify.com/documentation/web-api/reference/remove-albums-user)
* [Check User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-albums)
* [Get New Releases](https://developer.spotify.com/documentation/web-api/reference/get-new-releases)
* ArtistsArtists
Artists* [Get Artist](https://developer.spotify.com/documentation/web-api/reference/get-an-artist)
* [Get Several Artists](https://developer.spotify.com/documentation/web-api/reference/get-multiple-artists)
* [Get Artist's Albums](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-albums)
* [Get Artist's Top Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-top-tracks)
* [Get Artist's Related Artists](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-related-artists)
* AudiobooksAudiobooks
Audiobooks* [Get an Audiobook](https://developer.spotify.com/documentation/web-api/reference/get-an-audiobook)
* [Get Several Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-multiple-audiobooks)
* [Get Audiobook Chapters](https://developer.spotify.com/documentation/web-api/reference/get-audiobook-chapters)
* [Get User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-audiobooks)
* [Save Audiobooks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-audiobooks-user)
* [Remove User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/remove-audiobooks-user)
* [Check User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-audiobooks)
* CategoriesCategories
Categories* [Get Several Browse Categories](https://developer.spotify.com/documentation/web-api/reference/get-categories)
* [Get Single Browse Category](https://developer.spotify.com/documentation/web-api/reference/get-a-category)
* ChaptersChapters
Chapters* [Get a Chapter](https://developer.spotify.com/documentation/web-api/reference/get-a-chapter)
* [Get Several Chapters](https://developer.spotify.com/documentation/web-api/reference/get-several-chapters)
* EpisodesEpisodes
Episodes* [Get Episode](https://developer.spotify.com/documentation/web-api/reference/get-an-episode)
* [Get Several Episodes](https://developer.spotify.com/documentation/web-api/reference/get-multiple-episodes)
* [Get User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-episodes)
* [Save Episodes for Current User](https://developer.spotify.com/documentation/web-api/reference/save-episodes-user)
* [Remove User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/remove-episodes-user)
* [Check User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-episodes)
* GenresGenres
Genres* [Get Available Genre Seeds](https://developer.spotify.com/documentation/web-api/reference/get-recommendation-genres)
* MarketsMarkets
Markets* [Get Available Markets](https://developer.spotify.com/documentation/web-api/reference/get-available-markets)
* PlayerPlayer
Player* [Get Playback State](https://developer.spotify.com/documentation/web-api/reference/get-information-about-the-users-current-playback)
* [Transfer Playback](https://developer.spotify.com/documentation/web-api/reference/transfer-a-users-playback)
* [Get Available Devices](https://developer.spotify.com/documentation/web-api/reference/get-a-users-available-devices)
* [Get Currently Playing Track](https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track)
* [Start/Resume Playback](https://developer.spotify.com/documentation/web-api/reference/start-a-users-playback)
* [Pause Playback](https://developer.spotify.com/documentation/web-api/reference/pause-a-users-playback)
* [Skip To Next](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-next-track)
* [Skip To Previous](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-previous-track)
* [Seek To Position](https://developer.spotify.com/documentation/web-api/reference/seek-to-position-in-currently-playing-track)
* [Set Repeat Mode](https://developer.spotify.com/documentation/web-api/reference/set-repeat-mode-on-users-playback)
* [Set Playback Volume](https://developer.spotify.com/documentation/web-api/reference/set-volume-for-users-playback)
* [Toggle Playback Shuffle](https://developer.spotify.com/documentation/web-api/reference/toggle-shuffle-for-users-playback)
* [Get Recently Played Tracks](https://developer.spotify.com/documentation/web-api/reference/get-recently-played)
* [Get the User's Queue](https://developer.spotify.com/documentation/web-api/reference/get-queue)
* [Add Item to Playback Queue](https://developer.spotify.com/documentation/web-api/reference/add-to-queue)
* PlaylistsPlaylists
Playlists* [Get Playlist](https://developer.spotify.com/documentation/web-api/reference/get-playlist)
* [Change Playlist Details](https://developer.spotify.com/documentation/web-api/reference/change-playlist-details)
* [Get Playlist Items](https://developer.spotify.com/documentation/web-api/reference/get-playlists-tracks)
* [Update Playlist Items](https://developer.spotify.com/documentation/web-api/reference/reorder-or-replace-playlists-tracks)
* [Add Items to Playlist](https://developer.spotify.com/documentation/web-api/reference/add-tracks-to-playlist)
* [Remove Playlist Items](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-playlist)
* [Get Current User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-list-of-current-users-playlists)
* [Get User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-list-users-playlists)
* [Create Playlist](https://developer.spotify.com/documentation/web-api/reference/create-playlist)
* [Get Featured Playlists](https://developer.spotify.com/documentation/web-api/reference/get-featured-playlists)
* [Get Category's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-categories-playlists)
* [Get Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/get-playlist-cover)
* [Add Custom Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/upload-custom-playlist-cover)
* SearchSearch
Search* [Search for Item](https://developer.spotify.com/documentation/web-api/reference/search)
* ShowsShows
Shows* [Get Show](https://developer.spotify.com/documentation/web-api/reference/get-a-show)
* [Get Several Shows](https://developer.spotify.com/documentation/web-api/reference/get-multiple-shows)
* [Get Show Episodes](https://developer.spotify.com/documentation/web-api/reference/get-a-shows-episodes)
* [Get User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-shows)
* [Save Shows for Current User](https://developer.spotify.com/documentation/web-api/reference/save-shows-user)
* [Remove User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/remove-shows-user)
* [Check User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-shows)
* TracksTracks
Tracks* [Get Track](https://developer.spotify.com/documentation/web-api/reference/get-track)
* [Get Several Tracks](https://developer.spotify.com/documentation/web-api/reference/get-several-tracks)
* [Get User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-tracks)
* [Save Tracks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-tracks-user)
* [Remove User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-user)
* [Check User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-tracks)
* [Get Several Tracks' Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-several-audio-features)
* [Get Track's Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-audio-features)
* [Get Track's Audio Analysis](https://developer.spotify.com/documentation/web-api/reference/get-audio-analysis)
* [Get Recommendations](https://developer.spotify.com/documentation/web-api/reference/get-recommendations)
* UsersUsers
Users* [Get Current User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-current-users-profile)
* [Get User's Top Items](https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks)
* [Get User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-users-profile)
* [Follow Playlist](https://developer.spotify.com/documentation/web-api/reference/follow-playlist)
* [Unfollow Playlist](https://developer.spotify.com/documentation/web-api/reference/unfollow-playlist)
* [Get Followed Artists](https://developer.spotify.com/documentation/web-api/reference/get-followed)
* [Follow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/follow-artists-users)
* [Unfollow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/unfollow-artists-users)
* [Check If User Follows Artists or Users](https://developer.spotify.com/documentation/web-api/reference/check-current-user-follows)
* [Check if Current User Follows Playlist](https://developer.spotify.com/documentation/web-api/reference/check-if-user-follows-playlist)
API calls
=========
The Spotify Web API is a restful API with different endpoints which return JSON metadata about music artists, albums, and tracks, directly from the Spotify Data Catalogue.
Base URL
--------
The base address of Web API is `https://api.spotify.com`.
Authorization
-------------
All requests to Spotify Web API require authorization. Make sure you have read the [authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
guide to understand the basics.
To access private data through the Web API, such as user profiles and playlists, an application must get the user’s permission to access the data.
Requests
--------
Data resources are accessed via standard HTTP requests in UTF-8 format to an API endpoint. The Web API uses the following HTTP verbs:
| Method | Action |
| --- | --- |
| GET | Retrieves resources |
| POST | Creates resources |
| PUT | Changes and/or replaces resources or collections |
| DELETE | Deletes resources |
Responses
---------
Web API normally returns JSON in the response body. Some endpoints (e.g [Change Playlist Details](https://developer.spotify.com/documentation/web-api/reference/change-playlist-details)
) don't return JSON but the HTTP status code
### Response Status Codes
Web API uses the following response status codes, as defined in the [RFC 2616](https://www.ietf.org/rfc/rfc2616.txt)
and [RFC 6585](https://www.ietf.org/rfc/rfc6585.txt)
:
| Status Code | Description |
| --- | --- |
| 200 | OK - The request has succeeded. The client can read the result of the request in the body and the headers of the response. |
| 201 | Created - The request has been fulfilled and resulted in a new resource being created. |
| 202 | Accepted - The request has been accepted for processing, but the processing has not been completed. |
| 204 | No Content - The request has succeeded but returns no message body. |
| 304 | Not Modified. See [Conditional requests](https://developer.spotify.com/documentation/web-api/concepts/api-calls#conditional-requests) . |
| 400 | Bad Request - The request could not be understood by the server due to malformed syntax. The message body will contain more information; see [Response Schema](https://developer.spotify.com/documentation/web-api/concepts/api-calls#response-schema) . |
| 401 | Unauthorized - The request requires user authentication or, if the request included authorization credentials, authorization has been refused for those credentials. |
| 403 | Forbidden - The server understood the request, but is refusing to fulfill it. |
| 404 | Not Found - The requested resource could not be found. This error can be due to a temporary or permanent condition. |
| 429 | Too Many Requests - [Rate limiting](https://developer.spotify.com/documentation/web-api/concepts/rate-limits) has been applied. |
| 500 | Internal Server Error. You should never receive this error because our clever coders catch them all ... but if you are unlucky enough to get one, please report it to us through a comment at the bottom of this page. |
| 502 | Bad Gateway - The server was acting as a gateway or proxy and received an invalid response from the upstream server. |
| 503 | Service Unavailable - The server is currently unable to handle the request due to a temporary condition which will be alleviated after some delay. You can choose to resend the request again. |
### Response Error
Web API uses two different formats to describe an error:
* Authentication Error Object
* Regular Error Object
#### Authentication Error Object
Whenever the application makes requests related to authentication or authorization to Web API, such as retrieving an access token or refreshing an access token, the error response follows [RFC 6749](https://tools.ietf.org/html/rfc6749)
on the OAuth 2.0 Authorization Framework.
| Key | Value Type | Value Description |
| --- | --- | --- |
| error | string | A high level description of the error as specified in [RFC 6749 Section 5.2](https://tools.ietf.org/html/rfc6749#section-5.2) . |
| error\_description | string | A more detailed description of the error as specified in [RFC 6749 Section 4.1.2.1](https://tools.ietf.org/html/rfc6749#section-4.1.2.1) . |
Here is an example of a failing request to refresh an access token.
` _10 $ curl -H "Authorization: Basic Yjc...cK" -d grant_type=refresh_token -d refresh_token=AQD...f0 "https://accounts.spotify.com/api/token" _10 _10 { _10 "error": "invalid_client", _10 "error_description": "Invalid client secret" _10 } `
#### Regular Error Object
Apart from the response code, unsuccessful responses return a JSON object containing the following information:
| Key | Value Type | Value Description |
| --- | --- | --- |
| status | integer | The HTTP status code that is also returned in the response header. For further information, see [Response Status Codes](https://developer.spotify.com/documentation/web-api/concepts/api-calls#response-status-codes) . |
| message | string | A short description of the cause of the error. |
Here, for example is the error that occurs when trying to fetch information for a non-existent track:
` _10 $ curl -i "https://api.spotify.com/v1/tracks/2KrxsD86ARO5beq7Q0Drfqa" _10 _10 HTTP/1.1 400 Bad Request _10 { _10 "error": { _10 "status": 400, _10 "message": "invalid id" _10 } _10 } `
Conditional Requests
--------------------
Most API responses contain appropriate cache-control headers set to assist in client-side caching:
* If you have cached a response, do not request it again until the response has expired.
* If the response contains an ETag, set the If-None-Match request header to the ETag value.
* If the response has not changed, the Spotify service responds quickly with **304 Not Modified** status, meaning that your cached version is still good and your application should use it.
Timestamps
----------
Timestamps are returned in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
format as [Coordinated Universal Time (UTC)](http://en.wikipedia.org/wiki/Offset_to_Coordinated_Universal_Time)
with a zero offset: `YYYY-MM-DDTHH:MM:SSZ`. If the time is imprecise (for example, the date/time of an album release), an additional field indicates the precision; see for example, `release_date` in an [Album Object](https://developer.spotify.com/documentation/web-api/reference/get-an-album)
.
Pagination
----------
Some endpoints support a way of paging the dataset, taking an offset and limit as query parameters:
` _10 $ curl _10 https://api.spotify.com/v1/artists/1vCWHaC5f2uS3yhpwWbIA6/albums?album_type=SINGLE&offset=20&limit=10 `
In this example, in a list of 50 (`total`) singles by the specified artist : From the twentieth (`offset`) single, retrieve the next 10 (`limit`) singles.
---
# Apps | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/web-api/concepts/apps#main)
Web API
* [Overview](https://developer.spotify.com/documentation/web-api)
* [Getting started](https://developer.spotify.com/documentation/web-api/tutorials/getting-started)
* ConceptsConcepts
Concepts* [Access Token](https://developer.spotify.com/documentation/web-api/concepts/access-token)
* [API calls](https://developer.spotify.com/documentation/web-api/concepts/api-calls)
* [Apps](https://developer.spotify.com/documentation/web-api/concepts/apps)
* [Authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
* [Redirect URIs](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri)
* [Playlists](https://developer.spotify.com/documentation/web-api/concepts/playlists)
* [Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)
* [Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)
* [Scopes](https://developer.spotify.com/documentation/web-api/concepts/scopes)
* [Spotify URIs and IDs](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)
* [Track Relinking](https://developer.spotify.com/documentation/web-api/concepts/track-relinking)
* TutorialsTutorials
Tutorials* [Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
* [Authorization code PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
* [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
* [Implicit grant \[Deprecated\]](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
* [Refreshing tokens](https://developer.spotify.com/documentation/web-api/tutorials/refreshing-tokens)
* [Migration: Implicit grant to Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/migration-implicit-auth-code)
* [Migration: Insecure redirect URI](https://developer.spotify.com/documentation/web-api/tutorials/migration-insecure-redirect-uri)
* How-TosHow-Tos
How-Tos* [Display your Spotify profile data in a web app](https://developer.spotify.com/documentation/web-api/howtos/web-app-profile)
Reference
* AlbumsAlbums
Albums* [Get Album](https://developer.spotify.com/documentation/web-api/reference/get-an-album)
* [Get Several Albums](https://developer.spotify.com/documentation/web-api/reference/get-multiple-albums)
* [Get Album Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-albums-tracks)
* [Get User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-albums)
* [Save Albums for Current User](https://developer.spotify.com/documentation/web-api/reference/save-albums-user)
* [Remove Users' Saved Albums](https://developer.spotify.com/documentation/web-api/reference/remove-albums-user)
* [Check User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-albums)
* [Get New Releases](https://developer.spotify.com/documentation/web-api/reference/get-new-releases)
* ArtistsArtists
Artists* [Get Artist](https://developer.spotify.com/documentation/web-api/reference/get-an-artist)
* [Get Several Artists](https://developer.spotify.com/documentation/web-api/reference/get-multiple-artists)
* [Get Artist's Albums](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-albums)
* [Get Artist's Top Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-top-tracks)
* [Get Artist's Related Artists](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-related-artists)
* AudiobooksAudiobooks
Audiobooks* [Get an Audiobook](https://developer.spotify.com/documentation/web-api/reference/get-an-audiobook)
* [Get Several Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-multiple-audiobooks)
* [Get Audiobook Chapters](https://developer.spotify.com/documentation/web-api/reference/get-audiobook-chapters)
* [Get User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-audiobooks)
* [Save Audiobooks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-audiobooks-user)
* [Remove User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/remove-audiobooks-user)
* [Check User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-audiobooks)
* CategoriesCategories
Categories* [Get Several Browse Categories](https://developer.spotify.com/documentation/web-api/reference/get-categories)
* [Get Single Browse Category](https://developer.spotify.com/documentation/web-api/reference/get-a-category)
* ChaptersChapters
Chapters* [Get a Chapter](https://developer.spotify.com/documentation/web-api/reference/get-a-chapter)
* [Get Several Chapters](https://developer.spotify.com/documentation/web-api/reference/get-several-chapters)
* EpisodesEpisodes
Episodes* [Get Episode](https://developer.spotify.com/documentation/web-api/reference/get-an-episode)
* [Get Several Episodes](https://developer.spotify.com/documentation/web-api/reference/get-multiple-episodes)
* [Get User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-episodes)
* [Save Episodes for Current User](https://developer.spotify.com/documentation/web-api/reference/save-episodes-user)
* [Remove User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/remove-episodes-user)
* [Check User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-episodes)
* GenresGenres
Genres* [Get Available Genre Seeds](https://developer.spotify.com/documentation/web-api/reference/get-recommendation-genres)
* MarketsMarkets
Markets* [Get Available Markets](https://developer.spotify.com/documentation/web-api/reference/get-available-markets)
* PlayerPlayer
Player* [Get Playback State](https://developer.spotify.com/documentation/web-api/reference/get-information-about-the-users-current-playback)
* [Transfer Playback](https://developer.spotify.com/documentation/web-api/reference/transfer-a-users-playback)
* [Get Available Devices](https://developer.spotify.com/documentation/web-api/reference/get-a-users-available-devices)
* [Get Currently Playing Track](https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track)
* [Start/Resume Playback](https://developer.spotify.com/documentation/web-api/reference/start-a-users-playback)
* [Pause Playback](https://developer.spotify.com/documentation/web-api/reference/pause-a-users-playback)
* [Skip To Next](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-next-track)
* [Skip To Previous](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-previous-track)
* [Seek To Position](https://developer.spotify.com/documentation/web-api/reference/seek-to-position-in-currently-playing-track)
* [Set Repeat Mode](https://developer.spotify.com/documentation/web-api/reference/set-repeat-mode-on-users-playback)
* [Set Playback Volume](https://developer.spotify.com/documentation/web-api/reference/set-volume-for-users-playback)
* [Toggle Playback Shuffle](https://developer.spotify.com/documentation/web-api/reference/toggle-shuffle-for-users-playback)
* [Get Recently Played Tracks](https://developer.spotify.com/documentation/web-api/reference/get-recently-played)
* [Get the User's Queue](https://developer.spotify.com/documentation/web-api/reference/get-queue)
* [Add Item to Playback Queue](https://developer.spotify.com/documentation/web-api/reference/add-to-queue)
* PlaylistsPlaylists
Playlists* [Get Playlist](https://developer.spotify.com/documentation/web-api/reference/get-playlist)
* [Change Playlist Details](https://developer.spotify.com/documentation/web-api/reference/change-playlist-details)
* [Get Playlist Items](https://developer.spotify.com/documentation/web-api/reference/get-playlists-tracks)
* [Update Playlist Items](https://developer.spotify.com/documentation/web-api/reference/reorder-or-replace-playlists-tracks)
* [Add Items to Playlist](https://developer.spotify.com/documentation/web-api/reference/add-tracks-to-playlist)
* [Remove Playlist Items](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-playlist)
* [Get Current User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-list-of-current-users-playlists)
* [Get User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-list-users-playlists)
* [Create Playlist](https://developer.spotify.com/documentation/web-api/reference/create-playlist)
* [Get Featured Playlists](https://developer.spotify.com/documentation/web-api/reference/get-featured-playlists)
* [Get Category's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-categories-playlists)
* [Get Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/get-playlist-cover)
* [Add Custom Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/upload-custom-playlist-cover)
* SearchSearch
Search* [Search for Item](https://developer.spotify.com/documentation/web-api/reference/search)
* ShowsShows
Shows* [Get Show](https://developer.spotify.com/documentation/web-api/reference/get-a-show)
* [Get Several Shows](https://developer.spotify.com/documentation/web-api/reference/get-multiple-shows)
* [Get Show Episodes](https://developer.spotify.com/documentation/web-api/reference/get-a-shows-episodes)
* [Get User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-shows)
* [Save Shows for Current User](https://developer.spotify.com/documentation/web-api/reference/save-shows-user)
* [Remove User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/remove-shows-user)
* [Check User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-shows)
* TracksTracks
Tracks* [Get Track](https://developer.spotify.com/documentation/web-api/reference/get-track)
* [Get Several Tracks](https://developer.spotify.com/documentation/web-api/reference/get-several-tracks)
* [Get User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-tracks)
* [Save Tracks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-tracks-user)
* [Remove User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-user)
* [Check User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-tracks)
* [Get Several Tracks' Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-several-audio-features)
* [Get Track's Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-audio-features)
* [Get Track's Audio Analysis](https://developer.spotify.com/documentation/web-api/reference/get-audio-analysis)
* [Get Recommendations](https://developer.spotify.com/documentation/web-api/reference/get-recommendations)
* UsersUsers
Users* [Get Current User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-current-users-profile)
* [Get User's Top Items](https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks)
* [Get User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-users-profile)
* [Follow Playlist](https://developer.spotify.com/documentation/web-api/reference/follow-playlist)
* [Unfollow Playlist](https://developer.spotify.com/documentation/web-api/reference/unfollow-playlist)
* [Get Followed Artists](https://developer.spotify.com/documentation/web-api/reference/get-followed)
* [Follow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/follow-artists-users)
* [Unfollow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/unfollow-artists-users)
* [Check If User Follows Artists or Users](https://developer.spotify.com/documentation/web-api/reference/check-current-user-follows)
* [Check if Current User Follows Playlist](https://developer.spotify.com/documentation/web-api/reference/check-if-user-follows-playlist)
Apps
====
The app provides, among others, the _Client ID_ and _Client Secret_ needed to implement any of the authorization flows.
To do so, go to your [Dashboard](https://developer.spotify.com/dashboard)
and click on the _Create an App_ button to open the following dialog box:

Enter an _App Name_ and _App Description_ of your choice (they will be displayed to the user on the grant screen), put a tick in the _Developer Terms of Service_ checkbox and finally click on _CREATE_. Your application is now registered, and you'll be redirected to the app overview page.

The app overview page provides access to different elements:
* App metrics, such as daily and monthly active users or number of users per country. Note that the metrics are initially empty.
* App Status. By default, your app will be in _Development Mode_ with limits on the number of users who can install it, and the number of API requests it can make. Note that you can request an extension of this quota if needed by clicking on the _Request Extension_ link.
* App settings.
* Client ID, the unique identifier of your app.
* Client Secret, the key you will use to authorize your Web API or SDK calls.
Info: Always store the client secret key securely; never reveal it publicly! If you suspect that the secret key has been compromised, regenerate it immediately by clicking the _ROTATE_ button on the app overview page.
It is time to configure our app. Click on _Edit Settings_ to view and update your app settings. The following dialog will show up:

* Add a web domain or URL to the _Website_ field. This will help users to obtain more information about your application.
* In _Redirect URIs_ enter one or more addresses that you want to allowlist with Spotify. This URI enables the Spotify authentication service to automatically invoke your app every time the user logs in (e.g. [http://127.0.0.1:8080](http://127.0.0.1:8080/)
)
Note that on iOS apps, the redirect URI must follow these rules:
* All the characters are lowercase.
* The prefix _must_ be unique to your application (It cannot be a general prefix like http).
* The prefix must only be used by your application for authenticating Spotify. If you already have a URL scheme handled by your application for other uses, do not reuse it.
* Include a path after the first pair of forward slashes.
For example: If your app name is _My Awesome App_, a good candidate for the redirect URI could be `my-awesome-app-login://callback`.
* If you are developing an Android or iOS app, fill out the _Android Package_ or _Bundle IDs_ respectively.
Once you have finished updating the app settings, click on _SAVE_.
Finally, you can delete your app by clicking on the _DELETE_ red button.
---
# Getting started with Web API | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/web-api/tutorials/getting-started#main)
Web API
* [Overview](https://developer.spotify.com/documentation/web-api)
* [Getting started](https://developer.spotify.com/documentation/web-api/tutorials/getting-started)
* ConceptsConcepts
Concepts* [Access Token](https://developer.spotify.com/documentation/web-api/concepts/access-token)
* [API calls](https://developer.spotify.com/documentation/web-api/concepts/api-calls)
* [Apps](https://developer.spotify.com/documentation/web-api/concepts/apps)
* [Authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
* [Redirect URIs](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri)
* [Playlists](https://developer.spotify.com/documentation/web-api/concepts/playlists)
* [Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)
* [Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)
* [Scopes](https://developer.spotify.com/documentation/web-api/concepts/scopes)
* [Spotify URIs and IDs](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)
* [Track Relinking](https://developer.spotify.com/documentation/web-api/concepts/track-relinking)
* TutorialsTutorials
Tutorials* [Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
* [Authorization code PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
* [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
* [Implicit grant \[Deprecated\]](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
* [Refreshing tokens](https://developer.spotify.com/documentation/web-api/tutorials/refreshing-tokens)
* [Migration: Implicit grant to Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/migration-implicit-auth-code)
* [Migration: Insecure redirect URI](https://developer.spotify.com/documentation/web-api/tutorials/migration-insecure-redirect-uri)
* How-TosHow-Tos
How-Tos* [Display your Spotify profile data in a web app](https://developer.spotify.com/documentation/web-api/howtos/web-app-profile)
Reference
* AlbumsAlbums
Albums* [Get Album](https://developer.spotify.com/documentation/web-api/reference/get-an-album)
* [Get Several Albums](https://developer.spotify.com/documentation/web-api/reference/get-multiple-albums)
* [Get Album Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-albums-tracks)
* [Get User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-albums)
* [Save Albums for Current User](https://developer.spotify.com/documentation/web-api/reference/save-albums-user)
* [Remove Users' Saved Albums](https://developer.spotify.com/documentation/web-api/reference/remove-albums-user)
* [Check User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-albums)
* [Get New Releases](https://developer.spotify.com/documentation/web-api/reference/get-new-releases)
* ArtistsArtists
Artists* [Get Artist](https://developer.spotify.com/documentation/web-api/reference/get-an-artist)
* [Get Several Artists](https://developer.spotify.com/documentation/web-api/reference/get-multiple-artists)
* [Get Artist's Albums](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-albums)
* [Get Artist's Top Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-top-tracks)
* [Get Artist's Related Artists](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-related-artists)
* AudiobooksAudiobooks
Audiobooks* [Get an Audiobook](https://developer.spotify.com/documentation/web-api/reference/get-an-audiobook)
* [Get Several Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-multiple-audiobooks)
* [Get Audiobook Chapters](https://developer.spotify.com/documentation/web-api/reference/get-audiobook-chapters)
* [Get User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-audiobooks)
* [Save Audiobooks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-audiobooks-user)
* [Remove User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/remove-audiobooks-user)
* [Check User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-audiobooks)
* CategoriesCategories
Categories* [Get Several Browse Categories](https://developer.spotify.com/documentation/web-api/reference/get-categories)
* [Get Single Browse Category](https://developer.spotify.com/documentation/web-api/reference/get-a-category)
* ChaptersChapters
Chapters* [Get a Chapter](https://developer.spotify.com/documentation/web-api/reference/get-a-chapter)
* [Get Several Chapters](https://developer.spotify.com/documentation/web-api/reference/get-several-chapters)
* EpisodesEpisodes
Episodes* [Get Episode](https://developer.spotify.com/documentation/web-api/reference/get-an-episode)
* [Get Several Episodes](https://developer.spotify.com/documentation/web-api/reference/get-multiple-episodes)
* [Get User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-episodes)
* [Save Episodes for Current User](https://developer.spotify.com/documentation/web-api/reference/save-episodes-user)
* [Remove User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/remove-episodes-user)
* [Check User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-episodes)
* GenresGenres
Genres* [Get Available Genre Seeds](https://developer.spotify.com/documentation/web-api/reference/get-recommendation-genres)
* MarketsMarkets
Markets* [Get Available Markets](https://developer.spotify.com/documentation/web-api/reference/get-available-markets)
* PlayerPlayer
Player* [Get Playback State](https://developer.spotify.com/documentation/web-api/reference/get-information-about-the-users-current-playback)
* [Transfer Playback](https://developer.spotify.com/documentation/web-api/reference/transfer-a-users-playback)
* [Get Available Devices](https://developer.spotify.com/documentation/web-api/reference/get-a-users-available-devices)
* [Get Currently Playing Track](https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track)
* [Start/Resume Playback](https://developer.spotify.com/documentation/web-api/reference/start-a-users-playback)
* [Pause Playback](https://developer.spotify.com/documentation/web-api/reference/pause-a-users-playback)
* [Skip To Next](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-next-track)
* [Skip To Previous](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-previous-track)
* [Seek To Position](https://developer.spotify.com/documentation/web-api/reference/seek-to-position-in-currently-playing-track)
* [Set Repeat Mode](https://developer.spotify.com/documentation/web-api/reference/set-repeat-mode-on-users-playback)
* [Set Playback Volume](https://developer.spotify.com/documentation/web-api/reference/set-volume-for-users-playback)
* [Toggle Playback Shuffle](https://developer.spotify.com/documentation/web-api/reference/toggle-shuffle-for-users-playback)
* [Get Recently Played Tracks](https://developer.spotify.com/documentation/web-api/reference/get-recently-played)
* [Get the User's Queue](https://developer.spotify.com/documentation/web-api/reference/get-queue)
* [Add Item to Playback Queue](https://developer.spotify.com/documentation/web-api/reference/add-to-queue)
* PlaylistsPlaylists
Playlists* [Get Playlist](https://developer.spotify.com/documentation/web-api/reference/get-playlist)
* [Change Playlist Details](https://developer.spotify.com/documentation/web-api/reference/change-playlist-details)
* [Get Playlist Items](https://developer.spotify.com/documentation/web-api/reference/get-playlists-tracks)
* [Update Playlist Items](https://developer.spotify.com/documentation/web-api/reference/reorder-or-replace-playlists-tracks)
* [Add Items to Playlist](https://developer.spotify.com/documentation/web-api/reference/add-tracks-to-playlist)
* [Remove Playlist Items](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-playlist)
* [Get Current User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-list-of-current-users-playlists)
* [Get User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-list-users-playlists)
* [Create Playlist](https://developer.spotify.com/documentation/web-api/reference/create-playlist)
* [Get Featured Playlists](https://developer.spotify.com/documentation/web-api/reference/get-featured-playlists)
* [Get Category's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-categories-playlists)
* [Get Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/get-playlist-cover)
* [Add Custom Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/upload-custom-playlist-cover)
* SearchSearch
Search* [Search for Item](https://developer.spotify.com/documentation/web-api/reference/search)
* ShowsShows
Shows* [Get Show](https://developer.spotify.com/documentation/web-api/reference/get-a-show)
* [Get Several Shows](https://developer.spotify.com/documentation/web-api/reference/get-multiple-shows)
* [Get Show Episodes](https://developer.spotify.com/documentation/web-api/reference/get-a-shows-episodes)
* [Get User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-shows)
* [Save Shows for Current User](https://developer.spotify.com/documentation/web-api/reference/save-shows-user)
* [Remove User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/remove-shows-user)
* [Check User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-shows)
* TracksTracks
Tracks* [Get Track](https://developer.spotify.com/documentation/web-api/reference/get-track)
* [Get Several Tracks](https://developer.spotify.com/documentation/web-api/reference/get-several-tracks)
* [Get User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-tracks)
* [Save Tracks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-tracks-user)
* [Remove User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-user)
* [Check User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-tracks)
* [Get Several Tracks' Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-several-audio-features)
* [Get Track's Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-audio-features)
* [Get Track's Audio Analysis](https://developer.spotify.com/documentation/web-api/reference/get-audio-analysis)
* [Get Recommendations](https://developer.spotify.com/documentation/web-api/reference/get-recommendations)
* UsersUsers
Users* [Get Current User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-current-users-profile)
* [Get User's Top Items](https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks)
* [Get User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-users-profile)
* [Follow Playlist](https://developer.spotify.com/documentation/web-api/reference/follow-playlist)
* [Unfollow Playlist](https://developer.spotify.com/documentation/web-api/reference/unfollow-playlist)
* [Get Followed Artists](https://developer.spotify.com/documentation/web-api/reference/get-followed)
* [Follow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/follow-artists-users)
* [Unfollow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/unfollow-artists-users)
* [Check If User Follows Artists or Users](https://developer.spotify.com/documentation/web-api/reference/check-current-user-follows)
* [Check if Current User Follows Playlist](https://developer.spotify.com/documentation/web-api/reference/check-if-user-follows-playlist)
Getting started with Web API
============================
This tutorial will help you to make your first Web API call by retriving an artist's metadata. The steps to do so are the following:
1. [Create an app](https://developer.spotify.com/documentation/web-api/tutorials/getting-started#create-an-app)
, if you haven't done so.
2. [Request an access token](https://developer.spotify.com/documentation/web-api/tutorials/getting-started#request-an-access-token)
.
3. Use the access token to [request the artist data](https://developer.spotify.com/documentation/web-api/tutorials/getting-started#request-artist-data)
.
Here we go, let's rock & roll!
Prerequisites
-------------
* This tutorial assumes you have a Spotify account (free or premium).
* We will use `cURL` to make API calls. You can install it from [here](https://curl.se/download.html)
our using the package manager of your choice.
Set Up Your Account
-------------------
Login to the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard)
. If necessary, read the latest [Developer Terms of Service](https://developer.spotify.com/terms)
to complete your account set up.
Create an app
-------------
An app provides the _Client ID_ and _Client Secret_ needed to request an _access token_ by implementing any of the [authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
flows.
To create an app, go to [your Dashboard](https://developer.spotify.com/dashboard)
, click on the _Create an app_ button and enter the following information:
* App Name: _My App_
* App Description: _This is my first Spotify app_
* Redirect URI: You won't need this parameter in this example, so let's use `http://127.0.0.1:3000`.
Finally, check the _Developer Terms of Service_ checkbox and tap on the _Create_ button.
Request an access token
-----------------------
The _access token_ is a string which contains the credentials and permissions that can be used to access a given resource (e.g artists, albums or tracks) or user's data (e.g your profile or your playlists).
In order to request the _access token_ you need to get your _Client\_ID_ and _Client Secret_:
1. Go to the [Dashboard](https://developer.spotify.com/dashboard)
2. Click on the name of the app you have just created (`My App`)
3. Click on the _Settings_ button
The _Client ID_ can be found here. The _Client Secret_ can be found behind the _View client secret_ link.
With our credentials in hand, we are ready to request an access token. This tutorial uses the [Client Credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
, so we must:
* Send a POST request to the token endpoint URI.
* Add the `Content-Type` header set to the `application/x-www-form-urlencoded` value.
* Add a HTTP body containing the _Client ID_ and _Client Secret_, along with the `grant_type` parameter set to `client_credentials`.
` _10 curl -X POST "https://accounts.spotify.com/api/token" \ _10 -H "Content-Type: application/x-www-form-urlencoded" \ _10 -d "grant_type=client_credentials&client_id=your-client-id&client_secret=your-client-secret" `
The response will return an _access token_ valid for 1 hour:
` _10 { _10 "access_token": "BQDBKJ5eo5jxbtpWjVOj7ryS84khybFpP_lTqzV7uV-T_m0cTfwvdn5BnBSKPxKgEb11", _10 "token_type": "Bearer", _10 "expires_in": 3600 _10 } `
Request artist data
-------------------
For this example, we will use the [Get Artist](https://developer.spotify.com/documentation/web-api/reference/get-an-artist)
endpoint to request information about an artist. According to the API Reference, the endpoint needs the [Spotify ID](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)
of the artist.
An easy way to get the Spotify ID of an artist is using the Spotify Desktop App:
1. Search the artist
2. Click on the three dots icon from the artist profile
3. Select _Share > Copy link to artist_. The Spotify ID is the value that comes right after the `open.spotify.com/artist` URI.
Our API call must include the _access token_ we have just generated using the `Authorization` header as follows:
` _10 curl "https://api.spotify.com/v1/artists/4Z8W4fKeB5YxbusRsdQVPb" \ _10 -H "Authorization: Bearer BQDBKJ5eo5jxbtpWjVOj7ryS84khybFpP_lTqzV7uV-T_m0cTfwvdn5BnBSKPxKgEb11" `
If everything goes well, the API will return the following JSON response:
` _40 { _40 "external_urls": { _40 "spotify": "https://open.spotify.com/artist/4Z8W4fKeB5YxbusRsdQVPb" _40 }, _40 "followers": { _40 "href": null, _40 "total": 7625607 _40 }, _40 "genres": [ _40 "alternative rock", _40 "art rock", _40 "melancholia", _40 "oxford indie", _40 "permanent wave", _40 "rock" _40 ], _40 "href": "https://api.spotify.com/v1/artists/4Z8W4fKeB5YxbusRsdQVPb", _40 "id": "4Z8W4fKeB5YxbusRsdQVPb", _40 "images": [ _40 { _40 "height": 640, _40 "url": "https://i.scdn.co/image/ab6761610000e5eba03696716c9ee605006047fd", _40 "width": 640 _40 }, _40 { _40 "height": 320, _40 "url": "https://i.scdn.co/image/ab67616100005174a03696716c9ee605006047fd", _40 "width": 320 _40 }, _40 { _40 "height": 160, _40 "url": "https://i.scdn.co/image/ab6761610000f178a03696716c9ee605006047fd", _40 "width": 160 _40 } _40 ], _40 "name": "Radiohead", _40 "popularity": 79, _40 "type": "artist", _40 "uri": "spotify:artist:4Z8W4fKeB5YxbusRsdQVPb" _40 } `
Congratulations! You made your first API call to the Spotify Web API.
Summary
-------
* The Spotify Web API provides different endpoints depending on the data we want to access. The API calls must include the `Authorization` header along with a valid access token.
* This tutorial makes use of the [client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
grant type to retrieve the access token. That works fine in scenarios where you control the API call to Spotify, for example where your backend is connecting to the Web API. It will not work in cases where your app will connect on behalf of a specific user, for example when getting private playlist or profile data.
What's next?
------------
* The tutorial used the Spotify Desktop App to retrieve the Spotify ID of the artist. The ID can also be retrieved using the [Search endpoint](https://developer.spotify.com/documentation/web-api/reference/search)
. An interesting exercise would be to extend the example with a new API call to the `/search` endpoint. Do you accept the challenge?
* The [authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
guide provides detailed information about which authorization flow suits you best. Make sure you read it first!
* You can continue your journey by reading the [API calls](https://developer.spotify.com/documentation/web-api/concepts/api-calls)
guide which describes in detail the Web API request and responses.
* Finally, if you are looking for a more practical documentation, you can follow the [Display your Spotify Profile Data in a Web App](https://developer.spotify.com/documentation/web-api/howtos/web-app-profile)
how-to which implements a step-by-step web application using [authorization code flow](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
to request the _access token_.
---
# Access Token | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/web-api/concepts/access-token#main)
Web API
* [Overview](https://developer.spotify.com/documentation/web-api)
* [Getting started](https://developer.spotify.com/documentation/web-api/tutorials/getting-started)
* ConceptsConcepts
Concepts* [Access Token](https://developer.spotify.com/documentation/web-api/concepts/access-token)
* [API calls](https://developer.spotify.com/documentation/web-api/concepts/api-calls)
* [Apps](https://developer.spotify.com/documentation/web-api/concepts/apps)
* [Authorization](https://developer.spotify.com/documentation/web-api/concepts/authorization)
* [Redirect URIs](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri)
* [Playlists](https://developer.spotify.com/documentation/web-api/concepts/playlists)
* [Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)
* [Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)
* [Scopes](https://developer.spotify.com/documentation/web-api/concepts/scopes)
* [Spotify URIs and IDs](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)
* [Track Relinking](https://developer.spotify.com/documentation/web-api/concepts/track-relinking)
* TutorialsTutorials
Tutorials* [Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/code-flow)
* [Authorization code PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
* [Client credentials](https://developer.spotify.com/documentation/web-api/tutorials/client-credentials-flow)
* [Implicit grant \[Deprecated\]](https://developer.spotify.com/documentation/web-api/tutorials/implicit-flow)
* [Refreshing tokens](https://developer.spotify.com/documentation/web-api/tutorials/refreshing-tokens)
* [Migration: Implicit grant to Authorization code](https://developer.spotify.com/documentation/web-api/tutorials/migration-implicit-auth-code)
* [Migration: Insecure redirect URI](https://developer.spotify.com/documentation/web-api/tutorials/migration-insecure-redirect-uri)
* How-TosHow-Tos
How-Tos* [Display your Spotify profile data in a web app](https://developer.spotify.com/documentation/web-api/howtos/web-app-profile)
Reference
* AlbumsAlbums
Albums* [Get Album](https://developer.spotify.com/documentation/web-api/reference/get-an-album)
* [Get Several Albums](https://developer.spotify.com/documentation/web-api/reference/get-multiple-albums)
* [Get Album Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-albums-tracks)
* [Get User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-albums)
* [Save Albums for Current User](https://developer.spotify.com/documentation/web-api/reference/save-albums-user)
* [Remove Users' Saved Albums](https://developer.spotify.com/documentation/web-api/reference/remove-albums-user)
* [Check User's Saved Albums](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-albums)
* [Get New Releases](https://developer.spotify.com/documentation/web-api/reference/get-new-releases)
* ArtistsArtists
Artists* [Get Artist](https://developer.spotify.com/documentation/web-api/reference/get-an-artist)
* [Get Several Artists](https://developer.spotify.com/documentation/web-api/reference/get-multiple-artists)
* [Get Artist's Albums](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-albums)
* [Get Artist's Top Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-top-tracks)
* [Get Artist's Related Artists](https://developer.spotify.com/documentation/web-api/reference/get-an-artists-related-artists)
* AudiobooksAudiobooks
Audiobooks* [Get an Audiobook](https://developer.spotify.com/documentation/web-api/reference/get-an-audiobook)
* [Get Several Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-multiple-audiobooks)
* [Get Audiobook Chapters](https://developer.spotify.com/documentation/web-api/reference/get-audiobook-chapters)
* [Get User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-audiobooks)
* [Save Audiobooks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-audiobooks-user)
* [Remove User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/remove-audiobooks-user)
* [Check User's Saved Audiobooks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-audiobooks)
* CategoriesCategories
Categories* [Get Several Browse Categories](https://developer.spotify.com/documentation/web-api/reference/get-categories)
* [Get Single Browse Category](https://developer.spotify.com/documentation/web-api/reference/get-a-category)
* ChaptersChapters
Chapters* [Get a Chapter](https://developer.spotify.com/documentation/web-api/reference/get-a-chapter)
* [Get Several Chapters](https://developer.spotify.com/documentation/web-api/reference/get-several-chapters)
* EpisodesEpisodes
Episodes* [Get Episode](https://developer.spotify.com/documentation/web-api/reference/get-an-episode)
* [Get Several Episodes](https://developer.spotify.com/documentation/web-api/reference/get-multiple-episodes)
* [Get User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-episodes)
* [Save Episodes for Current User](https://developer.spotify.com/documentation/web-api/reference/save-episodes-user)
* [Remove User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/remove-episodes-user)
* [Check User's Saved Episodes](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-episodes)
* GenresGenres
Genres* [Get Available Genre Seeds](https://developer.spotify.com/documentation/web-api/reference/get-recommendation-genres)
* MarketsMarkets
Markets* [Get Available Markets](https://developer.spotify.com/documentation/web-api/reference/get-available-markets)
* PlayerPlayer
Player* [Get Playback State](https://developer.spotify.com/documentation/web-api/reference/get-information-about-the-users-current-playback)
* [Transfer Playback](https://developer.spotify.com/documentation/web-api/reference/transfer-a-users-playback)
* [Get Available Devices](https://developer.spotify.com/documentation/web-api/reference/get-a-users-available-devices)
* [Get Currently Playing Track](https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track)
* [Start/Resume Playback](https://developer.spotify.com/documentation/web-api/reference/start-a-users-playback)
* [Pause Playback](https://developer.spotify.com/documentation/web-api/reference/pause-a-users-playback)
* [Skip To Next](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-next-track)
* [Skip To Previous](https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-previous-track)
* [Seek To Position](https://developer.spotify.com/documentation/web-api/reference/seek-to-position-in-currently-playing-track)
* [Set Repeat Mode](https://developer.spotify.com/documentation/web-api/reference/set-repeat-mode-on-users-playback)
* [Set Playback Volume](https://developer.spotify.com/documentation/web-api/reference/set-volume-for-users-playback)
* [Toggle Playback Shuffle](https://developer.spotify.com/documentation/web-api/reference/toggle-shuffle-for-users-playback)
* [Get Recently Played Tracks](https://developer.spotify.com/documentation/web-api/reference/get-recently-played)
* [Get the User's Queue](https://developer.spotify.com/documentation/web-api/reference/get-queue)
* [Add Item to Playback Queue](https://developer.spotify.com/documentation/web-api/reference/add-to-queue)
* PlaylistsPlaylists
Playlists* [Get Playlist](https://developer.spotify.com/documentation/web-api/reference/get-playlist)
* [Change Playlist Details](https://developer.spotify.com/documentation/web-api/reference/change-playlist-details)
* [Get Playlist Items](https://developer.spotify.com/documentation/web-api/reference/get-playlists-tracks)
* [Update Playlist Items](https://developer.spotify.com/documentation/web-api/reference/reorder-or-replace-playlists-tracks)
* [Add Items to Playlist](https://developer.spotify.com/documentation/web-api/reference/add-tracks-to-playlist)
* [Remove Playlist Items](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-playlist)
* [Get Current User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-list-of-current-users-playlists)
* [Get User's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-list-users-playlists)
* [Create Playlist](https://developer.spotify.com/documentation/web-api/reference/create-playlist)
* [Get Featured Playlists](https://developer.spotify.com/documentation/web-api/reference/get-featured-playlists)
* [Get Category's Playlists](https://developer.spotify.com/documentation/web-api/reference/get-a-categories-playlists)
* [Get Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/get-playlist-cover)
* [Add Custom Playlist Cover Image](https://developer.spotify.com/documentation/web-api/reference/upload-custom-playlist-cover)
* SearchSearch
Search* [Search for Item](https://developer.spotify.com/documentation/web-api/reference/search)
* ShowsShows
Shows* [Get Show](https://developer.spotify.com/documentation/web-api/reference/get-a-show)
* [Get Several Shows](https://developer.spotify.com/documentation/web-api/reference/get-multiple-shows)
* [Get Show Episodes](https://developer.spotify.com/documentation/web-api/reference/get-a-shows-episodes)
* [Get User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-shows)
* [Save Shows for Current User](https://developer.spotify.com/documentation/web-api/reference/save-shows-user)
* [Remove User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/remove-shows-user)
* [Check User's Saved Shows](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-shows)
* TracksTracks
Tracks* [Get Track](https://developer.spotify.com/documentation/web-api/reference/get-track)
* [Get Several Tracks](https://developer.spotify.com/documentation/web-api/reference/get-several-tracks)
* [Get User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/get-users-saved-tracks)
* [Save Tracks for Current User](https://developer.spotify.com/documentation/web-api/reference/save-tracks-user)
* [Remove User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/remove-tracks-user)
* [Check User's Saved Tracks](https://developer.spotify.com/documentation/web-api/reference/check-users-saved-tracks)
* [Get Several Tracks' Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-several-audio-features)
* [Get Track's Audio Features](https://developer.spotify.com/documentation/web-api/reference/get-audio-features)
* [Get Track's Audio Analysis](https://developer.spotify.com/documentation/web-api/reference/get-audio-analysis)
* [Get Recommendations](https://developer.spotify.com/documentation/web-api/reference/get-recommendations)
* UsersUsers
Users* [Get Current User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-current-users-profile)
* [Get User's Top Items](https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks)
* [Get User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-users-profile)
* [Follow Playlist](https://developer.spotify.com/documentation/web-api/reference/follow-playlist)
* [Unfollow Playlist](https://developer.spotify.com/documentation/web-api/reference/unfollow-playlist)
* [Get Followed Artists](https://developer.spotify.com/documentation/web-api/reference/get-followed)
* [Follow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/follow-artists-users)
* [Unfollow Artists or Users](https://developer.spotify.com/documentation/web-api/reference/unfollow-artists-users)
* [Check If User Follows Artists or Users](https://developer.spotify.com/documentation/web-api/reference/check-current-user-follows)
* [Check if Current User Follows Playlist](https://developer.spotify.com/documentation/web-api/reference/check-if-user-follows-playlist)
Access Token
============
The _access token_ is a string which contains the credentials and permissions that can be used to access a given resource (e.g artists, albums or tracks) or user's data (e.g your profile or your playlists).
To use the _access token_ you must include the following header in your API calls:
| Header Parameter | Value |
| --- | --- |
| Authorization | Valid access token following the format: `Bearer ` |
Note that the _access token_ is valid for 1 hour (3600 seconds). After that time, the token expires and you need to request a new one.
Examples
--------
The following example uses `cURL` to retrieve information about a track using the [Get a track](https://developer.spotify.com/documentation/web-api/reference/get-track)
endpoint:
` _10 curl --request GET \ _10 'https://api.spotify.com/v1/tracks/2TpxZ7JUBn3uw46aR7qd6V' \ _10 --header "Authorization: Bearer NgCXRK...MzYjw" `
The following code implements the `getProfile()` function which performs the API call to the [Get Current User's Profile](https://developer.spotify.com/documentation/web-api/reference/get-current-users-profile)
endpoint to retrieve the user profile related information:
` _11 async function getProfile(accessToken) { _11 let accessToken = localStorage.getItem('access_token'); _11 _11 const response = await fetch('https://api.spotify.com/v1/me', { _11 headers: { _11 Authorization: 'Bearer ' + accessToken _11 } _11 }); _11 _11 const data = await response.json(); _11 } `
---
# Commercial Hardware | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/commercial-hardware#main)
Commercial Hardware
* [Overview](https://developer.spotify.com/documentation/commercial-hardware)
Onboarding* [Onboarding](https://developer.spotify.com/documentation/commercial-hardware/onboarding)
Implementation
* [Introduction](https://developer.spotify.com/documentation/commercial-hardware/implementation)
* [Getting Started](https://developer.spotify.com/documentation/commercial-hardware/implementation/get-started)
* RequirementsRequirements
Requirements* [Companion App](https://developer.spotify.com/documentation/commercial-hardware/implementation/requirements/companion-app)
* [Smart Display](https://developer.spotify.com/documentation/commercial-hardware/implementation/requirements/smart-display)
* [Speaker with Display](https://developer.spotify.com/documentation/commercial-hardware/implementation/requirements/speaker-display)
* [Speaker with Voice](https://developer.spotify.com/documentation/commercial-hardware/implementation/requirements/speaker-voice)
* [Technical Requirements](https://developer.spotify.com/documentation/commercial-hardware/implementation/requirements/technical)
* GuidesGuides
Guides* [Spotify Connect Basics](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/connect-basics)
* [The Event Loop](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/event-loop)
* [Connecting Hardware Buttons](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/hardware-buttons)
* [HTTPs Support](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/https-support)
* [eSDK Initialization](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/initialization)
* [Media Delivery API](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/media-delivery)
* [Threading](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/threading)
* [ZeroConf API](https://developer.spotify.com/documentation/commercial-hardware/implementation/guides/zeroconf)
* API ReferenceAPI Reference
API Reference* [latest](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/latest)
* [3.202](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.202)
* [3.201](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.201)
* [3.200](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.200)
* [3.199](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.199)
* [3.198](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.198)
* [3.194](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.194)
* [3.192](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.192)
* [3.191](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.191)
* [3.189](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.189)
* [3.188](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.188)
* [3.184](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.184)
* [3.183](https://developer.spotify.com/documentation/commercial-hardware/implementation/reference/3.183)
* FAQs[FAQs](https://developer.spotify.com/documentation/commercial-hardware/implementation/faqs)
FAQs* [General](https://developer.spotify.com/documentation/commercial-hardware/implementation/faqs#general)
* [Amazon Alexa](https://developer.spotify.com/documentation/commercial-hardware/implementation/faqs#amazon-alexa)
* [Standby Power Off](https://developer.spotify.com/documentation/commercial-hardware/implementation/faqs#standby-power-off)
* [Zeroconf](https://developer.spotify.com/documentation/commercial-hardware/implementation/faqs#zeroconf)
* [Media Delivery API](https://developer.spotify.com/documentation/commercial-hardware/implementation/faqs#media-delivery-api)
* [Changelog](https://developer.spotify.com/documentation/commercial-hardware/implementation/changelog)
Launch
* [Getting started](https://developer.spotify.com/documentation/commercial-hardware/launch)
* [Distribution](https://developer.spotify.com/documentation/commercial-hardware/launch/distribution)
* [Marketing messaging](https://developer.spotify.com/documentation/commercial-hardware/launch/marketing)
* Distribution requirements[Distribution requirements](https://developer.spotify.com/documentation/commercial-hardware/launch/requirements)
Distribution requirements* [Box requirements](https://developer.spotify.com/documentation/commercial-hardware/launch/requirements#box-requirements)
* [User manual requirements](https://developer.spotify.com/documentation/commercial-hardware/launch/requirements#user-manual-requirements)
* [Stickers requirements](https://developer.spotify.com/documentation/commercial-hardware/launch/requirements#stickers-requirements)
* [Updates and support](https://developer.spotify.com/documentation/commercial-hardware/launch/support)
* [FAQs](https://developer.spotify.com/documentation/commercial-hardware/launch/faqs)
When a Wi-Fi speaker is integrated with Spotify's Embedded Software Development Kit (eSDK), listeners can use the Spotify app like a remote to choose a device and play their content, seamlessly.
Info:
Commercial Hardware tools and the eSDK are available only for approved partners

Spotify provides the SDK and tools for hardware integration in smart speakers, AV receivers or compatible devices to listen anywhere with Spotify Connect.
Spotify also enables integration with digital voice assistant like Siri and Alexa.

Here's how to integrate Spotify's SDK with commercial hardware:
Before you start
----------------
Please note that at this time, Spotify currently accepts applications only from organizations (not individuals). Check out the [implementation](https://developer.spotify.com/documentation/commercial-hardware/implementation)
requirements to make sure your hardware is compatible before you submit an application.
The whole certification process, from onboarding to the final launch, will depend whether you use a **Systems Integrator** or not: A Systems Integrator is a company that supports you and your integration with turnkey solutions, hardware modules, software, and other services that help device makers seamlessly integrate Spotify Connect.
[Step 1: Onboarding](https://developer.spotify.com/documentation/commercial-hardware/onboarding)
-------------------------------------------------------------------------------------------------
### If you use a Systems Integrator
Info:
If you use a Systems Integrator, they will help you with the implementation and launch steps described below, please reach out directly to the Systems Integrator to proceed.
The Systems Integrators take care of implementation and most of the steps in the process to get your product launch ready with Spotify Connect. Please check with your Systems Integrator to find out exactly which steps will be done by them. In any case, there are two steps that you have to do to get started:
* Apply to Spotify by submitting a [Hardware Partner Application form](https://docs.google.com/forms/d/e/1FAIpQLScs6PAlLoLNzmZxyFEdGIeRdLZ3yAx5WZCh7Qc9jdvonk1pKw/viewform)
.
* After approval, sign the eSDK and non-disclosure agreements. This enables your Systems Integrator to start working with you on the implementation.
### If you don't use a Systems Integrator
Info:
Spotify only accepts **new** applications if you want to integrate a digital voice assistant such as Amazon Alexa or Google assistance on your Spotify Connect enabled device.
Submit a [Hardware Partner Application](https://docs.google.com/forms/d/e/1FAIpQLScs6PAlLoLNzmZxyFEdGIeRdLZ3yAx5WZCh7Qc9jdvonk1pKw/viewform)
. This will help Spotify understand your company and what kind of product you are thinking of building.
After approval, sign the eSDK and non-disclosure agreements to request an eSDK build. This enables you to use Spotify’s tools and start building your product.
[Step 2: Implementation](https://developer.spotify.com/documentation/commercial-hardware/implementation)
---------------------------------------------------------------------------------------------------------
[Certomato](https://certomato.spotify.com/)
acts as Spotify’s helping hand when developing your Spotify Connect enabled product. Spotify distributes the SDK build with Certomato, letting you test and certify products from a single tool. It also serves as a reliable environment for developing and submitting your product based on our latest requirements.
Please ensure you follow the [minimum distribution requirements](https://developer.spotify.com/documentation/commercial-hardware/launch/requirements)
for approved Spotify Connect partners.
[Step 3: Launch](https://developer.spotify.com/documentation/commercial-hardware/launch)
-----------------------------------------------------------------------------------------
When your hardware product is ready, submit your certification in Certomato and send Spotify two test devices. After Spotify has tested your device, you’ll receive a certification approval and a distribution agreement which will need your signature. Now you product is ready to launch!
Once your product is officially launched, it will appear on [Explore Spotify](https://explore.spotify.com/)
.
---
# Ads API | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/ads-api#main)
Ads API
* Introduction[Introduction](https://developer.spotify.com/documentation/ads-api)
Introduction* [About](https://developer.spotify.com/documentation/ads-api#about)
* * [Next Steps](https://developer.spotify.com/documentation/ads-api#next-steps)
* [Support](https://developer.spotify.com/documentation/ads-api#support)
* [Subscribe to Newsletter](https://developer.spotify.com/documentation/ads-api#subscribe-to-newsletter)
* [API Design](https://developer.spotify.com/documentation/ads-api#api-design)
* * [Rate Limiting](https://developer.spotify.com/documentation/ads-api#rate-limiting)
* [Breaking v. Non-Breaking Changes Policy](https://developer.spotify.com/documentation/ads-api#breaking-v-non-breaking-changes-policy)
* [Versioning](https://developer.spotify.com/documentation/ads-api#versioning)
* [Time format](https://developer.spotify.com/documentation/ads-api#time-format)
* [Pagination](https://developer.spotify.com/documentation/ads-api#pagination)
* [Release Notes](https://developer.spotify.com/documentation/ads-api#release-notes)
* Quickstart[Quickstart](https://developer.spotify.com/documentation/ads-api/quick-start)
Quickstart* [Account Prerequisites](https://developer.spotify.com/documentation/ads-api/quick-start#account-prerequisites)
* [Initialize your new Ads API application](https://developer.spotify.com/documentation/ads-api/quick-start#initialize-your-new-ads-api-application)
* [Authenticate your Ad Studio account](https://developer.spotify.com/documentation/ads-api/quick-start#authenticate-your-ad-studio-account)
* [Using the refresh token](https://developer.spotify.com/documentation/ads-api/quick-start#using-the-refresh-token)
* Guides[Guides](https://developer.spotify.com/documentation/ads-api/guides)
Guides* [Object hierarchy](https://developer.spotify.com/documentation/ads-api/guides#object-hierarchy)
* * [Ad Accounts](https://developer.spotify.com/documentation/ads-api/guides#ad-accounts)
* [Advertisers](https://developer.spotify.com/documentation/ads-api/guides#advertisers)
* [Campaigns](https://developer.spotify.com/documentation/ads-api/guides#campaigns)
* [Ad Sets](https://developer.spotify.com/documentation/ads-api/guides#ad-sets)
* [Ads](https://developer.spotify.com/documentation/ads-api/guides#ads)
* [Assets](https://developer.spotify.com/documentation/ads-api/guides#assets)
* [Campaign Management](https://developer.spotify.com/documentation/ads-api/guides#campaign-management)
* * [Overview](https://developer.spotify.com/documentation/ads-api/guides#overview)
* [Eligibility Criteria](https://developer.spotify.com/documentation/ads-api/guides#eligibility-criteria)
* [Differences from the UI](https://developer.spotify.com/documentation/ads-api/guides#differences-from-the-ui)
* [Build a Campaign](https://developer.spotify.com/documentation/ads-api/guides#build-a-campaign)
* [Reporting](https://developer.spotify.com/documentation/ads-api/guides#reporting)
* * [Overview](https://developer.spotify.com/documentation/ads-api/guides#overview-1)
* [Eligibility Criteria](https://developer.spotify.com/documentation/ads-api/guides#eligibility-criteria-1)
* [Differences from the UI (Reporting)](https://developer.spotify.com/documentation/ads-api/guides#differences-from-the-ui-reporting)
* [Metrics Glossary](https://developer.spotify.com/documentation/ads-api/guides#metrics-glossary)
* * [Campaign Performance Metrics](https://developer.spotify.com/documentation/ads-api/guides#campaign-performance-metrics)
* [Streaming Conversion Metrics](https://developer.spotify.com/documentation/ads-api/guides#streaming-conversion-metrics)
* [Pixel Metrics](https://developer.spotify.com/documentation/ads-api/guides#pixel-metrics)
* [App Conversion Metrics](https://developer.spotify.com/documentation/ads-api/guides#app-conversion-metrics)
Reference* [General info](https://developer.spotify.com/documentation/ads-api/reference/v3.0/info)
* ad-accountsad-accounts
ad-accounts* [Get Ad Account by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdAccount)
* [Update Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateAdAccount)
* [Get Ad Accounts for Current User by Business ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdAccountsInBusiness)
* [Create Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdAccountForBusiness)
* ad-categoriesad-categories
ad-categories* [Get Ad Categories](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdCategories)
* ad-setsad-sets
ad-sets* [Get Ad Set by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdSetById)
* [Update Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateAdSet)
* [Get Ad Sets by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdSetsByAdAccountId)
* [Create an Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdSet)
* adsads
ads* [Get Ads by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAds)
* [Create an Ad](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAd)
* [Get Ad by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAd)
* [Update an Ad](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateAd)
* assetsassets
assets* [Get Assets by Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAssetsByAdAccount)
* [Create Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAsset)
* [Get Asset by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAsset)
* [Update Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateAsset)
* [Upload Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/uploadAsset)
* [Start Upload Chunked Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/startUploadChunkedAsset)
* [Transfer Chunked Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/transferChunkedAsset)
* [Complete Upload Chunked Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/completeUploadChunkedAsset)
* audiencesaudiences
audiences* [List Audiences accessible to an Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/batchGetAudiences)
* [Create an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAudience)
* [Get an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAudience)
* [Delete an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/deleteAudience)
* [Edit an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/editAudience)
* [Get Signed GCS upload URL to upload a user list file](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createUploadUrl)
* [Get Signed GCS upload URL to upload a user list file for an existing audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/replaceUploadUrl)
* businessesbusinesses
businesses* [Get Businesses for Current User](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getBusinesses)
* [Create Business](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createBusiness)
* [Get Business by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getBusiness)
* [Update Business](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateBusiness)
* campaignscampaigns
campaigns* [Get Campaigns by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getCampaigns)
* [Create a Campaign](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createCampaign)
* [Get Campaign by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getCampaign)
* [Update a Campaign](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateCampaign)
* estimatesestimates
estimates* [Estimate audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateAudience)
* [Estimate bid](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateBid)
* podcast-showspodcast-shows
podcast-shows* [Get Podcast Shows](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getPodcastShows)
* reportsreports
reports* [Get Aggregate Report by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAggregateReport)
* [Get Insight Report by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAudienceInsightReport)
* [Create a CSV Report Asynchronously](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAsyncReport)
* [Get CSV Report Status by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAsyncReport)
* targetstargets
targets* [Get Artist Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getArtistTargets)
* [Get Genre Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getGenreTargets)
* [Get Geo Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getGeoTargets)
* [Get Interest Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getInterestTargets)
* [Get Language Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getLanguageTargets)
* [Get Playlist Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getPlaylistTargets)
* [Get Podcast Episode Topic Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getEpisodeTopicTargets)
* [Get Sensitive Topic Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getSensitiveTopicTargets)
Ads API
=======
About
-----
The Spotify Ads API lets you build, manage, and report on [Ads Manager](https://adsmanager.spotify.com/)
campaigns. This guide can help you get started. Topics include:
* Getting started requirements and instructions
* An Ads Manager overview
* Descriptions of available endpoints
* Help and support information
### Next steps
If you're not sure what to do now, try these recommendations:
* New to the Ads API? See the [Quickstart](https://developer.spotify.com/documentation/ads-api/quick-start)
section. It provides instructions about how to set up an account to work with our API.
* Already using the Ads API? Great! Check the [Release Notes section](https://developer.spotify.com/documentation/ads-api#release-notes)
for information on the latest changes, or browse the available methods below.
### Support
To report a bug or ask questions about this service, contact the Ads API team at [ads-api-support@spotify.com](mailto:ads-api-support@spotify.com)
. NOTE: Please be sure to include info such as your client ID and a copy of the request and response (including the sp\_trace\_id) if relevant.
### Subscribe to Newsletter
Sign up for our monthly Ads API newsletter [here](http://eepurl.com/h-NAHz)
if you want to receive updates about new releases, testing opportunities, and more!
API Design
----------
This section covers important design elements that affect how the Ads API works. Take a moment to review this information.
### Rate Limiting
Rate limiting caps the number of API calls a user or app can make within a set period of time. The Ads API applies RPS rate limits on a per-user basis for each calling app, regardless of the number of simultaneous app users. These limits help Spotify provide API access equitably to all our engineering partners.
In addition, there is also a cap on the reporting endpoints that takes precedence over the general cap on the client ID + user ID key since these specific endpoints are most at risk for high-request volumes, oftentimes due to bad or malformed requests.
Note: If our API returns status code 429, it means that you have sent too many requests. When this happens, check the headers for the following info:
* `X-RateLimit-Remaining`: The count of requests remaining in the rate limit window
* `X-RateLimit-Limit`: The maximum number of requests allowed within the rate limit window
* `X-RateLimit-Reset`: The number of seconds left until the rate limit resets and you can retry your request again
| Rate Limit On | Rate Limit Request | Window (seconds) | Sustained Requests per second (RPS) limit |
| --- | --- | --- | --- |
| Client ID + User ID (as a single key) | 1500 | 30s | 50 RPS |
| Client ID + User ID (as a single key) on Reporting Endpoints | 150 | 30s | 50 RPS |
### Breaking v. Non-Breaking Changes Policy
This section provides a more detailed list of what Ads API considers to be a "Breaking" change, and what is considered a "Non-Breaking" change (i.e. backwards compatible change). The API defines these terms in the following way:
1. **Breaking Changes**: Any alteration in the API that causes existing integrations to fail or function incorrectly from the perspective of the Ads API customers / users. Integrations built on the previous version of the API would not continue to function as expected after these changes are implemented, and would thus require immediate attention and modification.
2. **Non-Breaking/Backwards Compatible Changes**: Updates or enhancements to the API that do not disrupt existing integrations. Integrations built on the previous version of the API continue to function as expected, even after these changes are implemented.
#### Breaking Changes
* Removing an existing operation/endpoint
* **Request**
* Headers
* Removing or renaming an existing header
* Adding a new required header
* Making a previously optional header required
* Changing the type of a header
* Changing the default value of a header
* Body
* Removing or renaming an existing field
* Adding or increasing restrictions to the accepted values for an existing non-enum field
* Removing enum options from an existing enum-type field
* Adding a new required request field
* Making a previously optional request field required
* Changing the type of an existing request field
* Changing the default value of an existing field
* Query/Path Parameters
* Removing or renaming an existing parameter
* Adding or increasing restrictions to the accepted values for an existing non-enum parameter
* Removing enum options from an existing enum-type parameter
* Adding a new required parameter
* Making a previously optional parameter required
* Changing the type of an existing parameter
* Changing the default value of a parameter
* **Response**
* Body
* Removing or renaming an existing field
* Removing enum values/options from an existing enum-type field
* Changing the type of an existing field
* Adding a new validation rule to an existing parameter or making an existing validation rule more restrictive
* Changing the value of what is being returned behind the scenes
* Changing authentication or authorization requirements
#### Non-Breaking/Backwards Compatible Changes
* Updating documentation, both internally and externally facing
* Adding a new operation/endpoint
* **Request**
* Headers
* Adding a new optional header
* Making a previously required header optional
* Request Body
* Adding a new optional field
* Making a previously required field optional
* Adding enum values to an existing enum type field
* Marking an existing field as deprecated to warn of future remove, but not removing it
* Query/Path Parameters
* Adding a new optional parameter
* Making a previously required parameter optional
* Adding enum values to an existing enum type parameter
* Marking an existing parameter as deprecated to warn of future remove, but not removing it
* **Response**
* Headers
* Adding a new header
* Body
* Adding a new field
* Changing the order of properties in existing API responses
* Adding enum values to an existing enum type field
* Marking an existing field as deprecated to warn of future remove, but not removing it
* Any bug fixes that don’t fall into the breaking changes category
* Codebase improvements that don't fall into the breaking changes category (e.g. Testing Improvements, Performance Improvements, etc.)
* Marking an existing endpoint as deprecated to warn of future remove, but not removing it
### Versioning
The most recent version of the Ads API is v3.
All endpoints are versioned with a version number in the URI. Version numbers are integers and the version number is a prefix of the URI.
In accordance with semantic versioning, versions are bumped when there is a backwards-incompatible change that necessitates it, such as significant schema changes.
Updates that do not break existing consumers will be deployed to the current version as patch releases.
_Patch_ releases:
* Non-Breaking Changes
_Major_ releases, e.g. `/v3/` to `/v4/`:
* Major Breaking/Backwards Compatible Changes
For each of these releases, the API team will communicate with clients and detail the changes in the API Release Notes.
### Release Calendar
In order to maintain a healthy evolution of fixes and improvements to the API, in January 2024 the Ads API began to follow a lifecycle of sunsetting its currently latest version approximately every year. From v2 onwards, the API team will maintain 3 versions (e.g., v2, v3, and v4 will be maintained at the same time). Within about 12 months, the current version is considered deprecated. Deprecation means that a newer version is now available and the flagged version will soon be sunset. After another 6 months, the version is sunset and will no longer be accessible.
For example, the current latest version (v3) of the API will be deprecated ~12 months from January 2025 in Q1 2026 then sunset ~Q3 2026:

To summarize the release policy:
* **Deprecations**: The existing version is typically deprecated when a new version is released. Once deprecated, new features will not be added to the version, and non-critical bugs will not be resolved. In rare exceptions, critical bug fixes will still be made to the version until it's sunset.
* **Sunset**: The Ads API team will give a **6 month notice** before a version becomes sunset, meaning HTTP requests can no longer be made.
* **Release Notes**: The Ads API team will continue to post monthly updates (see more in the Release Notes section).
* **Monthly Newsletter**: The newsletter includes a summarized version of the release notes (see more in the Monthly Newsletter section).
### Past Versions
For historical reasons, here's a table of previous API versions:
| API Version | Release Date | Deprecation Date | Sunset Date |
| --- | --- | --- | --- |
| v3 | January 2025 | TBA | TBA |
| v2 | August 2023 | January 21, 2025 | August 5, 2025 |
| v1.4 | November 2022 | November 13, 2023 | November 27, 2023 |
| v1.3 | July 2022 | November 13, 2023 | November 27, 2023 |
| v1.2 | December 2021 | August 25, 2022 | November 27, 2023 |
| v1.1 | June 2019 | August 25, 2022 | November 27, 2023 |
| v1.0 | March 2019 | July 1, 2022 | November 27, 2023 |
### Time Format
Times are always recorded in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/UTC_offset)
with a [zero offset](https://en.wikipedia.org/wiki/UTC_offset)
: `YYYY-MM-DDTHH:MM:SSZ`.
### Pagination
Most list endpoints support paging the dataset by taking an offset and limit as query parameters.
* `limit` specifies the number of results to be returned from the call. If not specified, the default value is 50. The max allowed value is also 50.
* `offset` specifies the starting position of the first result.
If you specify a `limit` of 5, the API will return 5 results. On the next page you’d put an offset of 6 to retrieve results 6 through 10. We return the total number of results along with the page size in the `paging` object.
The [reporting endpoints](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAggregateReport)
are an exception and use continuation tokens for paging instead of `offset`. The reporting response will include a continuation token that can then be sent in a subsequent reporting request to access the next page of results. When sending a request with a continuation token included, no other fields should be specified. If the continuation token returned in the response is null, that means there are no more pages available.
Continuation tokens are base64 encoded and encrypted strings that look like the following: `AMC-fuxpGRIqFcOUEzDEdWQsM5Iy7mkRThKFo94mEys6RF1lzeKyq1sOlWU4RsdjSsgDWR2D7An1nFgLXNBU9hocKnWQ9jRsps6kCLqKd7Q77zNEhHm_Xlb6J_Fci6kK7tXVM3U6H8OajjcTA18eFcr-kv0etZJZBWlMhtP84xj4WiVDZnPWaMo7AL3jRrHH32grJ3eRA2PAoZmhg80%3D`
Release Notes
-------------
This section documents changes to the Ads API, including all patch updates, bug fixes, new version releases, version deprecations, version sunsets, etc.
### July 2025
#### ANNOUNCEMENT: v2 Sunset Deadline Extended
**v2 of the Ads API will now be sunset on August 5, 2025.** All partners are required to update their integration to v3 by this date in order to avoid disruption to their integrations.
#### What’s New
* Introducing new custom and lookalike audience capabilities!
* New endpoints under “Audiences”:
* [Get Audiences by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/batchGetAudiences)
* [Create an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAudience)
* [Get an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAudience)
* [Delete an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/deleteAudience)
* [Edit an Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/editAudience)
* [Get Signed GCS upload URL to upload a user list file](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createUploadUrl)
* [Get Signed GCS upload URL to upload a user list file for an existing audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/replaceUploadUrl)
* New fields `audience_ids` and `audience_ids_exclusions` are now available under `targets` object when [creating an ad set](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdSet)
* New display format is now available – to create a display ad:
* When [creating the ad set](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdSet)
, set `asset_format` to `IMAGE`
* When [creating the ad](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAd)
, specify an image asset under `asset_id`
#### Other Non-Breaking Changes
* Ad Accounts
* New optional field `website` is available when [creating an ad account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdAccountForBusiness)
* New read-only fields on the [ad account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdAccount)
entity:
* `legal_entity_name`
* `status`
* `status_reason`
* `currency_code`
* Ad Sets
* Update to the default behavior for platform targeting: If no platform targeting is passed, `["ANDROID", "DESKTOP", "IOS"]` will now be targeted by default (previously this would default to an empty value)
* Ads
* Support for new call-to-action language options when [creating an ad](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAd)
:
* `DANISH`
* `DUTCH`
* `FINNISH`
* `NORWEGIAN`
* `SWEDISH`
* `JAPANESE`
* Assets
* Support for filtering by asset IDs under [Get Assets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAssetsByAdAccount)
via new optional filter asset\_ids
* Reports
* New reporting field `STREAMED_IMPRESSIONS` now available under the reporting endpoints
#### Breaking Changes/Deprecations
* v2 of the Ads API will be sunset on August 5, 2025. All partners are required to update their integration to v3 by this date in order to avoid disruption to their integrations.
### January 2025
All of the following updates are included under a new major version (v3) released on January 21, 2025.
#### v2 Deprecation Timeline
**v2 of the Ads API will be deprecated on July 22, 2025.** All partners are required to update their integration to v3 by this date in order to avoid disruption to their integrations.
#### What’s New
* Introducing business and ad account management capabilities!
* New endpoints under “Businesses”:
* [Get Businesses for Current User](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getBusinesses)
* [Get Business by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getBusiness)
* [Create Business](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createBusiness)
* [Update Business](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateBusiness)
* New endpoints under “Ad Accounts”:
* [Create Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdAccountForBusiness)
* [Update Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/updateAdAccount)
* [Get Ad Accounts for Current User by Business ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdAccountsInBusiness)
* \[Breaking Change\] This endpoint is intended to replace the v2 [Get Ad Accounts for Current User](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAdAccounts)
endpoint, which has been deprecated and removed
* Changes under ad account entity:
* New field `business_id`
* New field `legal_entity_name`
* \[Breaking change\] `display_name` is now nested under `billing_address` object and renamed to `name`
* \[Breaking change\] `statusReason` renamed to `status_reason`
* \[Breaking\] `address` renamed to `billing_address`
* Support for video views and podcast streams campaign objectives
* New enum values available for objective under the [Campaign](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getCampaign)
entity: `VIDEO_VIEWS` and `PODCAST_STREAMS`
* Also added to the [Estimate Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateAudience)
and [Estimate Bid](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateBid)
endpoints
* Support for new opt-in video format
* New optional field in [Create Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdSet)
, [Estimate Audience](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateAudience)
, and [Estimate Bid](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateBid)
endpoints: `video_delivery_formats`
* This field is only applicable for video ad sets. It specifies the allowed delivery formats of the ad set, which define how the ads within them will be shown to users.
* Allowed values:
* `IN_STREAM`
* `OPT_IN`
* For video views campaigns, the only allowed value (and default value) is `OPT_IN`
* For clicks campaigns, the only allowed value (and default value) is `IN_STREAM`
* For all other campaigns with video ad sets, the default is both `OPT_IN` and `IN_STREAM`
* Expanded support for third-party tracking tags: New enum value `UNSET` supported for the `measurement_partner` field under the `third_party_tracking` object on the [Ad](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAd)
entity – `UNSET` should be used for any partners aside from DCM or IAS
#### Other Non-Breaking Changes
* Campaigns
* New filters under [Get Campaigns by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getCampaigns)
:
* `name`
* `ad_set_statuses`
* Ad Sets
* New filters under [Get Ad Sets by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAdSetsByAdAccountId)
:
* `name`
* `statuses`
* Ads
* New filters and sort fields under [Get Ads by Ad Account ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAds)
:
* Filter by:
* `name`
* `statuses`
* `asset_ids`
* Sort by:
* `name`
* `status`
* `budget`
* `start_date_time`
* `end_date_time`
* Added new field `key` to the `call_to_action` object in the response body which represents the un-localized CTA key (the localized equivalent is still returned via the existing `text` field)
* Assets
* New fields under the Asset entity:
* `asset_subtypes`
* `aspect_ratios`
* New filters and sort fields under [Get Assets by Ad Account](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAssetsByAdAccount)
:
* Filter by:
* `asset_subtypes`
* `aspect_ratios`
* `statuses`
* Sort by:
* `sort_direction` (allowed values: `ASC`, `DESC`)
* `sort_field` (allowed values: `CREATED_AT`, `NAME`)
* Reporting
* New async reporting endpoints:
* [Create A CSV Report Asynchronously](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAsyncReport)
New metrics supported:
* `MODELED_LEADS`
* `MODELED_PAGE_VIEWS`
* `MODELED_PURCHASES`
* `UNMODELED_ADD_TO_CART`
* `UNMODELED_LEADS`
* `UNMODELED_PAGE_VIEWS`
* `UNMODELED_PURCHASES`
* [Get CSV Report Status by ID](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAsyncReport)
* [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAggregateReport)
:
* New metrics supported:
* `UNMUTES`
* `COMPLETION_RATE`
* Removed `ACTIVE` from list of filterable ad statuses
* Targets
* [Get Geo Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getGeoTargets)
* `country_code` validation relaxed: Users are no longer required to input a `country_code` when specifying an id or list of ids
#### Breaking Changes/Deprecations
* Ad Sets
* `exclude_placements` has been removed and replaced with new required field `placements` – when calling [Create Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAdSet)
, users will now specify placements to include (as opposed to exclude)
* Allowed enum values:
* `MUSIC`
* `PODCAST` (NOTE: only available for certain markets and cannot be specified on its own)
* `sensitive_topic_exclusion_ids` from under the `targets` objects has been removed – users should instead use `sensitive_topic_exclusions` object to specify sensitive topic exclusion targeting
* Assets
* `assetType` in the [asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAsset)
response body has been reformatted to `asset_type`
* Data type for `aspect_ratio` in the [asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAsset)
response body is now a string enum (was previously a double) – supported values are:
* `HORIZONTAL_16_9`
* `HORIZONTAL_1_91_1`
* `SQUARE`
* `VERTICAL_9_16`
* Removal of `imageType` parameter: Users are no longer required to specify `imageType` when [creating](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAsset)
an image asset – `imageType` has been removed from the response body
* In the [Create Asset](https://developer.spotify.com/documentation/ads-api/reference/v3.0/createAsset)
request body, new field called `asset_subtype` field is required for asset type `AUDIO`
* Allowed values:
* `COMPANION`
* `LOGO`
* `USER_UPLOADED_IMAGE`
* Estimates
* `start_date` and `end_date` removed from request body for [Estimate Bid](https://developer.spotify.com/documentation/ads-api/reference/v3.0/estimateBid)
* `exclude_placements` has been removed and replaced with new required field `placements` – users will now specify placements to include (as opposed to exclude)
* Allowed enum values:
* `MUSIC`
* `PODCAST` (NOTE: only available for certain markets and cannot be specified on its own)
* Reports
* [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAggregateReport)
endpoint:
* Change to timestamp behavior for the `report_start` and `report_end` fields: timestamps are now inclusive for the minutes and seconds values (previously in v2, users were instructed to express all timestamps as whole hours, e.g., 2021-01-23T00:00:00Z because the minutes and seconds values were not inclusive, but now in v3 they are inclusive)
* Added new `warnings` field to the response body: this field will now notify users who specify both a continuation token and query params in the same request that the `continuation_token` will take precedence and the query params will be ignored
* Removed `limit` and `continuation_token` fields from [Get Insight Report](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getAudienceInsightReport)
endpoint
* Targets
* Under the [Get Interest Targets](https://developer.spotify.com/documentation/ads-api/reference/v3.0/getInterestTargets)
endpoint, the `interests` object has been removed and replaced with `interests_with_subtargets`
* New nested object `subtargets` shows the granular sub-interests that comprise the audience
#### Documentation Updates
* [Object hierarchy](https://developer.spotify.com/documentation/ads-api/guides#object-hierarchy)
section under “Guides” now includes reference to the business entity
* Updated [Versioning](https://developer.spotify.com/documentation/ads-api#versioning)
& Release Calendar sections to reflect v3 availability
* Updated [Build a Campaign](https://developer.spotify.com/documentation/ads-api/guides#build-a-campaign)
guide to reflect v3 updates
### March 2024
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* New campaign objective `"PODCAST_STREAMS"` is now available when [creating](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createCampaign)
or [updating](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateCampaign)
a campaign: The new Podcast Streams objective enables podcasters of all sizes easily promote their shows to listeners who are more likely to stream podcasts on Spotify -- learn more [here](https://ads.spotify.com/en-US/news-and-insights/podcast-streams-objective/)
* New read-only field `display_name` under the ad account entity: This is an optional nickname that a user can give to an ad account; it is referred to as the ad account nickname in the UI and is specific to a user
#### Documentation Updates
* Update to [Rate Limiting](https://developer.spotify.com/documentation/ads-api#rate-limiting)
:
* Replaced IP-level rate limit with a user-level rate limit
* Added info on new rate limiting headers:
* `X-RateLimit-Remaining`: The count of requests remaining in the rate limit window
* `X-RateLimit-Limit`: The maximum number of requests allowed within the rate limit window
* `X-RateLimit-Reset`: The number of seconds left until the rate limit resets and you can retry your request again
* Update to [Pagination](https://developer.spotify.com/documentation/ads-api#pagination)
: Added documentation to reflect that reporting endpoints use `continuation_token` for paging instead of `offset`
### February 2024
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* Reporting updates:
* Support for ad account-level breakdowns: a new enum value `"AD_ACCOUNT"` is now available under the `entity_type` parameter for the [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAggregateReport)
endpoint
* Ad account-level breakdowns are not supported for the [Get Insight Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAudienceInsightReport)
endpoint
* The following fields/filters **cannot** be used when requesting an ad account-level breakdown:
* `entity_id` - the ID of the ad account specified in the endpoint path will be used to filter the request
* `entity_id_type`
* `include_parent_entity`\- cannot be set to `true`
* `statuses`
* `entity_status_type`
* Campaign Management updates:
* New [Canvas](https://ads.spotify.com/en-US/news-and-insights/introducing-canvas-for-ads/)
feature available! When creating or updating an audio ad, users now have the option to include a visual companion asset (an image or a video) that will play on a loop in full-screen when listeners are in-focus
* To use Canvas via the Ads API: When sending a request to the [Create](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createAd)
or [Update](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateAd)
Ad endpoints, specify an image or video asset ID under the optional field `canvas_asset_id` (nested under the `assets` object)
* This feature is only available for ads created under ad sets where the `format` is `"AUDIO"` (not available for `"VIDEO"`)
* Relaxation of ad set start/end date validation logic: The validation logic under the [Update Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateAdSet)
endpoint has been relaxed so that users may now shorten the schedule of an ad set (previously it could only be extended)
* Relaxation of requirements when creating or updating an image asset: If a user calls the [Create](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createAsset)
or [Update](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateAsset)
Asset endpoints and specifies the `asset_type` as `"IMAGE"`, they are no longer required to specify `asset_subtype` as well
* Previously, users were required to specify `asset_subtype` as either `"LOGO"` or `"COMPANION"` when creating an image asset, but now `asset_subtype` will automatically default to `"USER_UPLOADED_IMAGE"` for all image assets and is not required in the request to create an image asset
* Requests that continue to specify `"LOGO"` or `"COMPANION"` under the `asset_subtype` field will continue to work, but these values will be automatically overriden with `"USER_UPLOADED_IMAGE"`
### January 2024
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* Reporting updates:
* New metrics `VIDEO_EXPANDS` and `VIDEO_EXPAND_RATE` available under the [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAggregateReport)
endpoint for campaigns using the Video Views objective
* Campaign Management updates:
* New call-to-action text enum value`"WATCH NOW"` is now available under the [Ad](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createAd)
entity
* Support for bulk postal code upload: Users can now search for up to 1000 postal codes via the `ids` field under [Get Geo Targets](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getGeoTargets)
(previously this was limited to 50 postal codes)
#### Documentation Updates
* Updates to our [Versioning](https://developer.spotify.com/documentation/ads-api#versioning)
policy:
* Added new release calendar to provide context on our release cadence
* Removed reference to minor versions -- all new version releases will be released as new major versions moving forward
### December 2023
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* Update to [Create Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createAdSet)
endpoint: New optional parameter `pacing` has been added with the following allowed values – these are immutable after ad set creation:
* `PACING_ASAP`: Deliver ads at an accelerated pace. Delivery stops when daily or lifetime budget is spent
* `PACING_EVEN`: Deliver ads throughout your selected schedule at a standard pace.
* Update to [Create Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createAdSet)
, [Update Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateAdSet)
, [Estimate Bid](https://developer.spotify.com/documentation/ads-api/reference/v2.0/estimateBid)
, and [Estimate Audience](https://developer.spotify.com/documentation/ads-api/reference/v2.0/estimateAudience)
endpoints:
* The max allowed targeted age has been increased to 99 (was previously 65)
* The parameter `sensitive_topic_exclusion_ids` under the `targets` object has been marked as deprecated in v2 and will be sunset in the next version bump (timing TBD) – it is being replaced with new optional parameter `sensitive_topic_exclusions` which allows users to specify separate filter levels for individual sensitive topic ids, or a single global filter to be applied to all sensitive topics
* Allowed values for the new `filter_option` parameter (nested under `sensitive_topic_exclusions`):
* `STANDARD` (default): Provides the full breadth of podcasts eligible for ads.
* `PARTIAL`: May include audio of “real-world” alcohol/tobacco use, or dramatic depictions or educational coverage of alcohol/tobacco use; may include dramatic and non-graphic depiction, edu-tainment, op-ed coverage, or breaking news of crime/violence or weapons; may include dramatic depictions or discussion of drug use for entertainment or journalistic purposes (including discussion of addiction recovery); may include depictions of recreational gambling or news coverage of gambling legislation; may include dramatic or graphic depictions of hate speech/acts in an entertainment context, or audio of “real-world” hate speech for discussion purposes; may include dramatic and non-graphic depictions of sexual acts in an entertainment context; may include discussion or discussion or references to past terrorist events/groups, without graphic details.
* `LIMITED`: May include informal mentions of alcohol brands/use, drug use, gambling, smoking/tobacco products, or weapons; as well as educational or informative discussions of criminal reform/past unlawful criminal activity, hate speech/acts, sexual relationships/sexuality or terrorism.
* `RESTRICTED`: Avoid placements that contain any reference to the sensitive topic(s). Total exclusion of the sensitive topic(s) is not guaranteed.
#### Breaking Changes/Deprecations
* \[Breaking Change\] Update to the [Update Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateAdSet)
and [Update Campaign](https://developer.spotify.com/documentation/ads-api/reference/v2.0/updateCampaign)
endpoints: we’re removing support for archiving ad sets and campaigns – effective December 12th, 2023, the API will return a validation error when users attempt to set the `status` parameter to `ARCHIVED` for an ad set or a campaign
* \[Breaking Change\] Update to [Estimate Audience](https://developer.spotify.com/documentation/ads-api/reference/v2.0/estimateAudience)
endpoint: the parameter `bid_micro_amount` will be required starting on December 17th, 2023 -- impacted partners have been sent direct communications to update their integrations
* \[Non-Breaking Change, Deprecation\] Update to [Estimate Bid](https://developer.spotify.com/documentation/ads-api/reference/v2.0/estimateBid)
endpoint: `start_date` and `end_date` have been marked as deprecated and are no longer required – in the next version bump, these parameters removed from under this endpoint
* v1 to v1.4 of the Ads API was sunset on November 27, 2023 – these endpoints are no longer available and any partners that have still yet to migrate to v2 should do so
#### Documentation Updates
* Added a new section on [Breaking v. Non-Breaking Changes Policy](https://developer.spotify.com/documentation/ads-api#breaking-v-non-breaking-changes-policy)
to our API Design documentation which provides specific examples of breaking vs non-breaking changes
### November 2023
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* Reporting updates:
* Updates to [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAggregateReport)
endpoint:
* We’ve restored support for filtering by multiple `entity_ids` (campaign/ad set/ad IDs) in a single call when requesting daily and hourly granularity
* NOTE: A maximum of 50 `entity_ids` can be included in a single request
* Users may now filter ads by campaign IDs when requesting lifetime granularity – previously, requests with `entity_type=CAMPAIGN` and `entity_ids_type=AD` would result in a validation error
* Update to [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAggregateReport)
and [Get Insight Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAudienceInsightReport)
endpoints: We’ve removed the validation rule that previously required `report_start` and `report_end` to be in the past – requests where `report_start` and/or `report_end` are in the future will no longer result in a validation error
* This means that users requesting `granularity=DAY` under Get Aggregate Report are now able to request data for the current day by setting `report_end` to tomorrow’s date (e.g., if today is November 14, 2023 in UTC, `report_end` should be set to `2023-11-15T00:00:00Z` to return data up to today)
* The ability to query by IDs has been added to the [Get Podcast Episode Topic Targets](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getEpisodeTopicTargets)
, [Get Sensitive Topic Targets](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getSensitiveTopicTargets)
, [Get Genre Targets](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getGenreTargets)
, Get Playlist Targets, and [Get Podcast Shows](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getPodcastShows)
) endpoints
* Update to [Get Geo Targets](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getGeoTargets)
endpoint: `country_code` is no longer required when requesting `types=COUNTRY`
* This means that users can now retrieve a list of all allowed country geo targets by requesting `types=COUNTRY` and leaving all other query parameters blank
#### Breaking Changes/Deprecations
* \[ACTION REQUIRED\] v1-v1.4 of the Ads API was deprecated on November 13, 2023. All v1-v1.4 endpoints will be sunset on November 27, 2023, at which point calls to v1-v1.4 endpoints will fail. All partners must migrate to v2 by this date in order to avoid disruptions to their integrations.
#### Documentation Updates
* Update to our [Versioning](https://developer.spotify.com/documentation/ads-api#versioning)
policy: Effective November 15, 2023, the Ads API team will consider adding new enum fields as a non-breaking change and we expect our consumers to adjust their code to allow for this convention. Previously, we had not defined the expected behavior for this type of change.
### October 2023
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* Launch of the new video views campaign objective:
* New value `VIDEO_VIEWS` is now available for the `objective` parameter under the [Create Campaign](https://developer.spotify.com/documentation/ads-api/reference/v2.0/createCampaign)
endpoint
* New field (i.e., metric) called `VIDEO_VIEWS` is now available under the [Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAggregateReport)
and [Get Insights Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAudienceInsightReport)
endpoints
* Other reporting updates:
* When requesting `entity_type` = `AD_SET` or `AD` and `granularity` = `LIFETIME`, any entity can now be used for filtering (e.g., at lifetime granularity, users can now filter Ads by Campaign IDs whereas previously they were only able to filter Ads by Ad IDs).
* NOTE: If requesting `entity_type` = `CAMPAIGN`, only Campaign IDs can be used for filtering
* Restored support for requesting `report_start` and `report_end` when requesting `LIFETIME` granularity (NOTE: The date range specified for report start/end must be 90 days or less, as is already the case for `HOUR` and `DAY` granularity requests)
* Improved 400 error messaging to more clearly explain the underlying issue with the request for several scenarios
* Other campaign management updates:
* Added new parameter `campaign_ids` to Get Ad Sets endpoint to enable filtering by one or more campaign IDs
* Added new parameter `ad_set_ids` to Get Ads endpoint to enable filtering by one or more ad set IDs
* Create & Update Ad Set:
* When creating or updating an ad set, the start date must now only be 1 hour in the future (previously we required it to start at least 24 hrs in the future)
* \[Bug Fix\] The minimum allowed lifetime budget is now ~$250 regardless of targeted country; previous issue where an error was sometimes returned when setting a lifetime budget over ~$250 has been resolved
* New endpoints:
* Get Sensitive Topic targets: Retrieve allowed sensitive topic target values, used for excluding sensitive podcast topics from possible ad placements
* Get Podcast Episode Topic targets: Retrieve allowed podcast episode target values, used for targeting relevant podcast episode topics
#### Breaking Changes/Deprecations
* \[ACTION REQUIRED\] Upcoming deprecation deadline: v1 through v1.4 of the Ads API will be deprecated on November 13th, 2023. All partners must migrate to v2 by this date in order to avoid disruptions to their integrations.
#### Documentation Updates
* Added more detailed descriptions to reporting endpoint parameters to clarify expected behavior
### September 2023
The following updates have been made to the latest version (v2) of the Ads API.
#### What's New
* Updates to reporting endpoints ([Get Aggregate Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAggregateReport)
& [Get Insights Report](https://developer.spotify.com/documentation/ads-api/reference/v2.0/getAudienceInsightReport)
) in effect as of September 7th, 2023:
* Zero-stat campaigns (i.e., campaigns that have not yet been trafficked) are now automatically included in reports
* Updates to the `SPEND` field:
* `SPEND` is now capped based on billable impressions; this means that any spend tied to delivery over the specified budget is now filtered out in order to match the Ad Studio UI’s logic
* `SPEND` is now reported in standard units instead of in micro amounts (e.g., 1800 dollars and 31 cents is now reported as `1800.31` instead of `1800310000` as previously)
* Updates relevant for Get Aggregate Report by Ad Account ID endpoint only:
* The parameters `entity_ids` and `entity_ids_type` are now required when requesting `DAY` or `HOUR` granularity
* Removed support for filtering by multiple entity IDs when `DAY` or `HOUR` granularity is requested -- these requests must be filtered by a single entity ID
* When requesting `HOUR` granularity, the API will only return data for the last 14 days
* When requesting `DAY` granularity:
* The maximum allowed difference between `report_start` and `report_end` is 90 days – there is no limit on how far back in time `report_start` and `report_end` can go though
* The timestamps for `report_start` and `report_end` must be rounded to the nearest day (e.g., `2023-09-15T00:00:00Z`)
#### Breaking Changes/Deprecations
* \[ACTION REQUIRED\] Upcoming deprecation deadline: v1 through v1.4 of the Ads API will be deprecated on November 13th, 2023 and sunset on November 27, 2023. All partners must migrate to v2 by this date in order to avoid disruptions to their integrations.
### August 2023
#### Announcing Ads API v2!
All of the following updates are included under a new major version (v2) released on August 8, 2023.
#### What's Changing
#### General
* The Campaign Management API is now generally available! These endpoints no longer require a manual allowlisting process to access.
* \[Breaking Change\] The following entities have been deprecated from the API:
* `advertiser`: All references to advertiser, including advertiser endpoints, have been removed
* `organization`: All references to organization have been removed
* `ad_set_links`: All references to ad\_set\_links, including Ad Set Link endpoints, have been removed
* \[Breaking Change\] All resource names now follow snake\_case convention (previously in v1, camelCase was used for path resources)
* \[Breaking Change\] All `update` requests now use the PATCH method to support partial data updates (previously in v1, PUT was used even though the resource is not fully replaced)
#### Paging
* \[Breaking Change\] `page_size` has been renamed to `limit` in all instances (previously in v1, both `page_size` and `limit` were used)
* \[New\] `paging` object is now returned if pagination is specified. Example:
` _10 "paging": { _10 "page_size": 50, _10 "total_results": 17, _10 "offset": 0 _10 } `
#### Ad Accounts
* Endpoint to query a single ad account by ID called `Get an Ad Account` is now available
* Get Ad Accounts endpoint path has been shortened to GET /ad\_accounts (was previously GET /currentUser/adAccounts)
* \[Breaking Change\] The following parameters have been deprecated from the ad account entity:
* `organization_id`
* `ad_studio_lead`
* `description`
* \[Breaking Change\] The following parameters have been renamed under the ad account entity:
* `last_modified` is now `updated_at`
* `iso_country_code` is now `country_code`
#### Campaigns
* \[New\] The following parameters have been added to the campaign entity:
* `updated_at`: When the campaign was last updated (read only)
* `purchase_order`: Intended for organizational purposes; if specified, it will be displayed on invoices (optional for Create Campaign requests and cannot be updated)
* `objective`: The objective of the campaign, previously referred to as `bid_optimization_goal` at the ad set level (required for Create Campaign requests and cannot be updated)
* \[Breaking Change\] The following parameters have been deprecated from the campaign entity:
* `description`
* `advertiser_id`
* `landing_page_domain`
* `version`
* `ad_set_ids`
* \[Breaking Change\] The following endpoints have been deprecated:
* Update Campaign Status
* Get Campaigns (users can continue to call Get Campaigns by Ad Account ID and Get Campaigns by ID endpoints to retrieve campaigns)
* \[Breaking Change\] The following filters under Get Campaigns by Ad Account ID endpoint have been deprecated:
* `ids` (ability to query by a single campaign ID still supported under Get Campaign by ID endpoint, but querying by an array of IDs is no longer supported)
* `advertiser_ids`
* `statuses`
* `name`
* \[Breaking Change\] The following parameters have been renamed under the campaign entity:
* `created_on` is now `created_at`
#### Ad Sets
* \[New\] The following parameters have been added to the ad set entity:
* `updated_at`: When the campaign was last updated (read only)
* \[Breaking Change\] `category`: A category that most closely matches the content of the ad(s); certain categories may be subject to restrictions (required for Create Ad Set requests and can be updated)
* `podcast_episode_topics`: Podcast episode topics to target (optional for Create Ad Set requests and can be updated)
* `sensitive_topic_exclusions`: Sensitive podcast episode topics to exclude from ad placements (optional for Create Ad Set requests and can be updated)
* `language`: Languages to target; languages are based on the language users use on Spotify (optional for Create Ad Set requests and cannot be updated)
* `interests`: Interests to target; interests are based on listening habits and playlist preferences (optional for Create Ad Set requests and can be updated)
* `exclude_placements`: When targeting a market where podcast ads are supported, placements will automatically default to include both podcast and music; users can set this parameter to `PODCAST` in order to limit their ad placement to music only (optional for Create Ad Set requests and can be updated)
* `delivery`: Use to pause/resume ad set delivery; if set to `ON`, ad set will be served (once ad review is passed and start date occurs) and if set to `OFF`, ad set will not be served (optional for Create Ad Set requests and can be updated)
* \[Breaking Change\] The following parameters have been deprecated from the ad set entity:
* `advertiser_id`
* `ad_ids` (ability to link an ad to an ad set is still supported at the ad entity level)
* `active_status`
* `ad_set_links`
* `custom_audience_ids`
* `serving_issues`
* `version`
* \[Breaking Change\] The following parameters have had schema changes or been renamed under the ad set entity:
* `targeting has been renamed to` targets\`
* `budget` object added to the Create Ad Set request in order to match response schema:
* `budget_micro_amount` in the Create Ad Set request is now nested under the `budget` object and renamed to `micro_amount` (previously `budget_micro_amount` was a root-level parameter)
* `type` parameter has been added to specify a `DAILY` or `LIFETIME` budget (required for Create Ad Set requests)
* `country_code` has been renamed to `currency` (read only)
* Names of the following targeting parameters have been simplified:
* `gender_names` is now `genders`
* `platform_names` is now `platforms`
* Geo targeting parameters (`country_code`, `regions`, `dmas`, `cities`, `postal_codes`) are now nested within a new - `geo_targets` object under `targets`
* All geo target IDs are now string data type (previously they were integers \[int32\])
* Metadata (e.g., `name`) is no longer returned with targeting parameters in Get Ad Set by Ad Account ID response – objects have been flattened into arrays where only the target ID(s) are included now
* Metadata is still included in Get Ad Set by Ad Set ID response
* `artist_promotion` has been renamed to `promotion`
* `name` parameter under `artist_promotion` has been removed
* `artist_promotion_goal` has been renamed to `promotion_goal`
* Changes to the following promotion goal enum values:
* `ARTIST_CONTENT` has been removed (artist targeting is now allowed for any ad set)
* `PODCAST_PROMO` has been added (for promoting a podcast)
* `artist_promotion_target` object has been removed and replaced with `promotion_target_id` parameter
* `bid_optimization_goal` has been moved to the campaign entity level and renamed `objective`
* `format` has been moved out of the `targeting` object and is now a root-level parameter, and has been renamed to - `asset_format`
* \[Breaking Change\] The following endpoints have been deprecated:
* Update Ad Set Status (ability to update campaign status has been consolidated into Create and Update Ad Set endpoints in v2)
* Get Ad Sets (users can continue to call Get Campaigns by Ad Account ID and Get Campaigns by ID endpoints to retrieve campaigns)
* Get Ad Set Links
* Get Ad Sets by Campaign
* Update Ad Set Link Status
* Get Ad Set Serving Status
* \[Breaking Change\] The following filters under Get Ad Sets by Ad Account ID endpoint have been deprecated:
* ids (ability to query by a single ad set ID still supported under Get Ad Set by ID endpoint, but querying by an array of IDs is no longer supported)
* `advertiser_ids`
* `campaign_ids`
* `ad_ids`
* `active_statuses`
* `statuses`
* `ad_stauses`
* `name`
* \[Breaking Change\] The following validation logic has been added:
* Minimum budget amount
* Minimum bid amount
#### Ads
* \[New\] The following parameters have been added to the ad entity:
* updated\_at: When the ad was last updated (read only)
* call to action: The metadata for the behavior of the call-to-action button
* `text`: The text used for the call-to-action button -- currently defaults to `LEARN MORE` but option to configure is coming soon (by end of August 2023)
* `clickthrough_url`: The link to the ads desired landing page.
* `language`: The language in which the call-to-action text is presented -- currently defaults to "ENGLISH" but option to configure is coming soon (by end of August 2023)
* `delivery`: Use to pause/resume ad delivery; if set to `ON`, ad will be served (once ad review is passed and start date occurs) and if set to `OFF`, ad will not be served (optional for Create Ad requests and can be updated)
* `ad_preview_url`: Link to view a preview of the ad
* `ad_set_id`: The ID of the ad set to which the ad belongs
* `logo_image_asset`: Part of `assets` object; logo image for the ad (optional for Create Ad requests and can be updated)
* \[Breaking Change\] The following parameters have been deprecated from the ad entity:
* `advertiser_id`
* `landing_page_domain`
* `version`
* \[Breaking Change\] The following endpoints have been deprecated:
* Get Ads (users can continue to call Get Ads by Ad Account ID and Get Ads by ID endpoints to retrieve campaigns)
* \[Breaking Change\] The following parameters have had schema changes or been renamed under the ad entity:
* `created` has been renamed to `created_at`
* `brand_name` has been renamed to `advertiser_name`
* `clickthrough_url` is now nested under the `call_to_action` object
* `assets` object has been simplified to contain the following parameters:
* `asset_id`: ID of an audio or video asset (required on Create Ad requests and can be updated)
* `companion_asset_id`: ID of a companion image asset (required on Create Ad requests and can be updated)
* `logo_asset_id`: Nested under `assets` object - ID of a logo image asset (optional on Create Ad requests and can be updated)
* `third_party_viewability_tracking` has been renamed to `third_party_tracking` and contains the following parameters:
* `measurement_partner`: Name of the third-party measurement partner; `DCM` is now supported along with `IAS`
* `url`: Third-party tracking URL
* \[Breaking Change\] The following filters have been deprecated under Get Ads by Ad Account ID endpoint:
* `ids` (ability to query by a single ad ID still supported under Get Ad by ID endpoint, but querying by an array of IDs is no longer supported)
* `ad_set_ids`
* `statuses`
* `name`
#### Assets
* \[Breaking Change\] Get Audio Assets, Get Video Assets, and Get Image Assets endpoints have been deprecated and replaced with a single endpoint called `Get Assets by Asset Type and Ad Account`
* \[Breaking Change\] Get Audio Asset, Get Video Asset, and Get Image Asset endpoints have been deprecated and replaced with a single endpoint called `Get Asset`
* \[Breaking Change\] Get Fullmix Upload Url, Get Video Upload Url, and Get Image Upload Url endpoints have been deprecated and replaced with a single `Create Asset` endpoint
* \[New\] The following endpoints have been added to enable asset upload:
* Upload Asset: Upload image, audio, or video assets that are 25 MB or smaller
* Start Upload Chunked Asset: Start a chunked upload session for image, audio, or video assets (required for files that are 25 MB or larger)
* Transfer Chunked Asset: Continues the upload session of a chunked asset by transferring one section of binary media data
* Complete Upload Chunked Asset: Completes the upload session of a chunked asset
* \[New\] Endpoint to update an asset called `Update Asset` is now available
#### Targets
* \[New\] Support for the following new targeting types has been added:
* Postal codes: Postal code IDs can be retrieved via Get Geo Targets endpoint and input as an optional parameter in ‘targeting’ under ad sets entities
* Interests: Interests can be retrieved via new endpoint Get Interest Targets and input as an optional parameter in ‘targeting’ under ad sets entities
* Languages: Languages can be retrieved via new endpoint Get Language Targets and input as an optional parameter in ‘targeting’ under ad sets entities
* Podcast episode topics: Only available for markets where podcast ads are supported – podcast episode topics can be retrieved via new endpoint Get Podcast Episode Targets and input as an optional parameter in ‘targeting’ under ad sets entities
* Podcast sensitive episode topic exclusion: Only available for markets where podcast ads are supported – podcast sensitive episode topics can be retrieved via new endpoint Get Interest Targets and input as an optional parameter in ‘targeting’ under ad sets entities
* \[Breaking Change\] Consolidation of previous v1 targeting endpoints:
* Get Artist Targets and Search Artist Targets have been consolidated into a single endpoint Get Artist Targets
* Get Genre Targets and Search Genre Targets have been consolidated into a single endpoint Get Genre Targets
* Querying by ids is no longer supported
* Get Playlist Targets and Search Playlist Targets have been consolidated into a single endpoint Get Playlist Targets
* Querying by ids is no longer supported
* Get Geo Targets and Search Geo Targets have been consolidated into a single endpoint Get Geo Targets
* New parameter `parent_geo_name` added to geo target entity
* Renamed `id` and `type` parameters to `geo_id` and `geo_type` under geo target entity
#### Reporting
* \[Breaking Change\] Create Report and Create Report by Ad Account have been deprecated and replaced with the following endpoints:
* Get Aggregate Report by Ad Account Id: Returns aggregated ad campaign metrics based on requested fields and dimensions
* Get Insight Report by Ad Account Id: Returns ad campaign metrics broken out by audience insights (e.g., age, gender, genre) based on requested fields – available only as ad set level breakdown at lifetime granularity and does not support report start/end time filtering
* \[Breaking Change\] The following `dimensions` values have been deprecated:
* `YEAR`
* `MONTH`
* `CURRENCY`
* `COST_TYPE`
* `ADVERTISER`
* `DMA`
* `REGION`
* \[Breaking Change\] The following `fields` values have been deprecated:
* `FETCHES`
* `RENDER_RATIO`
* `FETCH_REACH`
* `SERVES`
* `ERRORS`
* `COMPLETION_RATE`
* \[Breaking Change\] The following fields have been renamed:
* `SERVE_REACH` is now `REACH`
* `SERVE_FREQ` is now `FREQUENCY`
* \[Breaking Change\] The following filters have been deprecated:
* `advertiser_ids`
* `country_isos`
* `region_ids`
* `dma_ids`
* `platforms`
* `ad_set_start_dates`
* `ad_set_end_dates`
* `cost_type_filters`
* `organization_ids`
* `ad_account_ids` (all reports must now include a single ad account ID in the path but filtering by multiple ad account IDs is no longer supported)
* \[Breaking Change\] Filtering by campaign, ad set, or ad ID(s) has been consolidated into two generic fields (previously this was supported via separate filters for each entity type):
* entity\_ids: A list of one or more campaign, ad set, or ad IDs by which to filter reporting
* entity\_ids\_type: The entity type of IDs contained in the entity\_ids field – if entity\_ids is set, this field is required.
* \[Breaking Change\] Filtering by campaign, ad set, or ad ID status(es) has been consolidated into two generic fields:
* entity\_status\_type: The entity type of statuses contained in the statuses field
* statuses: A list of one or more campaign, ad set, or ad statuses by which to filter reporting – If this field is set, the entity\_status\_type field is required
* \[New\] The following audience insight dimensions have been added and are available under the Get Insight Report by Ad Account ID endpoint:
* `AGE`
* `GENDER`
* `GENRE`
* \[New\] The following updates will go into effect on September 1, 2023:
* Data refresh cadence will be increased to hourly (vs every few hours in v1-v1.4) – this will result in a discrepancy between UI and API stats for those who have not yet updated their integration to v2
* Zero-stat campaigns (i.e., campaigns that have not yet been trafficked) will automatically be included in reports
* SPEND field will be capped based on billable impressions; this means that spend tied to delivery over the specified budget will now be filtered out in order to match the UI’s logic
#### Estimates
* Estimate Bid (formerly known as `Get Bid Estimate`)
* \[Breaking Change\] Get Bid Estimate endpoint has been shortened to POST `/estimates/bid` (was previously POST `/adAccounts/{ad_account_id}/estimate/bid`)
* \[Breaking Change\] `budget_micro_amount` is no longer required in the request body
* \[Breaking Change\] The following parameters are now required when fetching a bid estimate:
* `start_date`
* `end_date`
* `asset_format`
* `bid_strategy`
* `currency`
* \[Breaking Change\] `bid_optimization_goal` has been renamed to `objective`
* \[New\] The following optional request body parameters have been added:
* frequency\_caps
* Under `targets` object:
* `postal_code_ids` (nested under geo\_targets)
* `podcast_episode_topic_ids`
* `sensitive_topic_exclusion_ids`
* `language`
* `interest_ids`
* `exclude_placements`
* Estimate Audience (formerly known as `Get Audience Estimate`)
* \[Breaking Change\] Get Bid Estimate endpoint has been shortened to POST `/estimates/audience` (was previously POST `/adAccounts/{ad_account_id}/estimate/audience`)
* \[Breaking Change\] ad\_account\_id is now a request body parameter (was previously a path parameter)
* \[Breaking Change\] The following parameters are now required when fetching a bid estimate:
* `start_date`
* `end_date`
* `asset_format`
* `bid_strategy`
* `budget` (type & micro\_amount)
* \[Breaking Change\] `bid_optimization_goal` has been renamed to `objective`
* \[New\] The following optional request body parameters have been added:
* frequency\_caps
* Under `targets` object:
* `postal_code_ids` (nested under geo\_targets)
* `podcast_episode_topic_ids`
* `sensitive_topic_exclusion_ids`
* `language`
* `interest_ids`
* `exclude_placements`
* \[New\] The following parameters have been added to the response body:
* `estimated_frequency_min`
* `estimated_frequency_max`
* forecast\_type: The time granularity of the forecast -- if a "LIFETIME" budget type is specified, the API will return a single "LIFETIME" forecast type and if a "DAILY" budget type is specified, the API will return "DAILY", "WEEKLY" and "MONTHLY" forecast types
* likely\_to\_deliver\_budget: Indicates the likelihood of spending most of the budget
#### Ad Categories \[New\]
* Get Ad Categories endpoint: Ad categories can be retrieved via this endpoint and input under the `ad_category` parameter in the Create Ad Set request
#### Podcast Shows \[New\]
* Get Podcast Shows endpoint: Available for podcast promotion use only (not for targeting) – podcast shows can be retrieved via this endpoint and input under the `promotion_target_id` parameter in the Create Ad Set request
#### Documentation Updates
* Now that the Campaign Management API is in GA, mention of manual allowlisting process and closed beta requirements have been removed
* Versioning policy has been simplified and schedule has been updated to reflect November 13, 2023 deprecation date for v1.3-v1.4
* Filtering and Querying section has been removed
* Slicing section has been removed
* Object Hierarchy has been updated to reflect v2 changes
* Build a Campaign Guide has been updated based on new v2 specs
* Metrics Glossary has been updated to only reflect metrics included in v2
### November 2022
#### Announcing Ads API v1.4
All of the following updates are included under a new minor version (v1.4) released on November 29, 2022.
**What's New**
* Introducing new Click objective with accompanying Call-to-Action (“CTA”) card format
* Spotify Ad Studio advertisers are now able to set up a click optimization goal for their campaigns along with reach and impressions goals introduced this year. Ads with click goal will be accompanied by a Call-to-Action card: a clickable ad experience consisting of an advertiser's companion image, a name and a call-to-action button. After the initial ad is served, the message will resurface across the Spotify app making it easier for listeners to remember and take action.
* New enum value `CLICKS` is available under the `bid_optimization_goal` parameter when [creating an ad set](https://developer.spotify.com/documentation/ads-api/reference/v1.4/post_ad_set)
, [updating an ad set](https://developer.spotify.com/documentation/ads-api/reference/v1.4/put_ad_set)
, and [retrieving bid/audience estimates](https://developer.spotify.com/documentation/ads-api/reference/v1.4/get_bid_estimate)
* CTA cards will be enabled for music ads only (not video) – [create ad](https://developer.spotify.com/documentation/ads-api/reference/v1.4/post_ad)
endpoint now includes:
* New required parameter `brand_name`: Displayed in ad
* New optional parameter `tagline`: Displayed in CTA card, max 140 characters
* These two parameters are included in the response when retrieving ads
* Enforcing new validation logic, see Breaking Changes/Deprecations section below for details
**Breaking Changes/Deprecations**
* New parameter `brand_name` is now required when creating an ad
* Removed and replaced `slot_type` with `format` under ad sets/estimates targeting object
* Removed `country_codes` (array of string) under ad sets/estimates `targeting` object and replaced with `country_code` (string)
* Validation rules added:
* Ad set start and end dates must be in the future
* Max ad set duration of 365 days
* Minimum length of 2 characters and maximum of 120 characters for campaigns, ad sets and ads entity names
* Only one country may be targeted per ad set
### August 2022
All of the following updates are included under the current version of the API v1.3:
* New enum value `ARTIST_CONTENT` is available under the `artist_promotion_goal` parameter when [creating an ad set](https://developer.spotify.com/documentation/ads-api/reference/v1.3/post_ad_set)
or [updating an ad set](https://developer.spotify.com/documentation/ads-api/reference/v1.3/put_ad_set)
: Users can now specify when they are promoting an artist's merch or concert by selecting this option (NOTE: `ARTIST_BOOST` should continue to be used when promoting an artist's music on Spotify).
### July 2022 - v1.3
#### Announcing Ads API v1.3
All of the following updates are included under a new minor version (v1.3) released July 2022.
**What's New**
* New minor version v1.3 released. _Note: v1.1 and v1.2 will be fully deprecated on August 25, 2022. See [Versioning](https://developer.spotify.com/documentation/ads-api#versioning)
section for version schedules._
* Addition of effective cost per mille and completed listen fields, `ECPM` and `ECPCL`, to [reporting](https://developer.spotify.com/documentation/ads-api/reference/v1.4/get_report)
endpoints. See [Metrics Glossary](https://developer.spotify.com/documentation/ads-api/guides#campaign-performance-metrics)
for detailed definitions.
* Ad sets and Estimates requests have been updated to use an auction pricing model, see "Breaking Changes/Deprecations" below for details
* `frequency_caps` is no longer a required parameter for [create ad sets](https://developer.spotify.com/documentation/ads-api/reference/v1.4/post_ad_set)
requests; it is now optional. If `frequency_caps` is not specified, API will default to the maximum allowed values:
* 5 per day
* 35 per week
* 50 per month
**Breaking Changes/Deprecations**
* Addition of `bid_optimization_goal`, `bid_strategy`, and `bid_micro_amount` to ad sets output responses, as _required_ fields to [create ad sets](https://developer.spotify.com/documentation/ads-api/reference/v1.4/post_ad_set)
requests, and as _optional_ fields to [update ad sets](https://developer.spotify.com/documentation/ads-api/reference/v1.4/put_ad_set)
requests
* Allowed values for `bid_optimization_goal` are:
* `EVEN_IMPRESSION_DELIVERY`: We’ll aim to deliver as many impressions as possible to your target audience. Not available for active audio (CPCL) ad sets.
* `REACH`: We’ll aim to reach as many unique listeners as possible with your message.
* `AD_COMPLETES`: We’ll aim to deliver as many impressions as possible to your target audience. Available for active audio (CPCL) ad sets only.
* Allowed values for `bid_strategy` are:
* `MAX_BID`: The bid you specify will act as a ceiling/cap.
* The following fields under the ad sets objects have been renamed:
* `optimization` is now `artist_promotion`
* `optimization_goal` is now `artist_promotion_goal`
* `optimization_target` is now `artist_promotion_target`
* `optimization_target_type` is now `artist_promotion_target_type`
* The previous `/estimate` endpoints are deprecated and replaced with two new ones ([Get Bid Estimate](https://developer.spotify.com/documentation/ads-api/reference/v1.4/get_bid_estimate)
and [Get Audience Estimate](https://developer.spotify.com/documentation/ads-api/reference/v1.4/get_audience_estimate)
) that allow users to specify bid details:
* `POST /v1.3/adAccounts/{ad_account_id}/estimate/audience` is replacing `POST /v1.2/estimate`
* `POST /v1.3/adAccounts/{ad_account_id}/estimate/bid` is replacing `POST /v1.2/adAccounts/{ad_account_id}/estimate/cost`
**Documentation Updates**
* Migrated documentation to main portal [Spotify for Developers](https://developer.spotify.com/)
### December 2021 - v1.2
#### Announcing Ads API v1.2
All of the following updates are included under a new minor version (v1.2) released December 2021.
**What's New**
* New minor version v1.2 released
* Added new [pricing estimate endpoint](https://developer.spotify.com/documentation/ads-api/reference/v1.2/get_cost_estimate)
to estimate your CPM/CLCL/CPCV based on specified targeting parameters
* `POST /adAccounts/{ad_account_id}/estimate/cost`
* Added `custom_audience_ids` under the `targeting` parameter for ad sets
* You now have the option to specify custom audiences to target when creating/updating an ad set
* Added `third_party_viewability_tracking` for ads
* You now have the ability to set up third-party viewability tracking when creating/updating an ad
* NOTE: This is currently only supported for measurement partner `IAS`
**Breaking Changes/Deprecations**
* “Flights” have been renamed “Ad Sets”
* We have renamed all instances of these entities in v1.2 in order to match the nomenclature used in the Ad Studio UI
* “Creatives” have been renamed “Ads”
* We have renamed all instances of these entities in v1.2 in order to match the nomenclature used in the Ad Studio UI
* Removed parameter “unit\_cost\_micro\_amount” from [Create Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v1.2/post_ad_set)
and [Update Ad Set](https://developer.spotify.com/documentation/ads-api/reference/v1.2/put_ad_set)
(fka Flight) endpoints
**Documentation Updates**
* Added new sections: “Metrics Glossary” and “Release Notes”
* Added additional detail on the expected behavior of the `report_datetime_range` filter under the [Reporting API](https://developer.spotify.com/documentation/ads-api/guides#reporting-open-beta)
* Updates to “Versioning” section - added version release/sunset schedule
### November 2021 - v1.1
* Added support for podcast ad performance data to the Reporting API
* Ads served to podcast listeners on Spotify will automatically be reflected without making any updates to your integration
* To capture the impressions served off Spotify, you will need to update your integration by adding the new metric called `OFF_SPOTIFY_IMPRESSIONS`
* There are no breaking changes associated with this launch, however, we recommend that you complete this update as soon as possible in order to accurately reflect podcast ad performance
### June 2019 - v1.1
#### Announcing Ads API v1.1
v1.1 was released June 2019
**What's New**
* Combined the `/geo` and `/geos` endpoints into just `/geos`. See docs [here](https://developer.spotify.com/documentation/ads-api/reference/v1.4/get_targets_geo)
* `/geos` endpoint now allows you to specify a type of geo you are searching for as a filter in a query param.
### April 2019 - v1.0
* Renamed the landing\_page\_url field to be landing\_page\_domain so it is consistent across the API
* Renamed arrays on GET targets and GET campaigns to be consistent with rest of API
* Refactored statuses on flight endpoint
* Pausing status for flight and flight links
* Previously, you had to pause a flight on the update flight request. Now, there is a separate endpoint to pause / activate / archive a flight. You are no longer able to change the status on the update flight request.
* Added Flight Links endpoints
* Flight links are a connection between flights and creatives that ensure the creative(s) and its contents are compatible with the flight’s targeting
* Added serving status endpoint
* The new serving status endpoint indicates whether your flight is serving or not
### March 2019 - v1.0
* Added Campaign Status Endpoint
* The available statuses for campaigns are ACTIVE, PAUSED, and ARCHIVED
* Removed CANCELLED as a status on campaigns
* Campaigns can now only be archived, not cancelled
* Archiving will permanently pause a campaign, you cannot unarchive a campaign
* Archiving a campaign will prevent delivery across all associated flights
* Removed ability to update campaign status on PUT
* Use the campaign status endpoint
* Added support for slicing on all GET LIST requests for creatives, flights, and campaigns
* Slicing is the ability to specify what fields you want returned
* How it works: GET LIST endpoints, there is a query parameter called `fields` where you can specify a comma-separated list of fields you want returned
* Added support for filtering on all the GET LIST requests for creatives, flights, and campaigns
* Filtering is the ability to filter your results based on specific criteria (e.g., Get Flights for a specific Advertiser ID)
* How it works: On the GET LIST endpoints, there are optional query parameters to specify the filter
* Added support for ordering by a specific field on GET LIST requests for creatives, campaigns, and flights
* How it works: There are optional query parameters to specify the ordering field, ascending or descending based on the field
---
# Creating an Embed | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/embeds/tutorials/creating-an-embed#main)
Embeds
* [Overview](https://developer.spotify.com/documentation/embeds)
* TutorialsTutorials
Tutorials* [Creating an Embed](https://developer.spotify.com/documentation/embeds/tutorials/creating-an-embed)
* [Using the iFrame API](https://developer.spotify.com/documentation/embeds/tutorials/using-the-iframe-api)
* [Using the oEmbed API](https://developer.spotify.com/documentation/embeds/tutorials/using-the-oembed-api)
* [Troubleshooting](https://developer.spotify.com/documentation/embeds/tutorials/troubleshooting)
* PlaygroundsPlaygrounds
Playgrounds* [iFrame API](https://developer.spotify.com/documentation/embeds/playgrounds/iFrameAPI)
* [Terms of Use](https://developer.spotify.com/documentation/embeds/terms)
Reference
* [oEmbed API](https://developer.spotify.com/documentation/embeds/reference/oembed)
* iFrame API[iFrame API](https://developer.spotify.com/documentation/embeds/references/iframe-api)
iFrame API* [Methods](https://developer.spotify.com/documentation/embeds/references/iframe-api#methods)
* [Events](https://developer.spotify.com/documentation/embeds/references/iframe-api#events)
Creating an Embed
=================
Embeds allow you to include interactive content from Spotify in any compatible website or web application. In order to set this up, you will need basic knowledge of HTML, or help from a webmaster or web developer. Here's how you do it:
1. Navigate to the [Spotify Web Player](https://open.spotify.com/)
.
2. Search for the content you would like to embed and click on it. You can create an Embed for a podcast, an episode, a track, a playlist, an artist, or an album.
3. Right click or long press on the title of the content. Select the **Share** option, and then the sub option beginning with the word **Embed** (For example "Embed episode").

4. Customize your Embed using the options provided and then click on Copy.

5. Open your HTML editor (This process will vary depending on the website provider and technologies that you use).
6. Paste the code into the section of your web page where you'd like it to be displayed.
7. Save and deploy your changes.
---
# Using the iFrame API | Spotify for Developers
[Skip to content](https://developer.spotify.com/documentation/embeds/tutorials/using-the-iframe-api#main)
Embeds
* [Overview](https://developer.spotify.com/documentation/embeds)
* TutorialsTutorials
Tutorials* [Creating an Embed](https://developer.spotify.com/documentation/embeds/tutorials/creating-an-embed)
* [Using the iFrame API](https://developer.spotify.com/documentation/embeds/tutorials/using-the-iframe-api)
* [Using the oEmbed API](https://developer.spotify.com/documentation/embeds/tutorials/using-the-oembed-api)
* [Troubleshooting](https://developer.spotify.com/documentation/embeds/tutorials/troubleshooting)
* PlaygroundsPlaygrounds
Playgrounds* [iFrame API](https://developer.spotify.com/documentation/embeds/playgrounds/iFrameAPI)
* [Terms of Use](https://developer.spotify.com/documentation/embeds/terms)
Reference
* [oEmbed API](https://developer.spotify.com/documentation/embeds/reference/oembed)
* iFrame API[iFrame API](https://developer.spotify.com/documentation/embeds/references/iframe-api)
iFrame API* [Methods](https://developer.spotify.com/documentation/embeds/references/iframe-api#methods)
* [Events](https://developer.spotify.com/documentation/embeds/references/iframe-api#events)
Using the iFrame API
====================
Overview
--------
Developers can use the iFrame API to programmatically create and interact with a single [Embed](https://developer.spotify.com/documentation/embeds/tutorials/creating-an-embed)
or with multiple Embeds in the same web app. The iFrame API includes methods that you can use to start playback, change the content rendering in an Embed, or stop playback. This step-by-step guide explains one way you might implement the iFrame API in an existing web site.
### 1\. Add the iFrame API script tag to your HTML page
Begin by including a ` `
### 2\. Create an element for the iFrame
Add an HTML element with a unique `id` attribute to your document. This element will be replaced with the Embed iFrame.
For example, you could add a `` element like this one after the `` HTML tag:
` _10
`
### 3\. Define the `window.onSpotifyIframeApiReady` function
After the browser has loaded the iFrame API script, the `window.onSpotifyIframeApiReady` function is called. This signals to your app that it is now safe to rely on the methods of the iFrame API.
` _10 window.onSpotifyIframeApiReady = (IFrameAPI) => { _10 // _10 }; `
### 4\. Create a controller object
Each instance of the Embed should have a controller object associated with it. The controller object has methods that you can use to configure the Embed and to control playback.
The `window.onSpotifyIframeApiReady` function receives an object parameter, `IFrameAPI` in our example. You can use the `createController` method of the IFrameAPI to create a controller for your Embed. `createController` accepts three mandatory parameters: the element that we defined earlier, an `options` object, and a callback function:
` _10 window.onSpotifyIframeApiReady = (IFrameAPI) => { _10 const element = document.getElementById('embed-iframe'); _10 const options = { _10 uri: 'spotify:episode:7makk4oTQel546B0PZlDM5' _10 }; _10 const callback = (EmbedController) => {}; _10 IFrameAPI.createController(element, options, callback); _10 }; `
### 5\. Test your page
At this point, your page displays an Embed!

### 6\. Add episode switching logic
Let's use the capabilities of the iFrame API to change the contents of the Embed. We'll add three podcast episodes to the page. Each episode has a button with a data attribute that contains the Spotify ID of the episode.
` _13
_13 _13 My Path to Spotify: Women in Engineering _13 _13 _13 _13 What is Backstage? _13 _13 _13 _13 Introducing Nerd Out@Spotify _13 _13
`
Next, let's modify the `callback` function we defined earlier. We're going to add a click event listener to each of the buttons.
` _10 const callback = (EmbedController) => { _10 document.querySelectorAll('.episode').forEach( _10 episode => { _10 episode.addEventListener('click', () => { _10 // click event handler logic goes here _10 }); _10 }) _10 }; `
Each of the buttons has a data attribute that contains the episode's Spotify URI. As a final step, we're going to use the iFrame API's loadUri method to tell the Embed to load the episode that has been clicked on.
` _10 episode.addEventListener('click', () => { _10 EmbedController.loadUri(episode.dataset.spotifyId) _10 }); `
Now we have a menu that loads Spotify episodes in the Embed as each button is clicked!
### 7\. Customize the appearance of the Embed
Our app works, but the design could look better. Let's resize the Embed by adjusting the `options` object that we set when creating the controller.
` _10 const options = { _10 width: '60%', _10 height: '200', _10 uri: 'spotify:episode:7makk4oTQel546B0PZlDM5' _10 }; `
Next let's add some CSS to the page to style the menu. You can do this by by linking to an external stylesheet or inline on the page using a ` _72 _72 _72 _72
_72 _72 My Path to Spotify: Women in Engineering _72 _72 _72 What is Backstage? _72 _72 _72 Introducing Nerd Out@Spotify _72 _72
_72 _72
_72 _72 _72 _72