Artist IDs Dsp Availabilities
Manage artist identifications on streaming platforms (Spotify, Apple Music, Facebook, YouTube)
Resource Overview
Artist DSP Availabilities link artists to their profiles on Digital Service Providers (DSPs) like Spotify, Apple Music, Facebook, and YouTube. This enables proper artist identification and content matching across platforms.
/artist-dsp-availabilities
artist-dsp-availabilities
Owner-restricted
Allowed DSPs
Artist identification is only allowed for the following platforms:
| DSP | ID | external-artist-id Format | external-artist-url Format |
|---|---|---|---|
| Spotify | 1 | spotify:artist:{id} | https://open.spotify.com/artist/{id} |
| Apple Music | 4 | Numeric ID | https://music.apple.com/artist/{id} |
| 12 | Numeric ID | https://www.facebook.com/{id} | |
| YouTube | 3 | Channel ID, @handle or channel URL (stored as the channel ID) | Built by the API: https://www.youtube.com/channel/{id} |
Automatic Facebook Library Replication
When you create, update, or delete a Facebook (DSP 12) identification, the system automatically replicates the action to Facebook Library (DSP 16). You only need to manage the Facebook entry.
Schema
Required Attributes
| Field | Type | Validation | Description |
|---|---|---|---|
| external-artist-id | string | Required · up to 500 characters · DSP-specific format | Artist identifier on the DSP platform |
| external-artist-url | string | Required · valid URL · DSP-specific format · ignored and stored as null with Spotify NEW · not used for YouTube: built from the channel ID, any value sent is ignored |
Artist profile URL on the DSP platform |
Read-only Attributes
| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier |
| created-at | datetime | Creation timestamp |
| updated-at | datetime | Last update timestamp |
| external-artist-name | string | null | Artist name on the DSP. For YouTube, the channel title YouTube returns. A value sent in a request is ignored |
Relationships
| Relationship | Related Resource | Description | Required |
|---|---|---|---|
| artist | artists | The artist this identification belongs to | Yes |
| dsp | dsps | The DSP platform (Spotify, Apple, Facebook, YouTube). An identification cannot be moved to or from YouTube | Yes |
Validation Rules by DSP
Spotify (DSP 1)
spotify:artist:{alphanumeric, max 30 chars}
https://open.spotify.com/artist/{id}
spotify:artist:4q3ewBCX7sLwd24euuV69X
NEW
For an artist with no Spotify profile yet, send external-artist-id as exactly NEW (uppercase). The URL is not required: it is stored as null, even when one is sent. NEW is replaced with the real Spotify ID once it is available.
An artist can be marked as NEW only when:
- it has no Spotify profile linked, and
- it does not appear, in any role, on a release that was already sent.
Updating a row that already holds NEW to NEW again is always accepted. Reads may return "external-artist-id": "NEW" with "external-artist-url": null.
YouTube (DSP 3)
Any of:
- the channel ID:
UCfollowed by 22 characters - the channel's handle:
@handle - a channel URL:
https://www.youtube.com/channel/{id},https://www.youtube.com/@handleorhttps://www.youtube.com/user/{name}, also onyoutube.com,m.youtube.comandmusic.youtube.com
Not accepted: video, Shorts, playlist, embed or live links, youtu.be links, and custom URLs such as https://www.youtube.com/c/{name} (send the channel's @handle instead).
Do not send it. The API stores https://www.youtube.com/channel/{id}; any value sent is ignored.
Before saving, the API looks the channel up on YouTube. It stores the channel ID YouTube returns (never the handle or the URL you sent) and the channel title as external-artist-name. A PATCH checks the channel only when it sends external-artist-id.
30 YouTube lookups per minute per user. Above that, 429 Too Many Requests.
UCuAXFkgsw1L7xaCfnd5JJOw, @CafeTacvba, https://www.youtube.com/@CafeTacvba
Apple Music (DSP 4)
Numeric only
https://music.apple.com/artist/{id}
1126808565
Facebook (DSP 12)
Numeric only
https://www.facebook.com/{id}
112233445566778899
List Artist DSP Availabilities
/artist-dsp-availabilities
GET /artist-dsp-availabilities
Authorization: Bearer {token}
Accept: application/vnd.api+json
Query Parameters
Filtering
filter[id]- Filter by ID(s)filter[artist-id]- Filter by artistfilter[dsp-id]- Filter by DSP
Other Parameters
include=artist- Include artist datainclude=dsp- Include DSP datainclude=artist,dsp- Include bothsort- Sort by field
Success Response
{
"data": [
{
"type": "artist-dsp-availabilities",
"id": "1",
"attributes": {
"external-artist-id": "spotify:artist:4q3ewBCX7sLwd24euuV69X",
"external-artist-url": "https://open.spotify.com/artist/4q3ewBCX7sLwd24euuV69X",
"created-at": "2024-01-01T10:00:00Z",
"updated-at": "2024-01-01T10:00:00Z"
},
"relationships": {
"artist": {
"links": { "related": "/artist-dsp-availabilities/1/artist" }
},
"dsp": {
"links": { "related": "/artist-dsp-availabilities/1/dsp" }
}
}
}
]
}
Create Artist DSP Availability
/artist-dsp-availabilities
Spotify Example
{
"data": {
"type": "artist-dsp-availabilities",
"attributes": {
"external-artist-id": "spotify:artist:4q3ewBCX7sLwd24euuV69X",
"external-artist-url": "https://open.spotify.com/artist/4q3ewBCX7sLwd24euuV69X"
},
"relationships": {
"artist": {
"data": { "type": "artists", "id": "123" }
},
"dsp": {
"data": { "type": "dsps", "id": "1" }
}
}
}
}
Spotify Example: brand-new artist
POST /artist-dsp-availabilities
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"type": "artist-dsp-availabilities",
"attributes": {
"external-artist-id": "NEW"
},
"relationships": {
"artist": {
"data": { "type": "artists", "id": "123" }
},
"dsp": {
"data": { "type": "dsps", "id": "1" }
}
}
}
}
The created resource answers "external-artist-id": "NEW" and "external-artist-url": null.
Apple Music Example
{
"data": {
"type": "artist-dsp-availabilities",
"attributes": {
"external-artist-id": "1126808565",
"external-artist-url": "https://music.apple.com/artist/1126808565"
},
"relationships": {
"artist": {
"data": { "type": "artists", "id": "123" }
},
"dsp": {
"data": { "type": "dsps", "id": "4" }
}
}
}
}
Facebook Example
{
"data": {
"type": "artist-dsp-availabilities",
"attributes": {
"external-artist-id": "112233445566778899",
"external-artist-url": "https://www.facebook.com/112233445566778899"
},
"relationships": {
"artist": {
"data": { "type": "artists", "id": "123" }
},
"dsp": {
"data": { "type": "dsps", "id": "12" }
}
}
}
}
YouTube Example
{
"data": {
"type": "artist-dsp-availabilities",
"attributes": {
"external-artist-id": "@CafeTacvba"
},
"relationships": {
"artist": {
"data": { "type": "artists", "id": "123" }
},
"dsp": {
"data": { "type": "dsps", "id": "3" }
}
}
}
}
The created resource answers the channel as YouTube returns it:
"attributes": {
"external-artist-id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"external-artist-url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"external-artist-name": "Café Tacvba",
...
}
Success Response
Update Artist DSP Availability
/artist-dsp-availabilities/{id}
{
"data": {
"type": "artist-dsp-availabilities",
"id": "1",
"attributes": {
"external-artist-id": "spotify:artist:6vWDO969PvNqNYHIOW5v0m",
"external-artist-url": "https://open.spotify.com/artist/6vWDO969PvNqNYHIOW5v0m"
}
}
}
Success Response
Delete Artist DSP Availability
/artist-dsp-availabilities/{id}
DELETE /artist-dsp-availabilities/1
Authorization: Bearer {token}
Success Response
Error Responses
DSP Not Allowed
{
"errors": [{
"detail": "Artist identification is only allowed for Spotify, Apple, Facebook, and YouTube.",
"status": "422"
}]
}
Invalid Spotify ID Format
{
"errors": [{
"detail": "Spotify artist ID must be in format: spotify:artist:{id} where id is alphanumeric (max 30 characters).",
"status": "422"
}]
}
Spotify NEW: Profile Already Linked
{
"errors": [{
"detail": "This artist already has a Spotify profile linked, so they are not new on Spotify. Keep their Spotify profile link instead of marking them as new.",
"source": { "pointer": "/data/attributes/external-artist-id" },
"status": "422"
}]
}
Spotify NEW: Already on a Sent Release
{
"errors": [{
"detail": "This artist already appears on a release sent to distribution, so they are not new on Spotify. Paste their Spotify profile link instead of marking them as new.",
"source": { "pointer": "/data/attributes/external-artist-id" },
"status": "422"
}]
}
YouTube: Not a Channel
{
"errors": [{
"detail": "That is a video link, not a channel.",
"source": { "pointer": "/data/attributes/external-artist-id" },
"status": "422"
}]
}
Other detail values: That is not a YouTube link., That is not a YouTube channel., That is a video or playlist link, not a channel., Links with /c/ cannot be validated. Use the channel's @handle.
YouTube: Channel Not Found
{
"errors": [{
"detail": "No YouTube channel was found for that link or handle.",
"source": { "pointer": "/data/attributes/external-artist-id" },
"status": "422"
}]
}
YouTube: DSP Cannot Change
{
"errors": [{
"detail": "An identification cannot be moved to or from YouTube. Delete it and create a new one.",
"source": { "pointer": "/data/relationships/dsp" },
"status": "422"
}]
}
YouTube: Too Many Lookups
More than 30 YouTube lookups in a minute. The Retry-After header gives the seconds to wait.
YouTube: Unreachable
{
"errors": [{
"detail": "YouTube could not be reached. Try again later.",
"status": "503"
}]
}
Nothing is saved. Retry the same request later.
Invalid Apple/Facebook ID Format
{
"errors": [{
"detail": "Apple artist ID must be numeric.",
"status": "422"
}]
}
URL Does Not Match ID
{
"errors": [{
"detail": "Spotify artist URL must be: https://open.spotify.com/artist/4q3ewBCX7sLwd24euuV69X",
"status": "422"
}]
}
Duplicate Entry
{
"errors": [{
"detail": "This artist already has an identification for this DSP. Use PATCH to update it.",
"status": "422"
}]
}
Unauthorized Access
{
"errors": [{
"detail": "You are not authorized to perform this action.",
"status": "403"
}]
}