Amazon Music Web API
Web API Playlists V2.0
Playlists
- Get multiple playlists
- Create a playlist
- Delete multiple playlists (deprecated)
- Get top playlists
- Get playlist by ID
- Update a playlist
- Delete a playlist
- Get playlist cover images
- Get tracks in a playlist
- Add tracks to a playlist
- Reorder tracks in a playlist
- Remove tracks from a playlist
Get multiple playlists
Query Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| ids | string[] | Yes | Comma-separated list of playlist IDs (max 100) |
Response 200
Successful response
Response Schema
Example
[
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"description": "Editorial mix of indie rock standouts.",
"visibility": "PUBLIC",
"trackCount": 42,
"duration": 9240,
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
},
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP100-640.jpg",
"width": 640,
"height": 640,
"imageType": "PRIMARY"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
}
},
{
"id": "B0EXAMP101",
"title": "Rock Deep Cuts",
"description": "Lesser-known tracks from rock mainstays.",
"visibility": "PUBLIC",
"trackCount": 36,
"duration": 8100,
"url": "https://music.amazon.com/playlists/B0EXAMP101",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
},
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP101-640.jpg",
"width": 640,
"height": 640,
"imageType": "PRIMARY"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
}
}
]
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | ids parameter is required and must contain 1-100 comma-separated IDs |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "ids parameter is required and must contain 1-100 comma-separated IDs",
"traceId": "1-abc-def"
}
}
Create a playlist
Request Body
Request Schema
Request Example
{
"title": "Indie Rock Essentials",
"description": "Editorial mix of indie rock standouts.",
"visibility": "PUBLIC",
"trackAsins": [
"B084KPC3Q7",
"B004S8NBPG"
]
}
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"description": "Editorial mix of indie rock standouts.",
"visibility": "PUBLIC",
"trackCount": 2,
"duration": 403,
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
}
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | title is required |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "title is required",
"traceId": "1-abc-def"
}
}
Delete multiple playlists (deprecated)
Deprecated. Use DeletePlaylist (DELETE /v2/playlists/{id})
to remove a single playlist instead.
Request Body
Request Schema
Request Example
{
"ids": [
"B0EXAMP100",
"B0EXAMP101"
]
}
Response 200
Successful response
Response Schema
Example
{
"deletedPlaylists": [
"B0EXAMP100",
"B0EXAMP101"
]
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | ids is required and must contain at least 1 playlist ID |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "ids is required and must contain at least 1 playlist ID",
"traceId": "1-abc-def"
}
}
Get top playlists
Paginated with forward-only cursor navigation. Default page size is
20 items; maximum is 100. Use the nextToken from the response to
fetch the next page via the after query parameter.
Supports sparse fieldsets via query parameters:
fields[playlist]— Comma-separated playlist fields (e.g. title,id,images)fields[image]— Comma-separated image fields (e.g. url)
Query Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| first | integer | No | Number of items to return |
| after | string | No | Cursor to start after |
Response 200
Successful response
Response Schema
Example
Top playlists with full Playlist fields populated
{
"items": [
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"description": "Editorial mix of indie rock standouts.",
"visibility": "PUBLIC",
"trackCount": 42,
"duration": 9240,
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
},
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP100-640.jpg",
"width": 640,
"height": 640,
"imageType": "PRIMARY"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
}
},
{
"id": "B0EXAMP101",
"title": "Rock Deep Cuts",
"description": "Lesser-known tracks from rock mainstays.",
"visibility": "PUBLIC",
"trackCount": 36,
"duration": 8100,
"url": "https://music.amazon.com/playlists/B0EXAMP101",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
},
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP101-640.jpg",
"width": 640,
"height": 640,
"imageType": "PRIMARY"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
}
}
],
"nextToken": "B0EXAMP250"
}
Sparse Fieldsets Example
Sparse fieldsets — fields[playlist]=title,id,images&fields[image]=url
{
"items": [
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP100-640.jpg"
}
]
},
{
"id": "B0EXAMP101",
"title": "Rock Deep Cuts",
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP101-640.jpg"
}
]
}
],
"nextToken": "B0EXAMP250"
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | first parameter must be between 1 and 100 |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "first parameter must be between 1 and 100",
"traceId": "1-abc-def"
}
}
Get playlist by ID
Supports sparse fieldsets via query parameters:
fields[playlist]— Comma-separated playlist fields (e.g. title,id,tracks)fields[image]— Comma-separated image fields (e.g. url)fields[user]— Comma-separated owner fields (e.g. name)
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Response 200
Successful response
Response Schema
Example
Full playlist response with owner, images, and first page of tracks
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"description": "Editorial mix of indie rock standouts.",
"visibility": "PUBLIC",
"trackCount": 42,
"duration": 9240,
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
},
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP100-640.jpg",
"width": 640,
"height": 640,
"imageType": "PRIMARY"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
},
"tracks": {
"items": [
{
"id": "B084KPC3Q7",
"title": "Selfless",
"duration": 222
},
{
"id": "B004S8NBPG",
"title": "Metabolism",
"duration": 181
}
],
"nextToken": "B0EXAMP410"
}
}
Sparse Fieldsets Example
Sparse fieldsets — fields[playlist]=title,id,owner&fields[user]=name
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
}
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | Invalid field 'nonexistent' for type 'playlist' |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid field 'nonexistent' for type 'playlist'",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Update a playlist
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Request Body
Request Schema
Request Example
{
"title": "Indie Rock Essentials (Updated)",
"description": "Refreshed editorial mix of indie rock standouts.",
"visibility": "PRIVATE"
}
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials (Updated)",
"description": "Refreshed editorial mix of indie rock standouts.",
"visibility": "PRIVATE",
"trackCount": 42,
"duration": 9240,
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
}
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | At least one of title, description, or visibility must be provided |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "At least one of title, description, or visibility must be provided",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Delete a playlist
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"isDeleted": true
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | id path parameter is required |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "id path parameter is required",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Get playlist cover images
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"images": [
{
"url": "https://m.media-amazon.com/images/I/B0EXAMP100-640.jpg",
"width": 640,
"height": 640,
"imageType": "PRIMARY"
}
]
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | id path parameter is required |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "id path parameter is required",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Get tracks in a playlist
Each item carries an entryId identifying that track's entry
(slot) in the playlist, alongside the track's own id. The two
differ: adding the same track twice produces two entries with
distinct entryId values. Pass entryId values — not track
IDs — to the endpoints that remove or reorder playlist entries.
Paginated with forward-only cursor navigation. Default page size is
20 items; maximum is 100. Use the nextToken from the response to
fetch the next page via the after query parameter.
Supports sparse fieldsets via query parameters:
fields[track]— Comma-separated track fields (e.g. title,id,duration,album)fields[album]— Comma-separated album fields (e.g. title,id)fields[artist]— Comma-separated artist fields (e.g. name)
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Query Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| first | integer | No | Number of items to return |
| after | string | No | Cursor to start after |
Response 200
Successful response
Response Schema
Example
Tracks for playlist B0EXAMP100 with full PlaylistTrack fields populated
{
"items": [
{
"id": "B084KPC3Q7",
"entryId": "fd5c53f7-1673-4f6b-9556-be9b59e2bb59",
"title": "Selfless",
"duration": 222,
"isrc": "USRC11902727",
"audioQualities": [
"HD"
],
"mediaType": "audio",
"releaseDate": "2020-04-10T00:00:00.000Z",
"label": "Cult",
"url": "https://music.amazon.com/albums/B084KP4NBH/?trackAsin=B084KPC3Q7",
"album": {
"id": "B084KP4NBH",
"title": "The New Abnormal"
},
"artists": [
{
"id": "B00G70DLAS",
"name": "the-strokes"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
}
},
{
"id": "B004S8NBPG",
"entryId": "9b1c0a54-2f83-4d17-8c6e-71a5d3e0b842",
"title": "Metabolism",
"duration": 181,
"isrc": "USRC10500421",
"audioQualities": [
"HD"
],
"mediaType": "audio",
"releaseDate": "2006-01-03T00:00:00.000Z",
"label": "Cult",
"url": "https://music.amazon.com/albums/B084KP4NBH/?trackAsin=B004S8NBPG",
"album": {
"id": "B084KP4NBH",
"title": "The New Abnormal"
},
"artists": [
{
"id": "B00G70DLAS",
"name": "the-strokes"
}
],
"parentalSettings": {
"hasExplicitLanguage": false
}
}
],
"nextToken": "B0EXAMP410"
}
Sparse Fieldsets Example
Sparse fieldsets — fields[track]=title,id,duration,artists&fields[artist]=name
{
"items": [
{
"id": "B084KPC3Q7",
"entryId": "fd5c53f7-1673-4f6b-9556-be9b59e2bb59",
"title": "Selfless",
"duration": 222,
"artists": [
{
"id": "B00G70DLAS",
"name": "the-strokes"
}
]
},
{
"id": "B004S8NBPG",
"entryId": "9b1c0a54-2f83-4d17-8c6e-71a5d3e0b842",
"title": "Metabolism",
"duration": 181,
"artists": [
{
"id": "B00G70DLAS",
"name": "the-strokes"
}
]
}
],
"nextToken": "B0EXAMP410"
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | first parameter must be between 1 and 100 |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "first parameter must be between 1 and 100",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Add tracks to a playlist
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Request Body
Request Schema
Request Example
{
"trackIds": [
"B084KPC3Q7",
"B004S8NBPG"
],
"addDuplicateTracks": true
}
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"trackCount": 44,
"duration": 9643,
"visibility": "PUBLIC",
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
}
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | trackIds is required and must contain at least 1 track ID |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "trackIds is required and must contain at least 1 track ID",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Reorder tracks in a playlist
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Request Body
Request Schema
Request Example (moveAbove)
Move selected entries above an anchor
{
"entryIds": [
"fd5c53f7-1673-4f6b-9556-be9b59e2bb59",
"9b1c0a54-2f83-4d17-8c6e-71a5d3e0b842"
],
"entryIdAbove": "3e7f8d21-64b9-4a05-9f13-c2d80ae5761b"
}
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"trackCount": 42,
"duration": 9240,
"visibility": "PUBLIC",
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
}
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | Exactly one of entryIdAbove or entryIdBelow must be provided |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "Exactly one of entryIdAbove or entryIdBelow must be provided",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}
Remove tracks from a playlist
Modeled as a POST action endpoint rather than DELETE with a request body because RFC 7231 §4.3.5 leaves DELETE-body semantics undefined and some HTTP clients, proxies, and API gateways silently strip bodies on DELETE requests.
Path Parameters
| Name | Data Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the resource |
Request Body
Request Schema
Request Example
{
"entryIds": [
"fd5c53f7-1673-4f6b-9556-be9b59e2bb59",
"9b1c0a54-2f83-4d17-8c6e-71a5d3e0b842"
]
}
Response 200
Successful response
Response Schema
Example
{
"id": "B0EXAMP100",
"title": "Indie Rock Essentials",
"trackCount": 40,
"duration": 8837,
"visibility": "PUBLIC",
"url": "https://music.amazon.com/playlists/B0EXAMP100",
"owner": {
"id": "B0EXAMP200",
"name": "Amazon Music Editorial"
}
}
Error Responses
| Response | Code | Status | Message |
|---|---|---|---|
| 400 | BAD_REQUEST | 400 | entryIds is required and must contain at least 1 entry ID |
| 404 | NOT_FOUND | 404 | Playlist not found |
400 Example
{
"error": {
"code": "BAD_REQUEST",
"message": "entryIds is required and must contain at least 1 entry ID",
"traceId": "1-abc-def"
}
}
404 Example
{
"error": {
"code": "NOT_FOUND",
"message": "Playlist not found",
"traceId": "1-abc-def"
}
}

