7365 lines
238 KiB
JSON
7365 lines
238 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "Qobuz API",
|
|
"description": "Unofficial Qobuz API documentation based on observed endpoints",
|
|
"version": "0.2.0"
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "https://www.qobuz.com/api.json/0.2",
|
|
"description": "Production API server"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/album/get": {
|
|
"get": {
|
|
"summary": "Get album details",
|
|
"description": "Retrieve detailed information about a specific album",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "album_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Album ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Album"
|
|
},
|
|
"example": {
|
|
"id": "0000000000",
|
|
"title": "Album Title",
|
|
"artist": {
|
|
"id": "0000000",
|
|
"name": "Artist Name"
|
|
},
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/..._small.jpg",
|
|
"medium": "https://static.qobuz.com/images/covers/..._medium.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/..._large.jpg",
|
|
"extralarge": "https://static.qobuz.com/images/covers/..._extralarge.jpg"
|
|
},
|
|
"release_date": "2023-01-01",
|
|
"duration": 3600,
|
|
"tracks_count": 12,
|
|
"media_count": 1,
|
|
"genre": {
|
|
"id": "000",
|
|
"name": "Rock"
|
|
},
|
|
"label": {
|
|
"id": "00000",
|
|
"name": "Label Name"
|
|
},
|
|
"copyright": "© 2023 Label Name",
|
|
"is_preorderable": false,
|
|
"is_streamable": true,
|
|
"is_purchasable": true,
|
|
"is_super_high_res": false,
|
|
"is_high_res": true,
|
|
"is_lossless": true,
|
|
"is_mp3": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/album/search": {
|
|
"get": {
|
|
"summary": "Search albums",
|
|
"description": "Search for albums by query with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "query",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50,
|
|
"maximum": 500
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AlbumSearchResult"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [
|
|
{
|
|
"id": "0000000000",
|
|
"title": "Album Title",
|
|
"artist": {
|
|
"id": "0000000",
|
|
"name": "Artist Name"
|
|
},
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/..._small.jpg"
|
|
},
|
|
"release_date": "2023-01-01",
|
|
"streamable": true,
|
|
"duration": 3600,
|
|
"tracks_count": 12
|
|
}
|
|
],
|
|
"total": 1,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/album/story": {
|
|
"get": {
|
|
"summary": "Get album story",
|
|
"description": "Retrieve story or editorial content for an album",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "album_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Album ID"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [],
|
|
"total": 0,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/album/suggest": {
|
|
"get": {
|
|
"summary": "Get album suggestions",
|
|
"description": "Get suggested albums based on a seed album",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "album_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Seed album ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AlbumSuggestion"
|
|
},
|
|
"example": {
|
|
"algorithm": "similar_albums",
|
|
"albums": [
|
|
{
|
|
"id": "0000000000",
|
|
"title": "Suggested Album",
|
|
"artist": {
|
|
"id": "0000000",
|
|
"name": "Artist Name"
|
|
},
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/..._small.jpg",
|
|
"medium": "https://static.qobuz.com/images/covers/..._medium.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/..._large.jpg",
|
|
"extralarge": "https://static.qobuz.com/images/covers/..._extralarge.jpg"
|
|
},
|
|
"release_date": "2023-01-01",
|
|
"duration": 3600,
|
|
"tracks_count": 12,
|
|
"media_count": 1,
|
|
"genre": {
|
|
"id": "000",
|
|
"name": "Rock"
|
|
},
|
|
"label": {
|
|
"id": "00000",
|
|
"name": "Label Name"
|
|
},
|
|
"copyright": "© 2023 Label Name",
|
|
"is_preorderable": false,
|
|
"is_streamable": true,
|
|
"is_purchasable": true,
|
|
"is_super_high_res": false,
|
|
"is_high_res": true,
|
|
"is_lossless": true,
|
|
"is_mp3": true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/artist/getImage": {
|
|
"post": {
|
|
"summary": "Get artist images",
|
|
"description": "Retrieve image metadata for one or more artists",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ArtistImageRequest"
|
|
},
|
|
"example": {
|
|
"artist_ids": ["0000000", "0000001", "0000002"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ArtistImage"
|
|
}
|
|
},
|
|
"example": [
|
|
{
|
|
"artist_id": "0000000",
|
|
"image_url": "https://static.qobuz.com/images/artists/...jpg",
|
|
"width": 500,
|
|
"height": 500,
|
|
"format": "jpg"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/artist/getReleasesList": {
|
|
"get": {
|
|
"summary": "Get artist releases list",
|
|
"description": "Retrieve paginated list of releases (albums, singles, EPs) for an artist",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "artist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Artist ID"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50,
|
|
"maximum": 500
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "release_type",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["album", "single", "ep"]
|
|
},
|
|
"description": "Filter by release type"
|
|
},
|
|
{
|
|
"name": "sort",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["release_date", "popularity", "title"]
|
|
},
|
|
"description": "Sort field"
|
|
},
|
|
{
|
|
"name": "order",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["desc", "asc"]
|
|
},
|
|
"description": "Sort order"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Release"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "o4qk5j2xzuvlb",
|
|
"title": "All Stand Together",
|
|
"version": "Deluxe",
|
|
"tracks_count": 12,
|
|
"artist": {
|
|
"id": 1863897,
|
|
"name": {
|
|
"display": "Lost Frequencies"
|
|
}
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 1863897,
|
|
"name": "Lost Frequencies",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/lb/uv/o4qk5j2xzuvlb_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/lb/uv/o4qk5j2xzuvlb_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/lb/uv/o4qk5j2xzuvlb_600.jpg"
|
|
},
|
|
"label": {
|
|
"id": 85930,
|
|
"name": "Epic Amsterdam"
|
|
},
|
|
"genre": {
|
|
"id": 117,
|
|
"name": "Pop",
|
|
"path": [112, 117]
|
|
},
|
|
"release_type": "album",
|
|
"release_tags": ["deluxe"],
|
|
"duration": 2947,
|
|
"dates": {
|
|
"download": "2023-11-10",
|
|
"original": "2023-11-10",
|
|
"stream": "2023-11-10"
|
|
},
|
|
"parental_warning": false,
|
|
"audio_info": {
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2,
|
|
"maximum_sampling_rate": 44.1
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
},
|
|
"awards": [],
|
|
"tracks": {
|
|
"has_more": true,
|
|
"items": []
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/artist/getSimilarArtists": {
|
|
"get": {
|
|
"summary": "Get similar artists",
|
|
"description": "Retrieve artists similar to a given artist with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "artist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Artist ID"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 15,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SimilarArtistsResponse"
|
|
},
|
|
"example": {
|
|
"artists": {
|
|
"limit": 15,
|
|
"offset": 0,
|
|
"total": 48,
|
|
"items": [
|
|
{
|
|
"id": 1280691,
|
|
"name": "Klingande",
|
|
"slug": "klingande",
|
|
"albums_count": 228,
|
|
"picture": "https://static.qobuz.com/images/artists/covers/large/2bdf046c757ab6a976e62406f175b910.jpg",
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/artists/covers/small/2bdf046c757ab6a976e62406f175b910.jpg",
|
|
"medium": "https://static.qobuz.com/images/artists/covers/medium/2bdf046c757ab6a976e62406f175b910.jpg",
|
|
"large": "https://static.qobuz.com/images/artists/covers/large/2bdf046c757ab6a976e62406f175b910.jpg",
|
|
"extralarge": "https://static.qobuz.com/images/artists/covers/large/2bdf046c757ab6a976e62406f175b910.jpg",
|
|
"mega": "https://static.qobuz.com/images/artists/covers/large/2bdf046c757ab6a976e62406f175b910.jpg"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/artist/page": {
|
|
"get": {
|
|
"summary": "Get artist page",
|
|
"description": "Retrieve detailed artist page including biography, similar artists, and top tracks",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "artist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Artist ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ArtistPage"
|
|
},
|
|
"example": {
|
|
"id": 1863897,
|
|
"name": {
|
|
"display": "Lost Frequencies"
|
|
},
|
|
"artist_category": "performer",
|
|
"biography": {
|
|
"content": "Belgian producer Lost Frequencies has achieved massive international success...",
|
|
"source": null,
|
|
"language": "en"
|
|
},
|
|
"images": {
|
|
"portrait": {
|
|
"hash": "77817762dd3688191f752509901e4338",
|
|
"format": "jpg"
|
|
}
|
|
},
|
|
"similar_artists": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": 1280691,
|
|
"name": {
|
|
"display": "Klingande"
|
|
},
|
|
"images": {
|
|
"portrait": {
|
|
"hash": "2bdf046c757ab6a976e62406f175b910",
|
|
"format": "jpg"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"top_tracks": [
|
|
{
|
|
"id": 256172621,
|
|
"isrc": "BEHP42400010",
|
|
"title": "No Limit",
|
|
"artist": {
|
|
"id": 1863897,
|
|
"name": {
|
|
"display": "Lost Frequencies"
|
|
}
|
|
},
|
|
"album": {
|
|
"id": "o4qk5j2xzuvlb",
|
|
"title": "All Stand Together",
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/lb/uv/o4qk5j2xzuvlb_230.jpg"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/artist/search": {
|
|
"get": {
|
|
"summary": "Search artists",
|
|
"description": "Search for artists by query with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "query",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 8,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ArtistSearchResponse"
|
|
},
|
|
"example": {
|
|
"query": "lost frequencies",
|
|
"artists": {
|
|
"limit": 8,
|
|
"offset": 0,
|
|
"analytics": {
|
|
"search_external_id": "2ee9f2c093a393cb875db77518c52fbe"
|
|
},
|
|
"total": 6,
|
|
"items": [
|
|
{
|
|
"picture": "https://static.qobuz.com/images/artists/covers/small/77817762dd3688191f752509901e4338.jpg",
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/artists/covers/small/77817762dd3688191f752509901e4338.jpg",
|
|
"medium": "https://static.qobuz.com/images/artists/covers/medium/77817762dd3688191f752509901e4338.jpg",
|
|
"large": "https://static.qobuz.com/images/artists/covers/large/77817762dd3688191f752509901e4338.jpg",
|
|
"extralarge": "https://static.qobuz.com/images/artists/covers/large/77817762dd3688191f752509901e4338.jpg",
|
|
"mega": "https://static.qobuz.com/images/artists/covers/large/77817762dd3688191f752509901e4338.jpg"
|
|
},
|
|
"name": "Lost Frequencies",
|
|
"slug": "lost-frequencies",
|
|
"albums_count": 990,
|
|
"id": 1863897
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/artist/story": {
|
|
"get": {
|
|
"summary": "Get artist story",
|
|
"description": "Retrieve story or editorial content for an artist",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "artist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Artist ID"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 5
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [],
|
|
"total": 0,
|
|
"limit": 5,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/award/getAlbums": {
|
|
"get": {
|
|
"summary": "Get albums by award",
|
|
"description": "Retrieve albums that have received a specific award with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "award_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Award ID"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 25,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AwardAlbum"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "0060252772410",
|
|
"title": "Lungs",
|
|
"version": "Deluxe Version",
|
|
"track_count": 20,
|
|
"duration": 4066,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/10/24/0060252772410_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/10/24/0060252772410_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/10/24/0060252772410_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 112890,
|
|
"name": "Florence + The Machine",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 17426,
|
|
"name": "Universal-Island Records Ltd."
|
|
},
|
|
"genre": {
|
|
"id": 113,
|
|
"name": "Alternativa & Indie",
|
|
"path": [112, 119, 113]
|
|
},
|
|
"dates": {
|
|
"download": "2009-07-06",
|
|
"original": "2009-07-06",
|
|
"purchase": "2009-07-06",
|
|
"stream": "2009-07-06"
|
|
},
|
|
"awards": [
|
|
{
|
|
"id": 70,
|
|
"name": "Discoteca Ideal Qobuz",
|
|
"awarded_at": "2026-02-03"
|
|
}
|
|
],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 44.1,
|
|
"maximum_bit_depth": 16,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": false,
|
|
"hires_purchasable": false
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 25,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/discover/index": {
|
|
"get": {
|
|
"summary": "Get discover index",
|
|
"description": "Retrieve discover page content including banners and new releases",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "genre_ids",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Comma-separated genre IDs to filter by"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DiscoverContainer"
|
|
},
|
|
"example": {
|
|
"containers": {
|
|
"banners": {
|
|
"id": "banners",
|
|
"data": {
|
|
"has_more": false,
|
|
"items": []
|
|
}
|
|
},
|
|
"new_releases": {
|
|
"id": "newReleases",
|
|
"data": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "xxc24b1r0wt8q",
|
|
"title": "i-330",
|
|
"version": null,
|
|
"track_count": 12,
|
|
"duration": 2764,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 28885011,
|
|
"name": "Flore Benguigui & The Sensible Notes",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 108875,
|
|
"name": "Universal Music Division Decca Records France"
|
|
},
|
|
"genre": {
|
|
"id": 89,
|
|
"name": "Jazz vocal",
|
|
"path": [80, 89]
|
|
},
|
|
"dates": {
|
|
"download": "2026-03-13",
|
|
"original": "2026-03-13",
|
|
"purchase": "2026-03-13",
|
|
"stream": "2026-03-13"
|
|
},
|
|
"awards": [
|
|
{
|
|
"id": 88,
|
|
"name": "Qobuzissime",
|
|
"awarded_at": "2026-03-20"
|
|
}
|
|
],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 48,
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/discover/mostStreamed": {
|
|
"get": {
|
|
"summary": "Get most streamed albums",
|
|
"description": "Retrieve most streamed albums with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AwardAlbum"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "x165phie4qqlc",
|
|
"title": "For Mary",
|
|
"version": null,
|
|
"track_count": 12,
|
|
"duration": 2764,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/lc/qq/x165phie4qqlc_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/lc/qq/x165phie4qqlc_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/lc/qq/x165phie4qqlc_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 18377461,
|
|
"name": "Olive Jones",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 2367808,
|
|
"name": "Nettwerk Music Group"
|
|
},
|
|
"genre": {
|
|
"id": 134,
|
|
"name": "Soul",
|
|
"path": [127, 134]
|
|
},
|
|
"dates": {
|
|
"download": "2026-03-13",
|
|
"original": "2026-03-13",
|
|
"purchase": "2026-03-13",
|
|
"stream": "2026-03-13"
|
|
},
|
|
"awards": [
|
|
{
|
|
"id": 88,
|
|
"name": "Qobuzissime",
|
|
"awarded_at": "2026-03-13"
|
|
}
|
|
],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 44.1,
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/discover/newReleases": {
|
|
"get": {
|
|
"summary": "Get new releases",
|
|
"description": "Retrieve newly released albums with pagination, optionally filtered by genre",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "genre_ids",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Comma-separated genre IDs to filter by"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AwardAlbum"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "xxc24b1r0wt8q",
|
|
"title": "i-330",
|
|
"version": null,
|
|
"track_count": 12,
|
|
"duration": 2764,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 28885011,
|
|
"name": "Flore Benguigui & The Sensible Notes",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 108875,
|
|
"name": "Universal Music Division Decca Records France"
|
|
},
|
|
"genre": {
|
|
"id": 89,
|
|
"name": "Jazz vocal",
|
|
"path": [80, 89]
|
|
},
|
|
"dates": {
|
|
"download": "2026-03-13",
|
|
"original": "2026-03-13",
|
|
"purchase": "2026-03-13",
|
|
"stream": "2026-03-13"
|
|
},
|
|
"awards": [
|
|
{
|
|
"id": 88,
|
|
"name": "Qobuzissime",
|
|
"awarded_at": "2026-03-20"
|
|
}
|
|
],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 48,
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/discover/playlists": {
|
|
"get": {
|
|
"summary": "Get discover playlists",
|
|
"description": "Retrieve curated playlists for discovery, optionally filtered by genre or tags",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "genre_ids",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Comma-separated genre IDs to filter by"
|
|
},
|
|
{
|
|
"name": "tags",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Tags to filter by (e.g., 'hi-res')"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 25,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Playlist"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": 7801943,
|
|
"name": "Lo último en Rock",
|
|
"owner": {
|
|
"id": 1752421,
|
|
"name": "Qobuz Latinoamérica"
|
|
},
|
|
"image": {
|
|
"rectangle": "https://static.qobuz.com/images/playlists/7801943_cb084b9bc2b9e578e26ed41384465fe7_rectangle.jpg",
|
|
"covers": [
|
|
"https://static.qobuz.com/images/covers/98/g5/e644dwd1dg598_300.jpg",
|
|
"https://static.qobuz.com/images/covers/nf/p6/nbbgfku1fp6nf_300.jpg",
|
|
"https://static.qobuz.com/images/covers/70/o9/ywkqfaouyo970_300.jpg",
|
|
"https://static.qobuz.com/images/covers/17/kc/cxdas1z89kc17_300.jpg"
|
|
]
|
|
},
|
|
"description": "Con Muse, Foo Fighters, Peter Frampton, The Black Keys, Angine de Poitrine, Dropkick Murphys, The Afghan Whigs, Tedeschi Trucks Band, The Black Crowes, Glen Hansard, DOGSTAR, The Lemon Twigs, The Pretty Reckless, Violet Grohl, Iceage, Yonaka, The Warning, Oasis, The Sleeveens, Talking Heads, Queen, Black Stone Cherry, Mclusky, Pacific Avenue, Social Distorsion...\n\nÚltima actualización el 23 de marzo de 2026\n\nFoto: The Black Crowes © Ross Halfin",
|
|
"duration": 17779,
|
|
"tracks_count": 80,
|
|
"genres": [
|
|
{
|
|
"id": 112,
|
|
"name": "Pop/Rock",
|
|
"path": [112]
|
|
}
|
|
],
|
|
"tags": [
|
|
{
|
|
"id": 19,
|
|
"slug": "new",
|
|
"name": "Novedades"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 25,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/discover/pressAward": {
|
|
"get": {
|
|
"summary": "Get press award albums",
|
|
"description": "Retrieve albums that have received press awards (e.g., Pitchfork: Best New Music) with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 25,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AwardAlbum"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "xxc24b1r0wt8q",
|
|
"title": "i-330",
|
|
"version": null,
|
|
"track_count": 12,
|
|
"duration": 2764,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 28885011,
|
|
"name": "Flore Benguigui & The Sensible Notes",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 108875,
|
|
"name": "Universal Music Division Decca Records France"
|
|
},
|
|
"genre": {
|
|
"id": 89,
|
|
"name": "Jazz vocal",
|
|
"path": [80, 89]
|
|
},
|
|
"dates": {
|
|
"download": "2026-03-13",
|
|
"original": "2026-03-13",
|
|
"purchase": "2026-03-13",
|
|
"stream": "2026-03-13"
|
|
},
|
|
"awards": [
|
|
{
|
|
"id": 89,
|
|
"name": "Pitchfork: Best New Music",
|
|
"awarded_at": "2026-03-20"
|
|
}
|
|
],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 48,
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 25,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/dynamic/suggest": {
|
|
"post": {
|
|
"summary": "Get dynamic track suggestions",
|
|
"description": "Generate track recommendations based on listening history",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["tracks"],
|
|
"properties": {
|
|
"tracks": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Track ID"
|
|
},
|
|
"play_count": {
|
|
"type": "integer",
|
|
"description": "Number of times track was played"
|
|
},
|
|
"last_played": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "ISO 8601 timestamp of last play"
|
|
}
|
|
},
|
|
"required": ["id"]
|
|
},
|
|
"description": "List of recently played tracks"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"tracks": [
|
|
{
|
|
"id": "256172621",
|
|
"play_count": 5,
|
|
"last_played": "2026-03-25T12:00:00Z"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"tracks": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Track ID"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Track title"
|
|
},
|
|
"artist": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"album": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"description": "Duration in seconds"
|
|
},
|
|
"isrc": {
|
|
"type": "string",
|
|
"description": "ISRC code"
|
|
},
|
|
"preview_url": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "URL to track preview"
|
|
}
|
|
}
|
|
},
|
|
"description": "Recommended tracks"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"tracks": [
|
|
{
|
|
"id": "256172622",
|
|
"title": "No Limit",
|
|
"artist": {
|
|
"id": 1863897,
|
|
"name": "Lost Frequencies"
|
|
},
|
|
"album": {
|
|
"id": "o4qk5j2xzuvlb",
|
|
"title": "All Stand Together",
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/lb/uv/o4qk5j2xzuvlb_230.jpg"
|
|
}
|
|
},
|
|
"duration": 214,
|
|
"isrc": "BEHP42400010",
|
|
"preview_url": "https://preview.qobuz.com/track/256172622"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/event/reportTrackContext": {
|
|
"post": {
|
|
"summary": "Report track context event",
|
|
"description": "Send analytics event for track playback context (e.g., playlist, album, radio)",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["track_id", "context"],
|
|
"properties": {
|
|
"track_id": {
|
|
"type": "string",
|
|
"description": "Track ID"
|
|
},
|
|
"context": {
|
|
"type": "string",
|
|
"description": "Context where track was played (e.g., 'playlist', 'album', 'radio', 'search')"
|
|
},
|
|
"timestamp": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "Event timestamp (ISO 8601)"
|
|
},
|
|
"event_type": {
|
|
"type": "string",
|
|
"enum": ["play", "pause", "skip", "complete"],
|
|
"description": "Type of playback event"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"track_id": "256172621",
|
|
"context": "playlist",
|
|
"timestamp": "2026-03-25T12:00:00Z",
|
|
"event_type": "play"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"success": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"success": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/favorite/create": {
|
|
"post": {
|
|
"summary": "Create favorite",
|
|
"description": "Add an item (track, album, artist, playlist) to user's favorites",
|
|
"security": [
|
|
{
|
|
"UserToken": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["type", "id"],
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["track", "album", "artist", "playlist"],
|
|
"description": "Type of item to favorite"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"description": "ID of the item"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"type": "track",
|
|
"id": "256172621"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"success": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"success": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/favorite/delete": {
|
|
"post": {
|
|
"summary": "Delete favorite",
|
|
"description": "Remove an item from user's favorites",
|
|
"security": [
|
|
{
|
|
"UserToken": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["type", "id"],
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["track", "album", "artist", "playlist"],
|
|
"description": "Type of item to unfavorite"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"description": "ID of the item"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"type": "track",
|
|
"id": "256172621"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"success": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"success": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/favorite/getNewReleases": {
|
|
"get": {
|
|
"summary": "Get new releases from favorites",
|
|
"description": "Retrieve new releases from favorite artists, albums, or tracks with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "type",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["artists", "albums", "tracks"],
|
|
"default": "artists"
|
|
},
|
|
"description": "Type of favorites to get new releases for"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 25,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AwardAlbum"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [
|
|
{
|
|
"id": "b9iimunju35gy",
|
|
"title": "So Much Beauty (Around Us)",
|
|
"version": null,
|
|
"track_count": 1,
|
|
"duration": 154,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/gy/35/b9iimunju35gy_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/gy/35/b9iimunju35gy_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/gy/35/b9iimunju35gy_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 1863897,
|
|
"name": "Lost Frequencies",
|
|
"roles": ["main-artist"]
|
|
},
|
|
{
|
|
"id": 613922,
|
|
"name": "Nathan Nicholson",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 85930,
|
|
"name": "Epic Amsterdam"
|
|
},
|
|
"genre": {
|
|
"id": 68,
|
|
"name": "House",
|
|
"path": [64, 68]
|
|
},
|
|
"dates": {
|
|
"download": "2026-03-20",
|
|
"original": "2026-03-20",
|
|
"purchase": "2026-03-20",
|
|
"stream": "2026-03-20"
|
|
},
|
|
"awards": [],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 44.1,
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
}
|
|
}
|
|
],
|
|
"total": 1,
|
|
"limit": 25,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/favorite/getUserFavoriteIds": {
|
|
"get": {
|
|
"summary": "Get user favorite IDs",
|
|
"description": "Retrieve IDs of user's favorite items by type (albums, artists, tracks, etc.)",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"albums": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Array of favorite album IDs"
|
|
},
|
|
"articles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Array of favorite article IDs"
|
|
},
|
|
"artists": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Array of favorite artist IDs"
|
|
},
|
|
"awards": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Array of favorite award IDs"
|
|
},
|
|
"tracks": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Array of favorite track IDs"
|
|
},
|
|
"labels": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Array of favorite label IDs"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"albums": ["ftpnmecvoyiac", "xxc24b1r0wt8q", "byz76ojp231db"],
|
|
"articles": [],
|
|
"artists": [1863897, 2458997, 3722442, 267547],
|
|
"awards": [],
|
|
"tracks": [35883373, 350020, 246342230, 123287900, 129183843],
|
|
"labels": []
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/file": {
|
|
"get": {
|
|
"summary": "Get audio file",
|
|
"description": "Stream audio file segment (used internally by streaming URLs)",
|
|
"parameters": [
|
|
{
|
|
"name": "uid",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "eid",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "fmt",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "fid",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "profile",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "s",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "app_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cid",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "etsp",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "hmac",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Audio file segment",
|
|
"content": {
|
|
"audio/*": {
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "binary"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/file/url": {
|
|
"get": {
|
|
"summary": "Get file URL",
|
|
"description": "Retrieve streaming URL and metadata for a track",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "track_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Track ID"
|
|
},
|
|
{
|
|
"name": "format_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"enum": [5, 6, 7, 27]
|
|
},
|
|
"description": "Audio format ID (5=MP3 320, 6=Lossless, 7=Hi-Res, 27=Hi-Res 2)"
|
|
},
|
|
{
|
|
"name": "intent",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["stream", "import", "download"]
|
|
},
|
|
"description": "Intended use of the file"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"file_type": {
|
|
"type": "string",
|
|
"enum": ["full", "preview"]
|
|
},
|
|
"track_id": {
|
|
"type": "integer"
|
|
},
|
|
"format_id": {
|
|
"type": "integer"
|
|
},
|
|
"audio_file_id": {
|
|
"type": "integer"
|
|
},
|
|
"sampling_rate": {
|
|
"type": "integer"
|
|
},
|
|
"bits_depth": {
|
|
"type": "integer"
|
|
},
|
|
"n_channels": {
|
|
"type": "integer"
|
|
},
|
|
"duration": {
|
|
"type": "number"
|
|
},
|
|
"n_samples": {
|
|
"type": "integer"
|
|
},
|
|
"mime_type": {
|
|
"type": "string"
|
|
},
|
|
"url_template": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"n_segments": {
|
|
"type": "integer"
|
|
},
|
|
"key_id": {
|
|
"type": "string"
|
|
},
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"restrictions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"code": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"blob": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"file_type": "full",
|
|
"track_id": 378123655,
|
|
"format_id": 7,
|
|
"audio_file_id": 329231102,
|
|
"sampling_rate": 48000,
|
|
"bits_depth": 24,
|
|
"n_channels": 2,
|
|
"duration": 52.693333333333335,
|
|
"n_samples": 2529280,
|
|
"mime_type": "audio/mp4; codecs=\"flac\"",
|
|
"url_template": "https://streaming-qobuz-sec.akamaized.net/file?uid=8029441&eid=378123655&fmt=7&fid=329231102&profile=sec-1&s=$SEGMENT$&app_id=312369995&cid=3261622&etsp=1774634583&hmac=ieIWGzt2mjgwTA7jjycdZUVgI78",
|
|
"n_segments": 6,
|
|
"key_id": "f9596d1d-d4ff-b84b-255b-37768aa62f25",
|
|
"key": "qbz-1.wi1Dfv-w70hjD9jLn4goT58s1_WkSzae2GW4u4cwwi8.DamdSDikJiPWBeVLoFimHQ",
|
|
"blob": "100000.Bxl-2gCMtO5WmHFoHsVzzMSK2DkupYrYWI9YoJS-uhfcFZO_rQcSUMSOkgJLulBP.rdDUaxiiyKAs1t-4J_dFYn5sjlk"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/genre/list": {
|
|
"get": {
|
|
"summary": "Get genre list",
|
|
"description": "Retrieve list of music genres with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 25,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"genres": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "integer"
|
|
},
|
|
"offset": {
|
|
"type": "integer"
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "Genre ID"
|
|
},
|
|
"color": {
|
|
"type": "string",
|
|
"description": "Hex color code"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Genre name"
|
|
},
|
|
"path": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Hierarchical path of genre IDs"
|
|
},
|
|
"slug": {
|
|
"type": "string",
|
|
"description": "URL slug"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"genres": {
|
|
"limit": 25,
|
|
"offset": 0,
|
|
"total": 13,
|
|
"items": [
|
|
{
|
|
"id": 112,
|
|
"color": "#5eabc1",
|
|
"name": "Pop/Rock",
|
|
"path": [112],
|
|
"slug": "pop-rock"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/label/explore": {
|
|
"get": {
|
|
"summary": "Explore labels",
|
|
"description": "Browse music labels with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 12,
|
|
"maximum": 100
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "Label ID"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Label name"
|
|
},
|
|
"image": {
|
|
"type": "string",
|
|
"description": "URL to label background image"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Label description"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": 322,
|
|
"name": "Naxos",
|
|
"image": "https://static.qobuz.com/images/labels/backgrounds/naxos.jpg",
|
|
"description": null
|
|
},
|
|
{
|
|
"id": 1630797,
|
|
"name": "Young",
|
|
"image": "https://static.qobuz.com/images/labels/backgrounds/young-8.jpg",
|
|
"description": null
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 12,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/label/getList": {
|
|
"post": {
|
|
"summary": "Get labels by IDs",
|
|
"description": "Retrieve label details for multiple label IDs",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["labels_id"],
|
|
"properties": {
|
|
"labels_id": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Array of label IDs"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"labels_id": ["7402", "108875", "4592", "16469"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"labels": {
|
|
"type": "object",
|
|
"properties": {
|
|
"total": {
|
|
"type": "integer",
|
|
"description": "Total number of labels returned"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "Label ID"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Label name"
|
|
},
|
|
"image": {
|
|
"type": "string",
|
|
"description": "URL to label background image"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Label description"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"labels": {
|
|
"total": 12,
|
|
"items": [
|
|
{
|
|
"id": 7402,
|
|
"name": "WM Germany",
|
|
"image": "https://static.qobuz.com/images/labels/backgrounds/wm-germany.jpg",
|
|
"description": null
|
|
},
|
|
{
|
|
"id": 108875,
|
|
"name": "Universal Music Division Decca Records France",
|
|
"image": null,
|
|
"description": null
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/label/page": {
|
|
"get": {
|
|
"summary": "Get label page",
|
|
"description": "Retrieve detailed label information including releases",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "label_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Label ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "Label ID"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Label name"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Label description"
|
|
},
|
|
"image": {
|
|
"type": "string",
|
|
"description": "URL to label background image"
|
|
},
|
|
"releases": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"enum": ["nextReleases", "awardedReleases", "all"],
|
|
"description": "Release category ID"
|
|
},
|
|
"data": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AwardAlbum"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"id": 190680,
|
|
"name": "Spinnin' Records",
|
|
"description": null,
|
|
"image": null,
|
|
"releases": [
|
|
{
|
|
"id": "nextReleases",
|
|
"data": {
|
|
"has_more": false,
|
|
"items": []
|
|
}
|
|
},
|
|
{
|
|
"id": "awardedReleases",
|
|
"data": {
|
|
"has_more": false,
|
|
"items": []
|
|
}
|
|
},
|
|
{
|
|
"id": "all",
|
|
"data": {
|
|
"has_more": true,
|
|
"items": [
|
|
{
|
|
"id": "clipr8m31i43l",
|
|
"title": "Last Night On Earth",
|
|
"version": null,
|
|
"track_count": 1,
|
|
"duration": 177,
|
|
"parental_warning": false,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/3l/i4/clipr8m31i43l_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/3l/i4/clipr8m31i43l_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/3l/i4/clipr8m31i43l_600.jpg"
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 2335767,
|
|
"name": "Cheat Codes",
|
|
"roles": ["main-artist"]
|
|
},
|
|
{
|
|
"id": 1312712,
|
|
"name": "Jonita Gandhi",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"label": {
|
|
"id": 190680,
|
|
"name": "Spinnin' Records"
|
|
},
|
|
"genre": {
|
|
"id": 129,
|
|
"name": "Dance",
|
|
"path": [64, 129]
|
|
},
|
|
"dates": {
|
|
"download": "2026-03-20",
|
|
"original": "2026-03-20",
|
|
"purchase": "2026-03-20",
|
|
"stream": "2026-03-20"
|
|
},
|
|
"awards": [],
|
|
"audio_info": {
|
|
"maximum_sampling_rate": 48,
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
}
|
|
}
|
|
],
|
|
"total": 100,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/label/story": {
|
|
"get": {
|
|
"summary": "Get label story",
|
|
"description": "Retrieve story or editorial content for a label",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "label_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Label ID"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [],
|
|
"total": 0,
|
|
"limit": 4,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/most-popular/get": {
|
|
"get": {
|
|
"summary": "Get most popular search results",
|
|
"description": "Retrieve most popular artists, albums, and tracks matching a search query",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "query",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 30
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "string"
|
|
},
|
|
"most_popular": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "integer"
|
|
},
|
|
"offset": {
|
|
"type": "integer"
|
|
},
|
|
"analytics": {
|
|
"type": "object",
|
|
"properties": {
|
|
"search_external_id": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["artists", "albums", "tracks"]
|
|
},
|
|
"content": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"query": "l",
|
|
"most_popular": {
|
|
"limit": 30,
|
|
"offset": 0,
|
|
"analytics": {
|
|
"search_external_id": "b5661a82f499def0d095a88f9f77a50b"
|
|
},
|
|
"total": 1000,
|
|
"items": [
|
|
{
|
|
"type": "artists",
|
|
"content": {
|
|
"type": "artists",
|
|
"picture": "https://static.qobuz.com/images/artists/covers/small/cccf75ebc101b321a2951112acec4f6b.jpg",
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/artists/covers/small/cccf75ebc101b321a2951112acec4f6b.jpg",
|
|
"medium": "https://static.qobuz.com/images/artists/covers/medium/cccf75ebc101b321a2951112acec4f6b.jpg",
|
|
"large": "https://static.qobuz.com/images/artists/covers/large/cccf75ebc101b321a2951112acec4f6b.jpg",
|
|
"extralarge": "https://static.qobuz.com/images/artists/covers/large/cccf75ebc101b321a2951112acec4f6b.jpg",
|
|
"mega": "https://static.qobuz.com/images/artists/covers/large/cccf75ebc101b321a2951112acec4f6b.jpg"
|
|
},
|
|
"name": "Lady Gaga",
|
|
"slug": "lady-gaga",
|
|
"albums_count": 1061,
|
|
"id": 61585
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/oauth2/login": {
|
|
"get": {
|
|
"summary": "User login",
|
|
"description": "Authenticate user with username and password (password must be MD5 hashed). Returns user details and OAuth2 tokens.",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "User email or login"
|
|
},
|
|
{
|
|
"name": "password",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "MD5 hash of the user's raw password"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Authentication successful",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"user": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"publicId": {
|
|
"type": "string"
|
|
},
|
|
"email": {
|
|
"type": "string"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
},
|
|
"firstname": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"lastname": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"display_name": {
|
|
"type": "string"
|
|
},
|
|
"country_code": {
|
|
"type": "string"
|
|
},
|
|
"language_code": {
|
|
"type": "string"
|
|
},
|
|
"zone": {
|
|
"type": "string"
|
|
},
|
|
"store": {
|
|
"type": "string"
|
|
},
|
|
"country": {
|
|
"type": "string"
|
|
},
|
|
"avatar": {
|
|
"type": "string"
|
|
},
|
|
"genre": {
|
|
"type": "string"
|
|
},
|
|
"age": {
|
|
"type": "integer"
|
|
},
|
|
"birthdate": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"creation_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"zipcode": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"subscription": {
|
|
"type": "object",
|
|
"properties": {
|
|
"offer": {
|
|
"type": "string"
|
|
},
|
|
"periodicity": {
|
|
"type": "string"
|
|
},
|
|
"start_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"end_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"is_canceled": {
|
|
"type": "boolean"
|
|
},
|
|
"household_size_max": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"credential": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"lossy_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"lossless_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_purchases_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"mobile_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"offline_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"hfp_purchase": {
|
|
"type": "boolean"
|
|
},
|
|
"included_format_group_ids": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"color_scheme": {
|
|
"type": "object",
|
|
"properties": {
|
|
"logo": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"short_label": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"last_update": {
|
|
"type": "object",
|
|
"properties": {
|
|
"favorite": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_album": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_artist": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_track": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_label": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_award": {
|
|
"type": "integer"
|
|
},
|
|
"playlist": {
|
|
"type": "integer"
|
|
},
|
|
"purchase": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"store_features": {
|
|
"type": "object",
|
|
"properties": {
|
|
"download": {
|
|
"type": "boolean"
|
|
},
|
|
"streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"editorial": {
|
|
"type": "boolean"
|
|
},
|
|
"club": {
|
|
"type": "boolean"
|
|
},
|
|
"wallet": {
|
|
"type": "boolean"
|
|
},
|
|
"weeklyq": {
|
|
"type": "boolean"
|
|
},
|
|
"autoplay": {
|
|
"type": "boolean"
|
|
},
|
|
"inapp_purchase_subscripton": {
|
|
"type": "boolean"
|
|
},
|
|
"opt_in": {
|
|
"type": "boolean"
|
|
},
|
|
"pre_register_opt_in": {
|
|
"type": "boolean"
|
|
},
|
|
"pre_register_zipcode": {
|
|
"type": "boolean"
|
|
},
|
|
"music_import": {
|
|
"type": "boolean"
|
|
},
|
|
"radio": {
|
|
"type": "boolean"
|
|
},
|
|
"stream_purchase": {
|
|
"type": "boolean"
|
|
},
|
|
"lyrics": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"player_settings": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sonos_audio_format": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"externals": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"oauth2": {
|
|
"type": "object",
|
|
"properties": {
|
|
"token_type": {
|
|
"type": "string"
|
|
},
|
|
"access_token": {
|
|
"type": "string"
|
|
},
|
|
"refresh_token": {
|
|
"type": "string"
|
|
},
|
|
"expires_in": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"user": {
|
|
"id": 8029441,
|
|
"publicId": "qobuz:user:X9vX4tZykliwm",
|
|
"email": "joren@directme.in",
|
|
"login": "joren@directme.in",
|
|
"firstname": null,
|
|
"lastname": null,
|
|
"display_name": "Joren",
|
|
"country_code": "AR",
|
|
"language_code": "es",
|
|
"zone": "AR",
|
|
"store": "AR-es",
|
|
"country": "AR",
|
|
"avatar": "https://www.gravatar.com/avatar/6f693544cde79a30762dd7274ae2add6?s=50&d=mm",
|
|
"genre": "male",
|
|
"age": 22,
|
|
"birthdate": "2004-02-05",
|
|
"creation_date": "2025-10-23",
|
|
"zipcode": null,
|
|
"subscription": {
|
|
"offer": "studio",
|
|
"periodicity": "monthly",
|
|
"start_date": "2025-10-23",
|
|
"end_date": "2026-04-22",
|
|
"is_canceled": false,
|
|
"household_size_max": 1
|
|
},
|
|
"credential": {
|
|
"id": 3261622,
|
|
"label": "streaming-studio",
|
|
"description": "Suscriptor Qobuz Studio",
|
|
"parameters": {
|
|
"lossy_streaming": true,
|
|
"lossless_streaming": true,
|
|
"hires_streaming": true,
|
|
"hires_purchases_streaming": true,
|
|
"mobile_streaming": true,
|
|
"offline_streaming": true,
|
|
"hfp_purchase": false,
|
|
"included_format_group_ids": [1,2,3,4],
|
|
"color_scheme": { "logo": "#B8D729" },
|
|
"label": "Qobuz Studio",
|
|
"short_label": "Studio",
|
|
"source": "subscription"
|
|
}
|
|
},
|
|
"last_update": {
|
|
"favorite": 1774542127,
|
|
"favorite_album": 1774484091,
|
|
"favorite_artist": 1774459997,
|
|
"favorite_track": 1774542127,
|
|
"favorite_label": 1761211040,
|
|
"favorite_award": 1761211040,
|
|
"playlist": 1774388881,
|
|
"purchase": 1761211287
|
|
},
|
|
"store_features": {
|
|
"download": false,
|
|
"streaming": true,
|
|
"editorial": true,
|
|
"club": false,
|
|
"wallet": false,
|
|
"weeklyq": true,
|
|
"autoplay": true,
|
|
"inapp_purchase_subscripton": true,
|
|
"opt_in": true,
|
|
"pre_register_opt_in": true,
|
|
"pre_register_zipcode": false,
|
|
"music_import": true,
|
|
"radio": true,
|
|
"stream_purchase": true,
|
|
"lyrics": true
|
|
},
|
|
"player_settings": { "sonos_audio_format": 7 },
|
|
"externals": {}
|
|
},
|
|
"oauth2": {
|
|
"token_type": "bearer",
|
|
"access_token": "8MCZhiPj5sARMaiPddypQYJw6ga55ZoF",
|
|
"refresh_token": "0B1Dt2BXl1L2XBxTDhxLUou3iBFkv57V",
|
|
"expires_in": 1382400
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/oauth2/token": {
|
|
"post": {
|
|
"summary": "Refresh OAuth2 token",
|
|
"description": "Exchange a refresh token for a new access token using client credentials",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"client_id": {
|
|
"type": "string"
|
|
},
|
|
"client_secret": {
|
|
"type": "string"
|
|
},
|
|
"refresh_token": {
|
|
"type": "string"
|
|
},
|
|
"grant_type": {
|
|
"type": "string",
|
|
"enum": ["refresh_token"]
|
|
}
|
|
},
|
|
"required": ["client_id", "client_secret", "refresh_token", "grant_type"]
|
|
},
|
|
"example": {
|
|
"client_id": "312369995",
|
|
"client_secret": "828193befd12dc579e9cc1d402d3be1e",
|
|
"refresh_token": "k9ZRLBs8DiqBy2KCENd9K9zujfSmcCWW",
|
|
"grant_type": "refresh_token"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Token refresh successful",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"access_token": {
|
|
"type": "string"
|
|
},
|
|
"refresh_token": {
|
|
"type": "string"
|
|
},
|
|
"expires_in": {
|
|
"type": "integer"
|
|
},
|
|
"token_type": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"access_token": "sQW4A0Eg4XXripGbbXgVsZMhICodAr2z",
|
|
"refresh_token": "FRBKKYury9psGm8WxfEmtLL6CISs3Bd7",
|
|
"expires_in": 1382400,
|
|
"token_type": "bearer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/addTracks": {
|
|
"post": {
|
|
"summary": "Add tracks to playlist",
|
|
"description": "Add one or more tracks to a playlist. If no_duplicate is true, duplicates will be rejected with 409 error.",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"playlist_id": {
|
|
"type": "integer"
|
|
},
|
|
"track_ids": {
|
|
"type": "string",
|
|
"description": "Comma-separated list of track IDs"
|
|
},
|
|
"no_duplicate": {
|
|
"type": "boolean",
|
|
"default": true
|
|
}
|
|
},
|
|
"required": ["playlist_id", "track_ids"]
|
|
},
|
|
"example": {
|
|
"playlist_id": 47576025,
|
|
"track_ids": "35883373",
|
|
"no_duplicate": true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Tracks added successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Playlist"
|
|
},
|
|
"example": {
|
|
"id": 47576025,
|
|
"name": "assorted_genres.bin",
|
|
"description": "This has ended up being a playlist for songs that don't fit in other playlists",
|
|
"tracks_count": 727,
|
|
"users_count": 0,
|
|
"duration": 146293,
|
|
"public_at": 1764889200,
|
|
"created_at": 1764937232,
|
|
"updated_at": 1774548274,
|
|
"is_public": true,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 8029441,
|
|
"name": "Joren"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Duplicate tracks found and no_duplicate is true",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"code": {
|
|
"type": "integer"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"properties": {
|
|
"playlist_id": {
|
|
"type": "integer"
|
|
},
|
|
"duplicate_track_ids": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"status": "error",
|
|
"code": 409,
|
|
"message": "Duplicate track(s) found - no track(s) added to playlist",
|
|
"data": {
|
|
"playlist_id": 47576025,
|
|
"duplicate_track_ids": ["35883373"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/create": {
|
|
"post": {
|
|
"summary": "Create a new playlist",
|
|
"description": "Create a playlist with optional initial tracks and visibility settings",
|
|
"security": [
|
|
{
|
|
"UserToken": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Playlist name"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"track_ids": {
|
|
"type": "string",
|
|
"description": "Optional comma-separated list of track IDs to add initially"
|
|
},
|
|
"is_public": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"is_collaborative": {
|
|
"type": "boolean",
|
|
"default": false
|
|
}
|
|
},
|
|
"required": ["name"]
|
|
},
|
|
"example": {
|
|
"name": "New playlist [9]",
|
|
"description": "",
|
|
"track_ids": "",
|
|
"is_public": false,
|
|
"is_collaborative": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Playlist created successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Playlist"
|
|
},
|
|
"example": {
|
|
"id": 61150456,
|
|
"name": "New playlist [9]",
|
|
"description": "",
|
|
"tracks_count": 0,
|
|
"users_count": 0,
|
|
"duration": 0,
|
|
"public_at": false,
|
|
"created_at": 1774548375,
|
|
"updated_at": 1774548375,
|
|
"is_public": false,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 8029441,
|
|
"name": "Joren"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/delete": {
|
|
"get": {
|
|
"summary": "Delete a playlist",
|
|
"description": "Delete a playlist by ID",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "playlist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Playlist ID to delete"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Playlist deleted successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"status": "success"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/deleteTracks": {
|
|
"post": {
|
|
"summary": "Delete tracks from playlist",
|
|
"description": "Remove specific tracks from a playlist by playlist_track_ids (internal playlist-specific track IDs)",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"playlist_id": {
|
|
"type": "integer"
|
|
},
|
|
"playlist_track_ids": {
|
|
"type": "string",
|
|
"description": "Comma-separated list of playlist-specific track IDs"
|
|
}
|
|
},
|
|
"required": ["playlist_id", "playlist_track_ids"]
|
|
},
|
|
"example": {
|
|
"playlist_id": 61150456,
|
|
"playlist_track_ids": "11141882120"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Tracks deleted successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"tracks_count": {
|
|
"type": "integer"
|
|
},
|
|
"users_count": {
|
|
"type": "integer"
|
|
},
|
|
"duration": {
|
|
"type": "integer"
|
|
},
|
|
"public_at": {
|
|
"oneOf": [
|
|
{ "type": "boolean" },
|
|
{ "type": "integer" }
|
|
]
|
|
},
|
|
"created_at": {
|
|
"type": "integer"
|
|
},
|
|
"updated_at": {
|
|
"type": "integer"
|
|
},
|
|
"is_public": {
|
|
"type": "boolean"
|
|
},
|
|
"is_collaborative": {
|
|
"type": "boolean"
|
|
},
|
|
"owner": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"status": "success",
|
|
"id": 61150456,
|
|
"name": "New playlist [9]",
|
|
"description": "",
|
|
"tracks_count": 0,
|
|
"users_count": 0,
|
|
"duration": 0,
|
|
"public_at": 1774548380,
|
|
"created_at": 1774548375,
|
|
"updated_at": 1774548398,
|
|
"is_public": true,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 8029441,
|
|
"name": "Joren"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/get": {
|
|
"get": {
|
|
"summary": "Get playlist details",
|
|
"description": "Retrieve playlist metadata and optionally include tracks or track IDs",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "playlist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Playlist ID"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 350
|
|
},
|
|
"description": "Maximum number of tracks to return (when extra=tracks)"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for track pagination (when extra=tracks)"
|
|
},
|
|
{
|
|
"name": "extra",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["tracks", "track_ids"]
|
|
},
|
|
"description": "Include additional data: 'tracks' for full track objects, 'track_ids' for IDs only"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{ "$ref": "#/components/schemas/Playlist" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"tracks": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
"track_ids": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"id": 47576025,
|
|
"name": "assorted_genres.bin",
|
|
"description": "This has ended up being a playlist for songs that don't fit in other playlists",
|
|
"tracks_count": 727,
|
|
"users_count": 0,
|
|
"duration": 146293,
|
|
"public_at": 1764889200,
|
|
"created_at": 1764937232,
|
|
"updated_at": 1774548274,
|
|
"is_public": true,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 8029441,
|
|
"name": "Joren"
|
|
},
|
|
"slug": "just-somewhat-similar-genre-songs-dd",
|
|
"genres": [],
|
|
"images": [
|
|
"https://static.qobuz.com/images/covers/92/62/0072064246292_50.jpg",
|
|
"https://static.qobuz.com/images/covers/fc/8u/zct90v1sc8ufc_50.jpg",
|
|
"https://static.qobuz.com/images/covers/lc/ct/g5dklnsixctlc_50.jpg",
|
|
"https://static.qobuz.com/images/covers/21/97/0828765549721_50.jpg"
|
|
],
|
|
"is_featured": false,
|
|
"published_from": null,
|
|
"published_to": null,
|
|
"images150": [
|
|
"https://static.qobuz.com/images/covers/92/62/0072064246292_150.jpg",
|
|
"https://static.qobuz.com/images/covers/fc/8u/zct90v1sc8ufc_150.jpg",
|
|
"https://static.qobuz.com/images/covers/lc/ct/g5dklnsixctlc_150.jpg",
|
|
"https://static.qobuz.com/images/covers/21/97/0828765549721_150.jpg"
|
|
],
|
|
"images300": [
|
|
"https://static.qobuz.com/images/covers/92/62/0072064246292_300.jpg",
|
|
"https://static.qobuz.com/images/covers/fc/8u/zct90v1sc8ufc_300.jpg",
|
|
"https://static.qobuz.com/images/covers/lc/ct/g5dklnsixctlc_300.jpg",
|
|
"https://static.qobuz.com/images/covers/21/97/0828765549721_300.jpg"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/getFeatured": {
|
|
"get": {
|
|
"summary": "Get featured playlists",
|
|
"description": "Retrieve curated featured playlists by type and genre",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "type",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["last-created", "most-popular", "editorial"]
|
|
},
|
|
"description": "Type of featured playlists"
|
|
},
|
|
{
|
|
"name": "genre_ids",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Comma-separated genre IDs to filter by"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 6
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"playlists": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"playlists": {
|
|
"offset": 0,
|
|
"limit": 6,
|
|
"total": 1429,
|
|
"items": [
|
|
{
|
|
"owner": {
|
|
"name": "Qobuz Latinoamérica",
|
|
"id": 1752421
|
|
},
|
|
"image_rectangle_mini": ["https://static.qobuz.com/images/playlists/7801943_cb084b9bc2b9e578e26ed41384465fe7_rectangle_mini.jpg"],
|
|
"users_count": 461,
|
|
"images150": ["https://static.qobuz.com/images/covers/98/g5/e644dwd1dg598_150.jpg"],
|
|
"images": ["https://static.qobuz.com/images/covers/98/g5/e644dwd1dg598_50.jpg"],
|
|
"featured_artists": [],
|
|
"is_collaborative": false,
|
|
"stores": ["AR-es", "CL-es", "CO-es", "MX-es"],
|
|
"description": "Con Muse, Foo Fighters, Peter Frampton, The Black Keys...",
|
|
"created_at": 1639742591,
|
|
"images300": ["https://static.qobuz.com/images/covers/98/g5/e644dwd1dg598_300.jpg"],
|
|
"tags": [
|
|
{
|
|
"is_discover": true,
|
|
"featured_tag_id": "19",
|
|
"name_json": "{\"fr\":\"Nouveautés\",\"en\":\"New Releases\",\"de\":\"Neuheiten\",\"it\":\"Novità\",\"nl\":\"New releases\",\"es\":\"Novedades\",\"pt\":\"Novidades\",\"ja\":\"ニューリリース\"}",
|
|
"slug": "new",
|
|
"genre_tag": null,
|
|
"color": ""
|
|
}
|
|
],
|
|
"duration": 17779,
|
|
"updated_at": 1774542959,
|
|
"genres": [
|
|
{
|
|
"path": [112],
|
|
"name": "Pop/Rock",
|
|
"id": 112,
|
|
"slug": "pop-rock",
|
|
"color": "#0070ef",
|
|
"percent": 50
|
|
}
|
|
],
|
|
"image_rectangle": ["https://static.qobuz.com/images/playlists/7801943_cb084b9bc2b9e578e26ed41384465fe7_rectangle.jpg"],
|
|
"tracks_count": 80,
|
|
"public_at": 1639695600,
|
|
"name": "Lo último en Rock",
|
|
"is_public": true,
|
|
"id": 7801943,
|
|
"slug": "la-seleccion-rock",
|
|
"is_featured": true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/getUserPlaylistIds": {
|
|
"get": {
|
|
"summary": "Get user's playlist IDs",
|
|
"description": "Retrieve list of playlist IDs owned or subscribed by the authenticated user",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"playlists": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"playlists": [
|
|
12435784,
|
|
18423515,
|
|
18424267,
|
|
18432337,
|
|
18477367,
|
|
18479109,
|
|
31294453,
|
|
42090404,
|
|
43929926,
|
|
47575596,
|
|
47575665,
|
|
47575711,
|
|
47575765,
|
|
47576025,
|
|
47576101,
|
|
60727909,
|
|
61150571
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/getUserPlaylists": {
|
|
"get": {
|
|
"summary": "Get user's playlists",
|
|
"description": "Retrieve detailed playlists owned or subscribed by the authenticated user",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "filter",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"enum": ["owner", "subscriber", "owner,subscriber"]
|
|
},
|
|
"description": "Filter by ownership/subscription"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 350
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"user": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"playlists": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"user": {
|
|
"id": 8029441,
|
|
"login": "joren@directme.in"
|
|
},
|
|
"playlists": {
|
|
"offset": 0,
|
|
"limit": 350,
|
|
"total": 16,
|
|
"items": [
|
|
{
|
|
"id": 18479109,
|
|
"name": "italian cosmic disco classics [ rare & forgotten synth-heavy dance compilation • 70s & early 80s ]",
|
|
"description": "// cosmic disco describes various forms of synthesizer - heavy afro influenced - dance music that were originally developed and promoted by a small number of djs in certain discothèques of northern italy / decade: late '70s • early '80s / style: post-ita",
|
|
"tracks_count": 81,
|
|
"users_count": 1,
|
|
"duration": 29620,
|
|
"public_at": 1702249200,
|
|
"created_at": 1702291884,
|
|
"updated_at": 1774548305,
|
|
"is_public": true,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 2671414,
|
|
"name": "Theodore Kapa"
|
|
},
|
|
"indexed_at": 1774548306,
|
|
"slug": "italian-cosmic-disco-classics-rare-forgotten-synth-heavy-dance-compilation-70s-early-80s",
|
|
"genres": [],
|
|
"images": [
|
|
"https://static.qobuz.com/images/covers/06/73/3700593707306_50.jpg",
|
|
"https://static.qobuz.com/images/covers/25/02/5060281610225_50.jpg",
|
|
"https://static.qobuz.com/images/covers/04/06/0060255710604_50.jpg",
|
|
"https://static.qobuz.com/images/covers/za/ju/m0fe5nqy8juza_50.jpg"
|
|
],
|
|
"is_published": false,
|
|
"is_featured": false,
|
|
"published_from": null,
|
|
"published_to": null,
|
|
"images150": [
|
|
"https://static.qobuz.com/images/covers/06/73/3700593707306_150.jpg",
|
|
"https://static.qobuz.com/images/covers/25/02/5060281610225_150.jpg",
|
|
"https://static.qobuz.com/images/covers/04/06/0060255710604_150.jpg",
|
|
"https://static.qobuz.com/images/covers/za/ju/m0fe5nqy8juza_150.jpg"
|
|
],
|
|
"images300": [
|
|
"https://static.qobuz.com/images/covers/06/73/3700593707306_300.jpg",
|
|
"https://static.qobuz.com/images/covers/25/02/5060281610225_300.jpg",
|
|
"https://static.qobuz.com/images/covers/04/06/0060255710604_300.jpg",
|
|
"https://static.qobuz.com/images/covers/za/ju/m0fe5nqy8juza_300.jpg"
|
|
],
|
|
"position": 0,
|
|
"subscribed_at": 1774548305
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/search": {
|
|
"get": {
|
|
"summary": "Search playlists",
|
|
"description": "Search public playlists by query",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "query",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 8
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "string"
|
|
},
|
|
"playlists": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"query": "lost frequencies",
|
|
"playlists": {
|
|
"limit": 8,
|
|
"offset": 0,
|
|
"analytics": {
|
|
"search_external_id": "1579d3e5c4e0c6537de128b4645d5a21"
|
|
},
|
|
"total": 15,
|
|
"items": [
|
|
{
|
|
"id": 20123657,
|
|
"name": "Lost Frequencies (The lost Anthems of Tomorrowland 2024) - The golden Decade Edition",
|
|
"description": "The official Road to Tomorrowland 2024 Playlist with DJ's like Hardwell, Alok, Afrojack, W&W, Armin van Buuren, The Chainsmokers, Martin Garrix, Dimitri Vegas & Like Mike, Steve Aoki, Don Diablo, Alan Walker, Lost Frequencies, Zedd and many more ...",
|
|
"tracks_count": 959,
|
|
"users_count": 1,
|
|
"duration": 231651,
|
|
"public_at": 1709852400,
|
|
"created_at": 1709906752,
|
|
"updated_at": 1767985405,
|
|
"is_public": true,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 2958507,
|
|
"name": "Maximiliano Sanchez"
|
|
},
|
|
"indexed_at": 1767985406,
|
|
"slug": "lost-frequencies-the-lost-anthems-of-tomorrowland-2024-the-golden-decade-edition",
|
|
"genres": [],
|
|
"images": [
|
|
"https://static.qobuz.com/images/covers/kb/g0/f4tp7vu5ag0kb_50.jpg",
|
|
"https://static.qobuz.com/images/covers/5b/yz/uryux54z3yz5b_50.jpg",
|
|
"https://static.qobuz.com/images/covers/11/80/0886443418011_50.jpg",
|
|
"https://static.qobuz.com/images/covers/pb/n2/j840ltdidn2pb_50.jpg"
|
|
],
|
|
"is_published": false,
|
|
"is_featured": false,
|
|
"published_from": null,
|
|
"published_to": null,
|
|
"images150": [
|
|
"https://static.qobuz.com/images/covers/kb/g0/f4tp7vu5ag0kb_150.jpg",
|
|
"https://static.qobuz.com/images/covers/5b/yz/uryux54z3yz5b_150.jpg",
|
|
"https://static.qobuz.com/images/covers/11/80/0886443418011_150.jpg",
|
|
"https://static.qobuz.com/images/covers/pb/n2/j840ltdidn2pb_150.jpg"
|
|
],
|
|
"images300": [
|
|
"https://static.qobuz.com/images/covers/kb/g0/f4tp7vu5ag0kb_300.jpg",
|
|
"https://static.qobuz.com/images/covers/5b/yz/uryux54z3yz5b_300.jpg",
|
|
"https://static.qobuz.com/images/covers/11/80/0886443418011_300.jpg",
|
|
"https://static.qobuz.com/images/covers/pb/n2/j840ltdidn2pb_300.jpg"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/story": {
|
|
"get": {
|
|
"summary": "Get playlist story",
|
|
"description": "Retrieve story or editorial content for a playlist",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "playlist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Playlist ID"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50
|
|
},
|
|
"description": "Maximum number of results"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [],
|
|
"total": 0,
|
|
"limit": 4,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/subscribe": {
|
|
"get": {
|
|
"summary": "Subscribe to playlist",
|
|
"description": "Subscribe to a public playlist to add it to user's library",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "playlist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Playlist ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful subscription",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": ["success"]
|
|
}
|
|
},
|
|
"required": ["status"]
|
|
},
|
|
"example": {
|
|
"status": "success"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/unsubscribe": {
|
|
"get": {
|
|
"summary": "Unsubscribe from playlist",
|
|
"description": "Remove playlist subscription from user's library",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "playlist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Playlist ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful unsubscription",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": ["success"]
|
|
}
|
|
},
|
|
"required": ["status"]
|
|
},
|
|
"example": {
|
|
"status": "success"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/playlist/update": {
|
|
"post": {
|
|
"summary": "Update playlist metadata",
|
|
"description": "Modify playlist title, description, visibility, and collaboration settings",
|
|
"security": [
|
|
{
|
|
"UserToken": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"playlist_id": {
|
|
"type": "integer",
|
|
"description": "Playlist ID"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Playlist name"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Playlist description (optional)"
|
|
},
|
|
"is_public": {
|
|
"type": "boolean",
|
|
"description": "Whether playlist is publicly visible"
|
|
},
|
|
"is_collaborative": {
|
|
"type": "boolean",
|
|
"description": "Whether playlist allows collaborative editing"
|
|
}
|
|
},
|
|
"required": ["playlist_id", "name", "is_public", "is_collaborative"]
|
|
},
|
|
"example": {
|
|
"playlist_id": 61150456,
|
|
"name": "New playlist [9]",
|
|
"description": "",
|
|
"is_public": true,
|
|
"is_collaborative": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Playlist updated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Playlist"
|
|
},
|
|
"example": {
|
|
"id": 61150456,
|
|
"name": "New playlist [9]",
|
|
"description": "",
|
|
"tracks_count": 0,
|
|
"users_count": 0,
|
|
"duration": 0,
|
|
"public_at": 1774548380,
|
|
"created_at": 1774548375,
|
|
"updated_at": 1774548380,
|
|
"is_public": true,
|
|
"is_collaborative": false,
|
|
"owner": {
|
|
"id": 8029441,
|
|
"name": "Joren"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/qws/createToken": {
|
|
"post": {
|
|
"summary": "Create QWS token",
|
|
"description": "Generate a JWT token for Qobuz WebSocket (QWS) real-time streaming",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"jwt": {
|
|
"type": "string",
|
|
"enum": ["jwt_qws"],
|
|
"description": "Must be 'jwt_qws'"
|
|
}
|
|
},
|
|
"required": ["jwt"]
|
|
},
|
|
"example": {
|
|
"jwt": "jwt_qws"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "QWS token created successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"jwt_qws": {
|
|
"type": "object",
|
|
"properties": {
|
|
"exp": {
|
|
"type": "integer",
|
|
"description": "Token expiration timestamp"
|
|
},
|
|
"jwt": {
|
|
"type": "string",
|
|
"description": "JWT token for WebSocket authentication"
|
|
},
|
|
"endpoint": {
|
|
"type": "string",
|
|
"description": "WebSocket endpoint URL"
|
|
}
|
|
},
|
|
"required": ["exp", "jwt", "endpoint"]
|
|
}
|
|
},
|
|
"required": ["jwt_qws"]
|
|
},
|
|
"example": {
|
|
"jwt_qws": {
|
|
"exp": 1774551781,
|
|
"jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3NzQ1NDgxODEsImV4cCI6MTc3NDU1MTc4MSwiaXNzIjoiUW9idXogQVBJIiwicXVpZCI6ODAyOTQ0MSwicWFpZCI6IjMxMjM2OTk5NSJ9.iponghxT2cRFWvFvT9t91QVpQjh4ZEA19flU4lNHMuM",
|
|
"endpoint": "wss://qws-us-prod.qobuz.com/ws"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"code": {
|
|
"type": "integer"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": ["error"]
|
|
}
|
|
},
|
|
"required": ["message", "code", "status"]
|
|
},
|
|
"example": {
|
|
"message": "User authentication is required. (Root=1-69c57907-7b414aff302c26850b7a3780)",
|
|
"code": 401,
|
|
"status": "error"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/radio/artist": {
|
|
"get": {
|
|
"summary": "Generate artist radio",
|
|
"description": "Create a radio station based on an artist's musical style",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "artist_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Artist ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Radio station generated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"algorithm": {
|
|
"type": "string",
|
|
"enum": ["radio-artist"],
|
|
"description": "Radio algorithm type"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["radio-artist"],
|
|
"description": "Radio type"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Radio station title (artist name)"
|
|
},
|
|
"images": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Small cover image URL"
|
|
},
|
|
"large": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Large cover image URL"
|
|
}
|
|
},
|
|
"required": ["small", "large"]
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"description": "Total duration of all tracks in seconds"
|
|
},
|
|
"track_count": {
|
|
"type": "integer",
|
|
"description": "Number of tracks in radio station"
|
|
},
|
|
"tracks": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
},
|
|
"required": ["algorithm", "type", "title", "images", "duration", "track_count", "tracks"]
|
|
},
|
|
"example": {
|
|
"algorithm": "radio-artist",
|
|
"type": "radio-artist",
|
|
"title": "Lost Frequencies",
|
|
"images": {
|
|
"small": "https://static.qobuz.com/images/artists/covers/small/77817762dd3688191f752509901e4338.jpg",
|
|
"large": "https://static.qobuz.com/images/artists/covers/large/77817762dd3688191f752509901e4338.jpg"
|
|
},
|
|
"duration": 5410,
|
|
"track_count": 30,
|
|
"tracks": {
|
|
"limit": 30,
|
|
"items": [
|
|
{
|
|
"id": 47299759,
|
|
"title": "You Don't Have To Like It",
|
|
"version": null,
|
|
"work": null,
|
|
"isrc": "NLZ541800093",
|
|
"duration": 177,
|
|
"parental_warning": false,
|
|
"physical_support": {
|
|
"media_number": 1,
|
|
"track_number": 1
|
|
},
|
|
"audio_info": {
|
|
"maximum_bit_depth": 16,
|
|
"maximum_channel_count": 2,
|
|
"maximum_sampling_rate": 44.1
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"sampleable": true,
|
|
"hires_streamable": false,
|
|
"hires_purchasable": false
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 955835,
|
|
"name": "Lucas & Steve",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"composer": {
|
|
"id": 3251389,
|
|
"name": "Alon Dreesde"
|
|
},
|
|
"album": {
|
|
"id": "iom5qw9m24gbb",
|
|
"title": "You Don't Have To Like It",
|
|
"version": null,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/bb/4g/iom5qw9m24gbb_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/bb/4g/iom5qw9m24gbb_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/bb/4g/iom5qw9m24gbb_600.jpg"
|
|
},
|
|
"label": {
|
|
"id": 190680,
|
|
"name": "Spinnin' Records"
|
|
},
|
|
"genre": {
|
|
"id": 129,
|
|
"name": "Dance",
|
|
"path": [64, 129]
|
|
}
|
|
},
|
|
"copyright": "© 2018 SpinninRecords.com ℗ 2018 SpinninRecords.com"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/radio/track": {
|
|
"get": {
|
|
"summary": "Generate track radio",
|
|
"description": "Create a radio station based on a specific track's musical style",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "track_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Track ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Radio station generated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"algorithm": {
|
|
"type": "string",
|
|
"enum": ["radio-track"],
|
|
"description": "Radio algorithm type"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["radio-track"],
|
|
"description": "Radio type"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Radio station title (track name)"
|
|
},
|
|
"images": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Small cover image URL"
|
|
},
|
|
"large": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Large cover image URL"
|
|
}
|
|
},
|
|
"required": ["small", "large"]
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"description": "Total duration of all tracks in seconds"
|
|
},
|
|
"track_count": {
|
|
"type": "integer",
|
|
"description": "Number of tracks in radio station"
|
|
},
|
|
"tracks": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
},
|
|
"required": ["algorithm", "type", "title", "images", "duration", "track_count", "tracks"]
|
|
},
|
|
"example": {
|
|
"algorithm": "radio-track",
|
|
"type": "radio-track",
|
|
"title": "Big in Japan ",
|
|
"images": {
|
|
"small": "https://static.qobuz.com/images/covers/db/31/byz76ojp231db_230.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/db/31/byz76ojp231db_600.jpg"
|
|
},
|
|
"duration": 7586,
|
|
"track_count": 29,
|
|
"tracks": {
|
|
"limit": 29,
|
|
"items": [
|
|
{
|
|
"id": 57635339,
|
|
"title": "Big in Japan ",
|
|
"version": "2019 Remaster",
|
|
"work": null,
|
|
"isrc": "DEA621800673",
|
|
"duration": 284,
|
|
"parental_warning": false,
|
|
"physical_support": {
|
|
"media_number": 1,
|
|
"track_number": 3
|
|
},
|
|
"audio_info": {
|
|
"maximum_bit_depth": 24,
|
|
"maximum_channel_count": 2,
|
|
"maximum_sampling_rate": 44.1
|
|
},
|
|
"rights": {
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"downloadable": false,
|
|
"sampleable": true,
|
|
"hires_streamable": true,
|
|
"hires_purchasable": true
|
|
},
|
|
"artists": [
|
|
{
|
|
"id": 372772,
|
|
"name": "Alphaville",
|
|
"roles": ["main-artist"]
|
|
}
|
|
],
|
|
"composer": null,
|
|
"album": {
|
|
"id": "byz76ojp231db",
|
|
"title": "Forever Young ",
|
|
"version": "Super Deluxe Edition; 2019 Remaster",
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/db/31/byz76ojp231db_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/db/31/byz76ojp231db_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/db/31/byz76ojp231db_600.jpg"
|
|
},
|
|
"label": {
|
|
"id": 7402,
|
|
"name": "WM Germany"
|
|
},
|
|
"genre": {
|
|
"id": 117,
|
|
"name": "Pop",
|
|
"path": [112, 117]
|
|
}
|
|
},
|
|
"copyright": "© 1984, 2019 WEA / Warner Music Group Germany Holding GmbH / A Warner Music Group Company ℗ 2019, 1984 WEA / Warner Music Group Germany Holding GmbH / A Warner Music Group Company"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/search/report": {
|
|
"post": {
|
|
"summary": "Report search interactions",
|
|
"description": "Send search analytics events for tracking user interactions",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"version": {
|
|
"type": "string",
|
|
"description": "Event schema version",
|
|
"example": "01.00"
|
|
},
|
|
"events": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date": {
|
|
"type": "integer",
|
|
"description": "Event timestamp in milliseconds"
|
|
},
|
|
"search": {
|
|
"type": "string",
|
|
"description": "Search query text"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["artist", "album", "track", "playlist", "label"],
|
|
"description": "Type of search result clicked"
|
|
},
|
|
"position": {
|
|
"type": "string",
|
|
"description": "Position of result in search results (1-indexed)"
|
|
},
|
|
"id_client": {
|
|
"type": "integer",
|
|
"description": "User ID"
|
|
},
|
|
"queryid": {
|
|
"type": "string",
|
|
"description": "Unique query identifier"
|
|
},
|
|
"objectid": {
|
|
"type": "string",
|
|
"description": "ID of clicked object (artist ID, album ID, etc.)"
|
|
}
|
|
},
|
|
"required": ["date", "search", "type", "position", "id_client", "queryid", "objectid"]
|
|
}
|
|
}
|
|
},
|
|
"required": ["version", "events"]
|
|
},
|
|
"example": {
|
|
"version": "01.00",
|
|
"events": [
|
|
{
|
|
"date": 1774548475714,
|
|
"search": "lost frequencies",
|
|
"type": "artist",
|
|
"position": "1",
|
|
"id_client": 8029441,
|
|
"queryid": "ddc1f5f1871c38feabd9ac82416c1c6f",
|
|
"objectid": "1863897"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Search event reported successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": ["success"]
|
|
}
|
|
},
|
|
"required": ["status"]
|
|
},
|
|
"example": {
|
|
"status": "success"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/session/start": {
|
|
"post": {
|
|
"summary": "Start a playback session",
|
|
"description": "Initialize a streaming session for audio playback",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"profile": {
|
|
"type": "string",
|
|
"enum": ["qbz-1"],
|
|
"description": "Playback profile identifier"
|
|
}
|
|
},
|
|
"required": ["profile"]
|
|
},
|
|
"example": {
|
|
"profile": "qbz-1"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Session started successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"session_id": {
|
|
"type": "string",
|
|
"description": "Unique session identifier"
|
|
},
|
|
"profile": {
|
|
"type": "string",
|
|
"description": "Playback profile used"
|
|
},
|
|
"infos": {
|
|
"type": "string",
|
|
"description": "Base64-encoded session information"
|
|
},
|
|
"expires_at": {
|
|
"type": "integer",
|
|
"description": "Session expiration timestamp"
|
|
}
|
|
},
|
|
"required": ["session_id", "profile", "infos", "expires_at"]
|
|
},
|
|
"example": {
|
|
"session_id": "qmG7v51zldj5lYJbsAbPpA",
|
|
"profile": "qbz-1",
|
|
"infos": "aG0ZxY81ApaRIQLxRuguEw.bm9uZQ",
|
|
"expires_at": 1774551783
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/story/search": {
|
|
"get": {
|
|
"summary": "Search stories",
|
|
"description": "Search for editorial stories by query with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "query",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 8,
|
|
"maximum": 50
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "string",
|
|
"description": "The original search query"
|
|
},
|
|
"stories": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"analytics": {
|
|
"type": "object",
|
|
"properties": {
|
|
"search_external_id": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"facets": {
|
|
"type": "object",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"query": "lost frequencies",
|
|
"stories": {
|
|
"limit": 8,
|
|
"offset": 0,
|
|
"analytics": {
|
|
"search_external_id": "6504486f17c71b4cdbaf55961d1bebc2"
|
|
},
|
|
"total": 0,
|
|
"items": [],
|
|
"facets": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/track/get": {
|
|
"get": {
|
|
"summary": "Get track details",
|
|
"description": "Retrieve detailed information about a specific track",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "track_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Track ID"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Track"
|
|
},
|
|
"example": {
|
|
"maximum_bit_depth": 24,
|
|
"copyright": "(P) 2026 Universal Music Division Decca Records France",
|
|
"performers": "Flore Benguigui & The Sensible Notes, MainArtist",
|
|
"audio_info": {
|
|
"replaygain_track_peak": 0.977264,
|
|
"replaygain_track_gain": -8.68
|
|
},
|
|
"performer": {
|
|
"name": "Flore Benguigui & The Sensible Notes",
|
|
"id": 28885011
|
|
},
|
|
"album": {
|
|
"maximum_bit_depth": 24,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/8q/wt/xxc24b1r0wt8q_600.jpg"
|
|
},
|
|
"media_count": 1,
|
|
"artist": {
|
|
"image": null,
|
|
"name": "Flore Benguigui & The Sensible Notes",
|
|
"id": 28885011,
|
|
"albums_count": 6,
|
|
"slug": "flore-benguigui--the-sensible-notes",
|
|
"picture": null
|
|
},
|
|
"upc": "0602488154758",
|
|
"released_at": 1773356400,
|
|
"label": {
|
|
"name": "Universal Music Division Decca Records France",
|
|
"id": 108875,
|
|
"albums_count": 3607,
|
|
"supplier_id": 1,
|
|
"slug": "universal-music-division-decca-records-france"
|
|
},
|
|
"title": "i-330",
|
|
"qobuz_id": 378123654,
|
|
"version": null,
|
|
"duration": 2764,
|
|
"parental_warning": false,
|
|
"tracks_count": 12,
|
|
"genre": {
|
|
"path": [80, 89],
|
|
"color": "#0070ef",
|
|
"name": "Jazz vocal",
|
|
"id": 89,
|
|
"slug": "jazz-vocal"
|
|
},
|
|
"maximum_channel_count": 2,
|
|
"id": "xxc24b1r0wt8q",
|
|
"maximum_sampling_rate": 48,
|
|
"previewable": true,
|
|
"sampleable": true,
|
|
"displayable": true,
|
|
"streamable": true,
|
|
"streamable_at": 1774494000,
|
|
"downloadable": false,
|
|
"purchasable_at": null,
|
|
"purchasable": false,
|
|
"release_date_original": "2026-03-13",
|
|
"release_date_download": "2026-03-13",
|
|
"release_date_stream": "2026-03-13",
|
|
"hires": true,
|
|
"hires_streamable": true,
|
|
"awards": [
|
|
{
|
|
"name": "Qobuzissime",
|
|
"slug": "qobuz",
|
|
"award_slug": "qobuzissime",
|
|
"awarded_at": 1773961200,
|
|
"award_id": "88",
|
|
"publication_id": "2",
|
|
"publication_name": "Qobuz",
|
|
"publication_slug": "qobuz"
|
|
}
|
|
]
|
|
},
|
|
"work": null,
|
|
"composer": {
|
|
"name": "Flore Benguigui",
|
|
"id": 28885012
|
|
},
|
|
"isrc": "FR6V82600001",
|
|
"title": "i-330",
|
|
"version": null,
|
|
"duration": 2764,
|
|
"parental_warning": false,
|
|
"track_number": 1,
|
|
"maximum_channel_count": 2,
|
|
"id": 378123655,
|
|
"media_number": 1,
|
|
"maximum_sampling_rate": 48,
|
|
"release_date_original": "2026-03-13",
|
|
"release_date_download": "2026-03-13",
|
|
"release_date_stream": "2026-03-13",
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"previewable": true,
|
|
"sampleable": true,
|
|
"downloadable": false,
|
|
"displayable": true,
|
|
"purchasable_at": null,
|
|
"streamable_at": 1774494000,
|
|
"hires": true,
|
|
"hires_streamable": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/track/search": {
|
|
"get": {
|
|
"summary": "Search tracks",
|
|
"description": "Search for tracks by query with pagination",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"name": "query",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Search query"
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 0
|
|
},
|
|
"description": "Offset for pagination"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 8,
|
|
"maximum": 50
|
|
},
|
|
"description": "Maximum number of results"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "string",
|
|
"description": "The original search query"
|
|
},
|
|
"tracks": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"analytics": {
|
|
"type": "object",
|
|
"properties": {
|
|
"search_external_id": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Track"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"query": "lost frequencies",
|
|
"tracks": {
|
|
"limit": 8,
|
|
"offset": 0,
|
|
"analytics": {
|
|
"search_external_id": "40c98535a47ce6cc224d05e0fd5427c2"
|
|
},
|
|
"total": 1000,
|
|
"items": [
|
|
{
|
|
"maximum_bit_depth": 24,
|
|
"copyright": "(P) 2021 Lost & Cie Music SPRL exclusively licensed to Epic Amsterdam, with courtesy of Sony Music Entertainment Belgium NV/SA",
|
|
"performers": "Sebastian Arman, Composer, Lyricist - Michael Patrick Kelly, Composer, Lyricist - Joacim Bo Persson, Composer, Lyricist - Lorna Blackwood, Vocal Producer - Lost Frequencies, Producer, MainArtist, AssociatedPerformer - Felix de Laet, Composer, Lyricist - Dag Lundberg, Composer, Lyricist - Calum Scott, MainArtist, AssociatedPerformer, Vocal - Lost Frequencies, Calum Scott, AssociatedPerformer",
|
|
"audio_info": {
|
|
"replaygain_track_peak": 0.977264,
|
|
"replaygain_track_gain": -8.68
|
|
},
|
|
"performer": {
|
|
"name": "Lost Frequencies",
|
|
"id": 1863897
|
|
},
|
|
"album": {
|
|
"maximum_bit_depth": 24,
|
|
"image": {
|
|
"small": "https://static.qobuz.com/images/covers/jb/jb/qofj8ace3jbjb_230.jpg",
|
|
"thumbnail": "https://static.qobuz.com/images/covers/jb/jb/qofj8ace3jbjb_50.jpg",
|
|
"large": "https://static.qobuz.com/images/covers/jb/jb/qofj8ace3jbjb_600.jpg"
|
|
},
|
|
"media_count": 1,
|
|
"artist": {
|
|
"image": null,
|
|
"name": "Lost Frequencies",
|
|
"id": 1863897,
|
|
"albums_count": 990,
|
|
"slug": "lost-frequencies",
|
|
"picture": null
|
|
},
|
|
"upc": "0886449449668",
|
|
"released_at": 1627596000,
|
|
"label": {
|
|
"name": "Epic Amsterdam",
|
|
"id": 85930,
|
|
"albums_count": 405,
|
|
"supplier_id": 23,
|
|
"slug": "epic-amsterdam"
|
|
},
|
|
"title": "Where Are You Now",
|
|
"qobuz_id": 127415449,
|
|
"version": null,
|
|
"duration": 148,
|
|
"parental_warning": false,
|
|
"tracks_count": 1,
|
|
"genre": {
|
|
"path": [64, 68],
|
|
"name": "House",
|
|
"id": 68,
|
|
"slug": "house"
|
|
},
|
|
"maximum_channel_count": 2,
|
|
"id": "qofj8ace3jbjb",
|
|
"maximum_sampling_rate": 44.1,
|
|
"previewable": true,
|
|
"sampleable": true,
|
|
"displayable": true,
|
|
"streamable": true,
|
|
"streamable_at": 1750129200,
|
|
"downloadable": false,
|
|
"purchasable_at": null,
|
|
"purchasable": false,
|
|
"release_date_original": "2021-07-30",
|
|
"release_date_download": "2021-07-30",
|
|
"release_date_stream": "2021-07-30",
|
|
"release_date_purchase": "2021-07-30",
|
|
"hires": true,
|
|
"hires_streamable": true
|
|
},
|
|
"work": null,
|
|
"composer": {
|
|
"name": "Felix de Laet",
|
|
"id": 1964137
|
|
},
|
|
"isrc": "BEHP42100067",
|
|
"title": "Where Are You Now",
|
|
"version": null,
|
|
"duration": 148,
|
|
"parental_warning": false,
|
|
"track_number": 1,
|
|
"maximum_channel_count": 2,
|
|
"id": 127415450,
|
|
"media_number": 1,
|
|
"maximum_sampling_rate": 44.1,
|
|
"release_date_original": "2021-07-30",
|
|
"release_date_download": "2021-07-30",
|
|
"release_date_stream": "2021-07-30",
|
|
"release_date_purchase": "2021-07-30",
|
|
"purchasable": false,
|
|
"streamable": true,
|
|
"previewable": true,
|
|
"sampleable": true,
|
|
"downloadable": false,
|
|
"displayable": true,
|
|
"purchasable_at": null,
|
|
"streamable_at": 1750129200,
|
|
"hires": true,
|
|
"hires_streamable": true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/user/get": {
|
|
"get": {
|
|
"summary": "Get user profile",
|
|
"description": "Retrieve current user's profile information",
|
|
"security": [
|
|
{
|
|
"UserToken": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/User"
|
|
},
|
|
"example": {
|
|
"id": 8029441,
|
|
"publicId": "qobuz:user:X9vX4tZykliwm",
|
|
"email": "joren@directme.in",
|
|
"login": "joren@directme.in",
|
|
"firstname": null,
|
|
"lastname": null,
|
|
"display_name": "Joren",
|
|
"country_code": "AR",
|
|
"language_code": "es",
|
|
"zone": "AR",
|
|
"store": "AR-es",
|
|
"country": "AR",
|
|
"avatar": "https://www.gravatar.com/avatar/6f693544cde79a30762dd7274ae2add6?s=50&d=mm",
|
|
"genre": "male",
|
|
"age": 22,
|
|
"birthdate": "2004-02-05",
|
|
"creation_date": "2025-10-23",
|
|
"zipcode": null,
|
|
"subscription": {
|
|
"offer": "studio",
|
|
"periodicity": "monthly",
|
|
"start_date": "2025-10-23",
|
|
"end_date": "2026-04-22",
|
|
"is_canceled": false,
|
|
"household_size_max": 1
|
|
},
|
|
"credential": {
|
|
"id": 3261622,
|
|
"label": "streaming-studio",
|
|
"description": "Suscriptor Qobuz Studio",
|
|
"parameters": {
|
|
"lossy_streaming": true,
|
|
"lossless_streaming": true,
|
|
"hires_streaming": true,
|
|
"hires_purchases_streaming": true,
|
|
"mobile_streaming": true,
|
|
"offline_streaming": true,
|
|
"hfp_purchase": false,
|
|
"included_format_group_ids": [1, 2, 3, 4],
|
|
"color_scheme": {
|
|
"logo": "#B8D729"
|
|
},
|
|
"label": "Qobuz Studio",
|
|
"short_label": "Studio",
|
|
"source": "subscription"
|
|
}
|
|
},
|
|
"last_update": {
|
|
"favorite": 1774542127,
|
|
"favorite_album": 1774484091,
|
|
"favorite_artist": 1774459997,
|
|
"favorite_track": 1774542127,
|
|
"favorite_label": 1761211040,
|
|
"favorite_award": 1761211040,
|
|
"playlist": 1774388881,
|
|
"purchase": 1761211287
|
|
},
|
|
"store_features": {
|
|
"download": false,
|
|
"streaming": true,
|
|
"editorial": true,
|
|
"club": false,
|
|
"wallet": false,
|
|
"weeklyq": true,
|
|
"autoplay": true,
|
|
"inapp_purchase_subscripton": true,
|
|
"opt_in": true,
|
|
"pre_register_opt_in": true,
|
|
"pre_register_zipcode": false,
|
|
"music_import": true,
|
|
"radio": true,
|
|
"stream_purchase": true,
|
|
"lyrics": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/user/plan": {
|
|
"get": {
|
|
"summary": "Get user subscription plans",
|
|
"description": "Retrieve current user's subscription plan details",
|
|
"security": [
|
|
{
|
|
"UserToken": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"source": {
|
|
"type": "string",
|
|
"enum": ["qobuz", "partner"]
|
|
},
|
|
"end_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"price": {
|
|
"type": "number"
|
|
},
|
|
"currency": {
|
|
"type": "string",
|
|
"minLength": 3,
|
|
"maxLength": 3
|
|
},
|
|
"offer": {
|
|
"type": "string",
|
|
"enum": ["studio", "sublime", "premier", "family"]
|
|
},
|
|
"formula": {
|
|
"type": "string",
|
|
"enum": ["student", "regular", "family"]
|
|
},
|
|
"periodicity": {
|
|
"type": "string",
|
|
"enum": ["monthly", "annual", "quarterly"]
|
|
},
|
|
"trial": {
|
|
"type": "boolean"
|
|
},
|
|
"household_size_max": {
|
|
"type": "integer"
|
|
},
|
|
"household_owner": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"example": {
|
|
"has_more": false,
|
|
"items": [
|
|
{
|
|
"source": "qobuz",
|
|
"end_date": "2026-04-22",
|
|
"price": 1.99,
|
|
"currency": "USD",
|
|
"offer": "studio",
|
|
"formula": "student",
|
|
"periodicity": "monthly",
|
|
"trial": false,
|
|
"household_size_max": 1,
|
|
"household_owner": null
|
|
}
|
|
],
|
|
"total": 1,
|
|
"limit": 50,
|
|
"offset": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/user/registerCheck": {
|
|
"post": {
|
|
"summary": "Check email registration availability",
|
|
"description": "Check if an email address can be used for registration",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/app_id"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_ts"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/request_sig"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"email": {
|
|
"type": "string",
|
|
"format": "email",
|
|
"description": "Email address to check"
|
|
},
|
|
"language_code": {
|
|
"type": "string",
|
|
"minLength": 2,
|
|
"maxLength": 2,
|
|
"description": "Language code for error messages",
|
|
"default": "en"
|
|
}
|
|
},
|
|
"required": ["email"]
|
|
},
|
|
"example": {
|
|
"email": "joren@directme.in",
|
|
"language_code": "en"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Registration check result",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": ["failed", "success"],
|
|
"description": "Check status"
|
|
},
|
|
"errors": {
|
|
"type": "object",
|
|
"properties": {
|
|
"email": {
|
|
"type": "string",
|
|
"description": "Error message for email field"
|
|
}
|
|
},
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"status": "failed",
|
|
"errors": {
|
|
"email": "email [This email address is already being used.]"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"parameters": {
|
|
"app_id": {
|
|
"name": "app_id",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Application ID"
|
|
},
|
|
"request_ts": {
|
|
"name": "request_ts",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer"
|
|
},
|
|
"description": "Request timestamp"
|
|
},
|
|
"request_sig": {
|
|
"name": "request_sig",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Cryptographic Signature (Required)\n\nQobuz requires a custom MD5 signature for almost all API calls. Standard Swagger UI cannot compute MD5 hashes dynamically, so you will need to calculate this manually or use a Pre-request Script in tools like Postman.\nThe Algorithm\n\n Method Name: Take the endpoint path without slashes (e.g., /oauth2/login becomes oauth2login).\n\n Parameters: Collect all query parameters except app_id, request_ts, and request_sig. Sort them alphabetically by key. Concatenate the keys and values without spaces (e.g., password[md5_hash]username[email]).\n\n Timestamp: Add the request_ts (Unix Epoch).\n\n App Secret: Append the hardcoded App Secret.\n\n Hash: Generate an MD5 hash of the final concatenated string.\n\nVerified Android Credentials\n\n App ID: 312369995 (Pass this in the X-App-Id header and app_id query)\n\n App Secret: e79f8b9be485692b0e5f9dd895826368\n\nReference Implementation (Python)\nPython\n\nimport hashlib\n\ndef generate_qobuz_sig(method, params_dict, request_ts, app_secret):\n # 1. Filter out standard params\n filtered = {k: v for k, v in params_dict.items() if k not in ['app_id', 'request_ts', 'request_sig']}\n # 2. Sort alphabetically by key and concatenate\n sorted_params = \"\".join(f\"{k}{v}\" for k, v in sorted(filtered.items()))\n # 3. Concatenate all parts\n raw_string = f\"{method}{sorted_params}{request_ts}{app_secret}\"\n # 4. Return MD5 Hash\n return hashlib.md5(raw_string.encode('utf-8')).hexdigest()"
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"UserToken": {
|
|
"type": "apiKey",
|
|
"in": "header",
|
|
"name": "X-User-Auth-Token",
|
|
"description": "The session token returned by /oauth2/login. Required for all user-specific endpoints."
|
|
}
|
|
},
|
|
"schemas": {
|
|
"Album": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Album ID"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Album title"
|
|
},
|
|
"artist": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string"
|
|
},
|
|
"medium": {
|
|
"type": "string"
|
|
},
|
|
"large": {
|
|
"type": "string"
|
|
},
|
|
"extralarge": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"release_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"description": "Duration in seconds"
|
|
},
|
|
"tracks_count": {
|
|
"type": "integer"
|
|
},
|
|
"media_count": {
|
|
"type": "integer"
|
|
},
|
|
"genre": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"label": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"copyright": {
|
|
"type": "string"
|
|
},
|
|
"is_preorderable": {
|
|
"type": "boolean"
|
|
},
|
|
"is_streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"is_purchasable": {
|
|
"type": "boolean"
|
|
},
|
|
"is_super_high_res": {
|
|
"type": "boolean"
|
|
},
|
|
"is_high_res": {
|
|
"type": "boolean"
|
|
},
|
|
"is_lossless": {
|
|
"type": "boolean"
|
|
},
|
|
"is_mp3": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"PaginatedResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"has_more": {
|
|
"type": "boolean",
|
|
"description": "Whether more items are available"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"description": "Array of items"
|
|
},
|
|
"total": {
|
|
"type": "integer",
|
|
"description": "Total number of items available"
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"description": "Maximum number of items returned"
|
|
},
|
|
"offset": {
|
|
"type": "integer",
|
|
"description": "Offset of the first item returned"
|
|
}
|
|
}
|
|
},
|
|
"ArtistImage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"artist_id": {
|
|
"type": "string"
|
|
},
|
|
"image_url": {
|
|
"type": "string"
|
|
},
|
|
"width": {
|
|
"type": "integer"
|
|
},
|
|
"height": {
|
|
"type": "integer"
|
|
},
|
|
"format": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ArtistImageRequest": {
|
|
"type": "object",
|
|
"required": ["artist_ids"],
|
|
"properties": {
|
|
"artist_ids": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Array of artist IDs to fetch images for"
|
|
}
|
|
}
|
|
},
|
|
"AlbumSearchResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"artist": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"release_date": {
|
|
"type": "string"
|
|
},
|
|
"streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"duration": {
|
|
"type": "integer"
|
|
},
|
|
"tracks_count": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"AlbumSuggestion": {
|
|
"type": "object",
|
|
"properties": {
|
|
"algorithm": {
|
|
"type": "string",
|
|
"description": "Algorithm used for suggestions"
|
|
},
|
|
"albums": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Album"
|
|
},
|
|
"description": "Suggested albums"
|
|
}
|
|
}
|
|
},
|
|
"Release": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"tracks_count": {
|
|
"type": "integer"
|
|
},
|
|
"artist": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "object",
|
|
"properties": {
|
|
"display": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"artists": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"roles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string"
|
|
},
|
|
"thumbnail": {
|
|
"type": "string"
|
|
},
|
|
"large": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"label": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"genre": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"release_type": {
|
|
"type": "string",
|
|
"enum": ["album", "single", "ep"]
|
|
},
|
|
"release_tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"duration": {
|
|
"type": "integer"
|
|
},
|
|
"dates": {
|
|
"type": "object",
|
|
"properties": {
|
|
"download": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"original": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"stream": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
}
|
|
},
|
|
"parental_warning": {
|
|
"type": "boolean"
|
|
},
|
|
"audio_info": {
|
|
"type": "object",
|
|
"properties": {
|
|
"maximum_bit_depth": {
|
|
"type": "integer"
|
|
},
|
|
"maximum_channel_count": {
|
|
"type": "integer"
|
|
},
|
|
"maximum_sampling_rate": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"rights": {
|
|
"type": "object",
|
|
"properties": {
|
|
"purchasable": {
|
|
"type": "boolean"
|
|
},
|
|
"streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"downloadable": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_purchasable": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"awards": {
|
|
"type": "array",
|
|
"items": {}
|
|
},
|
|
"tracks": {
|
|
"type": "object",
|
|
"properties": {
|
|
"has_more": {
|
|
"type": "boolean"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"SimilarArtistsResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"artists": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "integer"
|
|
},
|
|
"offset": {
|
|
"type": "integer"
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Artist"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"Artist": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"albums_count": {
|
|
"type": "integer"
|
|
},
|
|
"picture": {
|
|
"type": "string"
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string"
|
|
},
|
|
"medium": {
|
|
"type": "string"
|
|
},
|
|
"large": {
|
|
"type": "string"
|
|
},
|
|
"extralarge": {
|
|
"type": "string"
|
|
},
|
|
"mega": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ArtistPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "object",
|
|
"properties": {
|
|
"display": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"artist_category": {
|
|
"type": "string"
|
|
},
|
|
"biography": {
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
},
|
|
"language": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"images": {
|
|
"type": "object",
|
|
"properties": {
|
|
"portrait": {
|
|
"type": "object",
|
|
"properties": {
|
|
"hash": {
|
|
"type": "string"
|
|
},
|
|
"format": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"similar_artists": {
|
|
"type": "object",
|
|
"properties": {
|
|
"has_more": {
|
|
"type": "boolean"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Artist"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"top_tracks": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ArtistSearchResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "string"
|
|
},
|
|
"artists": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "integer"
|
|
},
|
|
"offset": {
|
|
"type": "integer"
|
|
},
|
|
"analytics": {
|
|
"type": "object",
|
|
"properties": {
|
|
"search_external_id": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Artist"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"AwardAlbum": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"track_count": {
|
|
"type": "integer"
|
|
},
|
|
"duration": {
|
|
"type": "integer"
|
|
},
|
|
"parental_warning": {
|
|
"type": "boolean"
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"small": {
|
|
"type": "string"
|
|
},
|
|
"thumbnail": {
|
|
"type": "string"
|
|
},
|
|
"large": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"artists": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"roles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"label": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"genre": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"dates": {
|
|
"type": "object",
|
|
"properties": {
|
|
"download": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"original": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"purchase": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"stream": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
}
|
|
},
|
|
"awards": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"awarded_at": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"audio_info": {
|
|
"type": "object",
|
|
"properties": {
|
|
"maximum_sampling_rate": {
|
|
"type": "number"
|
|
},
|
|
"maximum_bit_depth": {
|
|
"type": "integer"
|
|
},
|
|
"maximum_channel_count": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"rights": {
|
|
"type": "object",
|
|
"properties": {
|
|
"purchasable": {
|
|
"type": "boolean"
|
|
},
|
|
"streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"downloadable": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_purchasable": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"DiscoverContainer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"banners": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
}
|
|
},
|
|
"new_releases": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"$ref": "#/components/schemas/PaginatedResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"Track": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "Track ID"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Track title"
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "Track version (e.g., 'Remix', 'Live')"
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"description": "Duration in seconds"
|
|
},
|
|
"track_number": {
|
|
"type": "integer",
|
|
"description": "Track number on album"
|
|
},
|
|
"media_number": {
|
|
"type": "integer",
|
|
"description": "Media number (disc number)"
|
|
},
|
|
"parental_warning": {
|
|
"type": "boolean",
|
|
"description": "Whether track has explicit content"
|
|
},
|
|
"maximum_bit_depth": {
|
|
"type": "integer",
|
|
"description": "Maximum bit depth available"
|
|
},
|
|
"maximum_sampling_rate": {
|
|
"type": "number",
|
|
"description": "Maximum sampling rate in kHz"
|
|
},
|
|
"maximum_channel_count": {
|
|
"type": "integer",
|
|
"description": "Maximum channel count (e.g., 2 for stereo)"
|
|
},
|
|
"copyright": {
|
|
"type": "string",
|
|
"description": "Copyright information"
|
|
},
|
|
"isrc": {
|
|
"type": "string",
|
|
"description": "ISRC code"
|
|
},
|
|
"performers": {
|
|
"type": "string",
|
|
"description": "Performer credits"
|
|
},
|
|
"performer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"composer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"work": {
|
|
"type": "object",
|
|
"nullable": true
|
|
},
|
|
"audio_info": {
|
|
"type": "object",
|
|
"properties": {
|
|
"replaygain_track_peak": {
|
|
"type": "number"
|
|
},
|
|
"replaygain_track_gain": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"album": {
|
|
"$ref": "#/components/schemas/Album"
|
|
},
|
|
"release_date_original": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"release_date_download": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"release_date_stream": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"release_date_purchase": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"purchasable": {
|
|
"type": "boolean"
|
|
},
|
|
"streamable": {
|
|
"type": "boolean"
|
|
},
|
|
"previewable": {
|
|
"type": "boolean"
|
|
},
|
|
"sampleable": {
|
|
"type": "boolean"
|
|
},
|
|
"downloadable": {
|
|
"type": "boolean"
|
|
},
|
|
"displayable": {
|
|
"type": "boolean"
|
|
},
|
|
"purchasable_at": {
|
|
"type": "integer",
|
|
"nullable": true
|
|
},
|
|
"streamable_at": {
|
|
"type": "integer"
|
|
},
|
|
"hires": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_streamable": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"User": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "User ID"
|
|
},
|
|
"publicId": {
|
|
"type": "string",
|
|
"description": "Public user identifier"
|
|
},
|
|
"email": {
|
|
"type": "string",
|
|
"format": "email"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
},
|
|
"firstname": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"lastname": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"display_name": {
|
|
"type": "string"
|
|
},
|
|
"country_code": {
|
|
"type": "string",
|
|
"minLength": 2,
|
|
"maxLength": 2
|
|
},
|
|
"language_code": {
|
|
"type": "string",
|
|
"minLength": 2,
|
|
"maxLength": 2
|
|
},
|
|
"zone": {
|
|
"type": "string"
|
|
},
|
|
"store": {
|
|
"type": "string"
|
|
},
|
|
"country": {
|
|
"type": "string"
|
|
},
|
|
"avatar": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"genre": {
|
|
"type": "string",
|
|
"enum": ["male", "female", "other"]
|
|
},
|
|
"age": {
|
|
"type": "integer"
|
|
},
|
|
"birthdate": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"creation_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"zipcode": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"subscription": {
|
|
"type": "object",
|
|
"properties": {
|
|
"offer": {
|
|
"type": "string",
|
|
"enum": ["studio", "sublime", "premier", "family"]
|
|
},
|
|
"periodicity": {
|
|
"type": "string",
|
|
"enum": ["monthly", "annual", "quarterly"]
|
|
},
|
|
"start_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"end_date": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"is_canceled": {
|
|
"type": "boolean"
|
|
},
|
|
"household_size_max": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"credential": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"lossy_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"lossless_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"hires_purchases_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"mobile_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"offline_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"hfp_purchase": {
|
|
"type": "boolean"
|
|
},
|
|
"included_format_group_ids": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"color_scheme": {
|
|
"type": "object",
|
|
"properties": {
|
|
"logo": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"short_label": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"last_update": {
|
|
"type": "object",
|
|
"properties": {
|
|
"favorite": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_album": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_artist": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_track": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_label": {
|
|
"type": "integer"
|
|
},
|
|
"favorite_award": {
|
|
"type": "integer"
|
|
},
|
|
"playlist": {
|
|
"type": "integer"
|
|
},
|
|
"purchase": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"store_features": {
|
|
"type": "object",
|
|
"properties": {
|
|
"download": {
|
|
"type": "boolean"
|
|
},
|
|
"streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"editorial": {
|
|
"type": "boolean"
|
|
},
|
|
"club": {
|
|
"type": "boolean"
|
|
},
|
|
"wallet": {
|
|
"type": "boolean"
|
|
},
|
|
"weeklyq": {
|
|
"type": "boolean"
|
|
},
|
|
"autoplay": {
|
|
"type": "boolean"
|
|
},
|
|
"inapp_purchase_subscripton": {
|
|
"type": "boolean"
|
|
},
|
|
"opt_in": {
|
|
"type": "boolean"
|
|
},
|
|
"pre_register_opt_in": {
|
|
"type": "boolean"
|
|
},
|
|
"pre_register_zipcode": {
|
|
"type": "boolean"
|
|
},
|
|
"music_import": {
|
|
"type": "boolean"
|
|
},
|
|
"radio": {
|
|
"type": "boolean"
|
|
},
|
|
"stream_purchase": {
|
|
"type": "boolean"
|
|
},
|
|
"lyrics": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"Playlist": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"owner": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"rectangle": {
|
|
"type": "string"
|
|
},
|
|
"covers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"duration": {
|
|
"type": "integer"
|
|
},
|
|
"tracks_count": {
|
|
"type": "integer"
|
|
},
|
|
"genres": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |