Skip to content

Content Management

Content access

SOA uses a concept of entitlements to control how users can access restricted content. Entitlements are identifiers that the partner defines and assigns to users and episodes. An episode is playable if the user and the episode have at least one entitlement identifier in common.

User entitlements are supplied by the partner during the authentication process. A user can have 0, 1, or multiple active entitlements.

Episode entitlements are defined in the RSS feed during ingestion. An episode can have 0, 1, or multiple entitlements. Episodes with 0 entitlements are publicly available without further authorization.

In the Lunar Industries example, in the content:

  • Moonshots will have no entitlements attached to any episodes.
  • The Dark Side has its bonus episodes tagged with the "lunar_dark_side" entitlement. Living on the Moon has all its episodes (except the teaser trailer) tagged with the "lunar_living" entitlement.

And for the users:

  • Users that subscribe to the "Bonus Content" tier are given the "lunar_dark_side" entitlement.
  • Users that subscribe to the "Premium" tier are given both the "lunar_dark_side" and "lunar_living" entitlements in their tokens.

SOA Content Playback

Info:

All restricted episodes in a show must have identical entitlement sets -- that is, conceptually an entitlement should grant access to an entire show, and all restricted episodes within that show become unlocked at once a user is granted that entitlement.

An example for the Lunar Industries show The Dark Side is below. This is not complete RSS as it is of course missing many tags required for full ingestion, but we highlight some SOA details. You can also view the show's RSS feed directly.


_22
<?xml version="1.0" encoding="UTF-8"?>
_22
<rss xmlns:spotify="http://www.spotify.com/ns/rss">
_22
<channel>
_22
<title>The Dark Side</title>
_22
<description>Lunar's Bonus Content</description>
_22
<spotify:access>
_22
<partner id="2zkvpokj55bj2sCHxCejJs"/>
_22
</spotify:access>
_22
<item>
_22
<title>Free Episode #1</title>
_22
<!-- Note no spotify:access section -->
_22
<enclosure url="https://l-i.com/free1.mp3" length="10" type="audio/mpeg"/>
_22
</item>
_22
<item>
_22
<title>Bonus Episode #1</title>
_22
<spotify:access>
_22
<entitlement name="lunar_dark_side"/>
_22
</spotify:access>
_22
<enclosure url="https://l-i.com/bonus1.mp3" length="10" type="audio/mpeg"/>
_22
</item>
_22
</channel>
_22
</rss>

Similarly, the Living on the Moon RSS would have all its episodes tagged:


_24
<?xml version="1.0" encoding="UTF-8"?>
_24
<rss xmlns:spotify="http://www.spotify.com/ns/rss">
_24
<channel>
_24
<title>Living on the Moon</title>
_24
<description>Lunar's Premium Content</description>
_24
<spotify:access>
_24
<partner id="2zkvpokj55bj2sCHxCejJs"/>
_24
</spotify:access>
_24
<item>
_24
<title>Living Episode #1</title>
_24
<spotify:access>
_24
<entitlement name="lunar_living"/>
_24
</spotify:access>
_24
<enclosure url="https://l-i.com/ep1.mp3" length="10" type="audio/mpeg"/>
_24
</item>
_24
<item>
_24
<title>Living Episode #2</title>
_24
<spotify:access>
_24
<entitlement name="lunar_living"/>
_24
</spotify:access>
_24
<enclosure url="https://l-i.com/ep2.mp3" length="10" type="audio/mpeg"/>
_24
</item>
_24
</channel>
_24
</rss>

View the full RSS feed here.

Supporting many shows

In the case that a partner has a large number of shows which are bundled, it may make more sense to define entitlements that map to a "tier" rather than individual shows, to reduce the size of the set of entitlements that would need to be sent in register and update calls. Spotify Open Access supports this as well - it is up to the partner how to define entitlements.

Content ingestion

All gated content will be ingested and served through the Spotify platform.

RSS ingestion

RSS-based podcast feeds are submitted through podcasters.spotify.com.

Content ingested through RSS must conform to the Spotify Podcast Delivery Specification in addition to the addenda in this section.

Spotify recommends having an RSS feed that is specific to Spotify ingestion, which contains the additional information described in this section.

For the ingestion of a podcast RSS feed that has a mix of free and paid episodes, Spotify has introduced two new fields in the spotify namespace in the RSS that will allow the ingestion of the mixed subscription tier episodes for the podcast show. The two fields are partner-id at the channel level:


_10
<spotify:access>
_10
<partner id="2zkvpokj55bj2sCHxCejJs"/>
_10
</spotify:access>

and entitlement at the item level -- example from The Dark Side restricted episode:


_10
<spotify:access>
_10
<entitlement name="lunar_dark_side"/>
_10
</spotify:access>

Note that in the opening xml tag, the Spotify namespace must be referenced, using xmlns:spotify="http://www.spotify.com/ns/rss"

Sandbox mode

Sandbox mode allows partners to test a show before it becomes widely available to Spotify users. A sandboxed show can be accessed only via a direct link if the link is known: https://open.spotify.com/show/0CTGu9RccEYBWxDJF1LovM. It will not be available through search and it will not be recommended to users. The same applies to all the episodes in the show.

Spotify has introduced a new field in the spotify namespace in the RSS that will allow sandbox mode. The field is sandbox at the channel level:


_10
<spotify:access>
_10
<partner id="2zkvpokj55bj2sCHxCejJs"/>
_10
<sandbox enabled="true"/>
_10
</spotify:access>

Info:

All shows from our example partner Lunar Industries are sandboxed. Try searching for Living on the Moon on Spotify or view the RSS feed to verify how it works.

Once a show is tested and is ready to be consumed by Spotify users, remove the tag altogether or mark sandbox enabled as false.


_10
<spotify:access>
_10
<partner id="2zkvpokj55bj2sCHxCejJs"/>
_10
<sandbox enabled="false"/>
_10
</spotify:access>

Note that this only goes into effect when the partner-id field is also present; a sandbox tag on its own has no effect. This field can be toggled as suited. However, some surfaces might not be covered. For example, if this show has previously been searched by a user, since search results are heavily cached, it might still show up on a search for that user. If it has been added to a user’s library, it will stay available.

Content protection

Content hosted on the Spotify platform is protected by Spotify's content protection/DRM systems.

Restrictions are enforced by services in the Spotify backend, ensuring that only authorized users are allowed to stream a particular media item. Restrictions take into account the content's availability markets and dates, and the user's authorization status (for SOA content).