- Python 99.5%
- Dockerfile 0.5%
| .github | ||
| tests | ||
| tidal_auth | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| main.py | ||
| README.md | ||
| requirements.txt | ||
hifi-api
Running on BiniLossless on qqdl.site.
hifi-api is forked from the original project sachinsenal0x64/hifi.
Important
Music piracy is illegal in most countries. This project is intended for use with a valid Tidal account for educational purposes (for example, in your homelab).
Setup
Run pip install -r requirements.txt in tidal_auth/, then run tidal_auth/tidal_auth.py and follow the instructions. The script creates/updates token.json.
Install main API dependencies with pip install -r requirements.txt in the project root.
Run the server with:
python3 main.py
By default, it listens on 0.0.0.0:8000 (could be the open internet - beware!).
Notes
Region-locking
Tidal appears to region lock by account, not by countryCode. Nevertheless, countryCode is still exposed for your own testing. However, the /track/ endpoint does not appear to the region-locked. This would mean that you could use the Tidal OpenAPI to request a region-locked song with countryCode (as the OpenAPI uses the countryCode parameter properly) through search/album endpoints then stream from this API.
Dolby Atmos
Usually, tracks that support Atmos will have DOLBY_ATMOS in mediaMetadata.tags. To request Dolby Atmos tracks, use the new trackManifests endpoint - see its spec for more info on Atmos.
API Schema
These responses are samples and you should host the API yourself.
GET /
Params
None.
Response
200 OK
{
"version": "2.x",
"Repo": "https://github.com/binimum/hifi-api"
}
GET /info/
Returns info about a track given ID.
Params
id:int(required) - Tidal track ID.
Response
200 OK
{
"version": "2.6",
"data": {
"id": 144371283,
"title": "Don't Look Back In Anger",
"duration": 328,
"replayGain": -10.46,
"peak": 0.999969,
"allowStreaming": true,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2020-08-11T00:00:00.000+0000",
"premiumStreamingOnly": false,
"trackNumber": 10,
"volumeNumber": 1,
"version": "Live at Wembley Stadium, July 2000",
"popularity": 51,
"copyright": "(P) 2000 Big Brother Recordings Ltd",
"bpm": 86,
"key": "C",
"keyScale": "MAJOR",
"url": "http://www.tidal.com/track/144371283",
"isrc": "GBBQY0002027",
"editable": false,
"explicit": true,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS"
]
},
"upload": false,
"accessType": "PUBLIC",
"spotlighted": false,
"artist": {
"id": 109,
"name": "Oasis",
"handle": null,
"type": "MAIN",
"picture": "0491c8eb-c16f-409c-915d-36a79d9e6384"
},
"artists": [
{
"id": 109,
"name": "Oasis",
"handle": null,
"type": "MAIN",
"picture": "0491c8eb-c16f-409c-915d-36a79d9e6384"
}
],
"album": {
"id": 144371273,
"title": "Familiar To Millions (Live)",
"cover": "8f2d544e-2452-46de-ba70-25498434e2ef",
"vibrantColor": "#cb8784",
"videoCover": null
},
"mixes": {
"TRACK_MIX": "0010f77179063ef106e2efaac9507a"
}
}
}
GET /track/
Params
id:int(required) - Tidal track ID.quality:str(optional, defaultHI_RES_LOSSLESS) -HI_RES_LOSSLESS,LOSSLESS,HIGH,LOW.immersiveaudio:bool(optional, defaultFalse) - Requests immersive audio (Dolby Atmos/Sony 360). It doesn't properly work - I would use /trackManifests/ below.
Response
CD Lossless/AAC
{
"version": "2.0",
"data": {
"trackId": 48717877,
"assetPresentation": "FULL",
"audioMode": "STEREO",
"audioQuality": "LOSSLESS",
"manifestMimeType": "application/vnd.tidal.bts",
"manifestHash": "/smSLXXzSAVB+EsSVgyRzxtDuDo9rxPAH7n4tDwuXU4=",
"manifest": "eyJtaW1lVHlwZSI6ImF1ZGlvL2ZsYWMiLCJjb2RlY3MiOiJmbGFjIiwiZW5jcnlwdGlvblR5cGUiOiJOT05FIiwidXJscyI6WyJodHRwczovL2xnZi5hdWRpby50aWRhbC5jb20vbWVkaWF0cmFja3MvQ0FFYUt3Z0RFaWRtWWpSaVpUQmlOalUzWWpRNE4yUTVNREJsWkdKaE56bGhPR0ppT1dNME1WODJNUzV0Y0RRLzAuZmxhYz90b2tlbj0xNzY2ODcwMDU3fk5UVmlNamhtWWpkak9UTmlOV1U0TVRNM1l6SXdOVGN4TTJRM05qVmhOakptWTJFeU5EWXdNZz09Il19",
"albumReplayGain": -12.41,
"albumPeakAmplitude": 0.999969,
"trackReplayGain": -11.07,
"trackPeakAmplitude": 0.999969,
"bitDepth": 16,
"sampleRate": 44100
}
}
Where manifest is either base64 encoded JSON (use "manifestMimeType": "application/vnd.tidal.bts" to identify).
Note
You should probably be using the newer endpoint /trackManifests/ instead which returns some more stuff.
Decoded Manifest (formatted)
{
"mimeType": "audio/flac",
"codecs": "flac",
"encryptionType": "NONE",
"urls": [
"https://lgf.audio.tidal.com/mediatracks/CAEaKwgDEidmYjRiZTBiNjU3YjQ4N2Q5MDBlZGJhNzlhOGJiOWM0MV82MS5tcDQ/0.flac?token=1766870057~NTViMjhmYjdjOTNiNWU4MTM3YzIwNTcxM2Q3NjVhNjJmY2EyNDYwMg=="
]
}
CD Lossless/Hi-Res Lossless
{
"version": "2.0",
"data": {
"trackId": 194567102,
"assetPresentation": "FULL",
"audioMode": "STEREO",
"audioQuality": "HI_RES_LOSSLESS",
"manifestMimeType": "application/dash+xml",
"manifestHash": "yyQEQ8ZX8ITLjQfFu0ADBdh/y03PpUd0NEPBz7RcuHk=",
"manifest": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48TVBEIHhtbG5zPSJ1cm46bXBlZzpkYXNoOnNjaGVtYTptcGQ6MjAxMSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOmNlbmM9InVybjptcGVnOmNlbmM6MjAxMyIgeHNpOnNjaGVtYUxvY2F0aW9uPSJ1cm46bXBlZzpkYXNoOnNjaGVtYTptcGQ6MjAxMSBEQVNILU1QRC54c2QiIHByb2ZpbGVzPSJ1cm46bXBlZzpkYXNoOnByb2ZpbGU6aXNvZmYtbWFpbjoyMDExIiB0eXBlPSJzdGF0aWMiIG1pbkJ1ZmZlclRpbWU9IlBUMy45OTNTIiBtZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uPSJQVDJNNDIuODc5UyI+PFBlcmlvZCBpZD0iMCI+PEFkYXB0YXRpb25TZXQgaWQ9IjAiIGNvbnRlbnRUeXBlPSJhdWRpbyIgbWltZVR5cGU9ImF1ZGlvL21wNCIgc2VnbWVudEFsaWdubWVudD0idHJ1ZSI+PFJlcHJlc2VudGF0aW9uIGlkPSIwIiBjb2RlY3M9ImZsYWMiIGJhbmR3aWR0aD0iMTY2NzU1MyIgYXVkaW9TYW1wbGluZ1JhdGU9IjQ0MTAwIj48U2VnbWVudFRlbXBsYXRlIHRpbWVzY2FsZT0iNDQxMDAiIGluaXRpYWxpemF0aW9uPSJodHRwczovL3NwLWFkLWNmLmF1ZGlvLnRpZGFsLmNvbS9tZWRpYXRyYWNrcy9HaXNJQXhJbk9XWTBNVGs1WXpVMFpESmpaRGhqTm1RM1ptWXdOV0ZsTVdVNVpqTXpOR1ZmTmpJdWJYQTBJaUFkQUFDQVFDQUNLaENoT1h0R0VnMjNPV3duT3lra0lRRG1NZ1VOQUFDZ1FRLzAubXA0P1BvbGljeT1leUpUZEdGMFpXMWxiblFpT2lCYmV5SlNaWE52ZFhKalpTSTZJbWgwZEhCek9pOHZjM0F0WVdRdFkyWXVZWFZrYVc4dWRHbGtZV3d1WTI5dEwyMWxaR2xoZEhKaFkydHpMMGRwYzBsQmVFbHVUMWRaTUUxVWF6VlplbFV3V2tSS2FscEVhR3BPYlZFeldtMVpkMDVYUm14TlYxVTFXbXBOZWs1SFZtWk9ha2wxWWxoQk1FbHBRV1JCUVVOQlVVTkJRMHRvUTJoUFdIUkhSV2N5TTA5WGQyNVBlV3RyU1ZGRWJVMW5WVTVCUVVOblVWRXZLaUlzSWtOdmJtUnBkR2x2YmlJNmV5SkVZWFJsVEdWemMxUm9ZVzRpT25zaVFWZFRPa1Z3YjJOb1ZHbHRaU0k2TVRjMk5qZzNNRFEzTW4xOWZWMTkmYW1wO1NpZ25hdHVyZT12WH51cFNqWEJVVVRKMmdTMGRoTnVrY1ozLUNIaFNNd2ozUzIzWXVzNGpaMEV3QlNiZEJXT2xmeW5yWmxOYnQ2V0t0QjA4OGppZzM5d1YteHpERUx5RHlnTk4zb2E4Zk01cDVVaFQ3T0JKUWc2Q35pSzlEZ3FleE9ka3ZzeEpMbVlOUFdSYzJ2Qkt+TGRPbG1qNVVybEdmbGhYUHRZTn42d2g0aWQ3MHlQcllyVkNHdFZJT1ZzZlAyanpHRDFNM1EyVTkxMGNuOWdPYU15aU9YSUtncDl4MXhFajhEZW9QVDZPY3hiNC1HfmtBUzBhTDlJSFlNdn42RjMzWnU1Si1KdTFIQmN3MmNHV1IwVWZiNHM0ZUpEaE1kdWxHT1hLRmROVVlkdHVqZGdpcXBiSWlXajVWaUNieHJZa1JQVEZ0OXdncS1yMnVRWE1wOGFIZzd2MFZOV1FfXyZhbXA7S2V5LVBhaXItSWQ9SzE0TFpDWjlRVUk0SkwiIG1lZGlhPSJodHRwczovL3NwLWFkLWNmLmF1ZGlvLnRpZGFsLmNvbS9tZWRpYXRyYWNrcy9HaXNJQXhJbk9XWTBNVGs1WXpVMFpESmpaRGhqTm1RM1ptWXdOV0ZsTVdVNVpqTXpOR1ZmTmpJdWJYQTBJaUFkQUFDQVFDQUNLaENoT1h0R0VnMjNPV3duT3lra0lRRG1NZ1VOQUFDZ1FRLyROdW1iZXIkLm1wND9Qb2xpY3k9ZXlKVGRHRjBaVzFsYm5RaU9pQmJleUpTWlhOdmRYSmpaU0k2SW1oMGRIQnpPaTh2YzNBdFlXUXRZMll1WVhWa2FXOHVkR2xrWVd3dVkyOXRMMjFsWkdsaGRISmhZMnR6TDBkcGMwbEJlRWx1VDFkWk1FMVVhelZaZWxVd1drUkthbHBFYUdwT2JWRXpXbTFaZDA1WFJteE5WMVUxV21wTmVrNUhWbVpPYWtsMVlsaEJNRWxwUVdSQlFVTkJVVU5CUTB0b1EyaFBXSFJIUldjeU0wOVhkMjVQZVd0clNWRkViVTFuVlU1QlFVTm5VVkV2S2lJc0lrTnZibVJwZEdsdmJpSTZleUpFWVhSbFRHVnpjMVJvWVc0aU9uc2lRVmRUT2tWd2IyTm9WR2x0WlNJNk1UYzJOamczTURRM01uMTlmVjE5JmFtcDtTaWduYXR1cmU9dlh+dXBTalhCVVVUSjJnUzBkaE51a2NaMy1DSGhTTXdqM1MyM1l1czRqWjBFd0JTYmRCV09sZnluclpsTmJ0NldLdEIwODhqaWczOXdWLXh6REVMeUR5Z05OM29hOGZNNXA1VWhUN09CSlFnNkN+aUs5RGdxZXhPZGt2c3hKTG1ZTlBXUmMydkJLfkxkT2xtajVVcmxHZmxoWFB0WU5+NndoNGlkNzB5UHJZclZDR3RWSU9Wc2ZQMmp6R0QxTTNRMlU5MTBjbjlnT2FNeWlPWElLZ3A5eDF4RWo4RGVvUFQ2T2N4YjQtR35rQVMwYUw5SUhZTXZ+NkYzM1p1NUotSnUxSEJjdzJjR1dSMFVmYjRzNGVKRGhNZHVsR09YS0ZkTlVZZHR1amRnaXFwYklpV2o1VmlDYnhyWWtSUFRGdDl3Z3EtcjJ1UVhNcDhhSGc3djBWTldRX18mYW1wO0tleS1QYWlyLUlkPUsxNExaQ1o5UVVJNEpMIiBzdGFydE51bWJlcj0iMSI+PFNlZ21lbnRUaW1lbGluZT48UyBkPSIxNzYxMjgiIHI9IjM5Ii8+PFMgZD0iMTM3ODYwIi8+PC9TZWdtZW50VGltZWxpbmU+PC9TZWdtZW50VGVtcGxhdGU+PExhYmVsPkZMQUNfSElSRVM8L0xhYmVsPjwvUmVwcmVzZW50YXRpb24+PC9BZGFwdGF0aW9uU2V0PjwvUGVyaW9kPjwvTVBEPg==",
"albumReplayGain": -8.91,
"albumPeakAmplitude": 0.970377,
"trackReplayGain": -8.91,
"trackPeakAmplitude": 0.970377,
"bitDepth": 24,
"sampleRate": 44100
}
}
Where manifest is base64 encoded MPD manifest (use "manifestMimeType": "application/dash+xml" to identify).
Decoded Manifest (formatted)
<?xml version='1.0' encoding='UTF-8'?>
<MPD
xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:cenc="urn:mpeg:cenc:2013" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" minBufferTime="PT3.993S" mediaPresentationDuration="PT2M42.879S">
<Period id="0">
<AdaptationSet id="0" contentType="audio" mimeType="audio/mp4" segmentAlignment="true">
<Representation id="0" codecs="flac" bandwidth="1667553" audioSamplingRate="44100">
<SegmentTemplate timescale="44100" initialization="https://sp-ad-cf.audio.tidal.com/mediatracks/GisIAxInOWY0MTk5YzU0ZDJjZDhjNmQ3ZmYwNWFlMWU5ZjMzNGVfNjIubXA0IiAdAACAQCACKhChOXtGEg23OWwnOykkIQDmMgUNAACgQQ/0.mp4?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHBzOi8vc3AtYWQtY2YuYXVkaW8udGlkYWwuY29tL21lZGlhdHJhY2tzL0dpc0lBeEluT1dZME1UazVZelUwWkRKalpEaGpObVEzWm1Zd05XRmxNV1U1WmpNek5HVmZOakl1YlhBMElpQWRBQUNBUUNBQ0toQ2hPWHRHRWcyM09Xd25PeWtrSVFEbU1nVU5BQUNnUVEvKiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc2Njg3MDQ3Mn19fV19&Signature=vX~upSjXBUUTJ2gS0dhNukcZ3-CHhSMwj3S23Yus4jZ0EwBSbdBWOlfynrZlNbt6WKtB088jig39wV-xzDELyDygNN3oa8fM5p5UhT7OBJQg6C~iK9DgqexOdkvsxJLmYNPWRc2vBK~LdOlmj5UrlGflhXPtYN~6wh4id70yPrYrVCGtVIOVsfP2jzGD1M3Q2U910cn9gOaMyiOXIKgp9x1xEj8DeoPT6Ocxb4-G~kAS0aL9IHYMv~6F33Zu5J-Ju1HBcw2cGWR0Ufb4s4eJDhMdulGOXKFdNUYdtujdgiqpbIiWj5ViCbxrYkRPTFt9wgq-r2uQXMp8aHg7v0VNWQ__&Key-Pair-Id=K14LZCZ9QUI4JL" media="https://sp-ad-cf.audio.tidal.com/mediatracks/GisIAxInOWY0MTk5YzU0ZDJjZDhjNmQ3ZmYwNWFlMWU5ZjMzNGVfNjIubXA0IiAdAACAQCACKhChOXtGEg23OWwnOykkIQDmMgUNAACgQQ/$Number$.mp4?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHBzOi8vc3AtYWQtY2YuYXVkaW8udGlkYWwuY29tL21lZGlhdHJhY2tzL0dpc0lBeEluT1dZME1UazVZelUwWkRKalpEaGpObVEzWm1Zd05XRmxNV1U1WmpNek5HVmZOakl1YlhBMElpQWRBQUNBUUNBQ0toQ2hPWHRHRWcyM09Xd25PeWtrSVFEbU1nVU5BQUNnUVEvKiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc2Njg3MDQ3Mn19fV19&Signature=vX~upSjXBUUTJ2gS0dhNukcZ3-CHhSMwj3S23Yus4jZ0EwBSbdBWOlfynrZlNbt6WKtB088jig39wV-xzDELyDygNN3oa8fM5p5UhT7OBJQg6C~iK9DgqexOdkvsxJLmYNPWRc2vBK~LdOlmj5UrlGflhXPtYN~6wh4id70yPrYrVCGtVIOVsfP2jzGD1M3Q2U910cn9gOaMyiOXIKgp9x1xEj8DeoPT6Ocxb4-G~kAS0aL9IHYMv~6F33Zu5J-Ju1HBcw2cGWR0Ufb4s4eJDhMdulGOXKFdNUYdtujdgiqpbIiWj5ViCbxrYkRPTFt9wgq-r2uQXMp8aHg7v0VNWQ__&Key-Pair-Id=K14LZCZ9QUI4JL" startNumber="1">
<SegmentTimeline>
<S d="176128" r="39"/>
<S d="137860"/>
</SegmentTimeline>
</SegmentTemplate>
<Label>FLAC_HIRES</Label>
</Representation>
</AdaptationSet>
</Period>
</MPD>
GET /trackManifests/
Params
id:str(required) - Tidal track ID.formats:list[str](optional, defaultHEAACV1,AACLC,FLAC,FLAC_HIRES,EAC3_JOC) - Requested audio formats. Can be specified multiple times.adaptive:str(optional, defaulttrue) - Adaptive streaming (where multiple formats are returned in one response).manifestType:str(optional, defaultMPEG_DASH, optionsHTTPS,HLS) - Manifest type.uriScheme:str(optional, defaultHTTPS, optionsHTTPS,DATA) - URI scheme. DATA returns everything in base64, HTTPS returns a link to the manifest.usage:str(optional, defaultPLAYBACK, optionsPLAYBACK,DOWNLOAD) - Usage type.
Response
200 OK (default everything)
{
"version": "2.7",
"data": {
"data": {
"id": "85905134",
"type": "trackManifests",
"attributes": {
"trackPresentation": "FULL",
"uri": "https://im-fa.manifest.tidal.com/1/manifests/Egg4NTkwNTEzNBgCIhZuVE1BeW93OVRvekZZUzhBcEUzQmVBIhZVQmd4MDNIUjVlVlRhNmdKa0kzUTlnIhZuWmdWQk9CUHRFZTFTblNYbUlmUW5nIhZhRDVyZXBtaUY2OEdGYXJ6V0tZcll3KAEwAg.mpd?token=1774196362~ZTk0MWU2MmI1ZmEyMzI0MDc4NmMxMDdiYTg5MTgwNTA3YjY0OWJjOA==",
"hash": "nzLt3KkLfegkCxSubZodCWRrZCO1l4FpXpv6yB0kNrM=",
"formats": [
"HEAACV1",
"AACLC",
"FLAC",
"FLAC_HIRES"
],
"albumAudioNormalizationData": {
"replayGain": -10.81,
"peakAmplitude": 0.901572
},
"trackAudioNormalizationData": {
"replayGain": -10.1,
"peakAmplitude": 0.901468
}
}
},
"links": {
"self": "/trackManifests/85905134?uriScheme=HTTPS&adaptive=true&formats=AACLC%2CEAC3_JOC%2CFLAC%2CFLAC_HIRES%2CHEAACV1&usage=PLAYBACK&manifestType=MPEG_DASH"
}
}
}
Note
Be aware - the API returns Atmos by default if available. Most browsers can't play Atmos - so specify every format except from Atmos to avoid it.
Response (Atmos)
{
"version": "2.7",
"data": {
"data": {
"id": "434493254",
"type": "trackManifests",
"attributes": {
"trackPresentation": "FULL",
"uri": "https://im-fa.manifest.tidal.com/1/manifests/Egk0MzQ0OTMyNTQYAiIWUzVyXzNHdVlYby02RnIwSDM5aUh2USgBMAI.mpd?token=1774196401~ZGQyZjgzMDNkZjc1MTdlNTJmYmQxZjEwZjZjOGFlMWVjN2RjNjFiNA==",
"hash": "P9JIfU1+7xwdasgo84AJaGAiygOHKvsfAK3aZ1xOOLk=",
"formats": [
"EAC3_JOC"
]
}
},
"links": {
"self": "/trackManifests/434493254?uriScheme=HTTPS&adaptive=true&formats=AACLC%2CEAC3_JOC%2CFLAC%2CFLAC_HIRES%2CHEAACV1&usage=PLAYBACK&manifestType=MPEG_DASH"
}
}
}
GET / POST /widevine
Proxy endpoint for Widevine DRM license requests. Allows the frontend to seamlessly request Widevine DRM certificates and licenses while transparently appending the Tidal auth token.
Params
None. Send the Widevine challenge in the request body.
Response
200 OK
Returns the DRM license response.
GET /recommendations/
Finds recommendations to play, given a song. Similar to the mix. Returns 20 songs.
Params
id:int(required) - Tidal track ID.
Response
200 OK
{
"version": "2.6",
"data": {
"limit": 20,
"offset": 0,
"totalNumberOfItems": 26,
"items": [
{
"track": {
"id": 37160635,
"title": "Under Pressure (Live at Wembley '86)",
"duration": 221,
"replayGain": -11.87,
"peak": 0.980133,
"allowStreaming": true,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2003-08-19T00:00:00.000+0000",
"premiumStreamingOnly": false,
"trackNumber": 7,
"volumeNumber": 1,
"version": null,
"popularity": 55,
"copyright": "℗ 1986 Hollywood Records, Inc.",
"bpm": 122,
"key": "D",
"keyScale": "MAJOR",
"url": "http://www.tidal.com/track/37160635",
"isrc": "GBCEE9200016",
"editable": false,
"explicit": false,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS"
]
},
"upload": false,
"accessType": "PUBLIC",
"spotlighted": false,
"artist": {
"id": 8992,
"name": "Queen",
"handle": null,
"type": "MAIN",
"picture": "6ac97166-8aae-458a-b1ea-cfcc9d3cfabf"
},
"artists": [
{
"id": 8992,
"name": "Queen",
"handle": null,
"type": "MAIN",
"picture": "6ac97166-8aae-458a-b1ea-cfcc9d3cfabf"
}
],
"album": {
"id": 37160628,
"title": "Live At Wembley Stadium",
"cover": "c810ba36-a324-4f11-ac82-ab7eeacefb64",
"vibrantColor": "#c49839",
"videoCover": null
},
"mixes": {
"TRACK_MIX": "0013f3c9f7ced02e0d9a90e41d95a8"
}
},
"sources": [
"SUGGESTED_TRACKS"
]
},
<truncated>
]
}
}
GET /search/
Params
Specify only one of the following query fields:
s:str- track querya:str- artist queryal:str- album queryv:str- video queryp:str- playlist queryi:str- ISRC query (exact lookup via/v1/tracks?filter[isrc])
Pagination:
offset:int(optional, default0, min0)limit:int(optional, default25, min1, max500)
Response
200 OK
Track
{
"version": "2.6",
"data": {
"limit": 25,
"offset": 0,
"totalNumberOfItems": 300,
"items": [
{
"id": 427520487,
"title": "Azizam",
"duration": 162,
"replayGain": -9.95,
"peak": 0.988554,
"allowStreaming": true,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2025-04-04T00:00:00.000+0000",
"premiumStreamingOnly": false,
"trackNumber": 1,
"volumeNumber": 1,
"version": null,
"popularity": 80,
"copyright": "Gingerbread Man Records and Atlantic Records UK release, under exclusive licence to Warner Music UK Limited, ℗ 2025 Ed Sheeran Limited",
"bpm": 128,
"key": "F",
"keyScale": "MAJOR",
"url": "http://www.tidal.com/track/427520487",
"isrc": "GBAHS2500081",
"editable": false,
"explicit": false,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS",
"HIRES_LOSSLESS"
]
},
"upload": false,
"accessType": null,
"spotlighted": false,
"artist": {
"id": 3995478,
"name": "Ed Sheeran",
"handle": null,
"type": "MAIN",
"picture": "05d72ae4-319f-4237-821f-1d7af9ec8acf"
},
"artists": [
{
"id": 3995478,
"name": "Ed Sheeran",
"handle": null,
"type": "MAIN",
"picture": "05d72ae4-319f-4237-821f-1d7af9ec8acf"
}
],
"album": {
"id": 427520486,
"title": "Azizam",
"cover": "5a2d656d-f965-48ba-a241-bce5ad432015",
"vibrantColor": "#db899c",
"videoCover": null
},
"mixes": {
"TRACK_MIX": "001098c806426de17f57eb9d79b8ec"
}
},
<truncated>
]
}
}
Artist
{
"version": "2.6",
"data": {
"artists": {
"limit": 25,
"offset": 0,
"totalNumberOfItems": 73,
"items": [
{
"id": 8812,
"name": "Coldplay",
"artistTypes": [
"ARTIST",
"CONTRIBUTOR"
],
"url": "http://www.tidal.com/artist/8812",
"picture": "b4579672-5b91-4679-a27a-288f097a4da5",
"selectedAlbumCoverFallback": null,
"popularity": 92,
"artistRoles": [
{
"categoryId": -1,
"category": "Artist"
},
{
"categoryId": 1,
"category": "Producer"
},
{
"categoryId": 11,
"category": "Performer"
},
{
"categoryId": 2,
"category": "Songwriter"
},
{
"categoryId": 10,
"category": "Production team"
},
{
"categoryId": 99,
"category": "Misc"
}
],
"mixes": {
"ARTIST_MIX": "000d63462309f499a611e73b4992bd"
},
"handle": null,
"userId": null,
"spotlighted": false
},
{
"id": 39476431,
"name": "Coldplay Piano Covers",
"artistTypes": [
"ARTIST",
"CONTRIBUTOR"
],
"url": "http://www.tidal.com/artist/39476431",
"picture": "3e88ec5b-0058-4185-8c1c-385098528f40",
"selectedAlbumCoverFallback": "3e88ec5b-0058-4185-8c1c-385098528f40",
"popularity": 28,
"artistRoles": [
{
"categoryId": -1,
"category": "Artist"
}
],
"mixes": {
},
"handle": null,
"userId": null,
"spotlighted": false
},
<truncated>
]
}
}
GET /album/
Params
id:int(required) - album ID.limit:int(optional, default100, min1, max500) - number of album items.offset:int(optional, default0, min0) - item offset.
Response
200 OK
{
"version": "2.6",
"data": {
"id": 58990510,
"title": "OK Computer",
"duration": 3216,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2023-11-21T00:00:00.000+0000",
"allowStreaming": true,
"premiumStreamingOnly": false,
"numberOfTracks": 12,
"numberOfVideos": 0,
"numberOfVolumes": 1,
"releaseDate": "1997-07-01",
"copyright": "XL Recordings Ltd",
"type": "ALBUM",
"version": null,
"url": "http://www.tidal.com/album/58990510",
"cover": "e77e4cc0-6cd0-4522-807d-88aeac488065",
"vibrantColor": "#a8cada",
"videoCover": null,
"explicit": false,
"upc": "634904078164",
"popularity": 83,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS"
]
},
"upload": false,
"artist": {
"id": 64518,
"name": "Radiohead",
"handle": null,
"type": "MAIN",
"picture": "600a6117-32bb-4f9a-ac2b-206cbf1db419"
},
"artists": [
{
"id": 64518,
"name": "Radiohead",
"handle": null,
"type": "MAIN",
"picture": "600a6117-32bb-4f9a-ac2b-206cbf1db419"
}
],
"items": [
{
"item": {
"id": 58990511,
"title": "Airbag",
"duration": 287,
"replayGain": -10.77,
"peak": 0.980682,
"allowStreaming": true,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2023-11-21T00:00:00.000+0000",
"premiumStreamingOnly": false,
"trackNumber": 1,
"volumeNumber": 1,
"version": null,
"popularity": 74,
"copyright": "XL Recordings Ltd",
"bpm": 166,
"key": "A",
"keyScale": null,
"url": "http://www.tidal.com/track/58990511",
"isrc": "GBAYE9701274",
"editable": false,
"explicit": false,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS"
]
},
"upload": false,
"accessType": "PUBLIC",
"spotlighted": false,
"artist": {
"id": 64518,
"name": "Radiohead",
"handle": null,
"type": "MAIN",
"picture": "0968a9dd-9536-4bc2-84a2-ab65c8926bdc"
},
"artists": [
{
"id": 64518,
"name": "Radiohead",
"handle": null,
"type": "MAIN",
"picture": "0968a9dd-9536-4bc2-84a2-ab65c8926bdc"
}
],
"album": {
"id": 58990510,
"title": "OK Computer",
"cover": "e77e4cc0-6cd0-4522-807d-88aeac488065",
"vibrantColor": "#a8cada",
"videoCover": null
},
"mixes": {
"TRACK_MIX": "0015963a9a23be922134195a634872"
}
},
"type": "track"
},
<truncated>
]
}
}
GET /mix/
Kind of like recommendations, except they are usually 60 tracks.
Params
id:str(required) - mix ID.
Response
200 OK
{
"version": "2.6",
"mix": {
"id": "0019a6f811ccf59fd0346967a1dea7",
"title": "Subterranean Homesick Alien",
"subTitle": "Radiohead",
"description": null,
"graphic": {
"type": "SQUARES_GRID",
"text": "Subterranean Homesick Alien",
"images": [
{
"id": "dummy-placeholder",
"vibrantColor": "#FFFFFF",
"type": "ARTIST"
}
]
},
"images": {
"SMALL": {
"width": 320,
"height": 320,
"url": "https://images.tidal.com/0/EMACGMACIKABKKAB/CAEQBhokZTc3ZTRjYzAvNmNkMC80NTIyLzgwN2QvODhhZWFjNDg4MDY1GiRiMjFmZDJmYy8yZDc2LzRlYmMvYTQzNC84Njg2YzQ3NWZjMTAaJDY4NWYxZjRjLzI5NTYvNDBlNi9iODFjL2ZmYzU0MGQ2NjA2ZCILVHJhY2sgUmFkaW8iG1N1YnRlcnJhbmVhbiBIb21lc2ljayBBbGllbioHI0E4Q0FEQTAC?token=8414f91d1fe7b2e31719b2567707cab310bbe2e9"
},
"MEDIUM": {
"width": 640,
"height": 640,
"url": "https://images.tidal.com/0/EIAFGIAFIMACKMAC/CAEQBhokZTc3ZTRjYzAvNmNkMC80NTIyLzgwN2QvODhhZWFjNDg4MDY1GiRiMjFmZDJmYy8yZDc2LzRlYmMvYTQzNC84Njg2YzQ3NWZjMTAaJDY4NWYxZjRjLzI5NTYvNDBlNi9iODFjL2ZmYzU0MGQ2NjA2ZCILVHJhY2sgUmFkaW8iG1N1YnRlcnJhbmVhbiBIb21lc2ljayBBbGllbioHI0E4Q0FEQTAC?token=518de937f6ae775faec893fdc709d4ad146b5e34"
},
"LARGE": {
"width": 1500,
"height": 1500,
"url": "https://images.tidal.com/0/ENwLGNwLIO4FKO4F/CAEQBhokZTc3ZTRjYzAvNmNkMC80NTIyLzgwN2QvODhhZWFjNDg4MDY1GiRiMjFmZDJmYy8yZDc2LzRlYmMvYTQzNC84Njg2YzQ3NWZjMTAaJDY4NWYxZjRjLzI5NTYvNDBlNi9iODFjL2ZmYzU0MGQ2NjA2ZCILVHJhY2sgUmFkaW8iG1N1YnRlcnJhbmVhbiBIb21lc2ljayBBbGllbioHI0E4Q0FEQTAC?token=cbfbe06ee9b1e54e59ffb4bd4eaca73b027b7842"
}
},
"sharingImages": null,
"mixType": "TRACK_MIX",
"mixNumber": null,
"contentBehavior": "UNRESTRICTED",
"master": false,
"titleColor": "#A8CADA",
"subTitleColor": "#A8CADA",
"descriptionColor": null,
"detailImages": {
"SMALL": {
"width": 320,
"height": 320,
"url": "https://images.tidal.com/0/EMACGMACIKABKKAB/CAEQBhokZTc3ZTRjYzAvNmNkMC80NTIyLzgwN2QvODhhZWFjNDg4MDY1GiRiMjFmZDJmYy8yZDc2LzRlYmMvYTQzNC84Njg2YzQ3NWZjMTAaJDY4NWYxZjRjLzI5NTYvNDBlNi9iODFjL2ZmYzU0MGQ2NjA2ZCILVHJhY2sgUmFkaW8iG1N1YnRlcnJhbmVhbiBIb21lc2ljayBBbGllbioHI0E4Q0FEQTACOAE?token=daf8f7b393c2285944a7e0c05eb79c2a47b027df"
},
"MEDIUM": {
"width": 640,
"height": 640,
"url": "https://images.tidal.com/0/EIAFGIAFIMACKMAC/CAEQBhokZTc3ZTRjYzAvNmNkMC80NTIyLzgwN2QvODhhZWFjNDg4MDY1GiRiMjFmZDJmYy8yZDc2LzRlYmMvYTQzNC84Njg2YzQ3NWZjMTAaJDY4NWYxZjRjLzI5NTYvNDBlNi9iODFjL2ZmYzU0MGQ2NjA2ZCILVHJhY2sgUmFkaW8iG1N1YnRlcnJhbmVhbiBIb21lc2ljayBBbGllbioHI0E4Q0FEQTACOAE?token=3405ef092d0afa08bebb431aa7489b0399470b50"
},
"LARGE": {
"width": 1500,
"height": 1500,
"url": "https://images.tidal.com/0/ENwLGNwLIO4FKO4F/CAEQBhokZTc3ZTRjYzAvNmNkMC80NTIyLzgwN2QvODhhZWFjNDg4MDY1GiRiMjFmZDJmYy8yZDc2LzRlYmMvYTQzNC84Njg2YzQ3NWZjMTAaJDY4NWYxZjRjLzI5NTYvNDBlNi9iODFjL2ZmYzU0MGQ2NjA2ZCILVHJhY2sgUmFkaW8iG1N1YnRlcnJhbmVhbiBIb21lc2ljayBBbGllbioHI0E4Q0FEQTACOAE?token=af709901ccac4866e329df7d082a6601d73bf10a"
}
},
"shortSubtitle": "Created by TIDAL"
},
"items": [
{
"id": 58990513,
"title": "Subterranean Homesick Alien",
"duration": 267,
"version": null,
"url": "https://tidal.com/browse/track/58990513",
"artists": [
{
"id": 64518,
"name": "Radiohead",
"type": "MAIN",
"picture": "0968a9dd-9536-4bc2-84a2-ab65c8926bdc",
"handle": null,
"userId": null
}
],
"album": {
"id": 58990510,
"title": "OK Computer",
"cover": "e77e4cc0-6cd0-4522-807d-88aeac488065",
"vibrantColor": "#a8cada",
"videoCover": null,
"url": "https://tidal.com/browse/album/58990510",
"releaseDate": "1997-07-01"
},
"explicit": false,
"volumeNumber": 1,
"trackNumber": 3,
"popularity": 76,
"doublePopularity": 0.7603010414769,
"allowStreaming": true,
"streamReady": true,
"streamStartDate": "2023-11-21T00:00:00.000+0000",
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"editable": false,
"replayGain": -10.77,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mixes": {
"TRACK_MIX": "0019a6f811ccf59fd0346967a1dea7"
},
"mediaMetadata": {
"tags": [
"LOSSLESS"
]
},
"upload": false,
"payToStream": false,
"accessType": "PUBLIC",
"spotlighted": false
},
<truncated>
]
}
GET /playlist/
Params
id:str(required) - playlist UUID.limit:int(optional, default100, min1, max500) - number of playlist items.offset:int(optional, default0, min0) - item offset.
Response
200 OK
{
"version": "2.6",
"playlist": {
"uuid": "626d146b-04f6-4936-bbf6-a65318f740a1",
"title": "2010s Pop Hits",
"numberOfTracks": 100,
"numberOfVideos": 0,
"creator": {
"id": 0
},
"description": "The biggest, brightest, and baddest pop hits from the past decade. (Cover: Bruno Mars // Photo: Atlantic Records/Press)",
"duration": 22651,
"lastUpdated": "2025-01-27T17:15:24.016+0000",
"created": "2019-12-13T05:38:27.800+0000",
"type": "EDITORIAL",
"publicPlaylist": true,
"url": "http://www.tidal.com/playlist/626d146b-04f6-4936-bbf6-a65318f740a1",
"image": "dafff826-e77d-4847-bf56-ad5e2f5c377c",
"popularity": 0,
"squareImage": "b15bb487-dd6e-45ff-9e50-ee5083f20669",
"customImageUrl": null,
"promotedArtists": [
{
"id": 8722,
"name": "Mark Ronson",
"handle": null,
"type": "MAIN",
"picture": null
},
{
"id": 4332277,
"name": "Ariana Grande",
"handle": null,
"type": "MAIN",
"picture": null
},
{
"id": 3531205,
"name": "Katy Perry",
"handle": null,
"type": "MAIN",
"picture": null
},
{
"id": 10665,
"name": "Rihanna",
"handle": null,
"type": "MAIN",
"picture": null
}
],
"lastItemAddedAt": "2025-01-22T04:12:16.941+0000"
},
"items": [
{
"item": {
"id": 39249713,
"title": "Uptown Funk (feat. Bruno Mars)",
"duration": 270,
"replayGain": -7.79,
"peak": 0.94406,
"allowStreaming": true,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2015-01-13T00:00:00.000+0000",
"premiumStreamingOnly": false,
"trackNumber": 4,
"volumeNumber": 1,
"version": null,
"popularity": 91,
"copyright": "(P) 2014 Mark Ronson under exclusive licence to Sony Music Entertainment UK Limited",
"bpm": 115,
"key": "C",
"keyScale": "MAJOR",
"description": null,
"url": "http://www.tidal.com/track/39249713",
"isrc": "GBARL1401524",
"editable": false,
"explicit": false,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS",
"HIRES_LOSSLESS"
]
},
"upload": false,
"accessType": "PUBLIC",
"spotlighted": false,
"artist": {
"id": 8722,
"name": "Mark Ronson",
"handle": null,
"type": "MAIN",
"picture": "94adc4e5-b2ab-475d-b2e6-ecb96a77ebcc"
},
"artists": [
{
"id": 8722,
"name": "Mark Ronson",
"handle": null,
"type": "MAIN",
"picture": "94adc4e5-b2ab-475d-b2e6-ecb96a77ebcc"
},
{
"id": 3658521,
"name": "Bruno Mars",
"handle": null,
"type": "FEATURED",
"picture": "12139dfb-f192-4481-9794-c9fb7d1e2476"
}
],
"album": {
"id": 39249709,
"title": "Uptown Special",
"cover": "2f507eba-07f8-4bf5-a32b-9aa5c1a9840d",
"vibrantColor": "#f0e76a",
"videoCover": null,
"releaseDate": "2015-01-26"
},
"mixes": {
"TRACK_MIX": "001f7dfc4bcd0b25da782de2e5045f"
},
"dateAdded": "2023-03-01T23:23:53.167+0000",
"index": 25000,
"itemUuid": "729ba2c2-cad0-4e90-a0c3-dd8d1f76c069"
},
"type": "track",
"cut": null
},
<truncated>
]
}
GET /artist/similar/
Params
id:int(required) - artist ID.cursor:int | str(optional) - cursor for paginated results.
Response
200 OK
{
"version": "2.6",
"artists": [
{
"name": "Beyoncé",
"popularity": 0.958293782719296,
"externalLinks": [
{
"href": "https://tidal.com/browse/artist/1566",
"meta": {
"type": "TIDAL_SHARING"
}
}
],
"spotlighted": false,
"contributionsEnabled": false,
"ownerType": "LABEL",
"id": 1566,
"picture": "3e712fb2-9610-4cab-ac20-fb63cfcaa45f",
"url": "http://www.tidal.com/artist/1566",
"relationType": "SIMILAR_ARTIST"
},
<truncated>
]
}
GET /album/similar/
Params
id:int(required) - album ID.cursor:int | str(optional) - cursor for paginated results.
Response
200 OK
{
"version": "2.6",
"albums": [
{
"title": "The College Dropout",
"barcodeId": "00602567922186",
"numberOfVolumes": 1,
"numberOfItems": 21,
"duration": "PT1H16M24S",
"explicit": true,
"releaseDate": "2004-02-10",
"copyright": {
"text": "© 2004 UMG Recordings, Inc."
},
"popularity": 0.849979392325809,
"accessType": "PUBLIC",
"availability": [
"STREAM",
"DJ"
],
"mediaTags": [
"LOSSLESS"
],
"externalLinks": [
{
"href": "https://tidal.com/browse/album/92099357",
"meta": {
"type": "TIDAL_SHARING"
}
}
],
"type": "ALBUM",
"albumType": "ALBUM",
"createdAt": "2018-07-16T21:57:06Z",
"id": 92099357,
"cover": "cc77193c-a074-4538-a8b5-307b2a44169e",
"artists": [
{
"id": 25022,
"name": "Kanye West"
}
],
"url": "http://www.tidal.com/album/92099357"
},
<truncated>
]
}
GET /artist/
Params
Provide id or f.
id:int(optional) - fetch artist metadata and generated cover URL.f:int(optional) - fetch artist releases and aggregate tracks.skip_tracks:bool(optional, defaultfalse) - withf, skip album-track aggregation and return top tracks.
Response
Mode A (id provided)
200 OK
{
"version": "2.6",
"artist": {
"id": 25022,
"name": "Kanye West",
"artistTypes": [
"ARTIST",
"CONTRIBUTOR"
],
"url": "http://www.tidal.com/artist/25022",
"picture": "0948decd-5591-4b83-b188-8314bfbe7fd3",
"selectedAlbumCoverFallback": null,
"popularity": 96,
"artistRoles": [
{
"categoryId": -1,
"category": "Artist"
},
{
"categoryId": 2,
"category": "Songwriter"
},
{
"categoryId": 1,
"category": "Producer"
},
{
"categoryId": 11,
"category": "Performer"
},
{
"categoryId": 10,
"category": "Production team"
},
{
"categoryId": 3,
"category": "Engineer"
},
{
"categoryId": 99,
"category": "Misc"
}
],
"mixes": {
"ARTIST_MIX": "000a58346749c76f7f6f58bf9cef7a"
},
"handle": null,
"userId": null,
"spotlighted": false
},
"cover": {
"id": 25022,
"name": "Kanye West",
"750": "https://resources.tidal.com/images/0948decd/5591/4b83/b188/8314bfbe7fd3/750x750.jpg"
}
}
Mode B (f provided)
Response on this endpoint is much slower because it has to fetch much more metadata.
200 OK
{
"version": "2.6",
"albums": {
"items": [
{
"id": 440425318,
"title": "DONDA 2",
"duration": 3490,
"streamReady": true,
"payToStream": false,
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"streamStartDate": "2025-06-06T00:00:00.000+0000",
"allowStreaming": true,
"premiumStreamingOnly": false,
"numberOfTracks": 21,
"numberOfVideos": 0,
"numberOfVolumes": 1,
"releaseDate": "2025-05-10",
"copyright": "2025 YZY",
"type": "ALBUM",
"version": null,
"url": "http://www.tidal.com/album/440425318",
"cover": "e7a15eaf-494a-4535-ae0e-25f7221ba527",
"vibrantColor": null,
"videoCover": null,
"explicit": true,
"upc": "0692788674308",
"popularity": 68,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mediaMetadata": {
"tags": [
"LOSSLESS",
"HIRES_LOSSLESS"
]
},
"upload": false,
"artist": {
"id": 5775484,
"name": "Donda",
"handle": null,
"type": "MAIN",
"picture": null
},
"artists": [
{
"id": 5775484,
"name": "Donda",
"handle": null,
"type": "MAIN",
"picture": null
},
{
"id": 25022,
"name": "Kanye West",
"handle": null,
"type": "MAIN",
"picture": "0948decd-5591-4b83-b188-8314bfbe7fd3"
},
{
"id": 5909698,
"name": "Ye",
"handle": null,
"type": "MAIN",
"picture": null
}
]
},
<truncated>
]
},
"tracks": [
{
"id": 440425319,
"title": "TRUE LOVE",
"duration": 137,
"version": null,
"url": "https://tidal.com/browse/track/440425319",
"artists": [
{
"id": 5775484,
"name": "Donda",
"type": "MAIN",
"picture": null,
"handle": null,
"userId": null
},
{
"id": 25022,
"name": "Kanye West",
"type": "MAIN",
"picture": "0948decd-5591-4b83-b188-8314bfbe7fd3",
"handle": null,
"userId": null
},
{
"id": 5909698,
"name": "Ye",
"type": "MAIN",
"picture": null,
"handle": null,
"userId": null
}
],
"album": {
"id": 440425318,
"title": "DONDA 2",
"cover": "e7a15eaf-494a-4535-ae0e-25f7221ba527",
"vibrantColor": null,
"videoCover": null,
"url": "https://tidal.com/browse/album/440425318",
"releaseDate": "2025-05-10"
},
"explicit": true,
"volumeNumber": 1,
"trackNumber": 1,
"popularity": 49,
"doublePopularity": 0.494079662855111,
"allowStreaming": true,
"streamReady": true,
"streamStartDate": "2025-06-06T00:00:00.000+0000",
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"editable": false,
"replayGain": -9.41,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"mixes": {
"TRACK_MIX": "00135a8af60167df440a30b939ce26"
},
"mediaMetadata": {
"tags": [
"LOSSLESS",
"HIRES_LOSSLESS"
]
},
"upload": false,
"payToStream": false,
"accessType": "PUBLIC",
"spotlighted": false
},
<truncated>
]
}
GET /cover/
Params
Provide id or q.
id:int(optional) - track ID.q:str(optional) - track search query.
Response
200 OK
{
"version": "2.6",
"covers": [
{
"id": 311222965,
"name": "Broke with Expensive Taste",
"1280": "https://resources.tidal.com/images/c50c9146/3c7a/44e6/a1bc/55b20516eb29/1280x1280.jpg",
"640": "https://resources.tidal.com/images/c50c9146/3c7a/44e6/a1bc/55b20516eb29/640x640.jpg",
"80": "https://resources.tidal.com/images/c50c9146/3c7a/44e6/a1bc/55b20516eb29/80x80.jpg"
}
]
}
GET /lyrics/
Params
id:int(required) - track ID.
Response
200 OK
{
"version": "2.6",
"lyrics": {
"trackId": 39249713,
"lyricsProvider": "MUSIXMATCH",
"providerCommontrackId": "190482820",
"providerLyricsId": "37850929",
"lyrics": "Doh\nDoh-doh-doh, doh-doh-doh, doh-doh\nDoh-doh-doh, doh-doh-doh, doh-doh\nDoh-doh-doh, doh-doh-doh, doh-doh\nDoh-doh-doh, doh-doh (ah, ow)\n\nThis hit, that ice-cold <truncated>",
"subtitles": "[00:00.04] Doh\n[00:01.98] Doh-doh-doh, doh-doh-doh, doh-doh\n[00:05.93] Doh-doh-doh, doh-doh-doh, doh-doh\n[00:10.22] Doh-doh-doh, doh-doh-doh, doh-doh\n[00:14.44] Doh-doh-doh, doh-doh (ah, ow)\n[00:16.70] This hit, that ice-cold <truncated>",
"isRightToLeft": false
}
}
GET /topvideos/
Params
countryCode:str(optional, defaultUS) - Tidal country code.locale:str(optional, defaulten_US) - locale.deviceType:str(optional, defaultBROWSER) - device type.limit:int(optional, default25, min1, max100) - videos per page.offset:int(optional, default0, min0) - pagination offset.
Response
200 OK
{
"version": "2.6",
"videos": [
{
"id": "eyJwIjoiZmE1MjQ1ZTItYzgyYi00YWE2LTgwN2UtNDE5OTgyOGEyMmU1IiwicFYiOjQsIm0iOiIxMjNiMmI5Mi02NTkwLTQ2ZjMtOGE2Ny1jYjBjNmZlZDljYTMiLCJtViI6MSwibUgiOiJlZTYyYTZjYSJ9",
"type": "VIDEO_LIST",
"width": 100,
"scroll": "VERTICAL",
"title": "",
"description": "",
"showMore": null,
"pagedList": {
"dataApiPath": "pages/data/85db1b03-a853-4628-8836-9e883c6fa4bb",
"limit": 100,
"offset": 0,
"totalNumberOfItems": 100,
"items": [
{
"id": 402643865,
"title": "Winter Ahead (with PARK HYO SHIN)",
"duration": 372,
"version": null,
"url": "https://tidal.com/browse/video/402643865",
"artists": [
{
"id": 29927033,
"name": "V",
"type": "MAIN",
"picture": "fc9f21fd-0384-49c9-921c-ddbfce335156",
"handle": null,
"userId": null
},
{
"id": 4239174,
"name": "Park Hyo Shin",
"type": "MAIN",
"picture": "4f43f34e-7c53-4b24-9596-d25ce157f048",
"handle": null,
"userId": null
}
],
"album": null,
"explicit": false,
"volumeNumber": 0,
"trackNumber": 0,
"popularity": 52,
"doublePopularity": 0.519117817177637,
"allowStreaming": true,
"streamReady": true,
"streamStartDate": "2024-11-29T00:00:00.000+0000",
"adSupportedStreamReady": true,
"djReady": true,
"stemReady": false,
"imageId": "efba0086-c3b8-40bd-9b45-721945816ed3",
"vibrantColor": "#f0090f",
"releaseDate": "2024-11-29",
"type": "Music Video",
"adsUrl": null,
"adsPrePaywallOnly": true
},
<truncated>
]
},
"supportsPaging": false,
"showTableHeaders": false,
"listFormat": null,
"layout": null,
"quickPlay": false,
"preTitle": null
}
],
"total": 1
}
GET /video/
Warning
This endpoint is - for some reason - heavily rate limited on Tidal's end. Take care.
Params
id:int(required) - video ID.quality:str(optional, defaultHIGH) -HIGH,MEDIUM,LOW.mode:str(optional, defaultSTREAM) -STREAM,OFFLINE.presentation:str(optional, defaultFULL) -FULL,PREVIEW.
Response
200 OK
{
"version": "2.6",
"video": {
"videoId": 48204106,
"streamType": "ON_DEMAND",
"assetPresentation": "FULL",
"videoQuality": "HIGH",
"manifestMimeType": "application/vnd.tidal.emu",
"manifestHash": "fU3b2NNlidH7ZvUhBSKbJCuDlTeOay1RPqptFQLTt1U=",
"manifest": "eyJtaW1lVHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwidXJscyI6WyJodHRwczovL2ltLWZhLm1hbmlmZXN0LnRpZGFsLmNvbS8xL21hbmlmZXN0cy9DQUVTQ0RRNE1qQTBNVEEySWhaWFJXcDJVVUowWjB4aFgxaGpjMGMxTkdkcmEzWkJJaFkyTURWcFR6RnBPREJPVm5sRmVuWlVkRk41TmtwQkloWTRkWGx4ZVVaamJETmtPVWxyTW5wU1ozZDJSRmhuSWhaRVRVNVJkRU4yY2xOcWFFZEJXbk53TlVWbmFIcG5JaFkwTm1KMVozaGtXRXBPWTBJNFptUmpZbVJrWWpSUktBRXdBbEFCLm0zdTg/dG9rZW49MTc3MjU3NDYzMH5NalV5T0RRelpqRmpOakJsWWpSaE5qSmxZV1UwTVRFek56TXdNRFEyWm1Nek56RXhabVkwT0E9PSJdfQ=="
}
}
where manifest is base64-encoded JSON containing HLS video.
Decoded Manifest
{
"mimeType":"application/vnd.apple.mpegurl","urls":[
"https://im-fa.manifest.tidal.com/1/manifests/CAESCDQ4MjA0MTA2IhZXRWp2UUJ0Z0xhX1hjc0c1NGdra3ZBIhY2MDVpTzFpODBOVnlFenZUdFN5NkpBIhY4dXlxeUZjbDNkOUlrMnpSZ3d2RFhnIhZETU5RdEN2clNqaEdBWnNwNUVnaHpnIhY0NmJ1Z3hkWEpOY0I4ZmRjYmRkYjRRKAEwAlAB.m3u8?token=1772574630~MjUyODQzZjFjNjBlYjRhNjJlYWU0MTEzNzMwMDQ2ZmMzNzExZmY0OA=="
]
}
HLS manifest
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=466000,AVERAGE-BANDWIDTH=465999,CODECS="mp4a.40.2,avc1.42C00D",RESOLUTION=320x180
https://im-fa.manifest.tidal.com/1/manifests/CAESCDQ4MjA0MTA2GAEiFjQ2YnVneGRYSk5jQjhmZGNiZGRiNFEoATACUAE.m3u8?token=1772574889~YjIxODgzM2JmOTcwNjU0NGE1ZGU4OGE2ZGZkZmI1NDA4MjYwNmI4Zg==
#EXT-X-STREAM-INF:BANDWIDTH=735000,AVERAGE-BANDWIDTH=734999,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=640x360
https://im-fa.manifest.tidal.com/1/manifests/CAESCDQ4MjA0MTA2GAEiFkRNTlF0Q3ZyU2poR0Fac3A1RWdoemcoATACUAE.m3u8?token=1772574889~Y2FmNTU4MTY1OTlkMzJlMWUwZTczN2FiNmQxYTNkMTUxZDhhZWM2Yg==
#EXT-X-STREAM-INF:BANDWIDTH=1425000,AVERAGE-BANDWIDTH=1424999,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=854x480
https://im-fa.manifest.tidal.com/1/manifests/CAESCDQ4MjA0MTA2GAEiFjh1eXF5RmNsM2Q5SWsyelJnd3ZEWGcoATACUAE.m3u8?token=1772574889~N2RiMzZiMzI4YWJhMzQ2ZTliMTA2ZDQzN2I3YmE4YjEzZTlhZWVlZg==
#EXT-X-STREAM-INF:BANDWIDTH=2740000,AVERAGE-BANDWIDTH=2740000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=1280x720
https://im-fa.manifest.tidal.com/1/manifests/CAESCDQ4MjA0MTA2GAEiFjYwNWlPMWk4ME5WeUV6dlR0U3k2SkEoATACUAE.m3u8?token=1772574889~MzE4YzVjNGM2Njc5YjAxY2E5OWIzYzc5NWExMTExMDc2ZjdmMWM3ZQ==
#EXT-X-STREAM-INF:BANDWIDTH=5447000,AVERAGE-BANDWIDTH=5447000,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080
https://im-fa.manifest.tidal.com/1/manifests/CAESCDQ4MjA0MTA2GAEiFldFanZRQnRnTGFfWGNzRzU0Z2trdkEoATACUAE.m3u8?token=1772574889~NGYzNmJjNjU4ZjQwNjZkODVhNThhZWI3Y2MwNTU3NzEzMWUzMWI0MQ==
