Refresh Client Versions, Improve things, Apply #3

main
David 2022-09-18 19:47:44 +02:00
parent 76e3340f34
commit 6f7c6b749f
13 changed files with 705 additions and 476 deletions

194
README.md

File diff suppressed because one or more lines are too long

View File

@ -44,7 +44,6 @@ markdown += "|---------------------------|-----------------|----------|\n"
working_clients_output = ""
working_versions = []
video_id = ""
if not os.path.exists('results'):
os.makedirs('results')
@ -64,6 +63,12 @@ for client_id in client_ids:
client_files = [file for file in files if file.startswith(str(client_id) + '_')]
client_files.sort(reverse=True) # highest version first
versions = []
for file_name in client_files:
version = file_name.split("_")[1]
if version not in versions:
versions.append(version)
for client_file in client_files:
response_data_raw = open('responses/' + client_file, 'r', encoding='utf-8').read()
response_data = json.loads(response_data_raw)
@ -81,11 +86,6 @@ for client_id in client_ids:
except Exception:
continue
try:
video_id = response_data_raw.split('&docid=')[1].split('&')[0]
except Exception:
print("missing doc id (video id)")
working_clients_output += str(client_id) + ";" + client_name + ";" + client_version + "\n"
if client_version not in working_versions:
@ -140,6 +140,9 @@ for client_id in client_ids:
if client_name == "TVHTML5_SIMPLY_EMBEDDED_PLAYER":
extraInfo += "&bull; No Age-restrictions<br>"
if "android" in client_name.lower():
extraInfo += "&bull; Needs [`androidSdkVersion`](#params)<br>"
ignore_attributes = ["videoDetails", "playerConfig", "responseContext", "playabilityStatus", "streamingData", "playbackTracking", "trackingParams", "adPlacements", "playerAds", "adParams", "adBreakParams", "onResponseReceivedEndpoints", "playerSettingsMenuData"]
@ -155,13 +158,17 @@ for client_id in client_ids:
extraInfo += "<details><summary>Show Response</summary>" + get_structure_tree(response_data) +"</details>"
other_versions = ""
if len(versions) > 1:
other_versions = "<br><br><details><summary>All Versions</summary>" + "<br>".join(versions) +"</details>"
markdown += "|ID: *" + str(client_id) + "*<br>" + client_name + "<br>" + client_version + "|" + formats_summary + formatsStr + adaptiveFormatsStr + "|" + extraInfo + "|\n"
markdown += "|ID: *" + str(client_id) + "*<br><b>" + client_name + "</b><br>" + client_version + other_versions + "|" + formats_summary + formatsStr + adaptiveFormatsStr + "|" + extraInfo + "|\n"
break
readme_header = open("templates/readme_header.md", "r").read()
readme_header = readme_header.replace("%videoId%", video_id)
readme_template = open("templates/readme_template.md", "r").read()
readme_template = readme_template.replace("%table%", markdown)
f = open("results/working_clients.md", "w", encoding="utf-8")
f.write(markdown)
@ -177,5 +184,5 @@ for v in working_versions:
f.close()
f = open("readme.md", "w", encoding="utf-8")
f.write(readme_header + markdown)
f.write(readme_template)
f.close()

View File

@ -1,5 +1,6 @@
import requests
import os
import time
client_versions = open("payloads/client_versions.txt", "r").readlines()
data_template = open("payloads/post_data.txt", "r").read()
@ -54,7 +55,9 @@ innertube_hosts = [
if not os.path.exists('responses'):
os.makedirs('responses')
for client_name_id in range(1, 100):
requests_failed = 0
for client_name_id in range(1, 120):
for client_version in client_versions:
client_version = client_version.replace("\n", "").replace("\r", "")
if client_version == "":
@ -64,11 +67,13 @@ for client_name_id in range(1, 100):
try_id = str(client_name_id) + "_" + client_version + "_" + str(len(innertube_hosts) - i) + "_" + host["domain"] + "_" + host["key"]
print("Try ClientId: " + str(client_name_id) + " ClientVersion: " + str(client_version) + " @ " + host["domain"])
print("Try ClientId: " + str(client_name_id) + " ClientVersion: " + str(client_version) + " @ " + host["domain"] + " Failed Requests: " + str(requests_failed))
data = data_template.replace("%videoId%", host["video_id"]).replace('%clientName%', str(client_name_id)).replace('%clientVersion%', client_version)
for i in range(0, 2):
headers = host["headers"].copy()
for i in range(0, 4):
try:
response = requests.post("https://" + host["domain"] + "/youtubei/v1/player?key=" + host["key"], data=data, headers=host["headers"], timeout=5)
@ -81,4 +86,7 @@ for client_name_id in range(1, 100):
break
except Exception as ex:
if i == 3:
requests_failed += 1
time.sleep(0.5)
print(ex)

View File

@ -1,78 +1,78 @@
7.4.620913-release
57.38.2
100.0.4896.79
8.0.623343-release
63.34.5
105.0.5195.124
3.0.1
7.7
2.12.422490447
8.2
3.8.466520855
1.9
100.0.4896.79
105.0.5195.124
6.3
1.11.0.358
1.8
1.0.421968649
2.4.042
1.0.471963630
2.4.065-3
1.8.2.392356939
11.6.06.433184565-release-armeabi-v7a
2022.03.20.437098296.Release
12.0.06.457705062-release-armeabi-v7a
2022.06.26.459604605.Release
8.5.6.197464524.go
2.41.438904386
2.45.467721145
3.3
27.0.326
4.4.439927113
13.13.7.23.arm
0.1.315561676
2.9.0.365531209.assistantlite.210329
5.00
2022.14.0-439152615-release
8.4.500.429168112.25
3.65.2.438022649
1.22.062.06.90
2.21.261.04.90
122.0.353872967.DR122
9.155.0.2
4.5.470770319
13.33.12.26.arm
0.1.452181178
2.13.0.439234666.armeabi-v7a.release
5.20R2
2022.36.0-472143158-release
8.6.263.471358013.15
3.76.26.471848990
1.22.362.03.90
2.22.154.2.all.alldpi
172.0.466841314.duo.android
9.162.0.2
3.0.208511728
2.48.75.6
3.2.5.164561151-armeabi-v7a
5.22.041.03.30
2.50.25.3
3.3.2.454109171-release-armeabi-v7a
5.22.222.02.90
1.14.220323006
11.23.3
11.48.0801
157.0
2022.03.20.437881873.Release
5.49.0.430730993
2022.08.07.467804210.Release
5.55.0.455383490
1.4.large
1.141.435035767
2020062202
2.143.434517044
52.0.323183643
5.75.0.426435368
5.22.1
2022.01.32371
1.158.462657757
2022082901
2.143.460223562
84.0.463159461
6.6.0.472601992
2022.8.24.0.2
2022.08.36996
8.26.8771-1.T
22.09.20
30.0.20-19
22.33.15
32.3.14-19
1.0.196287551
1.22.062.06.90
1.22.062.06.90
1.22.342.07.90
2.0.0.432514663
26.2.3.381920558
6.32.0.436351116.8-release
2022.02.07.428774713
6.45.0.472354770.1-release
2022.08.08.468275888
11.10.0.305602887
40.0.402967813
1.78.217178463.release
7.7.051
messages.android
10.55.0
1.5.2.242191532
12
1.1.413207646
13
1.1.458567181
6.5.1.12
2.19.1.303051424
2.48.0.377032688.gms
17.11.35
22.09.101
17.35.36
22.35.100
2.10.7.6
3.25.54
7.12.1
4.71.51
6.12.1
4.0.5
7.32.1
5.23.51
6.34.1
4.0.25

View File

@ -1,55 +1,52 @@
1.27
2.3
206.0
1.51
1.0.150
1.0.42
2.1.65
1.9.40904
1.37
2.4
228.0
1.63
1.0.172
1.0.48
2.1.85
1.9.57601
2.0.648
6.13
86.0.0
1.8
163.0
2.9.1
2.3.18
1.13.7
2.220308.1
1.7.1
2.40.433747733
9.0.43
5.01
2.2022.12201
6.36
96.0.0
1.9
174.1.0
2.10.5
2.3.19
2.220824.1
1.8.0
2.45.468575109
9.1.39
5.24.3
2.2022.36201
0.0.77
1.16.80
1.1
1.19.1
5.5
5.84
22.11.1
7.12.3
79.0.3945.10
2.2022.10204
3.16
4.6.1
1.2022.12202
4.4.4763
22.12.100
3.42.0
1.2022.12202
1.2022.12202
6.7
22.35.1
7.36.1
101.0.4951.27
2.2022.34204
3.17
4.7.2
1.2022.36207
4.5.4945
22.36.102
1.2022.34205
1.2022.36202
3.4
2.20.31
2.50.105
6.12
17.13.3
100.0.4896.77
4.2022.12400
5.50
6.0.220320
7.12.0
3.2.00005
2.57.109
6.35
17.36.4
105.0.5195.129
4.2022.36202
5.60
6.0.220821
7.15.0
2.22.0
6.33.0
5.9.1
22.14
6.44.0
6.0.3
22.33
3.4.0
9.154

View File

@ -2,7 +2,11 @@ import requests
output = open("android_versions.txt", "w")
response = requests.get("https://androidapksfree.com/devapk/google-inc/")
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"
}
response = requests.get("https://androidapksfree.com/devapk/google-inc/", headers=headers)
#print(response.text)
@ -14,7 +18,7 @@ for x in split_html:
continue
try:
response_apk = requests.get(apk_link)
response_apk = requests.get(apk_link, headers=headers)
apk_version = response_apk.text.split("latest apk version ")[1].split('"')[0].split(" ")[0].split("_")[0]
print(apk_version)

View File

@ -6,11 +6,11 @@
0.0.5
0.0.6
0.0.7
0.0.77
0.0.8
0.0.9
0.0.77
0.1.452181178
0.1
0.1.315561676
0.2
0.3
0.4
@ -23,243 +23,318 @@
1.0
1.0.0
1.0.1
1.0.150
1.0.196287551
1.0.42
1.0.421968649
1.1
1.1.413207646
1.1.426206631
1.0.48
1.0.150
1.0.172
1.0.471963630
1.1.458567181
1.4.large
1.5.2.242191532
1.7.1
1.8.0
1.8.2.392356939
1.9.40904
1.9.57601
1.11.0.358
1.13.02
1.13.7
1.14.220323006
1.141.435035767
1.15.03
1.16.80
1.19.1
1.22.362.03.90
1.28.63
1.70.50
1.78.217178463
1.141.435035767
1.158.462657757
1.2022.36207
1.1
1.2
1.20150713
1.20180713
1.20200713
1.20210713
1.2022.12202
1.20220403
1.22.062.06.90
1.20220918
1.27
1.28.63
1.3
1.37
1.4
1.4.large
1.5
1.5.2.242191532
1.51
1.6
1.63
1.7
1.7.1
1.70.50
1.78.217178463
1.78.217178463.release
1.8
1.8.2.392356939
1.9
1.9.40904
10.20
10.20220325
10.55.0
100.0.4896.77
100.0.4896.79
11.10.0.305602887
11.20
11.23.3
11.6.06.433184565
11.6.06.433184565-release-armeabi-v7a
12
12.20
122.0.353872967.DR122
13.13.7.23
13.13.7.23.arm
13.20
14.20
15.11.34
15.20
157.0
16.20
163.0
17.11.34
17.11.35
17.13.3
18.11.34
18.24.100
19.11.100
19.24.100
2
2.0
2.0.0.432514663
2.0.648
2.1.4
2.1.65
2.1.85
2.3.18
2.3.19
2.4.042
2.4.065-3
2.9.0.365531209
2.9.1
2.10.5
2.10.7.6
2.12.422490447
2.13
2.143.434517044
2.13.0.439234666
2.16.032
2.19.1.303051424
2.20.31
2.21.261.04.90
2.22.0
2.22.154.2
2.40.433747733
2.41.438904386
2.45.467721145
2.45.468575109
2.48.0.377032688
2.48.75.6
2.50.25.3
2.50.105
2.57.109
2.70.50
2.143.460223562
2.2022.10204
2.2022.12201
2.2022.34204
2.2022.36201
2.220308.1
2.220824.1
2.13
2.20150719
2.20180719
2.20200719
2.20210719
2.2022.10204
2.2022.12201
2.20220325
2.20220405
2.21.261.04.90
2.22.0
2.220308.1
2.20220918
2.3
2.3.18
2.4.042
2.40.433747733
2.41.438904386
2.4
2.43
2.48.0.377032688
2.48.0.377032688.gms
2.48.75.6
2.50.105
2.70.50
2.9.0.365531209
2.9.0.365531209.assistantlite.210329
2.9.1
3
3.0
3.0.1
3.0.208511728
3.2.00005
3.2.5.164561151
3.2.5.164561151-armeabi-v7a
3.3.2.454109171-release-armeabi-v7a
3.4.0
3.8.1
3.8.466520855
3.10.3
3.12.1
3.25.54
3.26.1
3.42.0
3.65.2.438022649
3.70.50
3.76.26.471848990
3.16
3.17
3.20220918
3.3
3.4
3.46
4
4.0.5
4.0.25
4.00.50
4.4.4763
4.4.439927113
4.5.4945
4.5.470770319
4.6.1
4.7.2
4.10.3
4.10.50
4.12.1
4.20.50
4.26.1
4.40.50
4.70.00
4.70.50
4.71.51
4.2022.36202
4.20220918
4.44763
4.9
5
5.00
5.9.1
5.10.3
5.12.1
5.20R2
5.22.041.03.30
5.22.1
5.22.222.02.90
5.23.51
5.24.3
5.26.1
5.49.0.430730993
5.55.0.455383490
5.70.50
5.75.0.426435368
5.01
5.20220918
5.5
5.50
5.60
5.84
6
6.0.3
6.0.220320
6.0.220821
6.5.1.12
6.6.0.472601992
6.8.1
6.10.3
6.12.1
6.22.4
6.32.0.436351116.8
6.33.0
6.34.1
6.44.0
6.45.0.472354770.1
6.70.50
6.12
6.13
6.20220918
6.3
6.35
6.36
6.7
7
7.0
7.4.620913
7.7.051
7.10.3
7.12.0
7.12.1
7.12.3
7.15.0
7.20.3
7.30.3
7.32.1
7.36.1
7.70.50
7.20220918
7.7
8
8.0
8.0.623343-release
8.4.500.429168112.25
8.5.6.197464524
8.5.6.197464524.go
8.6.263.471358013.15
8.10.3
8.26.8771
8.26.8771-1.T
8.70.50
8.2
8.20220918
9
9.0
9.0.43
9.1.39
9.8.1
9.10.3
9.70.50
9.155.0.2
9.162.0.2
9.154
9.20220918
10.55.0
10.20
10.20220918
11.6.06.433184565
11.6.06.433184565-release-armeabi-v7a
11.10.0.305602887
11.23.3
11.48.0801
11.20
12
12.0.06.457705062-release-armeabi-v7a
12.20
13
13.13.7.23
13.13.7.23.arm
13.33.12.26.arm
13.20
14.20
15.11.34
15.20
16.20
17.11.34
17.11.35
17.13.3
17.35.36
17.36.4
18.11.34
18.24.100
19.11.100
19.24.100
20.24.100
2020062202
2022.01.32371
2022.02.07.428774713
2022.03.20.437098296
2022.03.20.437098296.Release
2022.14.0-439152615
2022.14.0-439152615-release
206.0
21.24.100
22.01.100
22.09.101
22.09.20
22.09.101
22.11.1
22.11.100
22.12.100
22.14
22.24.100
22.33.15
22.35.1
22.35.100
22.36.102
22.14
22.33
23.24.100
24.24.100
25.24.100
26.2.3.381920558
27.0.326
3
3.0
3.0.1
3.0.208511728
3.10.3
3.12.1
3.16
3.2.5.164561151
3.2.5.164561151-armeabi-v7a
3.20220325
3.25.54
3.26.1
3.3
3.4
3.4.0
3.42.0
3.46
3.65.2.438022649
3.70.50
3.8.1
30.0.20-19
4
4.0.5
4.00.50
4.10.3
4.10.50
4.12.1
4.20.50
4.2022.12400
4.20220325
4.26.1
4.4.439927113
4.4.4763
4.40.50
4.44763
4.6.1
4.70.00
4.70.50
4.71.51
4.9
32.3.14-19
40.0.402967813
5
5.00
5.01
5.10.3
5.12.1
5.20220325
5.22.041.03.30
5.22.1
5.26.1
5.49.0.430730993
5.5
5.50
5.70.50
5.75.0.426435368
5.84
5.9.1
52.0.323183643
57.38.2
6
6.0.220320
6.10.3
6.12
6.12.1
6.13
6.20220325
6.22.4
6.3
6.32.0.436351116.8
6.32.0.436351116.8-release
6.33.0
6.5.1.12
6.70.50
6.8.1
7
7.0
7.10.3
7.12.0
7.12.1
7.12.3
7.20.3
7.20220325
7.30.3
7.4.620913
7.4.620913-release
7.7
7.7.051
7.70.50
63.34.5
79.0.3945.10
8
8.0
8.10.3
8.20220325
8.26.8771
8.26.8771-1.T
8.4.500.429168112.25
8.5.6.197464524
8.5.6.197464524.go
8.70.50
84.0.463159461
86.0.0
9
9.0
9.0.43
9.10.3
9.154
9.155.0.2
9.20220325
9.70.50
9.8.1
96.0.0
100.0.4896.77
100.0.4896.79
101.0.4951.27
105.0.5195.124
105.0.5195.129
122.0.353872967.DR122
157.0
163.0
172.0.466841314.duo.android
174.1.0
206.0
228.0
2022.01.32371
2022.02.07.428774713
2022.03.20.437098296
2022.03.20.437098296.Release
2022.08.08.468275888
2022.08.36996
2022.8.24.0.2
2022.14.0-439152615
2022.36.0-472143158-release
999999999
2020062202
2022082901
20220918

View File

@ -5,7 +5,8 @@
"gl": "US",
"clientName": %clientName%,
"clientVersion": "%clientVersion%",
"clientScreen": "WATCH"
"clientScreen": "WATCH",
"androidSdkVersion": 31
},
"thirdParty": {
"embedUrl": "https://www.youtube.com/"

File diff suppressed because one or more lines are too long

View File

@ -1,58 +1,60 @@
1;WEB;2.20220405
2;MWEB;2.20220405
3;ANDROID;17.13.3
5;IOS;17.13.3
7;TVHTML5;7.20220325
1;WEB;2.20220918
2;MWEB;2.20220918
3;ANDROID;17.36.4
5;IOS;17.36.4
7;TVHTML5;7.20220918
8;TVLITE;2
10;TVANDROID;1.0
13;XBOXONEGUIDE;1.0
14;ANDROID_CREATOR;22.14
15;IOS_CREATOR;22.14
14;ANDROID_CREATOR;22.36.102
15;IOS_CREATOR;22.36.102
16;TVAPPLE;1.0
18;ANDROID_KIDS;7.12.3
19;IOS_KIDS;7.12.3
21;ANDROID_MUSIC;5.01
23;ANDROID_TV;2.16.032
26;IOS_MUSIC;5.01
27;MWEB_TIER_2;9.20220325
28;ANDROID_VR;1.28.63
29;ANDROID_UNPLUGGED;6.13
18;ANDROID_KIDS;7.36.1
19;IOS_KIDS;7.36.1
21;ANDROID_MUSIC;5.26.1
23;ANDROID_TV;2.19.1.303051424
26;IOS_MUSIC;5.26.1
27;MWEB_TIER_2;9.20220918
28;ANDROID_VR;1.37
29;ANDROID_UNPLUGGED;6.36
30;ANDROID_TESTSUITE;1.9
31;WEB_MUSIC_ANALYTICS;0.2
33;IOS_UNPLUGGED;6.13
33;IOS_UNPLUGGED;6.36
38;ANDROID_LITE;3.26.1
39;IOS_EMBEDDED_PLAYER;2.3
41;WEB_UNPLUGGED;1.20220403
39;IOS_EMBEDDED_PLAYER;2.4
41;WEB_UNPLUGGED;1.20220918
42;WEB_EXPERIMENTS;1
43;TVHTML5_CAST;1.1
55;ANDROID_EMBEDDED_PLAYER;17.13.3
56;WEB_EMBEDDED_PLAYER;9.20220325
55;ANDROID_EMBEDDED_PLAYER;17.36.4
56;WEB_EMBEDDED_PLAYER;9.20220918
57;TVHTML5_AUDIO;2.0
58;TV_UNPLUGGED_CAST;0.1
59;TVHTML5_KIDS;3.20220325
59;TVHTML5_KIDS;3.20220918
60;WEB_HEROES;0.1
61;WEB_MUSIC;1.0
62;WEB_CREATOR;1.20220403
63;TV_UNPLUGGED_ANDROID;1.22.062.06.90
64;IOS_LIVE_CREATION_EXTENSION;17.13.3
65;TVHTML5_UNPLUGGED;6.13
66;IOS_MESSAGES_EXTENSION;17.13.3
67;WEB_REMIX;1.20220403
62;WEB_CREATOR;1.20220918
63;TV_UNPLUGGED_ANDROID;1.37
64;IOS_LIVE_CREATION_EXTENSION;17.36.4
65;TVHTML5_UNPLUGGED;6.36
66;IOS_MESSAGES_EXTENSION;17.36.4
67;WEB_REMIX;1.20220918
68;IOS_UPTIME;1.0
69;WEB_UNPLUGGED_ONBOARDING;0.1
70;WEB_UNPLUGGED_OPS;0.1
71;WEB_UNPLUGGED_PUBLIC;0.1
72;TVHTML5_VR;0.1
74;ANDROID_TV_KIDS;1.16.80
74;ANDROID_TV_KIDS;1.19.1
75;TVHTML5_SIMPLY;1.0
76;WEB_KIDS;2.20220405
76;WEB_KIDS;2.20220918
77;MUSIC_INTEGRATIONS;0.1
80;TVHTML5_YONGLE;0.1
84;GOOGLE_ASSISTANT;0.1
85;TVHTML5_SIMPLY_EMBEDDED_PLAYER;2.0
87;WEB_INTERNAL_ANALYTICS;0.1
88;WEB_PARENT_TOOLS;1.20220403
88;WEB_PARENT_TOOLS;1.20220918
89;GOOGLE_MEDIA_ACTIONS;0.1
90;WEB_PHONE_VERIFICATION;1.0.0
92;IOS_PRODUCER;0.1
93;TVHTML5_FOR_KIDS;7.20220325
93;TVHTML5_FOR_KIDS;7.20220918
94;GOOGLE_LIST_RECS;0.1
95;MEDIA_CONNECT_FRONTEND;0.1

View File

@ -1,25 +1,24 @@
2.20220405
17.13.3
7.20220325
2.20220918
17.36.4
7.20220918
2
1.0
22.14
7.12.3
5.01
2.16.032
9.20220325
1.28.63
6.13
22.36.102
7.36.1
5.26.1
2.19.1.303051424
9.20220918
1.37
6.36
1.9
0.2
3.26.1
2.3
1.20220403
2.4
1.20220918
1
1.1
2.0
0.1
3.20220325
1.22.062.06.90
1.16.80
3.20220918
1.19.1
1.0.0

View File

@ -1,13 +0,0 @@
# YouTube-Internal-Clients
A script that discovers hidden internal clients of the YouTube (Innertube) API using bruteforce methods. The script tries `clientNames` with a sequential ID enumeration and crosses them with known `clientVersions`.
The goal was to find a client that has no age restrictions implemented. With success.
## Contributors
- [@MinePlayersPE](https://github.com/MinePlayersPE) - Mapped some version numbers in a [Gist](https://gist.github.com/MinePlayersPE/9875f2051c2dfdeb090543b8c6a9f7e6), which helped a lot
- [@89z](https://github.com/89z) - Helped to find some missing clients and version numbers
## Results
The script has found the following working clients tested on [this](https://www.youtube.com/watch?v=%videoId%) video:

View File

@ -0,0 +1,79 @@
# YouTube-Internal-Clients
A script that discovers hidden internal clients of the YouTube (Innertube) API using bruteforce methods. The script tries `clientNames` with a sequential ID enumeration and crosses them with known `clientVersions`.
The goal was to find a client that has no age restrictions implemented. With success.
- [Clients](#clients)
- [Example Request](#example-request)
- [Params](#params)
- [API Keys](#api-keys)
- [Contributors](#contributors)
## Clients
The script has found the following working clients:
%table%
## Example Request
```http
POST /youtubei/v1/player?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8 HTTP/2
Host: www.youtube.com
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42
Accept: */*
Origin: https://www.youtube.com
Referer: https://www.youtube.com/
Accept-Encoding: gzip, deflate
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
{
"context": {
"client": {
"hl": "en",
"gl": "US",
"clientName": "WEB",
"clientVersion": "2.20220916.00.00",
"clientScreen": "WATCH",
"androidSdkVersion": 31
},
"thirdParty": {
"embedUrl": "https://www.youtube.com/"
}
},
"videoId": "yvyAQiiKIN8",
"playbackContext": {
"contentPlaybackContext": {
"signatureTimestamp": 19250
}
},
"racyCheckOk": true,
"contentCheckOk": true
}
```
## Params
| Param | Description |
|-------------|-------------|
| `embedUrl` | Required for some videos when using an embedded client. e.g. `WEB_EMBEDDED_PLAYER` |
| `signatureTimestamp` | Required for web-based clients for videos with copyright claims (Stream URLs must be deciphered)
| `racyCheckOk`, `contentCheckOk` | Skips content warnings.
| `androidSdkVersion` | Partially required for Android clients. A corresponding user agent must also be set. (e.g. `com.google.android.youtube/17.10.35 (Linux; U; Android 12; GB) gzip`) (see [issue](https://github.com/zerodytrash/YouTube-Internal-Clients/issues/3))
## API Keys
| Name | Key |
|---------------------------|-------------------------------------------|
| YouTube Web | `AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8` |
| YouTube Web Kids | `AIzaSyBbZV_fZ3an51sF-mvs5w37OqqbsTOzwtU` |
| YouTube Web Music | `AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30` |
| YouTube Web Creator | `AIzaSyBUPetSUmoZL-OhlxA7wSac5XinrygCqMo` |
| YouTube Android | `AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w` |
| YouTube Android Music | `AIzaSyAOghZGza2MQSZkY_zfZ370N-PUdXEo8AI` |
| YouTube Android Embedded | `AIzaSyCjc_pVEDi4qsv5MtC2dMXzpIaDoRFLsxw` |
| YouTube Android Creator | `AIzaSyD_qjV8zaaUMehtLkrKFgVeSX_Iqbtyws8` |
| YouTube IOS | `AIzaSyB-63vPrdThhKuerbB2N_l7Kwwcxj6yUAc` |
| YouTube IOS Music | `AIzaSyBAETezhkwP0ZWA02RsqT1zu78Fpt0bC_s` |
## Contributors
- [@MinePlayersPE](https://github.com/MinePlayersPE) - Mapped some version numbers in a [Gist](https://gist.github.com/MinePlayersPE/9875f2051c2dfdeb090543b8c6a9f7e6), which helped a lot
- [@89z](https://github.com/89z) - Helped to find some missing clients and version numbers