The InnerTube SDK identifies itself to YouTube’s servers using aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/faraasaaay/innertube-v1/llms.txt
Use this file to discover all available pages before exploring further.
YouTubeClient value. Each client encodes a name, version, numeric ID, HTTP User-Agent, device context, and a set of capability flags that control authentication, token handling, and embedded playback behaviour. The companion object exposes a curated set of predefined clients — from the standard web and Android clients to specialised VR and Apple platform clients — each tuned for a particular content type or playback scenario. YouTubeLocale carries the geolocation and language settings attached to every request context.
YouTubeClient data class
YouTube client name string sent in the InnerTube
context.client.clientName field (e.g., "WEB_REMIX", "ANDROID_VR").Client version string sent in
context.client.clientVersion (e.g., "1.20260114.03.00").Numeric client ID sent as the
X-YouTube-Client-Name HTTP request header (e.g., "67" for WEB_REMIX).HTTP
User-Agent header value. Also included in the request context body when includeUserAgentInContext is true.Operating system name for the client context (e.g.,
"Android", "visionOS", "iPadOS"). null for web-based clients.Operating system version string sent in
context.client.osVersion. null for web-based clients.Device manufacturer string (e.g.,
"Oculus", "Apple", "Google"). null for generic or web clients.Device model identifier (e.g.,
"Quest 3", "RealityDevice14,1", "Pixel 9 Pro Fold"). null for generic or web clients.Android SDK version integer as a string (e.g.,
"32" for Android 12). Only present on Android clients.Android build fingerprint (e.g.,
"SQ3A.220605.009.A1"). Present on VR and Creator clients that use Cronet.Cronet network library version string embedded in the User-Agent of some Android clients.
Android or iOS application package name (e.g.,
"com.google.android.apps.youtube.vr.oculus"). null for web clients.Human-readable label used internally for logging and debugging (e.g.,
"Android VR 1.61", "Android No SDK"). Not sent to the API.true when the client sends SAPISIDHASH authorization headers and populates context.user.onBehalfOfUser with the data-sync ID. Required for library, history, and playlist management calls.true when the client will not function without an active login session (e.g., WEB_CREATOR). A subset of loginSupported.true when the client includes a signatureTimestamp field in player request bodies. Required by clients that use player signature verification.true when the client uses an embedded player context (sets context.thirdParty.embedUrl to https://www.reddit.com/). Embedded clients can bypass age-restriction without requiring login.true when the client should attach a PoToken in serviceIntegrityDimensions of the player request. Used by web-stack clients to pass bot-detection checks.true when requests from this client will fail or return degraded streams if a PoToken is not supplied. A subset of useWebPoTokens.true when the userAgent string is also embedded in the context.client.userAgent request body field (in addition to the HTTP header). Required by TV and VR clients.Predefined client constants
All constants are accessible asYouTubeClient.<NAME> from the companion object. The table below shows key properties for every predefined client.
| Constant | clientId | clientName | Login | Embedded | PoToken | Notes |
|---|---|---|---|---|---|---|
WEB | 1 | WEB | ✗ | ✗ | ✗ | Generic web client |
WEB_REMIX | 67 | WEB_REMIX | ✓ | ✗ | ✓ | YouTube Music web — primary client |
WEB_CREATOR | 62 | WEB_CREATOR | ✓ (required) | ✗ | ✓ | Requires login; used for creator endpoints |
TVHTML5 | 7 | TVHTML5 | ✓ | ✗ | ✓ | Smart TV client; good fallback for most content |
TVHTML5_SIMPLY | 75 | TVHTML5_SIMPLY | ✗ | ✗ | ✓ (required) | Must be used with a PoToken |
TVHTML5_SIMPLY_EMBEDDED_PLAYER | 85 | TVHTML5_SIMPLY_EMBEDDED_PLAYER | ✓ (optional) | ✓ | ✗ | Bypasses age-restriction; no PoToken needed |
IOS | 5 | IOS | ✗ | ✗ | ✗ | iPhone YouTube client |
MOBILE | 3 | ANDROID | ✓ | ✗ | ✗ | Standard Android YouTube client |
ANDROID_NO_SDK | 3 | ANDROID | ✗ | ✗ | ✗ | Authorization header must be excluded; cannot play paid/private/age-restricted content |
ANDROID_VR_NO_AUTH | 28 | ANDROID_VR | ✗ | ✗ | ✗ | Version 1.61.48, no auth, context includes user-agent |
ANDROID_VR_1_65_10 | 28 | ANDROID_VR | ✗ | ✗ | ✗ | Oculus Quest 3 — version 1.65; context includes user-agent |
ANDROID_VR_1_61_48 | 28 | ANDROID_VR | ✗ | ✗ | ✗ | Cannot play Kids/Paid/Private/Age-restricted; logged-out only |
ANDROID_VR_1_43_32 | 28 | ANDROID_VR | ✗ | ✗ | ✗ | Non-adaptive bitrate; no AV1; fixes audio stuttering with YT Music |
ANDROID_CREATOR | 14 | ANDROID_CREATOR | ✓ | ✗ | ✗ | Can play kids content and music-licensed videos; no HDR or livestreams |
VISIONOS | 101 | VISIONOS | ✗ | ✗ | ✗ | Internal/unreleased Apple Vision Pro client; may stop working |
IPADOS | 5 | IOS | ✗ | ✗ | ✗ | iPad 6th Gen model; no AV1 hardware decoding |
Detailed client notes
YouTubeLocale
Attached to every InnerTube request context to control response language and regional content.
ISO 3166-1 alpha-2 country code for geolocation (e.g.,
"US", "GB", "JP"). Controls region-specific charts, new releases, and content availability.BCP-47 language tag for the host language (e.g.,
"en", "en-US", "ja"). Controls the language of titles, labels, and UI strings returned by the API.ContentHints
A lightweight description of a piece of content passed to ContentAwareFallbackStrategy to select the most appropriate client for playback. All fields default to null (unknown).
true when the content carries an explicit badge. Triggers the explicitClients list in the fallback strategy.true when the video is tagged “Made for Kids”. Triggers the kidsClients list. Has higher priority than isExplicit.true for live-stream content. Triggers the liveClients list. Has higher priority than isKidsContent.true when the content is a user-uploaded video rather than a YouTube Music catalogue track. Triggers the uploadedClients list. Has the highest priority of all hints.ContentAwareFallbackStrategy
Selects an ordered list of YouTubeClient instances to try for playback based on ContentHints. The caller should attempt each client in order, moving to the next if the previous attempt returns a non-playable response.
resolveClients
List<YouTubeClient> for the given content hints. Priority is evaluated top-down: isUploaded → isLive → isKidsContent → isExplicit → default.
| Condition | Clients returned (in order) |
|---|---|
isUploaded == true | TVHTML5, WEB_REMIX, WEB_CREATOR |
isLive == true | TVHTML5, WEB_REMIX, WEB_CREATOR, TVHTML5_SIMPLY |
isKidsContent == true | TVHTML5, WEB_REMIX, TVHTML5_SIMPLY, WEB_CREATOR |
isExplicit == true | VISIONOS, TVHTML5, WEB_REMIX |
| (default) | VISIONOS, ANDROID_VR_1_65_10, ANDROID_VR_1_43_32, WEB_REMIX, TVHTML5, TVHTML5_SIMPLY |