diff --git a/.npmignore b/.npmignore
index 98fb6412d..be7572efc 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,6 +1,7 @@
**
src/
+docs/
!dist/**
!README.md
!LICENSE
diff --git a/README.md b/README.md
index 7f56ea1ef..8dc8848e8 100644
--- a/README.md
+++ b/README.md
@@ -3,65 +3,30 @@
[versions]: https://www.npmjs.com/package/youtubei.js?activeTab=versions
[codefactor]: https://www.codefactor.io/repository/github/luanrt/youtube.js
[actions]: https://github.com/LuanRT/YouTube.js/actions
-[collaborators]: https://github.com/LuanRT/YouTube.js/blob/main/COLLABORATORS.md
-
-
-[project]: https://github.com/LuanRT/YouTube.js
-[twitter]: https://twitter.com/thesciencephile
[discord]: https://discord.gg/syDu7Yks54
-
+
+
+
-
A JavaScript client for YouTube's private API, known as InnerTube.
+
A JavaScript client for YouTube's private API, known as InnerTube.
- [![Discord](https://img.shields.io/badge/discord-online-brightgreen.svg)][discord]
- [![CI](https://github.com/LuanRT/YouTube.js/actions/workflows/test.yml/badge.svg)][actions]
- [![NPM Version](https://img.shields.io/npm/v/youtubei.js?color=%2335C757)][versions]
- [![Downloads](https://img.shields.io/npm/dt/youtubei.js)][npm]
- [![Codefactor](https://www.codefactor.io/repository/github/luanrt/youtube.js/badge)][codefactor]
+[![Discord](https://img.shields.io/badge/discord-online-brightgreen.svg)][discord]
+[![CI](https://github.com/LuanRT/YouTube.js/actions/workflows/test.yml/badge.svg)][actions]
+[![NPM Version](https://img.shields.io/npm/v/youtubei.js?color=%2335C757)][versions]
+[![Downloads](https://img.shields.io/npm/dt/youtubei.js)][npm]
+[![Codefactor](https://www.codefactor.io/repository/github/luanrt/youtube.js/badge)][codefactor]
-
- Sponsored by
-
-
-InnerTube is an API used by all YouTube clients. It was created to simplify the deployment of new features and experiments across the platform [^1]. This library manages all low-level communication with InnerTube, providing a simple and efficient way to interact with YouTube programmatically. Its design aims to closely emulate an actual client, including the parsing of API responses.
-
-If you have any questions or need help, feel free to reach out to us on our [Discord server][discord] or open an issue [here](https://github.com/LuanRT/YouTube.js/issues).
-
-### Table of Contents
-
- Prerequisites
- Installation
-
- Usage
-
-
- Contributing
- Contact
- Disclaimer
- License
-
-
-### Prerequisites
-YouTube.js runs on Node.js, Deno, and modern browsers.
+YouTube.js is a JavaScript client for YouTube's internal API, known as "InnerTube". It allows you to interact with YouTube programmatically, providing access to videos, comments, live chats, streaming data and more. It works seamlessly across Node.js, Deno, and modern browsers.
-It requires a runtime with the following features:
-- [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
- - On Node, we use [undici](https://github.com/nodejs/undici)'s fetch implementation, which requires Node.js 16.8+. If you need to use an older version, you may provide your own fetch implementation. See [providing your own fetch implementation](#custom-fetch) for more information.
- - The `Response` object returned by fetch must thus be spec compliant and return a `ReadableStream` object if you want to use the `VideoInfo#download` method. (Implementations like `node-fetch` return a non-standard `Readable` object.)
-- [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) and [`CustomEvent`](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent) are required.
+## Installation
-### Installation
+Before installing, make sure your environment meets the [prerequisites](https://ytjs.dev/guide/getting-started.html#prerequisites).
```bash
# NPM
@@ -74,709 +39,33 @@ yarn add youtubei.js@latest
npm install github:LuanRT/YouTube.js
```
-When using Deno, you can import YouTube.js directly from deno.land:
+Deno:
```ts
import { Innertube } from 'https://deno.land/x/youtubei/deno.ts';
```
-## Usage
-Create an InnerTube instance:
-```ts
-// const { Innertube } = require('youtubei.js');
-import { Innertube } from 'youtubei.js';
-const youtube = await Innertube.create(/* options */);
-```
-
-### Options
-
-Click to expand
-
-| Option | Type | Description | Default |
-| --- | --- | --- | --- |
-| `lang` | `string` | Language. | `en` |
-| `location` | `string` | Geolocation. | `US` |
-| `account_index` | `number` | The account index to use. This is useful if you have multiple accounts logged in. **NOTE:** Only works if you are signed in with cookies. | `0` |
-| `visitor_data` | `string` | Setting this to a valid and persistent visitor data string will allow YouTube to give this session tailored content even when not logged in. A good way to get a valid one is by either grabbing it from a browser or calling InnerTube's `/visitor_id` endpoint. | `undefined` |
-| `po_token` | `string` | Proof of Origin Token. This is an attestation token generated by BotGuard/DroidGuard. It is used to confirm that the request is coming from a genuine client. Valid tokens can be generated using [BgUtils](https://github.com/LuanRT/BgUtils) or [Invidious' tool](https://github.com/iv-org/youtube-trusted-session-generator). | `undefined` |
-| `retrieve_player` | `boolean` | Specifies whether to retrieve the JS player. Disabling this will make session creation faster. **NOTE:** Deciphering formats is not possible without the JS player. | `true` |
-| `enable_safety_mode` | `boolean` | Specifies whether to enable safety mode. This will prevent the session from loading any potentially unsafe content. | `false` |
-| `generate_session_locally` | `boolean` | Specifies whether to generate the session data locally or retrieve it from YouTube. This can be useful if you need more performance. **NOTE:** If you are using the cache option and a session has already been generated, this will be ignored. If you want to force a new session to be generated, you must clear the cache or disable session caching. | `false` |
-| `enable_session_cache` | `boolean` | Specifies whether to cache the session data. | `true` |
-| `device_category` | `DeviceCategory` | Platform to use for the session. | `DESKTOP` |
-| `client_type` | `ClientType` | InnerTube client type. It is not recommended to change this unless you know what you are doing. | `WEB` |
-| `timezone` | `string` | The time zone. | `*` |
-| `cache` | `ICache` | Used to cache algorithms, session data, and OAuth2 tokens. | `undefined` |
-| `cookie` | `string` | YouTube cookies. | `undefined` |
-| `fetch` | `FetchFunction` | Fetch function to use. | `fetch` |
-
-
-
-
-### Browser Usage
-To use YouTube.js in the browser, you must proxy requests through your own server. You can see our simple reference implementation in Deno at [`examples/browser/proxy/deno.ts`](https://github.com/LuanRT/YouTube.js/tree/main/examples/browser/proxy/deno.ts).
-
-You may provide your own fetch implementation to be used by YouTube.js, which we will use to modify and send the requests through a proxy. See [`examples/browser/web`](https://github.com/LuanRT/YouTube.js/tree/main/examples/browser/web) for a simple example using [Vite](https://vitejs.dev/).
-
-```ts
-// Multiple exports are available for the web.
-// Unbundled ESM version
-import { Innertube } from 'youtubei.js/web';
-// Bundled ESM version
-// import { Innertube } from 'youtubei.js/web.bundle';
-// Production Bundled ESM version
-// import { Innertube } from 'youtubei.js/web.bundle.min';
-await Innertube.create({
- fetch: async (input: RequestInfo | URL, init?: RequestInit) => {
- // Modify the request
- // and send it to the proxy
-
- // fetch the URL
- return fetch(request, init);
- }
-});
-```
-
-### Streaming
-YouTube.js supports streaming of videos in the browser by converting YouTube's streaming data into an MPEG-DASH manifest.
-
-The example below uses [`dash.js`](https://github.com/Dash-Industry-Forum/dash.js) to play the video.
-
-```ts
-import { Innertube } from 'youtubei.js/web';
-import dashjs from 'dashjs';
-
-const youtube = await Innertube.create({ /* setup - see above */ });
-
-// Get the video info
-const videoInfo = await youtube.getInfo('videoId');
-
-// now convert to a dash manifest
-// again - to be able to stream the video in the browser - we must proxy the requests through our own server
-// to do this, we provide a method to transform the URLs before writing them to the manifest
-const manifest = await videoInfo.toDash(url => {
- // modify the url
- // and return it
- return url;
-});
-
-const uri = "data:application/dash+xml;charset=utf-8;base64," + btoa(manifest);
-
-const videoElement = document.getElementById('video_player');
-
-const player = dashjs.MediaPlayer().create();
-player.initialize(videoElement, uri, true);
-```
-
-A fully working example can be found in [`examples/browser/web`](https://github.com/LuanRT/YouTube.js/blob/main/examples/browser/web).
-
-
-
-### Providing your own fetch implementation
-You may provide your own fetch implementation to be used by YouTube.js. This can be useful in some cases to modify the requests before they are sent and transform the responses before they are returned (eg. for proxies).
-```ts
-// provide a fetch implementation
-const yt = await Innertube.create({
- fetch: async (input: RequestInfo | URL, init?: RequestInit) => {
- // make the request with your own fetch implementation
- // and return the response
- return new Response(
- /* ... */
- );
- }
-});
-```
-
-
-
-### Caching
-Caching the transformed player instance can greatly improve the performance. Our `UniversalCache` implementation uses different caching methods depending on the environment.
-
-In Node.js, we use the `node:fs` module, `Deno.writeFile()` in Deno, and `indexedDB` in browsers.
-
-By default, the cache stores data in the operating system's temporary directory (or `indexedDB` in browsers). You can make this cache persistent by specifying the path to the cache directory, which will be created if it doesn't exist.
-
-```ts
-import { Innertube, UniversalCache } from 'youtubei.js';
-// Create a cache that stores files in the OS temp directory (or indexedDB in browsers) by default.
-const yt = await Innertube.create({
- cache: new UniversalCache(false)
-});
-
-// You may want to create a persistent cache instead (on Node and Deno).
-const yt = await Innertube.create({
- cache: new UniversalCache(
- // Enables persistent caching
- true,
- // Path to the cache directory. The directory will be created if it doesn't exist
- './.cache'
- )
-});
-```
-
-### API
-
-* `Innertube`
-
-
- Properties
-
-
- * [.session](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/session.md)
- * [.account](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/account.md)
- * [.interact](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/interaction-manager.md)
- * [.playlist](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/playlist.md)
- * [.music](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/music.md)
- * [.studio](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/studio.md)
- * [.kids](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/kids.md)
-
-
-
-
-
-
- Methods
-
-
- * [.getInfo(target, client?)](#getinfo)
- * [.getBasicInfo(video_id, client?)](#getbasicinfo)
- * [.search(query, filters?)](#search)
- * [.getSearchSuggestions(query)](#getsearchsuggestions)
- * [.getComments(video_id, sort_by?)](#getcomments)
- * [.getHomeFeed()](#gethomefeed)
- * [.getGuide()](#getguide)
- * [.getLibrary()](#getlibrary)
- * [.getHistory()](#gethistory)
- * [.getTrending()](#gettrending)
- * [.getSubscriptionsFeed()](#getsubscriptionsfeed)
- * [.getChannel(id)](#getchannel)
- * [.getNotifications()](#getnotifications)
- * [.getUnseenNotificationsCount()](#getunseennotificationscount)
- * [.getPlaylist(id)](#getplaylist)
- * [.getHashtag(hashtag)](#gethashtag)
- * [.getStreamingData(video_id, options)](#getstreamingdata)
- * [.download(video_id, options?)](#download)
- * [.resolveURL(url)](#resolveurl)
- * [.call(endpoint, args?)](#call)
-
-
-
-
-
-### `getInfo(target, client?)`
-
-Retrieves video info.
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| target | `string` \| `NavigationEndpoint` | If `string`, the id of the video. If `NavigationEndpoint`, the endpoint of watchable elements such as `Video`, `Mix` and `Playlist`. To clarify, valid endpoints have payloads containing at least `videoId` and optionally `playlistId`, `params` and `index`. |
-| client? | `InnerTubeClient` | InnerTube client to use. |
-
-
-Methods & Getters
-
-
-- `#like()`
- - Likes the video.
-
-- `#dislike()`
- - Dislikes the video.
-
-- `#removeRating()`
- - Removes like/dislike.
-
-- `#getLiveChat()`
- - Returns a LiveChat instance.
-
-- `#getTrailerInfo()`
- - Returns trailer info in a new `VideoInfo` instance, or `null` if none. Typically available for non-purchased movies or films.
-
-- `#chooseFormat(options)`
- - Used to choose streaming data formats.
-
-- `#toDash(url_transformer?, format_filter?)`
- - Converts streaming data to an MPEG-DASH manifest.
-
-- `#download(options)`
- - Downloads the video. See [download](#download).
-
-- `#getTranscript()`
- - Retrieves the video's transcript.
-
-- `#filters`
- - Returns filters that can be applied to the watch next feed.
-
-- `#selectFilter(name)`
- - Applies the given filter to the watch next feed and returns a new instance of [`VideoInfo`](https://github.com/LuanRT/YouTube.js/blob/main/src/parser/youtube/VideoInfo.ts).
-
-- `#getWatchNextContinuation()`
- - Retrieves the next batch of items for the watch next feed.
-
-- `#addToWatchHistory()`
- - Adds the video to the watch history.
-
-- `#autoplay_video_endpoint`
- - Returns the endpoint of the video for Autoplay.
-
-- `#has_trailer`
- - Checks if trailer is available.
-
-- `#page`
- - Returns original InnerTube response (sanitized).
-
-
-
-
-
-### `getBasicInfo(video_id, client?)`
-
-Suitable for cases where you only need basic video metadata. Also, it is faster than [`getInfo()`](#getinfo).
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | The id of the video |
-| client? | `InnerTubeClient` | InnerTube client to use. |
-
-
-### `search(query, filters?)`
-
-Searches the given query on YouTube.
-
-**Returns**: `Promise`
-
-> **Note**
-> `Search` extends the [`Feed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/feed.md) class.
-
-| Param | Type | Description |
-| --- | --- | --- |
-| query | `string` | The search query |
-| filters? | `SearchFilters` | Search filters |
-
-
-
-Search Filters
-
-| Filter | Type | Value | Description |
-| --- | --- | --- | --- |
-| upload_date | `string` | `all` \| `hour` \| `today` \| `week` \| `month` \| `year` | Filter by upload date |
-| type | `string` | `all` \| `video` \| `channel` \| `playlist` \| `movie` | Filter by type |
-| duration | `string` | `all` \| `short` \| `medium` \| `long` | Filter by duration |
-| sort_by | `string` | `relevance` \| `rating` \| `upload_date` \| `view_count` | Sort by |
-| features | `string[]` | `hd` \| `subtitles` \| `creative_commons` \| `3d` \| `live` \| `purchased` \| `4k` \| `360` \| `location` \| `hdr` \| `vr180` | Filter by features |
-
-
-
-
-Methods & Getters
-
-
-- `#selectRefinementCard(SearchRefinementCard | string)`
- - Applies given refinement card and returns a new Search instance.
-
-- `#refinement_card_queries`
- - Returns available refinement cards, this is a simplified version of the `refinement_cards` object.
-
-- `#getContinuation()`
- - Retrieves next batch of results.
-
-
-
-
-
-### `getSearchSuggestions(query)`
-Retrieves search suggestions for given query.
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| query | `string` | The search query |
-
-
-### `getComments(video_id, sort_by?)`
-Retrieves comments for given video.
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | The video id |
-| sort_by | `string` | Can be: `TOP_COMMENTS` or `NEWEST_FIRST` |
-
-See [`./examples/comments`](https://github.com/LuanRT/YouTube.js/blob/main/examples/comments) for examples.
-
-
-### `getHomeFeed()`
-Retrieves YouTube's home feed.
-
-**Returns**: `Promise`
-
-> **Note**
-> `HomeFeed` extends the [`FilterableFeed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/filterable-feed.md) class.
-
-
-Methods & Getters
-
-
-- `#videos`
- - Returns all videos in the home feed.
-
-- `#posts`
- - Returns all posts in the home feed.
-
-- `#shelves`
- - Returns all shelves in the home feed.
-
-- `#filters`
- - Returns available filters.
-
-- `#applyFilter(name | ChipCloudChip)`
- - Applies given filter and returns a new HomeFeed instance.
-
-- `#getContinuation()`
- - Retrieves feed continuation.
-
-
-
-
-
-### `getGuide()`
-Retrieves YouTube's content guide.
-
-**Returns**: `Promise`
-
-
-### `getLibrary()`
-Retrieves the account's library.
-
-**Returns**: `Promise`
-
-> **Note**
-> `Library` extends the [`Feed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/feed.md) class.
-
-
-Methods & Getters
-
-
-- `#history`
-- `#watch_later`
-- `#liked_videos`
-- `#playlists_section`
-- `#clips`
-
-
-
-
-
-### `getHistory()`
-Retrieves watch history.
-
-**Returns**: `Promise`
-
-> **Note**
-> `History` extends the [`Feed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/feed.md) class.
-
-
-Methods & Getters
-
-
-- `#getContinuation()`
- - Retrieves next batch of contents.
-
-
-
-
-
-### `getTrending()`
-Retrieves trending content.
-
-**Returns**: `Promise>`
-
-
-### `getSubscriptionsFeed()`
-Retrieves the subscriptions feed.
-
-**Returns**: `Promise>`
-
-
-### `getChannel(id)`
-Retrieves contents for a given channel.
-
-**Returns**: `Promise`
-
-> **Note**
-> `Channel` extends the [`TabbedFeed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/tabbed-feed.md) class.
-
-| Param | Type | Description |
-| --- | --- | --- |
-| id | `string` | Channel id |
-
-
-Methods & Getters
-
-
-- `#getVideos()`
-- `#getShorts()`
-- `#getLiveStreams()`
-- `#getReleases()`
-- `#getPodcasts()`
-- `#getPlaylists()`
-- `#getHome()`
-- `#getCommunity()`
-- `#getChannels()`
-- `#getAbout()`
-- `#search(query)`
-- `#applyFilter(filter)`
-- `#applyContentTypeFilter(content_type_filter)`
-- `#applySort(sort)`
-- `#getContinuation()`
-- `#filters`
-- `#content_type_filters`
-- `#sort_filters`
-- `#page`
-
-
-
-
-See [`./examples/channel`](https://github.com/LuanRT/YouTube.js/blob/main/examples/channel) for examples.
-
-
-### `getNotifications()`
-Retrieves notifications.
-
-**Returns**: `Promise`
-
-
-Methods & Getter
-
-
-- `#getContinuation()`
- - Retrieves next batch of notifications.
-
-
-
-
-
-### `getUnseenNotificationsCount()`
-Retrieves unseen notifications count.
-
-**Returns**: `Promise`
-
-
-### `getPlaylist(id)`
-Retrieves playlist contents.
-
-**Returns**: `Promise`
-
-> **Note**
-> `Playlist` extends the [`Feed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/feed.md) class.
-
-| Param | Type | Description |
-| --- | --- | --- |
-| id | `string` | Playlist id |
-
-
-Methods & Getter
-
-
-- `#items`
- - Returns the items of the playlist.
-
-
-
-
-
-### `getHashtag(hashtag)`
-Retrieves a given hashtag's page.
-
-**Returns**: `Promise`
-
-> **Note**
-> `HashtagFeed` extends the [`FilterableFeed`](https://github.com/LuanRT/YouTube.js/blob/main/docs/API/filterable-feed.md) class.
-
-| Param | Type | Description |
-| --- | --- | --- |
-| hashtag | `string` | The hashtag |
-
-
-Methods & Getter
-
-
-- `#applyFilter(filter)`
- - Applies given filter and returns a new `HashtagFeed` instance.
-- `#getContinuation()`
- - Retrieves next batch of contents.
-
-
-
-
-
-### `getStreamingData(video_id, options)`
-Returns deciphered streaming data.
-
-> **Note**
-> This method will be deprecated in the future. We recommend retrieving streaming data from a `VideoInfo` or `TrackInfo` object instead if you want to select formats manually. Please refer to the following example:
-
-```ts
-const info = await yt.getBasicInfo('somevideoid');
-
-const url = info.streaming_data?.formats[0].decipher(yt.session.player);
-console.info('Playback url:', url);
-
-// or:
-const format = info.chooseFormat({ type: 'audio', quality: 'best' });
-const url = format?.decipher(yt.session.player);
-console.info('Playback url:', url);
-```
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-| options | `FormatOptions` | Format options |
-
-
-### `download(video_id, options?)`
-Downloads a given video.
-
-**Returns**: `Promise>`
+## Basic Usage
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-| options | `DownloadOptions` | Download options |
-
-See [`./examples/download`](https://github.com/LuanRT/YouTube.js/blob/main/examples/download) for examples.
-
-
-### `resolveURL(url)`
-Resolves a given url.
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| url | `string` | Url to resolve |
-
-
-### `call(endpoint, args?)`
-Utility to call navigation endpoints.
-
-**Returns**: `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| endpoint | `NavigationEndpoint` | The target endpoint |
-| args? | `object` | Additional payload arguments |
-
-### Extending the library
-
-YouTube.js is modular and easy to extend. Most of the methods, classes, and utilities used internally are exposed and can be used to implement your own extensions without having to modify the library's source code.
-
-For example, let's say we want to implement a method to retrieve video info. We can do that by using an instance of the `Actions` class:
```ts
+// const { Innertube } = require('youtubei.js');
import { Innertube } from 'youtubei.js';
-
-(async () => {
- const yt = await Innertube.create();
-
- async function getVideoInfo(videoId: string) {
- const videoInfo = await yt.actions.execute('/player', {
- // You can add any additional payloads here, and they'll merge with the default payload sent to InnerTube.
- videoId,
- client: 'YTMUSIC', // InnerTube client to use.
- parse: true // tells YouTube.js to parse the response (not sent to InnerTube).
- });
-
- return videoInfo;
- }
-
- const videoInfo = await getVideoInfo('jLTOuvBTLxA');
- console.info(videoInfo);
-})();
-```
-
-Alternatively, suppose we locate a `NavigationEndpoint` in a parsed response and want to see what happens when we call it:
-```ts
-import { Innertube, YTNodes } from 'youtubei.js';
-
-(async () => {
- const yt = await Innertube.create();
-
- const artist = await yt.music.getArtist('UC52ZqHVQz5OoGhvbWiRal6g');
- const albums = artist.sections[1].as(YTNodes.MusicCarouselShelf);
-
- // Let's imagine that we wish to click on the βMoreβ button:
- const button = albums.as(YTNodes.MusicCarouselShelf).header?.more_content;
-
- if (button) {
- // Having ensured that it exists, we can then call its navigation endpoint using the following code:
- const page = await button.endpoint.call(yt.actions, { parse: true });
- console.info(page);
- }
-})();
-```
-
-### Parser
-
-YouTube.js' parser enables you to parse InnerTube responses and convert their nodes into strongly-typed objects that are simple to manipulate. Additionally, it provides numerous utility methods that make working with InnerTube a breeze.
-
-Here's an example of its usage:
-```ts
-// See ./examples/parser
-
-import { Parser, YTNodes } from 'youtubei.js';
-import { readFileSync } from 'fs';
-
-// YouTube Music's artist page response
-const data = readFileSync('./artist.json').toString();
-
-const page = Parser.parseResponse(JSON.parse(data));
-
-const header = page.header?.item().as(YTNodes.MusicImmersiveHeader, YTNodes.MusicVisualHeader);
-
-console.info('Header:', header);
-
-// The parser uses a proxy object to add type safety and utility methods for working with InnerTube's data arrays:
-const tab = page.contents?.item().as(YTNodes.SingleColumnBrowseResults).tabs.firstOfType(YTNodes.Tab);
-
-if (!tab)
- throw new Error('Target tab not found');
-
-if (!tab.content)
- throw new Error('Target tab appears to be empty');
-
-const sections = tab.content?.as(YTNodes.SectionList).contents.as(YTNodes.MusicCarouselShelf, YTNodes.MusicDescriptionShelf, YTNodes.MusicShelf);
-
-console.info('Sections:', sections);
+const innertube = await Innertube.create(/* options */);
```
-Documentation for the parser can be found [here](https://github.com/LuanRT/YouTube.js/blob/main/src/parser).
+For detailed usage, check out the [YouTube.js Guide and API Documentation](https://ytjs.dev).
## Contributing
We welcome all contributions, issues and feature requests, whether small or large. If you want to contribute, feel free to check out our [issues page](https://github.com/LuanRT/YouTube.js/issues) and our [guidelines](https://github.com/LuanRT/YouTube.js/blob/main/CONTRIBUTING.md).
-We are immensely grateful to all the wonderful people who have contributed to this project. A special shoutout to all our contributors! π
+## Contributors
-## Contact
-
-LuanRT - [@thesciencephile][twitter] - luanrt@thatsciencephile.com
-
-Project Link: [https://github.com/LuanRT/YouTube.js][project]
-
## Disclaimer
This project is not affiliated with, endorsed, or sponsored by YouTube or any of its affiliates or subsidiaries. All trademarks, logos, and brand names used in this project are the property of their respective owners and are used solely to describe the services provided.
-As such, any usage of trademarks to refer to such services is considered nominative use. If you have any questions or concerns, please contact me directly via email.
-
-[^1]: https://gizmodo.com/how-project-innertube-helped-pull-youtube-out-of-the-gu-1704946491
+As such, any usage of trademarks to refer to such services is considered nominative use. If you have any questions or concerns, please contact me.
## License
Distributed under the [MIT](https://choosealicense.com/licenses/mit/) License.
diff --git a/docs/API/account.md b/docs/API/account.md
deleted file mode 100644
index 8161d3893..000000000
--- a/docs/API/account.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Account
-
-YouTube account manager.
-
-## API
-
-* Account
- * [.channel](#channel)
- * [.getInfo()](#getinfo)
- * [.getTimeWatched()](#gettimewatched)
- * [.getSettings()](#getsettings)
- * [.getAnalytics](#getanalytics)
-
-
-### channel
-
-Channel settings.
-
-**Returns:** `object`
-
-
-Methods & Getters
-
-
-- `#editName(new_name)`
- - Edits the name of the channel.
-
-- `#editDescription(new_description)`
- - Edits channel description.
-
-- `#getBasicAnalytics()`
- - Alias for [`Account#getAnalytics()`](#getanalytics) β returns basic channel analytics.
-
-
-
-
-
-### getInfo()
-
-Retrieves account information.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getTimeWatched()
-
-Retrieves time watched statistics.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getSettings()
-
-Retrieves YouTube settings.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#selectSidebarItem(name)`
- - Selects an item from the sidebar menu. Use `settings#sidebar_items` to see available items.
-
-- `#getSettingOption(name)`
- - Finds a setting by name and returns it. Use `settings#setting_options` to see available options.
-
-- `#setting_options`
- - Returns settings available in the page.
-
-- `#sidebar_items`
- - Returns options available in the sidebar menu.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getAnalytics()
-
-Retrieves basic channel analytics.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
\ No newline at end of file
diff --git a/docs/API/feed.md b/docs/API/feed.md
deleted file mode 100644
index 13c7e4b35..000000000
--- a/docs/API/feed.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Feed
-
-Represents a YouTube feed. This class provides a set of utility methods for parsing and interacting with feeds.
-
-## API
-
-* Feed
- * [.videos](#videos)
- * [.posts](#posts)
- * [.channels](#channels)
- * [.playlists](#playlists)
- * [.shelves](#shelves)
- * [.memo](#memo)
- * [.page_contents](#page_contents)
- * [.secondary_contents](#secondary_contents)
- * [.page](#page)
- * [.has_continuation](#has_continuation)
- * [.getContinuationData()](#getcontinuationdata)
- * [.getContinuation()](#getcontinuation)
- * [.getShelf(title)](#getshelf)
-
-
-### videos
-
-Returns all videos in the feed.
-
-**Returns:** `ObservedArray`
-
-
-### posts
-
-Returns all posts in the feed.
-
-**Returns:** `ObservedArray`
-
-
-### channels
-
-Returns all channels in the feed.
-
-**Returns:** `ObservedArray`
-
-
-### playlists
-
-Returns all playlists in the feed.
-
-**Returns:** `ObservedArray`
-
-
-### shelves
-
-Returns all shelves in the feed.
-
-**Returns:** `ObservedArray`
-
-
-### memo
-
-Returns the memoized feed contents.
-
-**Returns:** `Memo`
-
-
-### page_contents
-
-Returns the page contents.
-
-**Returns:** `SectionList | MusicQueue | RichGrid | ReloadContinuationItemsCommand`
-
-
-### secondary_contents
-
-Returns the secondary contents node.
-
-**Returns:** `SuperParsedResult | undefined `
-
-
-### page
-
-Returns the original InnerTube response, parsed and sanitized.
-
-**Returns:** `T extends IParsedResponse = IParsedResponse`
-
-
-### has_continuation
-
-Returns whether the feed has a continuation.
-
-**Returns:** `boolean`
-
-
-### getContinuationData()
-
-Returns the continuation data.
-
-**Returns:** `Promise`
-
-
-### getContinuation()
-
-Retrieves the feed's continuation.
-
-**Returns:** `Promise>`
-
-
-### getShelf(title)
-
-Gets a shelf by its title.
-
-**Returns:** `Shelf | RichShelf | ReelShelf | undefined`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| title | `string` | The title of the shelf to get |
\ No newline at end of file
diff --git a/docs/API/filterable-feed.md b/docs/API/filterable-feed.md
deleted file mode 100644
index c45b1f0ce..000000000
--- a/docs/API/filterable-feed.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# FilterableFeed
-
-Represents a feed that can be filtered.
-
-> **Note**
-> This class extends the [Feed](feed.md) class.
-
-## API
-
-* FilterableFeed
- * [.filter_chips](#filter_chips)
- * [.filters](#filters)
- * [.getFilteredFeed(filter: string | ChipCloudChip)](#getfilteredfeed)
-
-
-### filter_chips
-
-Returns the feed's filter chips.
-
-**Returns:** `ObservedArray`
-
-
-### filters
-
-Returns the feed's filter chips as an array of strings.
-
-**Returns:** `string[]`
-
-
-### getFilteredFeed(filter: string | ChipCloudChip)
-
-Returns a new [Feed](feed.md) with the given filter applied.
-
-**Returns:** `Promise>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| filter | `string` \| `ChipCloudChip` | The filter to apply |
\ No newline at end of file
diff --git a/docs/API/interaction-manager.md b/docs/API/interaction-manager.md
deleted file mode 100644
index d69c460f1..000000000
--- a/docs/API/interaction-manager.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# InteractionManager
-
-Handles direct interactions.
-
-## API
-
-* InteractionManager
- * [.like(video_id)](#like)
- * [.dislike(video_id)](#dislike)
- * [.removeRating(video_id)](#removerating)
- * [.subscribe(video_id)](#subscribe)
- * [.unsubscribe(video_id)](#unsubscribe)
- * [.comment(video_id, text)](#comment)
- * [.translate(text, target_language, args?)](#translate)
- * [.setNotificationPreferences(channel_id, type)](#setnotificationpreferences)
-
-
-### like(video_id)
-
-Likes given video.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-
-
-### dislike(video_id)
-
-Dislikes given video.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-
-
-### removeRating(video_id)
-
-Remover like/dislike.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-
-
-### subscribe(channel_id)
-
-Subscribes to given channel.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| channel_id | `string` | Channel id |
-
-
-### unsubscribe(channel_id)
-
-Unsubscribes from given channel.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| channel_id | `string` | Channel id |
-
-
-### comment(video_id, text)
-
-Posts a comment on given video.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-| text | `string` | Comment content |
-
-
-### translate(text, target_language, args?)
-
-Translates given text using YouTube's comment translation feature.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| text | `string` | Text to be translated |
-| target_language | `string` | ISO language code |
-| args? | `object` | Additional arguments |
-
-
-### setNotificationPreferences(channel_id, type)
-
-Changes notification preferences for a given channel.
-Only works with channels you are subscribed to.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| channel_id | `string` | Channel id |
-| type | `string` | `PERSONALIZED`, `ALL` or `NONE` |
diff --git a/docs/API/kids.md b/docs/API/kids.md
deleted file mode 100644
index df2ea2dcd..000000000
--- a/docs/API/kids.md
+++ /dev/null
@@ -1,127 +0,0 @@
-# YouTube Kids
-
-YouTube Kids is a modified version of the YouTube app, with a simplified interface and curated content. This class allows you to interact with its API.
-
-## API
-
-* Kids
- * [.search(query)](#search)
- * [.getInfo(video_id)](#getinfo)
- * [.getChannel(channel_id)](#getchannel)
- * [.getHomeFeed()](#gethomefeed)
- * [.blockChannel(channel_id)](#blockchannel)
-
-
-### search(query)
-
-Searches the given query on YouTube Kids.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| query | `string` | The query to search |
-
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getInfo(video_id)
-
-Retrieves video info.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | The video id |
-
-
-Methods & Getters
-
-
-- `#toDash(url_transformer?, format_filter?)`
- - Generates a DASH manifest from the streaming data.
-
-- `#chooseFormat(options)`
- - Selects the format that best matches the given options. This method is used internally by `#download`.
-
-- `#download(options?)`
- - Downloads the video.
-
-- `#addToWatchHistory()`
- - Adds the video to the watch history.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getChannel(channel_id)
-
-Retrieves channel info.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| channel_id | `string` | The channel id |
-
-
-Methods & Getters
-
-
-- `#getContinuation()`
- - Retrieves next batch of videos.
-
-- `#has_continuation`
- - Returns whether there are more videos to retrieve.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getHomeFeed()
-
-Retrieves the home feed.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#selectCategoryTab(tab: string | KidsCategoryTab)`
- - Selects the given category tab.
-
-- `#categories`
- - Returns available categories.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-### blockChannel(channel_id)
-
-Retrieves the list of supervised accounts that the signed-in user has access to and blocks the given channel for each of them.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| channel_id | `string` | Channel id |
\ No newline at end of file
diff --git a/docs/API/music.md b/docs/API/music.md
deleted file mode 100644
index a6fc055cd..000000000
--- a/docs/API/music.md
+++ /dev/null
@@ -1,347 +0,0 @@
-# YouTube Music
-
-YouTube Music is a music streaming service developed by YouTube, a subsidiary of Google. It provides a tailored interface for the service oriented towards music streaming, with a greater emphasis on browsing and discovery compared to its main service. This class allows you to interact with its API.
-
-## API
-
-* Music
- * [.getInfo(target)](#getinfo)
- * [.search(query, filters?)](#search)
- * [.getHomeFeed()](#gethomefeed)
- * [.getExplore()](#getexplore)
- * [.getLibrary()](#getlibrary)
- * [.getArtist(artist_id)](#getartist)
- * [.getAlbum(album_id)](#getalbum)
- * [.getPlaylist(playlist_id)](#getplaylist)
- * [.getLyrics(video_id)](#getlyrics)
- * [.getUpNext(video_id, automix?)](#getupnext)
- * [.getRelated(video_id)](#getrelated)
- * [.getRecap()](#getrecap)
- * [.getSearchSuggestions(query)](#getsearchsuggestions)
-
-
-### getInfo(target)
-
-Retrieves track info.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| target | `string` or `MusicTwoRowItem` | video id or list item |
-
-
-Methods & Getters
-
-
-- `#getTab(title)`
- - Retrieves contents of the given tab.
-
-- `#getUpNext(automix?)`
- - Retrieves up next.
-
-- `#getRelated()`
- - Retrieves related content.
-
-- `#getLyrics()`
- - Retrieves song lyrics.
-
-- `#available_tabs`
- - Returns available tabs.
-
-- `#toDash(url_transformer?, format_filter?)`
- - Generates a DASH manifest from the streaming data.
-
-- `#chooseFormat(options)`
- - Selects the format that best matches the given options. This method is used internally by `#download`.
-
-- `#download(options?)`
- - Downloads the track.
-
-- `#addToWatchHistory()`
- - Adds the song to the watch history.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### search(query, filters?)
-
-Searches on YouTube Music.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| query | `string` | Search query |
-| filters? | `MusicSearchFilters` | Search filters |
-
-
-Search Filters
-
-| Filter | Type | Value | Description |
-| --- | --- | --- | --- |
-| type | `string` | `all`, `song`, `video`, `album`, `playlist`, `artist` | Search type |
-
-
-
-
-Methods & Getters
-
-
-- `#getMore(shelf)`
- - Equivalent to clicking on the shelf to load more items.
-
-- `#getContinuation()`
- - Retrieves continuation, only works for individual sections or filtered results.
-
-- `#selectFilter(name)`
- - Applies given filter to the search.
-
-- `#has_continuation`
- - Checks if continuation is available.
-
-- `#filters`
- - Returns available filters.
-
-- `#songs`
- - Returns songs shelf.
-
-- `#videos`
- - Returns videos shelf.
-
-- `#albums`
- - Returns albums shelf.
-
-- `#artists`
- - Returns artists shelf.
-
-- `#playlists`
- - Returns songs shelf.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getHomeFeed()
-
-Retrieves home feed.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#getContinuation()`
- - Retrieves continuation, only works for individual sections or filtered results.
-
-- `#has_continuation`
- - Checks if continuation is available.
-
-- `#page`
- - Returns original InnerTube response (sanitized).
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getExplore()
-
-Retrieves βExploreβ feed.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getLibrary()
-
-Retrieves library.
-
-**Returns:** `Library`
-
-
-Methods & Getters
-
-
-- `#applyFilter(filter)`
- - Applies given filter to the library.
-
-- `#applySort(sort_by)`
- - Applies given sort option to the library items.
-
-- `#getContinuation()`
- - Retrieves continuation of the library items.
-
-- `#has_continuation`
- - Checks if continuation is available.
-
-- `#filters`
- - Returns available filters.
-
-- `#sort_options`
- - Returns available sort options.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getArtist(artist_id)
-
-Retrieves artist's info & content.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| artist_id | `string` | Artist id |
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getAlbum(album_id)
-
-Retrieves given album.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| album_id | `string` | Album id |
-
-
-Methods & Getters
-
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getPlaylist(playlist_id)
-
-Retrieves given playlist.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-
-
-Methods & Getters
-
-
-- `#getRelated()`
- - Retrieves related playlists.
-
-- `#getSuggestions()`
- - Retrieves playlist suggestions.
-
-- `#getContinuation()`
- - Retrieves continuation.
-
-- `#has_continuation`
- - Checks if continuation is available.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getLyrics(video_id)
-
-Retrieves song lyrics.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-
-
-### getUpNext(video_id, automix?)
-
-Retrieves up next content.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-| automix? | `boolean` | if automix should be fetched |
-
-
-### getRelated(video_id)
-
-Retrieves related content.
-
-**Returns:** `Promise.>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-
-
-### getRecap()
-
-Retrieves your YouTube Music recap.
-
-**Returns:** `Promise.`
-
-
-Methods & Getters
-
-
-- `#getPlaylist()`
- - Retrieves recap playlist.
-
-- `#page`
- - Returns the original InnerTube response(s), parsed and sanitized.
-
-
-
-
-
-### getSearchSuggestions(query)
-
-Retrieves search suggestions.
-
-**Returns:** `Promise.>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| query | `string` | Search query |
\ No newline at end of file
diff --git a/docs/API/playlist.md b/docs/API/playlist.md
deleted file mode 100644
index 2f440a0b3..000000000
--- a/docs/API/playlist.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# PlaylistManager
-
-Playlist management class.
-
-## API
-
-* PlaylistManager
- * [.create(title, video_ids)](#create)
- * [.delete(playlist_id)](#delete)
- * [.addVideos(playlist_id, video_ids)](#addvideos)
- * [.removeVideos(playlist_id, video_ids)](#removevideos)
- * [.moveVideo(playlist_id, moved_video_id, predecessor_video_id)](#movevideo)
- * [.setName(playlist_id, name)](#setname)
- * [.setDescription(playlist_id, description)](#setdescription)
-
-
-### create(title, video_ids)
-
-Creates a playlist.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| title | `string` | Playlist name |
-| video_ids | `string[]` | array of videos |
-
-
-### delete(playlist_id)
-
-Deletes given playlist.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-
-
-### addVideos(playlist_id, video_ids)
-
-Adds videos to given playlist.
-
-**Returns:** `Promise.<{ playlist_id: string; action_result: any[] }>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-| video_ids | `string` | array of videos |
-
-
-### removeVideos(playlist_id, video_ids)
-
-Removes videos from given playlist.
-
-**Returns:** `Promise.<{ playlist_id: string; action_result: any[] }>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-| video_ids | `string` | array of videos |
-
-
-### moveVideo(playlist_id, moved_video_id, predecessor_video_id)
-
-Moves a video to a new position within a given playlist.
-
-**Returns:** `Promise.<{ playlist_id: string; action_result: any[] }>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-| moved_video_id | `string` | the video to be moved |
-| predecessor_video_id | `string` | the video present in the target position |
-
-
-### setName(playlist_id, name)
-
-Sets the name / title for the given playlist.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-| name | `string` | Name / title |
-
-
-
-### setDescription(playlist_id, description)
-
-Sets the description for the given playlist.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| playlist_id | `string` | Playlist id |
-| description | `string` | Description |
diff --git a/docs/API/session.md b/docs/API/session.md
deleted file mode 100644
index e543daa96..000000000
--- a/docs/API/session.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# Session
-
-Represents an InnerTube session.
-
-## API
-
-* Session
- * [.signIn(credentials?)](#signin) β `function`
- * [.signOut()](#signout) β `function`
- * [.key](#key) β `getter`
- * [.api_version](#api_version) β `getter`
- * [.client_version](#client_version) β `getter`
- * [.client_name](#client_name) β `getter`
- * [.context](#context) β `getter`
- * [.player](#player) β `getter`
- * [.lang](#lang) β `getter`
-
-
-### signIn(credentials?)
-
-Signs in with given credentials.
-
-**Returns:** `Promise`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| credentials? | `Credentials` | OAuth credentials |
-
-
-### signOut()
-
-Signs out of the current account.
-
-**Returns:** `Promise`
-
-
-### key
-
-InnerTube API key.
-
-**Returns:** `string`
-
-
-### api_version
-
-InnerTube API version.
-
-**Returns:** `string`
-
-
-### client_version
-
-InnerTube client version.
-
-**Returns:** `string`
-
-
-### client_name
-
-InnerTube client name.
-
-**Returns:** `string`
-
-
-### context
-
-InnerTube context.
-
-**Returns:** `Context`
-
-
-### player
-
-Player script object.
-
-**Returns:** `Player`
-
-
-### lang
-
-Client language.
-
-**Returns:** `string`
diff --git a/docs/API/studio.md b/docs/API/studio.md
deleted file mode 100644
index 859fa8659..000000000
--- a/docs/API/studio.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Studio
-
-YouTube Studio class (WIP).
-
-## API
-
-* Studio
- * [.setThumbnail(video_id, buffer)](#setthumbnail)
- * [.updateVideoMetadata(video_id, metadata)](#updatemetadata)
- * [.upload(file, metadata)](#upload)
-
-
-### setThumbnail(video_id, buffer)
-
-Uploads a custom thumbnail and sets it for a video.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-| buffer | `Uint8Array` | Thumbnail buffer |
-
-
-### updateVideoMetadata(video_id, metadata)
-
-Updates given video's metadata.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| video_id | `string` | Video id |
-| metadata | `VideoMetadata` | Video metadata |
-
-
-### upload(file, metadata)
-
-Uploads a video to YouTube.
-
-**Returns:** `Promise.`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| file | `BodyInit` | Video file |
-| metadata | `UploadedVideoMetadata` | Video metadata |
\ No newline at end of file
diff --git a/docs/API/tabbed-feed.md b/docs/API/tabbed-feed.md
deleted file mode 100644
index 152e6cf19..000000000
--- a/docs/API/tabbed-feed.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# TabbedFeed
-
-Represents a feed with tabs.
-
-> **Note**
-> This class extends the [Feed](feed.md) class.
-
-## API
-
-* TabbedFeed
- * [.tabs](#tabs)
- * [.getTabByName(title: string)](#gettabbyname)
- * [.getTabByURL(url: string)](#gettabbyurl)
- * [.hasTabWithURL(url: string)](#hastabwithurl)
- * [.title](#title)
-
-
-### tabs
-
-Returns the feed's tabs as an array of strings.
-
-**Returns:** `string[]`
-
-
-### getTabByName(title: string)
-
-Fetches a tab by its title.
-
-**Returns:** `Promise>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| title | `string` | The title of the tab to get |
-
-
-### getTabByURL(url: string)
-
-Fetches a tab by its URL.
-
-**Returns:** `Promise>`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| url | `string` | The URL of the tab to get |
-
-
-### hasTabWithURL(url: string)
-
-Returns whether the feed has a tab with the given URL.
-
-**Returns:** `boolean`
-
-| Param | Type | Description |
-| --- | --- | --- |
-| url | `string` | The URL to check |
-
-
-### title
-
-Returns the currently selected tab's title.
-
-**Returns:** `string | undefined`
\ No newline at end of file
diff --git a/docs/api/README.md b/docs/api/README.md
new file mode 100644
index 000000000..e667692a5
--- /dev/null
+++ b/docs/api/README.md
@@ -0,0 +1,212 @@
+# youtubei.js
+
+## References
+
+### AppendContinuationItemsAction
+
+Re-exports [AppendContinuationItemsAction](namespaces/YTNodes/classes/AppendContinuationItemsAction.md)
+
+***
+
+### CpnSource
+
+Re-exports [CpnSource](namespaces/APIResponseTypes/type-aliases/CpnSource.md)
+
+***
+
+### default
+
+Renames and re-exports [Innertube](classes/Innertube.md)
+
+***
+
+### IBrowseResponse
+
+Re-exports [IBrowseResponse](namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+***
+
+### IGetNotificationsMenuResponse
+
+Re-exports [IGetNotificationsMenuResponse](namespaces/APIResponseTypes/type-aliases/IGetNotificationsMenuResponse.md)
+
+***
+
+### IGetTranscriptResponse
+
+Re-exports [IGetTranscriptResponse](namespaces/APIResponseTypes/type-aliases/IGetTranscriptResponse.md)
+
+***
+
+### IGuideResponse
+
+Re-exports [IGuideResponse](namespaces/APIResponseTypes/type-aliases/IGuideResponse.md)
+
+***
+
+### INextResponse
+
+Re-exports [INextResponse](namespaces/APIResponseTypes/type-aliases/INextResponse.md)
+
+***
+
+### IParsedResponse
+
+Re-exports [IParsedResponse](namespaces/APIResponseTypes/interfaces/IParsedResponse.md)
+
+***
+
+### IPlayabilityStatus
+
+Re-exports [IPlayabilityStatus](namespaces/APIResponseTypes/interfaces/IPlayabilityStatus.md)
+
+***
+
+### IPlaybackTracking
+
+Re-exports [IPlaybackTracking](namespaces/APIResponseTypes/interfaces/IPlaybackTracking.md)
+
+***
+
+### IPlayerConfig
+
+Re-exports [IPlayerConfig](namespaces/APIResponseTypes/interfaces/IPlayerConfig.md)
+
+***
+
+### IPlayerResponse
+
+Re-exports [IPlayerResponse](namespaces/APIResponseTypes/type-aliases/IPlayerResponse.md)
+
+***
+
+### IRawPlayerConfig
+
+Re-exports [IRawPlayerConfig](namespaces/APIResponseTypes/interfaces/IRawPlayerConfig.md)
+
+***
+
+### IRawResponse
+
+Re-exports [IRawResponse](namespaces/APIResponseTypes/interfaces/IRawResponse.md)
+
+***
+
+### IResolveURLResponse
+
+Re-exports [IResolveURLResponse](namespaces/APIResponseTypes/type-aliases/IResolveURLResponse.md)
+
+***
+
+### IResponseContext
+
+Re-exports [IResponseContext](namespaces/APIResponseTypes/interfaces/IResponseContext.md)
+
+***
+
+### ISearchResponse
+
+Re-exports [ISearchResponse](namespaces/APIResponseTypes/type-aliases/ISearchResponse.md)
+
+***
+
+### IServiceTrackingParams
+
+Re-exports [IServiceTrackingParams](namespaces/APIResponseTypes/interfaces/IServiceTrackingParams.md)
+
+***
+
+### IStreamingData
+
+Re-exports [IStreamingData](namespaces/APIResponseTypes/interfaces/IStreamingData.md)
+
+***
+
+### IUpdatedMetadataResponse
+
+Re-exports [IUpdatedMetadataResponse](namespaces/APIResponseTypes/type-aliases/IUpdatedMetadataResponse.md)
+
+***
+
+### RawData
+
+Re-exports [RawData](namespaces/APIResponseTypes/type-aliases/RawData.md)
+
+***
+
+### RawNode
+
+Re-exports [RawNode](namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+## Namespaces
+
+- [APIResponseTypes](namespaces/APIResponseTypes/README.md)
+- [Clients](namespaces/Clients/README.md)
+- [Constants](namespaces/Constants/README.md)
+- [Endpoints](namespaces/Endpoints/README.md)
+- [FormatUtils](namespaces/FormatUtils/README.md)
+- [Generator](namespaces/Generator/README.md)
+- [Helpers](namespaces/Helpers/README.md)
+- [LZW](namespaces/LZW/README.md)
+- [Managers](namespaces/Managers/README.md)
+- [Misc](namespaces/Misc/README.md)
+- [Mixins](namespaces/Mixins/README.md)
+- [Parser](namespaces/Parser/README.md)
+- [ProtoUtils](namespaces/ProtoUtils/README.md)
+- [Types](namespaces/Types/README.md)
+- [Utils](namespaces/Utils/README.md)
+- [YT](namespaces/YT/README.md)
+- [YTKids](namespaces/YTKids/README.md)
+- [YTMusic](namespaces/YTMusic/README.md)
+- [YTNodes](namespaces/YTNodes/README.md)
+- [YTShorts](namespaces/YTShorts/README.md)
+
+## Enumerations
+
+- [ClientType](enumerations/ClientType.md)
+
+## Classes
+
+- [Actions](classes/Actions.md)
+- [Continuation](classes/Continuation.md)
+- [ContinuationCommand](classes/ContinuationCommand.md)
+- [EventEmitter](classes/EventEmitter.md)
+- [GridContinuation](classes/GridContinuation.md)
+- [HTTPClient](classes/HTTPClient.md)
+- [Innertube](classes/Innertube.md)
+- [ItemSectionContinuation](classes/ItemSectionContinuation.md)
+- [LiveChatContinuation](classes/LiveChatContinuation.md)
+- [Log](classes/Log.md)
+- [MusicPlaylistShelfContinuation](classes/MusicPlaylistShelfContinuation.md)
+- [MusicShelfContinuation](classes/MusicShelfContinuation.md)
+- [NavigateAction](classes/NavigateAction.md)
+- [OAuth2](classes/OAuth2.md)
+- [Platform](classes/Platform.md)
+- [Player](classes/Player.md)
+- [PlaylistPanelContinuation](classes/PlaylistPanelContinuation.md)
+- [ReloadContinuationItemsCommand](classes/ReloadContinuationItemsCommand.md)
+- [SectionListContinuation](classes/SectionListContinuation.md)
+- [Session](classes/Session.md)
+- [ShowMiniplayerCommand](classes/ShowMiniplayerCommand.md)
+- [UniversalCache](classes/UniversalCache.md)
+
+## Interfaces
+
+- [ApiResponse](interfaces/ApiResponse.md)
+- [HTTPClientInit](interfaces/HTTPClientInit.md)
+
+## Type Aliases
+
+- [Context](type-aliases/Context.md)
+- [DeviceAndUserCode](type-aliases/DeviceAndUserCode.md)
+- [InnertubeEndpoint](type-aliases/InnertubeEndpoint.md)
+- [OAuth2AuthErrorEventHandler](type-aliases/OAuth2AuthErrorEventHandler.md)
+- [OAuth2AuthEventHandler](type-aliases/OAuth2AuthEventHandler.md)
+- [OAuth2AuthPendingEventHandler](type-aliases/OAuth2AuthPendingEventHandler.md)
+- [OAuth2ClientID](type-aliases/OAuth2ClientID.md)
+- [OAuth2Tokens](type-aliases/OAuth2Tokens.md)
+- [ParsedResponse](type-aliases/ParsedResponse.md)
+- [SessionArgs](type-aliases/SessionArgs.md)
+- [SessionData](type-aliases/SessionData.md)
+- [SessionOptions](type-aliases/SessionOptions.md)
+- [SWSessionData](type-aliases/SWSessionData.md)
diff --git a/docs/api/classes/Actions.md b/docs/api/classes/Actions.md
new file mode 100644
index 000000000..b8ffbcfab
--- /dev/null
+++ b/docs/api/classes/Actions.md
@@ -0,0 +1,131 @@
+[youtubei.js](../README.md) / Actions
+
+# Class: Actions
+
+## Constructors
+
+### new Actions()
+
+> **new Actions**(`session`): [`Actions`](Actions.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](Session.md)
+
+#### Returns
+
+[`Actions`](Actions.md)
+
+#### Defined in
+
+[src/core/Actions.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L34)
+
+## Properties
+
+### session
+
+> **session**: [`Session`](Session.md)
+
+#### Defined in
+
+[src/core/Actions.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L32)
+
+## Methods
+
+### execute()
+
+#### execute(endpoint, args)
+
+> **execute**\<`T`\>(`endpoint`, `args`): `Promise`\<[`ParsedResponse`](../type-aliases/ParsedResponse.md)\<`T`\>\>
+
+Executes an API call.
+
+##### Type Parameters
+
+β’ **T** *extends* `string`
+
+##### Parameters
+
+β’ **endpoint**: `T`
+
+The endpoint to call.
+
+β’ **args**
+
+Call arguments
+
+β’ **args.parse**: `true`
+
+β’ **args.protobuf?**: `false`
+
+β’ **args.serialized\_data?**: `any`
+
+##### Returns
+
+`Promise`\<[`ParsedResponse`](../type-aliases/ParsedResponse.md)\<`T`\>\>
+
+##### Defined in
+
+[src/core/Actions.ts:78](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L78)
+
+#### execute(endpoint, args)
+
+> **execute**\<`T`\>(`endpoint`, `args`?): `Promise`\<[`ApiResponse`](../interfaces/ApiResponse.md)\>
+
+##### Type Parameters
+
+β’ **T** *extends* `string`
+
+##### Parameters
+
+β’ **endpoint**: `T`
+
+β’ **args?**
+
+β’ **args.parse?**: `false`
+
+β’ **args.protobuf?**: `true`
+
+β’ **args.serialized\_data?**: `any`
+
+##### Returns
+
+`Promise`\<[`ApiResponse`](../interfaces/ApiResponse.md)\>
+
+##### Defined in
+
+[src/core/Actions.ts:79](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L79)
+
+***
+
+### stats()
+
+> **stats**(`url`, `client`, `params`): `Promise`\<`Response`\>
+
+Makes calls to the playback tracking API.
+
+#### Parameters
+
+β’ **url**: `string`
+
+The URL to call.
+
+β’ **client**
+
+The client to use.
+
+β’ **client.client\_name**: `string`
+
+β’ **client.client\_version**: `string`
+
+β’ **params**
+
+Call parameters.
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Defined in
+
+[src/core/Actions.ts:56](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L56)
diff --git a/docs/api/classes/Continuation.md b/docs/api/classes/Continuation.md
new file mode 100644
index 000000000..5c6ac6374
--- /dev/null
+++ b/docs/api/classes/Continuation.md
@@ -0,0 +1,233 @@
+[youtubei.js](../README.md) / Continuation
+
+# Class: Continuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new Continuation()
+
+> **new Continuation**(`data`): [`Continuation`](Continuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Continuation`](Continuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:147](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L147)
+
+## Properties
+
+### continuation\_type
+
+> **continuation\_type**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:142](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L142)
+
+***
+
+### time\_until\_last\_message\_ms?
+
+> `optional` **time\_until\_last\_message\_ms**: `number`
+
+#### Defined in
+
+[src/parser/continuations.ts:144](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L144)
+
+***
+
+### timeout\_ms?
+
+> `optional` **timeout\_ms**: `number`
+
+#### Defined in
+
+[src/parser/continuations.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L143)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:145](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L145)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"continuation"` = `'continuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:140](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L140)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Continuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Continuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/ContinuationCommand.md b/docs/api/classes/ContinuationCommand.md
new file mode 100644
index 000000000..7093d555d
--- /dev/null
+++ b/docs/api/classes/ContinuationCommand.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / ContinuationCommand
+
+# Class: ContinuationCommand
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ContinuationCommand()
+
+> **new ContinuationCommand**(`data`): [`ContinuationCommand`](ContinuationCommand.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ContinuationCommand`](ContinuationCommand.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L220)
+
+## Properties
+
+### request
+
+> **request**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:217](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L217)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:218](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L218)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"ContinuationCommand"` = `'ContinuationCommand'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:215](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L215)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ContinuationCommand & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ContinuationCommand & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/EventEmitter.md b/docs/api/classes/EventEmitter.md
new file mode 100644
index 000000000..c035d1709
--- /dev/null
+++ b/docs/api/classes/EventEmitter.md
@@ -0,0 +1,208 @@
+[youtubei.js](../README.md) / EventEmitter
+
+# Class: EventEmitter
+
+## Extends
+
+- `EventTarget`
+
+## Extended by
+
+- [`Session`](Session.md)
+- [`LiveChat`](../namespaces/YT/classes/LiveChat.md)
+
+## Constructors
+
+### new EventEmitter()
+
+> **new EventEmitter**(): [`EventEmitter`](EventEmitter.md)
+
+#### Returns
+
+[`EventEmitter`](EventEmitter.md)
+
+#### Overrides
+
+`EventTarget.constructor`
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L6)
+
+## Methods
+
+### addEventListener()
+
+> **addEventListener**(`type`, `callback`, `options`?): `void`
+
+Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.
+
+The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.
+
+When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.
+
+When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in Β§ 2.8 Observing event listeners.
+
+When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.
+
+If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.
+
+The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **callback**: `null` \| `EventListenerOrEventListenerObject`
+
+β’ **options?**: `boolean` \| `AddEventListenerOptions`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventTarget.addEventListener`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8256
+
+***
+
+### dispatchEvent()
+
+> **dispatchEvent**(`event`): `boolean`
+
+Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
+
+#### Parameters
+
+β’ **event**: `Event`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventTarget.dispatchEvent`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8262
+
+***
+
+### emit()
+
+> **emit**(`type`, ...`args`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ ...**args**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L10)
+
+***
+
+### off()
+
+> **off**(`type`, `listener`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **listener**
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L40)
+
+***
+
+### on()
+
+> **on**(`type`, `listener`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **listener**
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L15)
+
+***
+
+### once()
+
+> **once**(`type`, `listener`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **listener**
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L27)
+
+***
+
+### removeEventListener()
+
+> **removeEventListener**(`type`, `callback`, `options`?): `void`
+
+Removes the event listener in target's event listener list with the same type, callback, and options.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **callback**: `null` \| `EventListenerOrEventListenerObject`
+
+β’ **options?**: `boolean` \| `EventListenerOptions`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventTarget.removeEventListener`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8268
diff --git a/docs/api/classes/GridContinuation.md b/docs/api/classes/GridContinuation.md
new file mode 100644
index 000000000..dbc3da0a0
--- /dev/null
+++ b/docs/api/classes/GridContinuation.md
@@ -0,0 +1,227 @@
+[youtubei.js](../README.md) / GridContinuation
+
+# Class: GridContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new GridContinuation()
+
+> **new GridContinuation**(`data`): [`GridContinuation`](GridContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`GridContinuation`](GridContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:114](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L114)
+
+## Properties
+
+### continuation
+
+> **continuation**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L111)
+
+***
+
+### items
+
+> **items**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:112](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L112)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"gridContinuation"` = `'gridContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:109](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L109)
+
+## Accessors
+
+### contents
+
+> `get` **contents**(): `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Returns
+
+`null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:120](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L120)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is GridContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is GridContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/HTTPClient.md b/docs/api/classes/HTTPClient.md
new file mode 100644
index 000000000..05b3325b4
--- /dev/null
+++ b/docs/api/classes/HTTPClient.md
@@ -0,0 +1,71 @@
+[youtubei.js](../README.md) / HTTPClient
+
+# Class: HTTPClient
+
+## Constructors
+
+### new HTTPClient()
+
+> **new HTTPClient**(`session`, `cookie`?, `fetch`?): [`HTTPClient`](HTTPClient.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](Session.md)
+
+β’ **cookie?**: `string`
+
+β’ **fetch?**
+
+#### Returns
+
+[`HTTPClient`](HTTPClient.md)
+
+#### Defined in
+
+[src/utils/HTTPClient.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/HTTPClient.ts#L23)
+
+## Accessors
+
+### fetch\_function
+
+> `get` **fetch\_function**(): (`input`, `init`?) => `Promise`\<`Response`\>
+
+#### Returns
+
+`Function`
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch)
+
+##### Parameters
+
+β’ **input**: `URL` \| `RequestInfo`
+
+β’ **init?**: `RequestInit`
+
+##### Returns
+
+`Promise`\<`Response`\>
+
+#### Defined in
+
+[src/utils/HTTPClient.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/HTTPClient.ts#L29)
+
+## Methods
+
+### fetch()
+
+> **fetch**(`input`, `init`?): `Promise`\<`Response`\>
+
+#### Parameters
+
+β’ **input**: `string` \| `URL` \| `Request`
+
+β’ **init?**: `RequestInit` & [`HTTPClientInit`](../interfaces/HTTPClientInit.md)
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Defined in
+
+[src/utils/HTTPClient.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/HTTPClient.ts#L33)
diff --git a/docs/api/classes/Innertube.md b/docs/api/classes/Innertube.md
new file mode 100644
index 000000000..64fcbb5bf
--- /dev/null
+++ b/docs/api/classes/Innertube.md
@@ -0,0 +1,619 @@
+[youtubei.js](../README.md) / Innertube
+
+# Class: Innertube
+
+Provides access to various services and modules in the YouTube API.
+
+## Constructors
+
+### new Innertube()
+
+> **new Innertube**(`session`): [`Innertube`](Innertube.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](Session.md)
+
+#### Returns
+
+[`Innertube`](Innertube.md)
+
+#### Defined in
+
+[src/Innertube.ts:59](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L59)
+
+## Accessors
+
+### account
+
+> `get` **account**(): [`AccountManager`](../namespaces/Managers/classes/AccountManager.md)
+
+An interface for managing and retrieving account information.
+
+#### Returns
+
+[`AccountManager`](../namespaces/Managers/classes/AccountManager.md)
+
+#### Defined in
+
+[src/Innertube.ts:478](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L478)
+
+***
+
+### actions
+
+> `get` **actions**(): [`Actions`](Actions.md)
+
+An internal class used to dispatch requests.
+
+#### Returns
+
+[`Actions`](Actions.md)
+
+#### Defined in
+
+[src/Innertube.ts:499](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L499)
+
+***
+
+### interact
+
+> `get` **interact**(): [`InteractionManager`](../namespaces/Managers/classes/InteractionManager.md)
+
+An interface for directly interacting with certain YouTube features.
+
+#### Returns
+
+[`InteractionManager`](../namespaces/Managers/classes/InteractionManager.md)
+
+#### Defined in
+
+[src/Innertube.ts:492](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L492)
+
+***
+
+### kids
+
+> `get` **kids**(): [`Kids`](../namespaces/Clients/classes/Kids.md)
+
+An interface for interacting with YouTube Kids.
+
+#### Returns
+
+[`Kids`](../namespaces/Clients/classes/Kids.md)
+
+#### Defined in
+
+[src/Innertube.ts:471](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L471)
+
+***
+
+### music
+
+> `get` **music**(): [`Music`](../namespaces/Clients/classes/Music.md)
+
+An interface for interacting with YouTube Music.
+
+#### Returns
+
+[`Music`](../namespaces/Clients/classes/Music.md)
+
+#### Defined in
+
+[src/Innertube.ts:457](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L457)
+
+***
+
+### playlist
+
+> `get` **playlist**(): [`PlaylistManager`](../namespaces/Managers/classes/PlaylistManager.md)
+
+An interface for managing playlists.
+
+#### Returns
+
+[`PlaylistManager`](../namespaces/Managers/classes/PlaylistManager.md)
+
+#### Defined in
+
+[src/Innertube.ts:485](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L485)
+
+***
+
+### session
+
+> `get` **session**(): [`Session`](Session.md)
+
+The session used by this instance.
+
+#### Returns
+
+[`Session`](Session.md)
+
+#### Defined in
+
+[src/Innertube.ts:506](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L506)
+
+***
+
+### studio
+
+> `get` **studio**(): [`Studio`](../namespaces/Clients/classes/Studio.md)
+
+An interface for interacting with YouTube Studio.
+
+#### Returns
+
+[`Studio`](../namespaces/Clients/classes/Studio.md)
+
+#### Defined in
+
+[src/Innertube.ts:464](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L464)
+
+## Methods
+
+### call()
+
+#### call(endpoint, args)
+
+> **call**\<`T`\>(`endpoint`, `args`): `Promise`\<`T`\>
+
+Utility method to call an endpoint without having to use [Actions](Actions.md).
+
+##### Type Parameters
+
+β’ **T** *extends* [`IParsedResponse`](../namespaces/APIResponseTypes/interfaces/IParsedResponse.md)
+
+##### Parameters
+
+β’ **endpoint**: [`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)
+
+The endpoint to call.
+
+β’ **args**
+
+Call arguments.
+
+β’ **args.parse**: `true`
+
+##### Returns
+
+`Promise`\<`T`\>
+
+##### Defined in
+
+[src/Innertube.ts:448](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L448)
+
+#### call(endpoint, args)
+
+> **call**(`endpoint`, `args`?): `Promise`\<[`ApiResponse`](../interfaces/ApiResponse.md)\>
+
+##### Parameters
+
+β’ **endpoint**: [`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)
+
+β’ **args?**
+
+β’ **args.parse?**: `false`
+
+##### Returns
+
+`Promise`\<[`ApiResponse`](../interfaces/ApiResponse.md)\>
+
+##### Defined in
+
+[src/Innertube.ts:449](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L449)
+
+***
+
+### download()
+
+> **download**(`video_id`, `options`?): `Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+Downloads a given video. If all you need the direct download link, see [getStreamingData](Innertube.md#getstreamingdata).
+If you wish to retrieve the video info too, have a look at [getBasicInfo](Innertube.md#getbasicinfo) or [getInfo](Innertube.md#getinfo).
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video id.
+
+β’ **options?**: [`DownloadOptions`](../namespaces/Types/interfaces/DownloadOptions.md)
+
+Download options.
+
+#### Returns
+
+`Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+#### Defined in
+
+[src/Innertube.ts:423](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L423)
+
+***
+
+### getBasicInfo()
+
+> **getBasicInfo**(`video_id`, `client`?): `Promise`\<[`VideoInfo`](../namespaces/YT/classes/VideoInfo.md)\>
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+β’ **client?**: [`InnerTubeClient`](../namespaces/Types/type-aliases/InnerTubeClient.md)
+
+#### Returns
+
+`Promise`\<[`VideoInfo`](../namespaces/YT/classes/VideoInfo.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:107](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L107)
+
+***
+
+### getChannel()
+
+> **getChannel**(`id`): `Promise`\<[`Channel`](../namespaces/YT/classes/Channel.md)\>
+
+#### Parameters
+
+β’ **id**: `string`
+
+#### Returns
+
+`Promise`\<[`Channel`](../namespaces/YT/classes/Channel.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:331](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L331)
+
+***
+
+### getChannelsFeed()
+
+> **getChannelsFeed**(): `Promise`\<[`Feed`](../namespaces/Mixins/classes/Feed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Returns
+
+`Promise`\<[`Feed`](../namespaces/Mixins/classes/Feed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Defined in
+
+[src/Innertube.ts:324](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L324)
+
+***
+
+### getComments()
+
+> **getComments**(`video_id`, `sort_by`?, `comment_id`?): `Promise`\<[`Comments`](../namespaces/YT/classes/Comments.md)\>
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+β’ **sort\_by?**: `"TOP_COMMENTS"` \| `"NEWEST_FIRST"`
+
+β’ **comment\_id?**: `string`
+
+#### Returns
+
+`Promise`\<[`Comments`](../namespaces/YT/classes/Comments.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:250](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L250)
+
+***
+
+### getGuide()
+
+> **getGuide**(): `Promise`\<[`Guide`](../namespaces/YT/classes/Guide.md)\>
+
+Retrieves YouTube's content guide.
+
+#### Returns
+
+`Promise`\<[`Guide`](../namespaces/YT/classes/Guide.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:291](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L291)
+
+***
+
+### getHashtag()
+
+> **getHashtag**(`hashtag`): `Promise`\<[`HashtagFeed`](../namespaces/YT/classes/HashtagFeed.md)\>
+
+#### Parameters
+
+β’ **hashtag**: `string`
+
+#### Returns
+
+`Promise`\<[`HashtagFeed`](../namespaces/YT/classes/HashtagFeed.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:378](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L378)
+
+***
+
+### getHistory()
+
+> **getHistory**(): `Promise`\<[`History`](../namespaces/YT/classes/History.md)\>
+
+#### Returns
+
+`Promise`\<[`History`](../namespaces/YT/classes/History.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:303](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L303)
+
+***
+
+### getHomeFeed()
+
+> **getHomeFeed**(): `Promise`\<[`HomeFeed`](../namespaces/YT/classes/HomeFeed.md)\>
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](../namespaces/YT/classes/HomeFeed.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:281](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L281)
+
+***
+
+### getInfo()
+
+> **getInfo**(`target`, `client`?): `Promise`\<[`VideoInfo`](../namespaces/YT/classes/VideoInfo.md)\>
+
+#### Parameters
+
+β’ **target**: `string` \| [`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)
+
+β’ **client?**: [`InnerTubeClient`](../namespaces/Types/type-aliases/InnerTubeClient.md)
+
+#### Returns
+
+`Promise`\<[`VideoInfo`](../namespaces/YT/classes/VideoInfo.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:67](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L67)
+
+***
+
+### getLibrary()
+
+> **getLibrary**(): `Promise`\<[`Library`](../namespaces/YT/classes/Library.md)\>
+
+#### Returns
+
+`Promise`\<[`Library`](../namespaces/YT/classes/Library.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:296](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L296)
+
+***
+
+### getNotifications()
+
+> **getNotifications**(): `Promise`\<[`NotificationsMenu`](../namespaces/YT/classes/NotificationsMenu.md)\>
+
+#### Returns
+
+`Promise`\<[`NotificationsMenu`](../namespaces/YT/classes/NotificationsMenu.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:339](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L339)
+
+***
+
+### getPlaylist()
+
+> **getPlaylist**(`id`): `Promise`\<[`Playlist`](../namespaces/YT/classes/Playlist.md)\>
+
+#### Parameters
+
+β’ **id**: `string`
+
+#### Returns
+
+`Promise`\<[`Playlist`](../namespaces/YT/classes/Playlist.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:364](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L364)
+
+***
+
+### getPlaylists()
+
+> **getPlaylists**(): `Promise`\<[`Feed`](../namespaces/Mixins/classes/Feed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Retrieves the user's playlists.
+
+#### Returns
+
+`Promise`\<[`Feed`](../namespaces/Mixins/classes/Feed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Defined in
+
+[src/Innertube.ts:357](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L357)
+
+***
+
+### getSearchSuggestions()
+
+> **getSearchSuggestions**(`query`): `Promise`\<`string`[]\>
+
+#### Parameters
+
+β’ **query**: `string`
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+#### Defined in
+
+[src/Innertube.ts:229](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L229)
+
+***
+
+### getShortsVideoInfo()
+
+> **getShortsVideoInfo**(`video_id`, `client`?): `Promise`\<[`ShortFormVideoInfo`](../namespaces/YTShorts/classes/ShortFormVideoInfo.md)\>
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+β’ **client?**: [`InnerTubeClient`](../namespaces/Types/type-aliases/InnerTubeClient.md)
+
+#### Returns
+
+`Promise`\<[`ShortFormVideoInfo`](../namespaces/YTShorts/classes/ShortFormVideoInfo.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:124](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L124)
+
+***
+
+### getStreamingData()
+
+> **getStreamingData**(`video_id`, `options`): `Promise`\<[`Format`](../namespaces/Misc/classes/Format.md)\>
+
+An alternative to [download](Innertube.md#download).
+Returns deciphered streaming data.
+
+If you wish to retrieve the video info too, have a look at [getBasicInfo](Innertube.md#getbasicinfo) or [getInfo](Innertube.md#getinfo).
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video id.
+
+β’ **options**: [`FormatOptions`](../namespaces/Types/interfaces/FormatOptions.md) = `{}`
+
+Format options.
+
+#### Returns
+
+`Promise`\<[`Format`](../namespaces/Misc/classes/Format.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:408](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L408)
+
+***
+
+### getSubscriptionsFeed()
+
+> **getSubscriptionsFeed**(): `Promise`\<[`Feed`](../namespaces/Mixins/classes/Feed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Returns
+
+`Promise`\<[`Feed`](../namespaces/Mixins/classes/Feed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Defined in
+
+[src/Innertube.ts:317](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L317)
+
+***
+
+### getTrending()
+
+> **getTrending**(): `Promise`\<[`TabbedFeed`](../namespaces/Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Returns
+
+`Promise`\<[`TabbedFeed`](../namespaces/Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Defined in
+
+[src/Innertube.ts:310](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L310)
+
+***
+
+### getUnseenNotificationsCount()
+
+> **getUnseenNotificationsCount**(): `Promise`\<`number`\>
+
+#### Returns
+
+`Promise`\<`number`\>
+
+#### Defined in
+
+[src/Innertube.ts:348](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L348)
+
+***
+
+### resolveURL()
+
+> **resolveURL**(`url`): `Promise`\<[`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)\>
+
+Resolves the given URL.
+
+#### Parameters
+
+β’ **url**: `string`
+
+The URL.
+
+#### Returns
+
+`Promise`\<[`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:432](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L432)
+
+***
+
+### search()
+
+> **search**(`query`, `filters`): `Promise`\<[`Search`](../namespaces/YT/classes/Search.md)\>
+
+#### Parameters
+
+β’ **query**: `string`
+
+β’ **filters**: [`SearchFilters`](../namespaces/Types/type-aliases/SearchFilters.md) = `{}`
+
+#### Returns
+
+`Promise`\<[`Search`](../namespaces/YT/classes/Search.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:155](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L155)
+
+***
+
+### create()
+
+> `static` **create**(`config`): `Promise`\<[`Innertube`](Innertube.md)\>
+
+#### Parameters
+
+β’ **config**: [`SessionOptions`](../type-aliases/SessionOptions.md) = `{}`
+
+#### Returns
+
+`Promise`\<[`Innertube`](Innertube.md)\>
+
+#### Defined in
+
+[src/Innertube.ts:63](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/Innertube.ts#L63)
diff --git a/docs/api/classes/ItemSectionContinuation.md b/docs/api/classes/ItemSectionContinuation.md
new file mode 100644
index 000000000..c8aec9cea
--- /dev/null
+++ b/docs/api/classes/ItemSectionContinuation.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / ItemSectionContinuation
+
+# Class: ItemSectionContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ItemSectionContinuation()
+
+> **new ItemSectionContinuation**(`data`): [`ItemSectionContinuation`](ItemSectionContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ItemSectionContinuation`](ItemSectionContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L15)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L12)
+
+***
+
+### continuation?
+
+> `optional` **continuation**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L13)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"itemSectionContinuation"` = `'itemSectionContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L10)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ItemSectionContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ItemSectionContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/LiveChatContinuation.md b/docs/api/classes/LiveChatContinuation.md
new file mode 100644
index 000000000..8ebdbb524
--- /dev/null
+++ b/docs/api/classes/LiveChatContinuation.md
@@ -0,0 +1,283 @@
+[youtubei.js](../README.md) / LiveChatContinuation
+
+# Class: LiveChatContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new LiveChatContinuation()
+
+> **new LiveChatContinuation**(`data`): [`LiveChatContinuation`](LiveChatContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`LiveChatContinuation`](LiveChatContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:174](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L174)
+
+## Properties
+
+### action\_panel
+
+> **action\_panel**: `null` \| [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:160](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L160)
+
+***
+
+### actions
+
+> **actions**: [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:159](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L159)
+
+***
+
+### continuation
+
+> **continuation**: [`Continuation`](Continuation.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:171](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L171)
+
+***
+
+### emojis
+
+> **emojis**: `object`[]
+
+#### Defined in
+
+[src/parser/continuations.ts:165](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L165)
+
+***
+
+### header
+
+> **header**: `null` \| [`LiveChatHeader`](../namespaces/YTNodes/classes/LiveChatHeader.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:162](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L162)
+
+***
+
+### item\_list
+
+> **item\_list**: `null` \| [`LiveChatItemList`](../namespaces/YTNodes/classes/LiveChatItemList.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L161)
+
+***
+
+### participants\_list
+
+> **participants\_list**: `null` \| [`LiveChatParticipantsList`](../namespaces/YTNodes/classes/LiveChatParticipantsList.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:163](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L163)
+
+***
+
+### popout\_message
+
+> **popout\_message**: `null` \| [`Message`](../namespaces/YTNodes/classes/Message.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:164](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L164)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### viewer\_name
+
+> **viewer\_name**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:172](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L172)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"liveChatContinuation"` = `'liveChatContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L157)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is LiveChatContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is LiveChatContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/Log.md b/docs/api/classes/Log.md
new file mode 100644
index 000000000..c5c6533d0
--- /dev/null
+++ b/docs/api/classes/Log.md
@@ -0,0 +1,161 @@
+[youtubei.js](../README.md) / Log
+
+# Class: Log
+
+## Constructors
+
+### new Log()
+
+> **new Log**(): [`Log`](Log.md)
+
+#### Returns
+
+[`Log`](Log.md)
+
+## Properties
+
+### Level
+
+> `static` **Level**: `object`
+
+#### DEBUG
+
+> **DEBUG**: `number` = `4`
+
+#### ERROR
+
+> **ERROR**: `number` = `1`
+
+#### INFO
+
+> **INFO**: `number` = `3`
+
+#### NONE
+
+> **NONE**: `number` = `0`
+
+#### WARNING
+
+> **WARNING**: `number` = `2`
+
+#### Defined in
+
+[src/utils/Log.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L4)
+
+## Methods
+
+### debug()
+
+> `static` **debug**(`tag`?, ...`args`?): `void`
+
+#### Parameters
+
+β’ **tag?**: `string`
+
+β’ ...**args?**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Log.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L32)
+
+***
+
+### error()
+
+> `static` **error**(`tag`?, ...`args`?): `void`
+
+#### Parameters
+
+β’ **tag?**: `string`
+
+β’ ...**args?**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Log.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L30)
+
+***
+
+### info()
+
+> `static` **info**(`tag`?, ...`args`?): `void`
+
+#### Parameters
+
+β’ **tag?**: `string`
+
+β’ ...**args?**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Log.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L31)
+
+***
+
+### setLevel()
+
+> `static` **setLevel**(...`args`): `void`
+
+#### Parameters
+
+β’ ...**args**: `number`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Log.ts:46](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L46)
+
+***
+
+### warn()
+
+> `static` **warn**(`tag`?, ...`args`?): `void`
+
+#### Parameters
+
+β’ **tag?**: `string`
+
+β’ ...**args?**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Log.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L29)
+
+***
+
+### warnOnce()
+
+> `static` **warnOnce**(`id`, ...`args`): `void`
+
+#### Parameters
+
+β’ **id**: `string`
+
+β’ ...**args**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Log.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Log.ts#L22)
diff --git a/docs/api/classes/MusicPlaylistShelfContinuation.md b/docs/api/classes/MusicPlaylistShelfContinuation.md
new file mode 100644
index 000000000..fd9fe6db3
--- /dev/null
+++ b/docs/api/classes/MusicPlaylistShelfContinuation.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / MusicPlaylistShelfContinuation
+
+# Class: MusicPlaylistShelfContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new MusicPlaylistShelfContinuation()
+
+> **new MusicPlaylistShelfContinuation**(`data`): [`MusicPlaylistShelfContinuation`](MusicPlaylistShelfContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`MusicPlaylistShelfContinuation`](MusicPlaylistShelfContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:86](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L86)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L84)
+
+***
+
+### continuation
+
+> **continuation**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:83](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L83)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"musicPlaylistShelfContinuation"` = `'musicPlaylistShelfContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:81](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L81)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is MusicPlaylistShelfContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is MusicPlaylistShelfContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/MusicShelfContinuation.md b/docs/api/classes/MusicShelfContinuation.md
new file mode 100644
index 000000000..57fd12c66
--- /dev/null
+++ b/docs/api/classes/MusicShelfContinuation.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / MusicShelfContinuation
+
+# Class: MusicShelfContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new MusicShelfContinuation()
+
+> **new MusicShelfContinuation**(`data`): [`MusicShelfContinuation`](MusicShelfContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`MusicShelfContinuation`](MusicShelfContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:99](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L99)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:97](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L97)
+
+***
+
+### continuation
+
+> **continuation**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:96](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L96)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"musicShelfContinuation"` = `'musicShelfContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:94](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L94)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is MusicShelfContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is MusicShelfContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/NavigateAction.md b/docs/api/classes/NavigateAction.md
new file mode 100644
index 000000000..0070d750c
--- /dev/null
+++ b/docs/api/classes/NavigateAction.md
@@ -0,0 +1,203 @@
+[youtubei.js](../README.md) / NavigateAction
+
+# Class: NavigateAction
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new NavigateAction()
+
+> **new NavigateAction**(`data`): [`NavigateAction`](NavigateAction.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`NavigateAction`](NavigateAction.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L29)
+
+## Properties
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L27)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"navigateAction"` = `'navigateAction'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L25)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is NavigateAction & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is NavigateAction & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/OAuth2.md b/docs/api/classes/OAuth2.md
new file mode 100644
index 000000000..8bbf9b16e
--- /dev/null
+++ b/docs/api/classes/OAuth2.md
@@ -0,0 +1,251 @@
+[youtubei.js](../README.md) / OAuth2
+
+# Class: OAuth2
+
+## Constructors
+
+### new OAuth2()
+
+> **new OAuth2**(`session`): [`OAuth2`](OAuth2.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](Session.md)
+
+#### Returns
+
+[`OAuth2`](OAuth2.md)
+
+#### Defined in
+
+[src/core/OAuth2.ts:46](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L46)
+
+## Properties
+
+### AUTH\_SERVER\_CODE\_URL
+
+> **AUTH\_SERVER\_CODE\_URL**: `URL`
+
+#### Defined in
+
+[src/core/OAuth2.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L39)
+
+***
+
+### AUTH\_SERVER\_REVOKE\_TOKEN\_URL
+
+> **AUTH\_SERVER\_REVOKE\_TOKEN\_URL**: `URL`
+
+#### Defined in
+
+[src/core/OAuth2.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L41)
+
+***
+
+### AUTH\_SERVER\_TOKEN\_URL
+
+> **AUTH\_SERVER\_TOKEN\_URL**: `URL`
+
+#### Defined in
+
+[src/core/OAuth2.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L40)
+
+***
+
+### client\_id
+
+> **client\_id**: `undefined` \| [`OAuth2ClientID`](../type-aliases/OAuth2ClientID.md)
+
+#### Defined in
+
+[src/core/OAuth2.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L43)
+
+***
+
+### oauth2\_tokens
+
+> **oauth2\_tokens**: `undefined` \| [`OAuth2Tokens`](../type-aliases/OAuth2Tokens.md)
+
+#### Defined in
+
+[src/core/OAuth2.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L44)
+
+***
+
+### YTTV\_URL
+
+> **YTTV\_URL**: `URL`
+
+#### Defined in
+
+[src/core/OAuth2.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L38)
+
+## Methods
+
+### cacheCredentials()
+
+> **cacheCredentials**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:105](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L105)
+
+***
+
+### getClientID()
+
+> **getClientID**(): `Promise`\<[`OAuth2ClientID`](../type-aliases/OAuth2ClientID.md)\>
+
+#### Returns
+
+`Promise`\<[`OAuth2ClientID`](../type-aliases/OAuth2ClientID.md)\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:268](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L268)
+
+***
+
+### getDeviceAndUserCode()
+
+> **getDeviceAndUserCode**(): `Promise`\<[`DeviceAndUserCode`](../type-aliases/DeviceAndUserCode.md)\>
+
+#### Returns
+
+`Promise`\<[`DeviceAndUserCode`](../type-aliases/DeviceAndUserCode.md)\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:236](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L236)
+
+***
+
+### init()
+
+> **init**(`tokens`?): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **tokens?**: [`OAuth2Tokens`](../type-aliases/OAuth2Tokens.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:54](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L54)
+
+***
+
+### pollForAccessToken()
+
+> **pollForAccessToken**(`device_and_user_code`): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **device\_and\_user\_code**: [`DeviceAndUserCode`](../type-aliases/DeviceAndUserCode.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:130](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L130)
+
+***
+
+### refreshAccessToken()
+
+> **refreshAccessToken**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:197](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L197)
+
+***
+
+### removeCache()
+
+> **removeCache**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L126)
+
+***
+
+### revokeCredentials()
+
+> **revokeCredentials**(): `Promise`\<`undefined` \| `Response`\>
+
+#### Returns
+
+`Promise`\<`undefined` \| `Response`\>
+
+#### Defined in
+
+[src/core/OAuth2.ts:185](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L185)
+
+***
+
+### setTokens()
+
+> **setTokens**(`tokens`): `void`
+
+#### Parameters
+
+β’ **tokens**: [`OAuth2Tokens`](../type-aliases/OAuth2Tokens.md)
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/OAuth2.ts:85](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L85)
+
+***
+
+### shouldRefreshToken()
+
+> **shouldRefreshToken**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/OAuth2.ts:313](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L313)
+
+***
+
+### validateTokens()
+
+> **validateTokens**(`tokens`): `boolean`
+
+#### Parameters
+
+β’ **tokens**: [`OAuth2Tokens`](../type-aliases/OAuth2Tokens.md)
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/OAuth2.ts:319](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/OAuth2.ts#L319)
diff --git a/docs/api/classes/Platform.md b/docs/api/classes/Platform.md
new file mode 100644
index 000000000..e135872fe
--- /dev/null
+++ b/docs/api/classes/Platform.md
@@ -0,0 +1,45 @@
+[youtubei.js](../README.md) / Platform
+
+# Class: Platform
+
+## Constructors
+
+### new Platform()
+
+> **new Platform**(): [`Platform`](Platform.md)
+
+#### Returns
+
+[`Platform`](Platform.md)
+
+## Accessors
+
+### shim
+
+> `get` `static` **shim**(): [`PlatformShim`](../namespaces/Types/interfaces/PlatformShim.md)
+
+#### Returns
+
+[`PlatformShim`](../namespaces/Types/interfaces/PlatformShim.md)
+
+#### Defined in
+
+[src/utils/Utils.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L18)
+
+## Methods
+
+### load()
+
+> `static` **load**(`platform`): `void`
+
+#### Parameters
+
+β’ **platform**: [`PlatformShim`](../namespaces/Types/interfaces/PlatformShim.md)
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/utils/Utils.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L15)
diff --git a/docs/api/classes/Player.md b/docs/api/classes/Player.md
new file mode 100644
index 000000000..6ee221878
--- /dev/null
+++ b/docs/api/classes/Player.md
@@ -0,0 +1,271 @@
+[youtubei.js](../README.md) / Player
+
+# Class: Player
+
+Represents YouTube's player script. This is required to decipher signatures.
+
+## Constructors
+
+### new Player()
+
+> **new Player**(`player_id`, `signature_timestamp`, `sig_sc`?, `nsig_sc`?): [`Player`](Player.md)
+
+#### Parameters
+
+β’ **player\_id**: `string`
+
+β’ **signature\_timestamp**: `number`
+
+β’ **sig\_sc?**: `string`
+
+β’ **nsig\_sc?**: `string`
+
+#### Returns
+
+[`Player`](Player.md)
+
+#### Defined in
+
+[src/core/Player.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L17)
+
+## Properties
+
+### nsig\_sc?
+
+> `optional` **nsig\_sc**: `string`
+
+#### Defined in
+
+[src/core/Player.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L13)
+
+***
+
+### player\_id
+
+> **player\_id**: `string`
+
+#### Defined in
+
+[src/core/Player.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L11)
+
+***
+
+### po\_token?
+
+> `optional` **po\_token**: `string`
+
+#### Defined in
+
+[src/core/Player.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L15)
+
+***
+
+### sig\_sc?
+
+> `optional` **sig\_sc**: `string`
+
+#### Defined in
+
+[src/core/Player.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L14)
+
+***
+
+### sts
+
+> **sts**: `number`
+
+#### Defined in
+
+[src/core/Player.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L12)
+
+## Accessors
+
+### url
+
+> `get` **url**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/Player.ts:244](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L244)
+
+***
+
+### LIBRARY\_VERSION
+
+> `get` `static` **LIBRARY\_VERSION**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Player.ts:248](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L248)
+
+## Methods
+
+### cache()
+
+> **cache**(`cache`?): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **cache?**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/Player.ts:200](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L200)
+
+***
+
+### decipher()
+
+> **decipher**(`url`?, `signature_cipher`?, `cipher`?, `this_response_nsig_cache`?): `string`
+
+#### Parameters
+
+β’ **url?**: `string`
+
+β’ **signature\_cipher?**: `string`
+
+β’ **cipher?**: `string`
+
+β’ **this\_response\_nsig\_cache?**: `Map`\<`string`, `string`\>
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/Player.ts:78](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L78)
+
+***
+
+### create()
+
+> `static` **create**(`cache`, `fetch`, `po_token`?): `Promise`\<[`Player`](Player.md)\>
+
+#### Parameters
+
+β’ **cache**: `undefined` \| [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+β’ **fetch** = `Platform.shim.fetch`
+
+β’ **po\_token?**: `string`
+
+#### Returns
+
+`Promise`\<[`Player`](Player.md)\>
+
+#### Defined in
+
+[src/core/Player.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L24)
+
+***
+
+### extractNSigSourceCode()
+
+> `static` **extractNSigSourceCode**(`data`): `undefined` \| `string`
+
+#### Parameters
+
+β’ **data**: `string`
+
+#### Returns
+
+`undefined` \| `string`
+
+#### Defined in
+
+[src/core/Player.ts:237](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L237)
+
+***
+
+### extractSigSourceCode()
+
+> `static` **extractSigSourceCode**(`data`): `string`
+
+#### Parameters
+
+β’ **data**: `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/Player.ts:226](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L226)
+
+***
+
+### extractSigTimestamp()
+
+> `static` **extractSigTimestamp**(`data`): `number`
+
+#### Parameters
+
+β’ **data**: `string`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Player.ts:222](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L222)
+
+***
+
+### fromCache()
+
+> `static` **fromCache**(`cache`, `player_id`): `Promise`\<`null` \| [`Player`](Player.md)\>
+
+#### Parameters
+
+β’ **cache**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+β’ **player\_id**: `string`
+
+#### Returns
+
+`Promise`\<`null` \| [`Player`](Player.md)\>
+
+#### Defined in
+
+[src/core/Player.ts:170](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L170)
+
+***
+
+### fromSource()
+
+> `static` **fromSource**(`player_id`, `sig_timestamp`, `cache`?, `sig_sc`?, `nsig_sc`?): `Promise`\<[`Player`](Player.md)\>
+
+#### Parameters
+
+β’ **player\_id**: `string`
+
+β’ **sig\_timestamp**: `number`
+
+β’ **cache?**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+β’ **sig\_sc?**: `string`
+
+β’ **nsig\_sc?**: `string`
+
+#### Returns
+
+`Promise`\<[`Player`](Player.md)\>
+
+#### Defined in
+
+[src/core/Player.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Player.ts#L194)
diff --git a/docs/api/classes/PlaylistPanelContinuation.md b/docs/api/classes/PlaylistPanelContinuation.md
new file mode 100644
index 000000000..a773f149b
--- /dev/null
+++ b/docs/api/classes/PlaylistPanelContinuation.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / PlaylistPanelContinuation
+
+# Class: PlaylistPanelContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new PlaylistPanelContinuation()
+
+> **new PlaylistPanelContinuation**(`data`): [`PlaylistPanelContinuation`](PlaylistPanelContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`PlaylistPanelContinuation`](PlaylistPanelContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:131](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L131)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:129](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L129)
+
+***
+
+### continuation
+
+> **continuation**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:128](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L128)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"playlistPanelContinuation"` = `'playlistPanelContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L126)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is PlaylistPanelContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is PlaylistPanelContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/ReloadContinuationItemsCommand.md b/docs/api/classes/ReloadContinuationItemsCommand.md
new file mode 100644
index 000000000..4779286af
--- /dev/null
+++ b/docs/api/classes/ReloadContinuationItemsCommand.md
@@ -0,0 +1,223 @@
+[youtubei.js](../README.md) / ReloadContinuationItemsCommand
+
+# Class: ReloadContinuationItemsCommand
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ReloadContinuationItemsCommand()
+
+> **new ReloadContinuationItemsCommand**(`data`): [`ReloadContinuationItemsCommand`](ReloadContinuationItemsCommand.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ReloadContinuationItemsCommand`](ReloadContinuationItemsCommand.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L57)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:54](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L54)
+
+***
+
+### slot?
+
+> `optional` **slot**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L55)
+
+***
+
+### target\_id
+
+> **target\_id**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:53](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L53)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"reloadContinuationItemsCommand"` = `'reloadContinuationItemsCommand'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L51)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ReloadContinuationItemsCommand & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ReloadContinuationItemsCommand & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/SectionListContinuation.md b/docs/api/classes/SectionListContinuation.md
new file mode 100644
index 000000000..fca5c10b5
--- /dev/null
+++ b/docs/api/classes/SectionListContinuation.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / SectionListContinuation
+
+# Class: SectionListContinuation
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new SectionListContinuation()
+
+> **new SectionListContinuation**(`data`): [`SectionListContinuation`](SectionListContinuation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`SectionListContinuation`](SectionListContinuation.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:71](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L71)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../namespaces/Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../namespaces/Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/continuations.ts:69](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L69)
+
+***
+
+### continuation
+
+> **continuation**: `string`
+
+#### Defined in
+
+[src/parser/continuations.ts:68](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L68)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"sectionListContinuation"` = `'sectionListContinuation'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:66](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L66)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is SectionListContinuation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is SectionListContinuation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/Session.md b/docs/api/classes/Session.md
new file mode 100644
index 000000000..5ff896869
--- /dev/null
+++ b/docs/api/classes/Session.md
@@ -0,0 +1,645 @@
+[youtubei.js](../README.md) / Session
+
+# Class: Session
+
+Represents an InnerTube session. This holds all the data needed to make requests to YouTube.
+
+## Extends
+
+- [`EventEmitter`](EventEmitter.md)
+
+## Constructors
+
+### new Session()
+
+> **new Session**(`context`, `api_key`, `api_version`, `account_index`, `player`?, `cookie`?, `fetch`?, `cache`?, `po_token`?): [`Session`](Session.md)
+
+#### Parameters
+
+β’ **context**: [`Context`](../type-aliases/Context.md)
+
+β’ **api\_key**: `string`
+
+β’ **api\_version**: `string`
+
+β’ **account\_index**: `number`
+
+β’ **player?**: [`Player`](Player.md)
+
+β’ **cookie?**: `string`
+
+β’ **fetch?**
+
+β’ **cache?**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+β’ **po\_token?**: `string`
+
+#### Returns
+
+[`Session`](Session.md)
+
+#### Overrides
+
+[`EventEmitter`](EventEmitter.md).[`constructor`](EventEmitter.md#constructors)
+
+#### Defined in
+
+[src/core/Session.ts:226](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L226)
+
+## Properties
+
+### account\_index
+
+> **account\_index**: `number`
+
+#### Defined in
+
+[src/core/Session.ts:223](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L223)
+
+***
+
+### actions
+
+> **actions**: [`Actions`](Actions.md)
+
+#### Defined in
+
+[src/core/Session.ts:219](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L219)
+
+***
+
+### api\_version
+
+> **api\_version**: `string`
+
+#### Defined in
+
+[src/core/Session.ts:222](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L222)
+
+***
+
+### cache?
+
+> `optional` **cache**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+#### Defined in
+
+[src/core/Session.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L220)
+
+***
+
+### context
+
+> **context**: [`Context`](../type-aliases/Context.md)
+
+#### Defined in
+
+[src/core/Session.ts:214](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L214)
+
+***
+
+### http
+
+> **http**: [`HTTPClient`](HTTPClient.md)
+
+#### Defined in
+
+[src/core/Session.ts:217](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L217)
+
+***
+
+### key
+
+> **key**: `string`
+
+#### Defined in
+
+[src/core/Session.ts:221](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L221)
+
+***
+
+### logged\_in
+
+> **logged\_in**: `boolean`
+
+#### Defined in
+
+[src/core/Session.ts:218](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L218)
+
+***
+
+### oauth
+
+> **oauth**: [`OAuth2`](OAuth2.md)
+
+#### Defined in
+
+[src/core/Session.ts:216](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L216)
+
+***
+
+### player?
+
+> `optional` **player**: [`Player`](Player.md)
+
+#### Defined in
+
+[src/core/Session.ts:215](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L215)
+
+***
+
+### po\_token?
+
+> `optional` **po\_token**: `string`
+
+#### Defined in
+
+[src/core/Session.ts:224](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L224)
+
+## Accessors
+
+### client\_name
+
+> `get` **client\_name**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/Session.ts:569](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L569)
+
+***
+
+### client\_version
+
+> `get` **client\_version**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/Session.ts:565](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L565)
+
+***
+
+### lang
+
+> `get` **lang**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/Session.ts:573](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L573)
+
+## Methods
+
+### addEventListener()
+
+> **addEventListener**(`type`, `callback`, `options`?): `void`
+
+Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.
+
+The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.
+
+When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.
+
+When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in Β§ 2.8 Observing event listeners.
+
+When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.
+
+If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.
+
+The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **callback**: `null` \| `EventListenerOrEventListenerObject`
+
+β’ **options?**: `boolean` \| `AddEventListenerOptions`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](EventEmitter.md).[`addEventListener`](EventEmitter.md#addeventlistener)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8256
+
+***
+
+### dispatchEvent()
+
+> **dispatchEvent**(`event`): `boolean`
+
+Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
+
+#### Parameters
+
+β’ **event**: `Event`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`EventEmitter`](EventEmitter.md).[`dispatchEvent`](EventEmitter.md#dispatchevent)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8262
+
+***
+
+### emit()
+
+> **emit**(`type`, ...`args`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ ...**args**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](EventEmitter.md).[`emit`](EventEmitter.md#emit)
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L10)
+
+***
+
+### off()
+
+> **off**(`type`, `listener`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **listener**
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](EventEmitter.md).[`off`](EventEmitter.md#off)
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L40)
+
+***
+
+### on()
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"auth"`
+
+β’ **listener**: [`OAuth2AuthEventHandler`](../type-aliases/OAuth2AuthEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+[`EventEmitter`](EventEmitter.md).[`on`](EventEmitter.md#on)
+
+##### Defined in
+
+[src/core/Session.ts:241](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L241)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"auth-pending"`
+
+β’ **listener**: [`OAuth2AuthPendingEventHandler`](../type-aliases/OAuth2AuthPendingEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/core/Session.ts:242](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L242)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"auth-error"`
+
+β’ **listener**: [`OAuth2AuthErrorEventHandler`](../type-aliases/OAuth2AuthErrorEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/core/Session.ts:243](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L243)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"update-credentials"`
+
+β’ **listener**: [`OAuth2AuthEventHandler`](../type-aliases/OAuth2AuthEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/core/Session.ts:244](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L244)
+
+***
+
+### once()
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"auth"`
+
+β’ **listener**: [`OAuth2AuthEventHandler`](../type-aliases/OAuth2AuthEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+[`EventEmitter`](EventEmitter.md).[`once`](EventEmitter.md#once)
+
+##### Defined in
+
+[src/core/Session.ts:250](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L250)
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"auth-pending"`
+
+β’ **listener**: [`OAuth2AuthPendingEventHandler`](../type-aliases/OAuth2AuthPendingEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.once`
+
+##### Defined in
+
+[src/core/Session.ts:251](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L251)
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"auth-error"`
+
+β’ **listener**: [`OAuth2AuthErrorEventHandler`](../type-aliases/OAuth2AuthErrorEventHandler.md)
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.once`
+
+##### Defined in
+
+[src/core/Session.ts:252](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L252)
+
+***
+
+### removeEventListener()
+
+> **removeEventListener**(`type`, `callback`, `options`?): `void`
+
+Removes the event listener in target's event listener list with the same type, callback, and options.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **callback**: `null` \| `EventListenerOrEventListenerObject`
+
+β’ **options?**: `boolean` \| `EventListenerOptions`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](EventEmitter.md).[`removeEventListener`](EventEmitter.md#removeeventlistener)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8268
+
+***
+
+### signIn()
+
+> **signIn**(`credentials`?): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **credentials?**: [`OAuth2Tokens`](../type-aliases/OAuth2Tokens.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/core/Session.ts:532](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L532)
+
+***
+
+### signOut()
+
+> **signOut**(): `Promise`\<`undefined` \| `Response`\>
+
+Signs out of the current account and revokes the credentials.
+
+#### Returns
+
+`Promise`\<`undefined` \| `Response`\>
+
+#### Defined in
+
+[src/core/Session.ts:555](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L555)
+
+***
+
+### create()
+
+> `static` **create**(`options`): `Promise`\<[`Session`](Session.md)\>
+
+#### Parameters
+
+β’ **options**: [`SessionOptions`](../type-aliases/SessionOptions.md) = `{}`
+
+#### Returns
+
+`Promise`\<[`Session`](Session.md)\>
+
+#### Defined in
+
+[src/core/Session.ts:258](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L258)
+
+***
+
+### fromCache()
+
+> `static` **fromCache**(`cache`, `session_args`): `Promise`\<`null` \| [`SessionData`](../type-aliases/SessionData.md)\>
+
+Retrieves session data from cache.
+
+#### Parameters
+
+β’ **cache**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+A valid cache implementation.
+
+β’ **session\_args**: [`SessionArgs`](../type-aliases/SessionArgs.md)
+
+User provided session arguments.
+
+#### Returns
+
+`Promise`\<`null` \| [`SessionData`](../type-aliases/SessionData.md)\>
+
+#### Defined in
+
+[src/core/Session.ts:288](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L288)
+
+***
+
+### getSessionData()
+
+> `static` **getSessionData**(`lang`, `location`, `account_index`, `visitor_data`, `enable_safety_mode`, `generate_session_locally`, `device_category`, `client_name`, `tz`, `fetch`, `on_behalf_of_user`?, `cache`?, `enable_session_cache`?, `po_token`?): `Promise`\<`object`\>
+
+#### Parameters
+
+β’ **lang**: `string` = `''`
+
+β’ **location**: `string` = `''`
+
+β’ **account\_index**: `number` = `0`
+
+β’ **visitor\_data**: `string` = `''`
+
+β’ **enable\_safety\_mode**: `boolean` = `false`
+
+β’ **generate\_session\_locally**: `boolean` = `false`
+
+β’ **device\_category**: [`DeviceCategory`](../namespaces/Utils/type-aliases/DeviceCategory.md) = `'desktop'`
+
+β’ **client\_name**: [`ClientType`](../enumerations/ClientType.md) = `ClientType.WEB`
+
+β’ **tz**: `string` = `...`
+
+β’ **fetch** = `Platform.shim.fetch`
+
+β’ **on\_behalf\_of\_user?**: `string`
+
+β’ **cache?**: [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+β’ **enable\_session\_cache?**: `boolean` = `true`
+
+β’ **po\_token?**: `string`
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### account\_index
+
+> **account\_index**: `number`
+
+##### api\_key
+
+> **api\_key**: `string`
+
+##### api\_version
+
+> **api\_version**: `string`
+
+##### context
+
+> **context**: [`Context`](../type-aliases/Context.md)
+
+#### Defined in
+
+[src/core/Session.ts:324](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L324)
diff --git a/docs/api/classes/ShowMiniplayerCommand.md b/docs/api/classes/ShowMiniplayerCommand.md
new file mode 100644
index 000000000..360239eb5
--- /dev/null
+++ b/docs/api/classes/ShowMiniplayerCommand.md
@@ -0,0 +1,213 @@
+[youtubei.js](../README.md) / ShowMiniplayerCommand
+
+# Class: ShowMiniplayerCommand
+
+## Extends
+
+- [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ShowMiniplayerCommand()
+
+> **new ShowMiniplayerCommand**(`data`): [`ShowMiniplayerCommand`](ShowMiniplayerCommand.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../namespaces/APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ShowMiniplayerCommand`](ShowMiniplayerCommand.md)
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`constructor`](../namespaces/Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/continuations.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L41)
+
+## Properties
+
+### miniplayer\_command
+
+> **miniplayer\_command**: [`NavigationEndpoint`](../namespaces/YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/continuations.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L38)
+
+***
+
+### show\_premium\_branding
+
+> **show\_premium\_branding**: `boolean`
+
+#### Defined in
+
+[src/parser/continuations.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L39)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `"showMiniplayerCommand"` = `'showMiniplayerCommand'`
+
+#### Overrides
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`type`](../namespaces/Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/continuations.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/continuations.ts#L36)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`as`](../namespaces/Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ShowMiniplayerCommand & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ShowMiniplayerCommand & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`hasKey`](../namespaces/Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../namespaces/Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../namespaces/Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`is`](../namespaces/Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../namespaces/Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../namespaces/Helpers/classes/YTNode.md).[`key`](../namespaces/Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/classes/UniversalCache.md b/docs/api/classes/UniversalCache.md
new file mode 100644
index 000000000..2537b75c8
--- /dev/null
+++ b/docs/api/classes/UniversalCache.md
@@ -0,0 +1,113 @@
+[youtubei.js](../README.md) / UniversalCache
+
+# Class: UniversalCache
+
+## Implements
+
+- [`ICache`](../namespaces/Types/interfaces/ICache.md)
+
+## Constructors
+
+### new UniversalCache()
+
+> **new UniversalCache**(`persistent`, `persistent_directory`?): [`UniversalCache`](UniversalCache.md)
+
+#### Parameters
+
+β’ **persistent**: `boolean`
+
+β’ **persistent\_directory?**: `string`
+
+#### Returns
+
+[`UniversalCache`](UniversalCache.md)
+
+#### Defined in
+
+[src/utils/Cache.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Cache.ts#L6)
+
+## Accessors
+
+### cache\_dir
+
+> `get` **cache\_dir**(): `string`
+
+#### Returns
+
+`string`
+
+#### Implementation of
+
+[`ICache`](../namespaces/Types/interfaces/ICache.md).[`cache_dir`](../namespaces/Types/interfaces/ICache.md#cache_dir)
+
+#### Defined in
+
+[src/utils/Cache.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Cache.ts#L9)
+
+## Methods
+
+### get()
+
+> **get**(`key`): `Promise`\<`undefined` \| `ArrayBuffer`\>
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `ArrayBuffer`\>
+
+#### Implementation of
+
+[`ICache`](../namespaces/Types/interfaces/ICache.md).[`get`](../namespaces/Types/interfaces/ICache.md#get)
+
+#### Defined in
+
+[src/utils/Cache.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Cache.ts#L12)
+
+***
+
+### remove()
+
+> **remove**(`key`): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`ICache`](../namespaces/Types/interfaces/ICache.md).[`remove`](../namespaces/Types/interfaces/ICache.md#remove)
+
+#### Defined in
+
+[src/utils/Cache.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Cache.ts#L18)
+
+***
+
+### set()
+
+> **set**(`key`, `value`): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **key**: `string`
+
+β’ **value**: `ArrayBuffer`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`ICache`](../namespaces/Types/interfaces/ICache.md).[`set`](../namespaces/Types/interfaces/ICache.md#set)
+
+#### Defined in
+
+[src/utils/Cache.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Cache.ts#L15)
diff --git a/docs/api/enumerations/ClientType.md b/docs/api/enumerations/ClientType.md
new file mode 100644
index 000000000..4d944e451
--- /dev/null
+++ b/docs/api/enumerations/ClientType.md
@@ -0,0 +1,93 @@
+[youtubei.js](../README.md) / ClientType
+
+# Enumeration: ClientType
+
+## Enumeration Members
+
+### ANDROID
+
+> **ANDROID**: `"ANDROID"`
+
+#### Defined in
+
+[src/core/Session.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L21)
+
+***
+
+### ANDROID\_CREATOR
+
+> **ANDROID\_CREATOR**: `"ANDROID_CREATOR"`
+
+#### Defined in
+
+[src/core/Session.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L23)
+
+***
+
+### ANDROID\_MUSIC
+
+> **ANDROID\_MUSIC**: `"ANDROID_MUSIC"`
+
+#### Defined in
+
+[src/core/Session.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L22)
+
+***
+
+### IOS
+
+> **IOS**: `"iOS"`
+
+#### Defined in
+
+[src/core/Session.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L20)
+
+***
+
+### KIDS
+
+> **KIDS**: `"WEB_KIDS"`
+
+#### Defined in
+
+[src/core/Session.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L18)
+
+***
+
+### MUSIC
+
+> **MUSIC**: `"WEB_REMIX"`
+
+#### Defined in
+
+[src/core/Session.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L19)
+
+***
+
+### TV\_EMBEDDED
+
+> **TV\_EMBEDDED**: `"TVHTML5_SIMPLY_EMBEDDED_PLAYER"`
+
+#### Defined in
+
+[src/core/Session.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L24)
+
+***
+
+### WEB
+
+> **WEB**: `"WEB"`
+
+#### Defined in
+
+[src/core/Session.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L17)
+
+***
+
+### WEB\_EMBEDDED
+
+> **WEB\_EMBEDDED**: `"WEB_EMBEDDED_PLAYER"`
+
+#### Defined in
+
+[src/core/Session.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Session.ts#L25)
diff --git a/docs/api/interfaces/ApiResponse.md b/docs/api/interfaces/ApiResponse.md
new file mode 100644
index 000000000..43b9c07b9
--- /dev/null
+++ b/docs/api/interfaces/ApiResponse.md
@@ -0,0 +1,33 @@
+[youtubei.js](../README.md) / ApiResponse
+
+# Interface: ApiResponse
+
+## Properties
+
+### data
+
+> **data**: [`IRawResponse`](../namespaces/APIResponseTypes/interfaces/IRawResponse.md)
+
+#### Defined in
+
+[src/core/Actions.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L16)
+
+***
+
+### status\_code
+
+> **status\_code**: `number`
+
+#### Defined in
+
+[src/core/Actions.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L15)
+
+***
+
+### success
+
+> **success**: `boolean`
+
+#### Defined in
+
+[src/core/Actions.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/Actions.ts#L14)
diff --git a/docs/api/interfaces/HTTPClientInit.md b/docs/api/interfaces/HTTPClientInit.md
new file mode 100644
index 000000000..2ead45c0e
--- /dev/null
+++ b/docs/api/interfaces/HTTPClientInit.md
@@ -0,0 +1,13 @@
+[youtubei.js](../README.md) / HTTPClientInit
+
+# Interface: HTTPClientInit
+
+## Properties
+
+### baseURL?
+
+> `optional` **baseURL**: `string`
+
+#### Defined in
+
+[src/utils/HTTPClient.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/HTTPClient.ts#L15)
diff --git a/docs/api/namespaces/APIResponseTypes/README.md b/docs/api/namespaces/APIResponseTypes/README.md
new file mode 100644
index 000000000..c0e76e11a
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/README.md
@@ -0,0 +1,32 @@
+[youtubei.js](../../README.md) / APIResponseTypes
+
+# APIResponseTypes
+
+## Index
+
+### Interfaces
+
+- [IParsedResponse](interfaces/IParsedResponse.md)
+- [IPlayabilityStatus](interfaces/IPlayabilityStatus.md)
+- [IPlaybackTracking](interfaces/IPlaybackTracking.md)
+- [IPlayerConfig](interfaces/IPlayerConfig.md)
+- [IRawPlayerConfig](interfaces/IRawPlayerConfig.md)
+- [IRawResponse](interfaces/IRawResponse.md)
+- [IResponseContext](interfaces/IResponseContext.md)
+- [IServiceTrackingParams](interfaces/IServiceTrackingParams.md)
+- [IStreamingData](interfaces/IStreamingData.md)
+
+### Type Aliases
+
+- [CpnSource](type-aliases/CpnSource.md)
+- [IBrowseResponse](type-aliases/IBrowseResponse.md)
+- [IGetNotificationsMenuResponse](type-aliases/IGetNotificationsMenuResponse.md)
+- [IGetTranscriptResponse](type-aliases/IGetTranscriptResponse.md)
+- [IGuideResponse](type-aliases/IGuideResponse.md)
+- [INextResponse](type-aliases/INextResponse.md)
+- [IPlayerResponse](type-aliases/IPlayerResponse.md)
+- [IResolveURLResponse](type-aliases/IResolveURLResponse.md)
+- [ISearchResponse](type-aliases/ISearchResponse.md)
+- [IUpdatedMetadataResponse](type-aliases/IUpdatedMetadataResponse.md)
+- [RawData](type-aliases/RawData.md)
+- [RawNode](type-aliases/RawNode.md)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IParsedResponse.md b/docs/api/namespaces/APIResponseTypes/interfaces/IParsedResponse.md
new file mode 100644
index 000000000..c05da5216
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IParsedResponse.md
@@ -0,0 +1,491 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IParsedResponse
+
+# Interface: IParsedResponse
+
+## Properties
+
+### actions?
+
+> `optional` **actions**: [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L26)
+
+***
+
+### actions\_memo?
+
+> `optional` **actions\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L27)
+
+***
+
+### alerts?
+
+> `optional` **alerts**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Alert`](../../YTNodes/classes/Alert.md) \| [`AlertWithButton`](../../YTNodes/classes/AlertWithButton.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:50](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L50)
+
+***
+
+### annotations?
+
+> `optional` **annotations**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlayerAnnotationsExpanded`](../../YTNodes/classes/PlayerAnnotationsExpanded.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:62](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L62)
+
+***
+
+### background?
+
+> `optional` **background**: [`MusicThumbnail`](../../YTNodes/classes/MusicThumbnail.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L25)
+
+***
+
+### captions?
+
+> `optional` **captions**: [`PlayerCaptionsTracklist`](../../YTNodes/classes/PlayerCaptionsTracklist.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:60](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L60)
+
+***
+
+### cards?
+
+> `optional` **cards**: [`CardCollection`](../../YTNodes/classes/CardCollection.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:65](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L65)
+
+***
+
+### contents?
+
+> `optional` **contents**: [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L28)
+
+***
+
+### contents\_memo?
+
+> `optional` **contents\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L29)
+
+***
+
+### continuation?
+
+> `optional` **continuation**: [`Continuation`](../../../classes/Continuation.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L43)
+
+***
+
+### continuation\_contents?
+
+> `optional` **continuation\_contents**: [`ItemSectionContinuation`](../../../classes/ItemSectionContinuation.md) \| [`SectionListContinuation`](../../../classes/SectionListContinuation.md) \| [`LiveChatContinuation`](../../../classes/LiveChatContinuation.md) \| [`MusicPlaylistShelfContinuation`](../../../classes/MusicPlaylistShelfContinuation.md) \| [`MusicShelfContinuation`](../../../classes/MusicShelfContinuation.md) \| [`GridContinuation`](../../../classes/GridContinuation.md) \| [`PlaylistPanelContinuation`](../../../classes/PlaylistPanelContinuation.md) \| [`ContinuationCommand`](../../../classes/ContinuationCommand.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L44)
+
+***
+
+### continuation\_contents\_memo?
+
+> `optional` **continuation\_contents\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:46](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L46)
+
+***
+
+### continuation\_endpoint?
+
+> `optional` **continuation\_endpoint**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:74](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L74)
+
+***
+
+### cpn\_info?
+
+> `optional` **cpn\_info**: `object`
+
+#### cpn
+
+> **cpn**: `string`
+
+#### cpn\_source
+
+> **cpn\_source**: [`CpnSource`](../type-aliases/CpnSource.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:66](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L66)
+
+***
+
+### current\_video\_endpoint?
+
+> `optional` **current\_video\_endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:58](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L58)
+
+***
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:59](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L59)
+
+***
+
+### endscreen?
+
+> `optional` **endscreen**: [`Endscreen`](../../YTNodes/classes/Endscreen.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:64](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L64)
+
+***
+
+### engagement\_panels?
+
+> `optional` **engagement\_panels**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`EngagementPanelSectionList`](../../YTNodes/classes/EngagementPanelSectionList.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:70](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L70)
+
+***
+
+### entries?
+
+> `optional` **entries**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)[]
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:72](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L72)
+
+***
+
+### entries\_memo?
+
+> `optional` **entries\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:73](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L73)
+
+***
+
+### estimated\_results?
+
+> `optional` **estimated\_results**: `number`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:52](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L52)
+
+***
+
+### header?
+
+> `optional` **header**: [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L30)
+
+***
+
+### header\_memo?
+
+> `optional` **header\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L31)
+
+***
+
+### items?
+
+> `optional` **items**: [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:71](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L71)
+
+***
+
+### items\_memo?
+
+> `optional` **items\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L36)
+
+***
+
+### live\_chat\_item\_context\_menu\_supported\_renderers?
+
+> `optional` **live\_chat\_item\_context\_menu\_supported\_renderers**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L34)
+
+***
+
+### live\_chat\_item\_context\_menu\_supported\_renderers\_memo?
+
+> `optional` **live\_chat\_item\_context\_menu\_supported\_renderers\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L35)
+
+***
+
+### metadata?
+
+> `optional` **metadata**: [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L47)
+
+***
+
+### microformat?
+
+> `optional` **microformat**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:48](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L48)
+
+***
+
+### on\_response\_received\_actions?
+
+> `optional` **on\_response\_received\_actions**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L37)
+
+***
+
+### on\_response\_received\_actions\_memo?
+
+> `optional` **on\_response\_received\_actions\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L38)
+
+***
+
+### on\_response\_received\_commands?
+
+> `optional` **on\_response\_received\_commands**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L41)
+
+***
+
+### on\_response\_received\_commands\_memo?
+
+> `optional` **on\_response\_received\_commands\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:42](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L42)
+
+***
+
+### on\_response\_received\_endpoints?
+
+> `optional` **on\_response\_received\_endpoints**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L39)
+
+***
+
+### on\_response\_received\_endpoints\_memo?
+
+> `optional` **on\_response\_received\_endpoints\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L40)
+
+***
+
+### overlay?
+
+> `optional` **overlay**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:49](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L49)
+
+***
+
+### playability\_status?
+
+> `optional` **playability\_status**: [`IPlayabilityStatus`](IPlayabilityStatus.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L55)
+
+***
+
+### playback\_tracking?
+
+> `optional` **playback\_tracking**: [`IPlaybackTracking`](IPlaybackTracking.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:54](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L54)
+
+***
+
+### player\_config?
+
+> `optional` **player\_config**: [`IPlayerConfig`](IPlayerConfig.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L57)
+
+***
+
+### player\_overlays?
+
+> `optional` **player\_overlays**: [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:53](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L53)
+
+***
+
+### player\_response?
+
+> `optional` **player\_response**: [`IPlayerResponse`](../type-aliases/IPlayerResponse.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:75](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L75)
+
+***
+
+### refinements?
+
+> `optional` **refinements**: `string`[]
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L51)
+
+***
+
+### sidebar?
+
+> `optional` **sidebar**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L32)
+
+***
+
+### sidebar\_memo?
+
+> `optional` **sidebar\_memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L33)
+
+***
+
+### storyboards?
+
+> `optional` **storyboards**: [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md) \| [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:63](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L63)
+
+***
+
+### streaming\_data?
+
+> `optional` **streaming\_data**: [`IStreamingData`](IStreamingData.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:56](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L56)
+
+***
+
+### video\_details?
+
+> `optional` **video\_details**: [`VideoDetails`](../../Misc/classes/VideoDetails.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:61](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L61)
+
+***
+
+### watch\_next\_response?
+
+> `optional` **watch\_next\_response**: [`INextResponse`](../type-aliases/INextResponse.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:76](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L76)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IPlayabilityStatus.md b/docs/api/namespaces/APIResponseTypes/interfaces/IPlayabilityStatus.md
new file mode 100644
index 000000000..8da649e66
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IPlayabilityStatus.md
@@ -0,0 +1,53 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IPlayabilityStatus
+
+# Interface: IPlayabilityStatus
+
+## Properties
+
+### audio\_only\_playablility
+
+> **audio\_only\_playablility**: `null` \| [`AudioOnlyPlayability`](../../YTNodes/classes/AudioOnlyPlayability.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:86](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L86)
+
+***
+
+### embeddable
+
+> **embeddable**: `boolean`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:87](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L87)
+
+***
+
+### error\_screen
+
+> **error\_screen**: `null` \| [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:85](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L85)
+
+***
+
+### reason
+
+> **reason**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:88](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L88)
+
+***
+
+### status
+
+> **status**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L84)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IPlaybackTracking.md b/docs/api/namespaces/APIResponseTypes/interfaces/IPlaybackTracking.md
new file mode 100644
index 000000000..2ca5cbc30
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IPlaybackTracking.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IPlaybackTracking
+
+# Interface: IPlaybackTracking
+
+## Properties
+
+### videostats\_playback\_url
+
+> **videostats\_playback\_url**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:81](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L81)
+
+***
+
+### videostats\_watchtime\_url
+
+> **videostats\_watchtime\_url**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:80](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L80)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IPlayerConfig.md b/docs/api/namespaces/APIResponseTypes/interfaces/IPlayerConfig.md
new file mode 100644
index 000000000..f3691ef63
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IPlayerConfig.md
@@ -0,0 +1,73 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IPlayerConfig
+
+# Interface: IPlayerConfig
+
+## Properties
+
+### audio\_config
+
+> **audio\_config**: `object`
+
+#### enable\_per\_format\_loudness
+
+> **enable\_per\_format\_loudness**: `boolean`
+
+#### loudness\_db?
+
+> `optional` **loudness\_db**: `number`
+
+#### perceptual\_loudness\_db?
+
+> `optional` **perceptual\_loudness\_db**: `number`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:92](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L92)
+
+***
+
+### media\_common\_config
+
+> **media\_common\_config**: `object`
+
+#### dynamic\_readahead\_config
+
+> **dynamic\_readahead\_config**: `object`
+
+#### dynamic\_readahead\_config.max\_read\_ahead\_media\_time\_ms
+
+> **max\_read\_ahead\_media\_time\_ms**: `number`
+
+#### dynamic\_readahead\_config.min\_read\_ahead\_media\_time\_ms
+
+> **min\_read\_ahead\_media\_time\_ms**: `number`
+
+#### dynamic\_readahead\_config.read\_ahead\_growth\_rate\_ms
+
+> **read\_ahead\_growth\_rate\_ms**: `number`
+
+#### media\_ustreamer\_request\_config?
+
+> `optional` **media\_ustreamer\_request\_config**: `object`
+
+#### media\_ustreamer\_request\_config.video\_playback\_ustreamer\_config?
+
+> `optional` **video\_playback\_ustreamer\_config**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:100](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L100)
+
+***
+
+### stream\_selection\_config
+
+> **stream\_selection\_config**: `object`
+
+#### max\_bitrate
+
+> **max\_bitrate**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:97](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L97)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IRawPlayerConfig.md b/docs/api/namespaces/APIResponseTypes/interfaces/IRawPlayerConfig.md
new file mode 100644
index 000000000..7b1f5cc2e
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IRawPlayerConfig.md
@@ -0,0 +1,73 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IRawPlayerConfig
+
+# Interface: IRawPlayerConfig
+
+## Properties
+
+### audioConfig
+
+> **audioConfig**: `object`
+
+#### enablePerFormatLoudness
+
+> **enablePerFormatLoudness**: `boolean`
+
+#### loudnessDb?
+
+> `optional` **loudnessDb**: `number`
+
+#### perceptualLoudnessDb?
+
+> `optional` **perceptualLoudnessDb**: `number`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L20)
+
+***
+
+### mediaCommonConfig
+
+> **mediaCommonConfig**: `object`
+
+#### dynamicReadaheadConfig?
+
+> `optional` **dynamicReadaheadConfig**: `object`
+
+#### dynamicReadaheadConfig.maxReadAheadMediaTimeMs
+
+> **maxReadAheadMediaTimeMs**: `number`
+
+#### dynamicReadaheadConfig.minReadAheadMediaTimeMs
+
+> **minReadAheadMediaTimeMs**: `number`
+
+#### dynamicReadaheadConfig.readAheadGrowthRateMs
+
+> **readAheadGrowthRateMs**: `number`
+
+#### mediaUstreamerRequestConfig?
+
+> `optional` **mediaUstreamerRequestConfig**: `object`
+
+#### mediaUstreamerRequestConfig.videoPlaybackUstreamerConfig
+
+> **videoPlaybackUstreamerConfig**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L28)
+
+***
+
+### streamSelectionConfig
+
+> **streamSelectionConfig**: `object`
+
+#### maxBitrate
+
+> **maxBitrate**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L25)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IRawResponse.md b/docs/api/namespaces/APIResponseTypes/interfaces/IRawResponse.md
new file mode 100644
index 000000000..c8d021b6a
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IRawResponse.md
@@ -0,0 +1,475 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IRawResponse
+
+# Interface: IRawResponse
+
+## Indexable
+
+ \[`key`: `string`\]: `any`
+
+## Properties
+
+### actions?
+
+> `optional` **actions**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:48](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L48)
+
+***
+
+### alerts?
+
+> `optional` **alerts**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:56](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L56)
+
+***
+
+### annotations?
+
+> `optional` **annotations**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:92](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L92)
+
+***
+
+### background?
+
+> `optional` **background**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:42](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L42)
+
+***
+
+### captions?
+
+> `optional` **captions**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:90](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L90)
+
+***
+
+### cards?
+
+> `optional` **cards**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:95](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L95)
+
+***
+
+### contents?
+
+> `optional` **contents**: [`RawData`](../type-aliases/RawData.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L43)
+
+***
+
+### continuation?
+
+> `optional` **continuation**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:52](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L52)
+
+***
+
+### continuationContents?
+
+> `optional` **continuationContents**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L47)
+
+***
+
+### cpnInfo?
+
+> `optional` **cpnInfo**: `object`
+
+#### cpn
+
+> **cpn**: `string`
+
+#### cpnSource
+
+> **cpnSource**: [`CpnSource`](../type-aliases/CpnSource.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:96](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L96)
+
+***
+
+### currentVideoEndpoint?
+
+> `optional` **currentVideoEndpoint**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:86](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L86)
+
+***
+
+### endpoint?
+
+> `optional` **endpoint**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:89](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L89)
+
+***
+
+### endscreen?
+
+> `optional` **endscreen**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:94](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L94)
+
+***
+
+### engagementPanels?
+
+> `optional` **engagementPanels**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:102](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L102)
+
+***
+
+### entries?
+
+> `optional` **entries**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:103](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L103)
+
+***
+
+### estimatedResults?
+
+> `optional` **estimatedResults**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:58](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L58)
+
+***
+
+### frameworkUpdates?
+
+> `optional` **frameworkUpdates**: `any`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:101](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L101)
+
+***
+
+### header?
+
+> `optional` **header**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:50](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L50)
+
+***
+
+### items?
+
+> `optional` **items**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:100](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L100)
+
+***
+
+### liveChatItemContextMenuSupportedRenderers?
+
+> `optional` **liveChatItemContextMenuSupportedRenderers**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:49](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L49)
+
+***
+
+### metadata?
+
+> `optional` **metadata**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:53](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L53)
+
+***
+
+### microformat?
+
+> `optional` **microformat**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:54](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L54)
+
+***
+
+### onResponseReceivedActions?
+
+> `optional` **onResponseReceivedActions**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L44)
+
+***
+
+### onResponseReceivedCommands?
+
+> `optional` **onResponseReceivedCommands**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:46](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L46)
+
+***
+
+### onResponseReceivedEndpoints?
+
+> `optional` **onResponseReceivedEndpoints**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L45)
+
+***
+
+### overlay?
+
+> `optional` **overlay**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L55)
+
+***
+
+### playabilityStatus?
+
+> `optional` **playabilityStatus**: `object`
+
+#### audioOnlyPlayability?
+
+> `optional` **audioOnlyPlayability**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### errorScreen?
+
+> `optional` **errorScreen**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### playableInEmbed?
+
+> `optional` **playableInEmbed**: `boolean`
+
+#### reason?
+
+> `optional` **reason**: `string`
+
+#### status
+
+> **status**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:68](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L68)
+
+***
+
+### playbackTracking?
+
+> `optional` **playbackTracking**: `object`
+
+#### videostatsPlaybackUrl
+
+> **videostatsPlaybackUrl**: `object`
+
+#### videostatsPlaybackUrl.baseUrl
+
+> **baseUrl**: `string`
+
+#### videostatsWatchtimeUrl
+
+> **videostatsWatchtimeUrl**: `object`
+
+#### videostatsWatchtimeUrl.baseUrl
+
+> **baseUrl**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:60](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L60)
+
+***
+
+### playerConfig?
+
+> `optional` **playerConfig**: [`IRawPlayerConfig`](IRawPlayerConfig.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:83](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L83)
+
+***
+
+### playerOverlays?
+
+> `optional` **playerOverlays**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:59](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L59)
+
+***
+
+### playerResponse?
+
+> `optional` **playerResponse**: [`IRawResponse`](IRawResponse.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L84)
+
+***
+
+### playlistId?
+
+> `optional` **playlistId**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:88](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L88)
+
+***
+
+### refinements?
+
+> `optional` **refinements**: `string`[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L57)
+
+***
+
+### responseContext?
+
+> `optional` **responseContext**: [`IResponseContext`](IResponseContext.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L41)
+
+***
+
+### sidebar?
+
+> `optional` **sidebar**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L51)
+
+***
+
+### storyboards?
+
+> `optional` **storyboards**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L93)
+
+***
+
+### streamingData?
+
+> `optional` **streamingData**: `object`
+
+#### adaptiveFormats
+
+> **adaptiveFormats**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### dashManifestUrl?
+
+> `optional` **dashManifestUrl**: `string`
+
+#### expiresInSeconds
+
+> **expiresInSeconds**: `string`
+
+#### formats
+
+> **formats**: [`RawNode`](../type-aliases/RawNode.md)[]
+
+#### hlsManifestUrl?
+
+> `optional` **hlsManifestUrl**: `string`
+
+#### serverAbrStreamingUrl?
+
+> `optional` **serverAbrStreamingUrl**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:75](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L75)
+
+***
+
+### unseenCount?
+
+> `optional` **unseenCount**: `number`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:87](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L87)
+
+***
+
+### videoDetails?
+
+> `optional` **videoDetails**: [`RawNode`](../type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:91](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L91)
+
+***
+
+### watchNextResponse?
+
+> `optional` **watchNextResponse**: [`IRawResponse`](IRawResponse.md)
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:85](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L85)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IResponseContext.md b/docs/api/namespaces/APIResponseTypes/interfaces/IResponseContext.md
new file mode 100644
index 000000000..4bc3bdde6
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IResponseContext.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IResponseContext
+
+# Interface: IResponseContext
+
+## Properties
+
+### maxAgeSeconds
+
+> **maxAgeSeconds**: `number`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L16)
+
+***
+
+### serviceTrackingParams
+
+> **serviceTrackingParams**: [`IServiceTrackingParams`](IServiceTrackingParams.md)[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L15)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IServiceTrackingParams.md b/docs/api/namespaces/APIResponseTypes/interfaces/IServiceTrackingParams.md
new file mode 100644
index 000000000..3c299bf10
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IServiceTrackingParams.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IServiceTrackingParams
+
+# Interface: IServiceTrackingParams
+
+## Properties
+
+### params?
+
+> `optional` **params**: `object`[]
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L8)
+
+***
+
+### service
+
+> **service**: `string`
+
+#### Defined in
+
+[src/parser/types/RawResponse.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L7)
diff --git a/docs/api/namespaces/APIResponseTypes/interfaces/IStreamingData.md b/docs/api/namespaces/APIResponseTypes/interfaces/IStreamingData.md
new file mode 100644
index 000000000..ce32d4f23
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/interfaces/IStreamingData.md
@@ -0,0 +1,63 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IStreamingData
+
+# Interface: IStreamingData
+
+## Properties
+
+### adaptive\_formats
+
+> **adaptive\_formats**: [`Format`](../../Misc/classes/Format.md)[]
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:115](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L115)
+
+***
+
+### dash\_manifest\_url?
+
+> `optional` **dash\_manifest\_url**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:116](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L116)
+
+***
+
+### expires
+
+> **expires**: `Date`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:113](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L113)
+
+***
+
+### formats
+
+> **formats**: [`Format`](../../Misc/classes/Format.md)[]
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:114](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L114)
+
+***
+
+### hls\_manifest\_url?
+
+> `optional` **hls\_manifest\_url**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:117](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L117)
+
+***
+
+### server\_abr\_streaming\_url?
+
+> `optional` **server\_abr\_streaming\_url**: `string`
+
+#### Defined in
+
+[src/parser/types/ParsedResponse.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L118)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/CpnSource.md b/docs/api/namespaces/APIResponseTypes/type-aliases/CpnSource.md
new file mode 100644
index 000000000..5a7c44c86
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/CpnSource.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / CpnSource
+
+# Type Alias: CpnSource
+
+> **CpnSource**: `"CPN_SOURCE_TYPE_CLIENT"` \| `"CPN_SOURCE_TYPE_WATCH_SERVER"`
+
+## Defined in
+
+[src/parser/types/RawResponse.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L4)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md
new file mode 100644
index 000000000..271861b22
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IBrowseResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IBrowseResponse
+
+# Type Alias: IBrowseResponse
+
+> **IBrowseResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"background"` \| `"continuation_contents"` \| `"continuation_contents_memo"` \| `"on_response_received_actions"` \| `"on_response_received_actions_memo"` \| `"on_response_received_endpoints"` \| `"on_response_received_endpoints_memo"` \| `"contents"` \| `"contents_memo"` \| `"header"` \| `"header_memo"` \| `"metadata"` \| `"microformat"` \| `"alerts"` \| `"sidebar"` \| `"sidebar_memo"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:123](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L123)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IGetNotificationsMenuResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IGetNotificationsMenuResponse.md
new file mode 100644
index 000000000..0b1ea8244
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IGetNotificationsMenuResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IGetNotificationsMenuResponse
+
+# Type Alias: IGetNotificationsMenuResponse
+
+> **IGetNotificationsMenuResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"actions"` \| `"actions_memo"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:127](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L127)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IGetTranscriptResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IGetTranscriptResponse.md
new file mode 100644
index 000000000..561d23552
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IGetTranscriptResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IGetTranscriptResponse
+
+# Type Alias: IGetTranscriptResponse
+
+> **IGetTranscriptResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"actions"` \| `"actions_memo"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L126)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IGuideResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IGuideResponse.md
new file mode 100644
index 000000000..f49472812
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IGuideResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IGuideResponse
+
+# Type Alias: IGuideResponse
+
+> **IGuideResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"items"` \| `"items_memo"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:129](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L129)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/INextResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/INextResponse.md
new file mode 100644
index 000000000..5b1b52ed1
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/INextResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / INextResponse
+
+# Type Alias: INextResponse
+
+> **INextResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"contents"` \| `"contents_memo"` \| `"current_video_endpoint"` \| `"on_response_received_endpoints"` \| `"on_response_received_endpoints_memo"` \| `"player_overlays"` \| `"engagement_panels"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:122](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L122)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IPlayerResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IPlayerResponse.md
new file mode 100644
index 000000000..e2f73cf82
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IPlayerResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IPlayerResponse
+
+# Type Alias: IPlayerResponse
+
+> **IPlayerResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"captions"` \| `"cards"` \| `"endscreen"` \| `"microformat"` \| `"annotations"` \| `"playability_status"` \| `"streaming_data"` \| `"player_config"` \| `"playback_tracking"` \| `"storyboards"` \| `"video_details"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:121](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L121)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IResolveURLResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IResolveURLResponse.md
new file mode 100644
index 000000000..85b97ec42
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IResolveURLResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IResolveURLResponse
+
+# Type Alias: IResolveURLResponse
+
+> **IResolveURLResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"endpoint"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L125)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/ISearchResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/ISearchResponse.md
new file mode 100644
index 000000000..6627bc347
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/ISearchResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / ISearchResponse
+
+# Type Alias: ISearchResponse
+
+> **ISearchResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"header"` \| `"header_memo"` \| `"contents"` \| `"contents_memo"` \| `"on_response_received_commands"` \| `"continuation_contents"` \| `"continuation_contents_memo"` \| `"refinements"` \| `"estimated_results"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:124](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L124)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/IUpdatedMetadataResponse.md b/docs/api/namespaces/APIResponseTypes/type-aliases/IUpdatedMetadataResponse.md
new file mode 100644
index 000000000..4dc2d1649
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/IUpdatedMetadataResponse.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / IUpdatedMetadataResponse
+
+# Type Alias: IUpdatedMetadataResponse
+
+> **IUpdatedMetadataResponse**: `Pick`\<[`IParsedResponse`](../interfaces/IParsedResponse.md), `"actions"` \| `"actions_memo"` \| `"continuation"`\>
+
+## Defined in
+
+[src/parser/types/ParsedResponse.ts:128](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/ParsedResponse.ts#L128)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/RawData.md b/docs/api/namespaces/APIResponseTypes/type-aliases/RawData.md
new file mode 100644
index 000000000..69dec87ce
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/RawData.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / RawData
+
+# Type Alias: RawData
+
+> **RawData**: [`RawNode`](RawNode.md) \| [`RawNode`](RawNode.md)[]
+
+## Defined in
+
+[src/parser/types/RawResponse.ts:2](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L2)
diff --git a/docs/api/namespaces/APIResponseTypes/type-aliases/RawNode.md b/docs/api/namespaces/APIResponseTypes/type-aliases/RawNode.md
new file mode 100644
index 000000000..42b4cd195
--- /dev/null
+++ b/docs/api/namespaces/APIResponseTypes/type-aliases/RawNode.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [APIResponseTypes](../README.md) / RawNode
+
+# Type Alias: RawNode
+
+> **RawNode**: `Record`\<`string`, `any`\>
+
+## Defined in
+
+[src/parser/types/RawResponse.ts:1](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/types/RawResponse.ts#L1)
diff --git a/docs/api/namespaces/Clients/README.md b/docs/api/namespaces/Clients/README.md
new file mode 100644
index 000000000..839a4447f
--- /dev/null
+++ b/docs/api/namespaces/Clients/README.md
@@ -0,0 +1,11 @@
+[youtubei.js](../../README.md) / Clients
+
+# Clients
+
+## Index
+
+### Classes
+
+- [Kids](classes/Kids.md)
+- [Music](classes/Music.md)
+- [Studio](classes/Studio.md)
diff --git a/docs/api/namespaces/Clients/classes/Kids.md b/docs/api/namespaces/Clients/classes/Kids.md
new file mode 100644
index 000000000..e807872db
--- /dev/null
+++ b/docs/api/namespaces/Clients/classes/Kids.md
@@ -0,0 +1,128 @@
+[youtubei.js](../../../README.md) / [Clients](../README.md) / Kids
+
+# Class: Kids
+
+## Constructors
+
+### new Kids()
+
+> **new Kids**(`session`): [`Kids`](Kids.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](../../../classes/Session.md)
+
+#### Returns
+
+[`Kids`](Kids.md)
+
+#### Defined in
+
+[src/core/clients/Kids.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Kids.ts#L18)
+
+## Methods
+
+### blockChannel()
+
+> **blockChannel**(`channel_id`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)[]\>
+
+Retrieves the list of supervised accounts that the signed-in user has
+access to, and blocks the given channel for each of them.
+
+#### Parameters
+
+β’ **channel\_id**: `string`
+
+The channel id to block.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)[]\>
+
+A list of API responses.
+
+#### Defined in
+
+[src/core/clients/Kids.ts:91](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Kids.ts#L91)
+
+***
+
+### getChannel()
+
+> **getChannel**(`channel_id`): `Promise`\<[`Channel`](../../YTKids/classes/Channel.md)\>
+
+Retrieves the contents of the given channel.
+
+#### Parameters
+
+β’ **channel\_id**: `string`
+
+The channel id.
+
+#### Returns
+
+`Promise`\<[`Channel`](../../YTKids/classes/Channel.md)\>
+
+#### Defined in
+
+[src/core/clients/Kids.ts:62](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Kids.ts#L62)
+
+***
+
+### getHomeFeed()
+
+> **getHomeFeed**(): `Promise`\<[`HomeFeed`](../../YTKids/classes/HomeFeed.md)\>
+
+Retrieves the home feed.
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](../../YTKids/classes/HomeFeed.md)\>
+
+#### Defined in
+
+[src/core/clients/Kids.ts:75](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Kids.ts#L75)
+
+***
+
+### getInfo()
+
+> **getInfo**(`video_id`): `Promise`\<[`VideoInfo`](../../YTKids/classes/VideoInfo.md)\>
+
+Retrieves video info.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video id.
+
+#### Returns
+
+`Promise`\<[`VideoInfo`](../../YTKids/classes/VideoInfo.md)\>
+
+#### Defined in
+
+[src/core/clients/Kids.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Kids.ts#L37)
+
+***
+
+### search()
+
+> **search**(`query`): `Promise`\<[`Search`](../../YTKids/classes/Search.md)\>
+
+Searches the given query.
+
+#### Parameters
+
+β’ **query**: `string`
+
+The query.
+
+#### Returns
+
+`Promise`\<[`Search`](../../YTKids/classes/Search.md)\>
+
+#### Defined in
+
+[src/core/clients/Kids.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Kids.ts#L26)
diff --git a/docs/api/namespaces/Clients/classes/Music.md b/docs/api/namespaces/Clients/classes/Music.md
new file mode 100644
index 000000000..f0c4a6c8f
--- /dev/null
+++ b/docs/api/namespaces/Clients/classes/Music.md
@@ -0,0 +1,291 @@
+[youtubei.js](../../../README.md) / [Clients](../README.md) / Music
+
+# Class: Music
+
+## Constructors
+
+### new Music()
+
+> **new Music**(`session`): [`Music`](Music.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](../../../classes/Session.md)
+
+#### Returns
+
+[`Music`](Music.md)
+
+#### Defined in
+
+[src/core/clients/Music.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L40)
+
+## Methods
+
+### getAlbum()
+
+> **getAlbum**(`album_id`): `Promise`\<[`Album`](../../YTMusic/classes/Album.md)\>
+
+Retrieves album.
+
+#### Parameters
+
+β’ **album\_id**: `string`
+
+The album id.
+
+#### Returns
+
+`Promise`\<[`Album`](../../YTMusic/classes/Album.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:209](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L209)
+
+***
+
+### getArtist()
+
+> **getArtist**(`artist_id`): `Promise`\<[`Artist`](../../YTMusic/classes/Artist.md)\>
+
+Retrieves artist's info & content.
+
+#### Parameters
+
+β’ **artist\_id**: `string`
+
+The artist id.
+
+#### Returns
+
+`Promise`\<[`Artist`](../../YTMusic/classes/Artist.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:189](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L189)
+
+***
+
+### getExplore()
+
+> **getExplore**(): `Promise`\<[`Explore`](../../YTMusic/classes/Explore.md)\>
+
+Retrieves the Explore feed.
+
+#### Returns
+
+`Promise`\<[`Explore`](../../YTMusic/classes/Explore.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:159](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L159)
+
+***
+
+### getHomeFeed()
+
+> **getHomeFeed**(): `Promise`\<[`HomeFeed`](../../YTMusic/classes/HomeFeed.md)\>
+
+Retrieves the home feed.
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](../../YTMusic/classes/HomeFeed.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:145](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L145)
+
+***
+
+### getInfo()
+
+> **getInfo**(`target`): `Promise`\<[`TrackInfo`](../../YTMusic/classes/TrackInfo.md)\>
+
+Retrieves track info. Passing a list item of type MusicTwoRowItem automatically starts a radio.
+
+#### Parameters
+
+β’ **target**: `string` \| [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md) \| [`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md) \| [`MusicTwoRowItem`](../../YTNodes/classes/MusicTwoRowItem.md)
+
+Video id or a list item.
+
+#### Returns
+
+`Promise`\<[`TrackInfo`](../../YTMusic/classes/TrackInfo.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:49](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L49)
+
+***
+
+### getLibrary()
+
+> **getLibrary**(): `Promise`\<[`Library`](../../YTMusic/classes/Library.md)\>
+
+Retrieves the library.
+
+#### Returns
+
+`Promise`\<[`Library`](../../YTMusic/classes/Library.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:174](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L174)
+
+***
+
+### getLyrics()
+
+> **getLyrics**(`video_id`): `Promise`\<`undefined` \| [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)\>
+
+Retrieves song lyrics.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video id.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:325](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L325)
+
+***
+
+### getPlaylist()
+
+> **getPlaylist**(`playlist_id`): `Promise`\<[`Playlist`](../../YTMusic/classes/Playlist.md)\>
+
+Retrieves playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist id.
+
+#### Returns
+
+`Promise`\<[`Playlist`](../../YTMusic/classes/Playlist.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:229](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L229)
+
+***
+
+### getRecap()
+
+> **getRecap**(): `Promise`\<[`Recap`](../../YTMusic/classes/Recap.md)\>
+
+Retrieves recap.
+
+#### Returns
+
+`Promise`\<[`Recap`](../../YTMusic/classes/Recap.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:355](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L355)
+
+***
+
+### getRelated()
+
+> **getRelated**(`video_id`): `Promise`\<[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`Message`](../../YTNodes/classes/Message.md)\>
+
+Retrieves related content.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video id.
+
+#### Returns
+
+`Promise`\<[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`Message`](../../YTNodes/classes/Message.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:297](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L297)
+
+***
+
+### getSearchSuggestions()
+
+> **getSearchSuggestions**(`query`): `Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`SearchSuggestionsSection`](../../YTNodes/classes/SearchSuggestionsSection.md)\>\>
+
+Retrieves search suggestions for the given query.
+
+#### Parameters
+
+β’ **query**: `string`
+
+The query.
+
+#### Returns
+
+`Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`SearchSuggestionsSection`](../../YTNodes/classes/SearchSuggestionsSection.md)\>\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:370](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L370)
+
+***
+
+### getUpNext()
+
+> **getUpNext**(`video_id`, `automix`): `Promise`\<[`PlaylistPanel`](../../YTNodes/classes/PlaylistPanel.md)\>
+
+Retrieves up next.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video id.
+
+β’ **automix**: `boolean` = `true`
+
+Whether to enable automix.
+
+#### Returns
+
+`Promise`\<[`PlaylistPanel`](../../YTNodes/classes/PlaylistPanel.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:251](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L251)
+
+***
+
+### search()
+
+> **search**(`query`, `filters`): `Promise`\<[`Search`](../../YTMusic/classes/Search.md)\>
+
+Searches on YouTube Music.
+
+#### Parameters
+
+β’ **query**: `string`
+
+Search query.
+
+β’ **filters**: [`MusicSearchFilters`](../../Types/type-aliases/MusicSearchFilters.md) = `{}`
+
+Search filters.
+
+#### Returns
+
+`Promise`\<[`Search`](../../YTMusic/classes/Search.md)\>
+
+#### Defined in
+
+[src/core/clients/Music.ts:116](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Music.ts#L116)
diff --git a/docs/api/namespaces/Clients/classes/Studio.md b/docs/api/namespaces/Clients/classes/Studio.md
new file mode 100644
index 000000000..294ed834b
--- /dev/null
+++ b/docs/api/namespaces/Clients/classes/Studio.md
@@ -0,0 +1,89 @@
+[youtubei.js](../../../README.md) / [Clients](../README.md) / Studio
+
+# Class: Studio
+
+## Constructors
+
+### new Studio()
+
+> **new Studio**(`session`): [`Studio`](Studio.md)
+
+#### Parameters
+
+β’ **session**: [`Session`](../../../classes/Session.md)
+
+#### Returns
+
+[`Studio`](Studio.md)
+
+#### Defined in
+
+[src/core/clients/Studio.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Studio.ts#L26)
+
+## Methods
+
+### updateVideoMetadata()
+
+> **updateVideoMetadata**(`video_id`, `metadata`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Updates the metadata of a video.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+β’ **metadata**: `Partial`\<`object`\>
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Example
+
+```ts
+const videoId = 'abcdefg';
+const thumbnail = fs.readFileSync('./my_awesome_thumbnail.jpg');
+
+const response = await yt.studio.updateVideoMetadata(videoId, {
+ tags: [ 'astronomy', 'NASA', 'APOD' ],
+ title: 'Artemis Mission',
+ description: 'A nicely written description...',
+ category: 27,
+ license: 'creative_commons',
+ thumbnail,
+ // ...
+});
+```
+
+#### Defined in
+
+[src/core/clients/Studio.ts:48](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Studio.ts#L48)
+
+***
+
+### upload()
+
+> **upload**(`file`, `metadata`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Uploads a video to YouTube.
+
+#### Parameters
+
+β’ **file**: `BodyInit`
+
+β’ **metadata**: `Partial`\<`object`\> = `{}`
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Example
+
+```ts
+const file = fs.readFileSync('./my_awesome_video.mp4');
+const response = await yt.studio.upload(file.buffer, { title: 'Wow!' });
+```
+
+#### Defined in
+
+[src/core/clients/Studio.ts:151](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/clients/Studio.ts#L151)
diff --git a/docs/api/namespaces/Constants/README.md b/docs/api/namespaces/Constants/README.md
new file mode 100644
index 000000000..989e7758b
--- /dev/null
+++ b/docs/api/namespaces/Constants/README.md
@@ -0,0 +1,14 @@
+[youtubei.js](../../README.md) / Constants
+
+# Constants
+
+## Index
+
+### Variables
+
+- [CLIENTS](variables/CLIENTS.md)
+- [INNERTUBE\_HEADERS\_BASE](variables/INNERTUBE_HEADERS_BASE.md)
+- [OAUTH](variables/OAUTH.md)
+- [STREAM\_HEADERS](variables/STREAM_HEADERS.md)
+- [SUPPORTED\_CLIENTS](variables/SUPPORTED_CLIENTS.md)
+- [URLS](variables/URLS.md)
diff --git a/docs/api/namespaces/Constants/variables/CLIENTS.md b/docs/api/namespaces/Constants/variables/CLIENTS.md
new file mode 100644
index 000000000..e47976230
--- /dev/null
+++ b/docs/api/namespaces/Constants/variables/CLIENTS.md
@@ -0,0 +1,195 @@
+[youtubei.js](../../../README.md) / [Constants](../README.md) / CLIENTS
+
+# Variable: CLIENTS
+
+> `const` **CLIENTS**: `Readonly`\<`object`\>
+
+## Type declaration
+
+### ANDROID
+
+> **ANDROID**: `object`
+
+### ANDROID.NAME
+
+> **NAME**: `string` = `'ANDROID'`
+
+### ANDROID.NAME\_ID
+
+> **NAME\_ID**: `string` = `'3'`
+
+### ANDROID.SDK\_VERSION
+
+> **SDK\_VERSION**: `number` = `33`
+
+### ANDROID.USER\_AGENT
+
+> **USER\_AGENT**: `string` = `'com.google.android.youtube/18.48.37(Linux; U; Android 13; en_US; sdk_gphone64_x86_64 Build/UPB4.230623.005) gzip'`
+
+### ANDROID.VERSION
+
+> **VERSION**: `string` = `'18.48.37'`
+
+### IOS
+
+> **IOS**: `object`
+
+### IOS.DEVICE\_MODEL
+
+> **DEVICE\_MODEL**: `string` = `'iPhone10,6'`
+
+### IOS.NAME
+
+> **NAME**: `string` = `'iOS'`
+
+### IOS.NAME\_ID
+
+> **NAME\_ID**: `string` = `'5'`
+
+### IOS.USER\_AGENT
+
+> **USER\_AGENT**: `string` = `'com.google.ios.youtube/18.06.35 (iPhone; CPU iPhone OS 14_4 like Mac OS X; en_US)'`
+
+### IOS.VERSION
+
+> **VERSION**: `string` = `'18.06.35'`
+
+### TV\_EMBEDDED
+
+> **TV\_EMBEDDED**: `object`
+
+### TV\_EMBEDDED.NAME
+
+> **NAME**: `string` = `'TVHTML5_SIMPLY_EMBEDDED_PLAYER'`
+
+### TV\_EMBEDDED.NAME\_ID
+
+> **NAME\_ID**: `string` = `'85'`
+
+### TV\_EMBEDDED.VERSION
+
+> **VERSION**: `string` = `'2.0'`
+
+### WEB
+
+> **WEB**: `object`
+
+### WEB.API\_KEY
+
+> **API\_KEY**: `string` = `'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8'`
+
+### WEB.API\_VERSION
+
+> **API\_VERSION**: `string` = `'v1'`
+
+### WEB.NAME
+
+> **NAME**: `string` = `'WEB'`
+
+### WEB.NAME\_ID
+
+> **NAME\_ID**: `string` = `'1'`
+
+### WEB.STATIC\_VISITOR\_ID
+
+> **STATIC\_VISITOR\_ID**: `string` = `'6zpwvWUNAco'`
+
+### WEB.VERSION
+
+> **VERSION**: `string` = `'2.20240111.09.00'`
+
+### WEB\_EMBEDDED
+
+> **WEB\_EMBEDDED**: `object`
+
+### WEB\_EMBEDDED.API\_KEY
+
+> **API\_KEY**: `string` = `'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8'`
+
+### WEB\_EMBEDDED.API\_VERSION
+
+> **API\_VERSION**: `string` = `'v1'`
+
+### WEB\_EMBEDDED.NAME
+
+> **NAME**: `string` = `'WEB_EMBEDDED_PLAYER'`
+
+### WEB\_EMBEDDED.NAME\_ID
+
+> **NAME\_ID**: `string` = `'56'`
+
+### WEB\_EMBEDDED.STATIC\_VISITOR\_ID
+
+> **STATIC\_VISITOR\_ID**: `string` = `'6zpwvWUNAco'`
+
+### WEB\_EMBEDDED.VERSION
+
+> **VERSION**: `string` = `'2.20240111.09.00'`
+
+### WEB\_KIDS
+
+> **WEB\_KIDS**: `object`
+
+### WEB\_KIDS.NAME
+
+> **NAME**: `string` = `'WEB_KIDS'`
+
+### WEB\_KIDS.NAME\_ID
+
+> **NAME\_ID**: `string` = `'76'`
+
+### WEB\_KIDS.VERSION
+
+> **VERSION**: `string` = `'2.20230111.00.00'`
+
+### YTMUSIC
+
+> **YTMUSIC**: `object`
+
+### YTMUSIC.NAME
+
+> **NAME**: `string` = `'WEB_REMIX'`
+
+### YTMUSIC.NAME\_ID
+
+> **NAME\_ID**: `string` = `'67'`
+
+### YTMUSIC.VERSION
+
+> **VERSION**: `string` = `'1.20211213.00.00'`
+
+### YTMUSIC\_ANDROID
+
+> **YTMUSIC\_ANDROID**: `object`
+
+### YTMUSIC\_ANDROID.NAME
+
+> **NAME**: `string` = `'ANDROID_MUSIC'`
+
+### YTMUSIC\_ANDROID.NAME\_ID
+
+> **NAME\_ID**: `string` = `'21'`
+
+### YTMUSIC\_ANDROID.VERSION
+
+> **VERSION**: `string` = `'5.34.51'`
+
+### YTSTUDIO\_ANDROID
+
+> **YTSTUDIO\_ANDROID**: `object`
+
+### YTSTUDIO\_ANDROID.NAME
+
+> **NAME**: `string` = `'ANDROID_CREATOR'`
+
+### YTSTUDIO\_ANDROID.NAME\_ID
+
+> **NAME\_ID**: `string` = `'14'`
+
+### YTSTUDIO\_ANDROID.VERSION
+
+> **VERSION**: `string` = `'22.43.101'`
+
+## Defined in
+
+[src/utils/Constants.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Constants.ts#L25)
diff --git a/docs/api/namespaces/Constants/variables/INNERTUBE_HEADERS_BASE.md b/docs/api/namespaces/Constants/variables/INNERTUBE_HEADERS_BASE.md
new file mode 100644
index 000000000..ab5c949fc
--- /dev/null
+++ b/docs/api/namespaces/Constants/variables/INNERTUBE_HEADERS_BASE.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Constants](../README.md) / INNERTUBE\_HEADERS\_BASE
+
+# Variable: INNERTUBE\_HEADERS\_BASE
+
+> `const` **INNERTUBE\_HEADERS\_BASE**: `Readonly`\<`object`\>
+
+## Type declaration
+
+### accept
+
+> **accept**: `"*/*"` = `'*/*'`
+
+### accept-encoding
+
+> **accept-encoding**: `"gzip, deflate"` = `'gzip, deflate'`
+
+### content-type
+
+> **content-type**: `"application/json"` = `'application/json'`
+
+## Defined in
+
+[src/utils/Constants.ts:88](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Constants.ts#L88)
diff --git a/docs/api/namespaces/Constants/variables/OAUTH.md b/docs/api/namespaces/Constants/variables/OAUTH.md
new file mode 100644
index 000000000..488ca7e31
--- /dev/null
+++ b/docs/api/namespaces/Constants/variables/OAUTH.md
@@ -0,0 +1,25 @@
+[youtubei.js](../../../README.md) / [Constants](../README.md) / OAUTH
+
+# Variable: OAUTH
+
+> `const` **OAUTH**: `Readonly`\<`object`\>
+
+## Type declaration
+
+### REGEX
+
+> **REGEX**: `Readonly`\<`object`\>
+
+#### Type declaration
+
+##### CLIENT\_IDENTITY
+
+> **CLIENT\_IDENTITY**: `RegExp`
+
+##### TV\_SCRIPT
+
+> **TV\_SCRIPT**: `RegExp`
+
+## Defined in
+
+[src/utils/Constants.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Constants.ts#L19)
diff --git a/docs/api/namespaces/Constants/variables/STREAM_HEADERS.md b/docs/api/namespaces/Constants/variables/STREAM_HEADERS.md
new file mode 100644
index 000000000..bb6eba341
--- /dev/null
+++ b/docs/api/namespaces/Constants/variables/STREAM_HEADERS.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Constants](../README.md) / STREAM\_HEADERS
+
+# Variable: STREAM\_HEADERS
+
+> `const` **STREAM\_HEADERS**: `Readonly`\<`object`\>
+
+## Type declaration
+
+### accept
+
+> **accept**: `"*/*"` = `'*/*'`
+
+### DNT
+
+> **DNT**: `"?1"` = `'?1'`
+
+### origin
+
+> **origin**: `"https://www.youtube.com"` = `'https://www.youtube.com'`
+
+### referer
+
+> **referer**: `"https://www.youtube.com"` = `'https://www.youtube.com'`
+
+## Defined in
+
+[src/utils/Constants.ts:82](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Constants.ts#L82)
diff --git a/docs/api/namespaces/Constants/variables/SUPPORTED_CLIENTS.md b/docs/api/namespaces/Constants/variables/SUPPORTED_CLIENTS.md
new file mode 100644
index 000000000..cba03e1f3
--- /dev/null
+++ b/docs/api/namespaces/Constants/variables/SUPPORTED_CLIENTS.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Constants](../README.md) / SUPPORTED\_CLIENTS
+
+# Variable: SUPPORTED\_CLIENTS
+
+> `const` **SUPPORTED\_CLIENTS**: `string`[]
+
+## Defined in
+
+[src/utils/Constants.ts:94](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Constants.ts#L94)
diff --git a/docs/api/namespaces/Constants/variables/URLS.md b/docs/api/namespaces/Constants/variables/URLS.md
new file mode 100644
index 000000000..960163e4c
--- /dev/null
+++ b/docs/api/namespaces/Constants/variables/URLS.md
@@ -0,0 +1,69 @@
+[youtubei.js](../../../README.md) / [Constants](../README.md) / URLS
+
+# Variable: URLS
+
+> `const` **URLS**: `Readonly`\<`object`\>
+
+## Type declaration
+
+### API
+
+> **API**: `Readonly`\<`object`\>
+
+#### Type declaration
+
+##### BASE
+
+> **BASE**: `"https://youtubei.googleapis.com"` = `'https://youtubei.googleapis.com'`
+
+##### CAMI
+
+> **CAMI**: `"http://cami-youtubei.sandbox.googleapis.com/youtubei/"` = `'http://cami-youtubei.sandbox.googleapis.com/youtubei/'`
+
+##### PRODUCTION\_1
+
+> **PRODUCTION\_1**: `"https://www.youtube.com/youtubei/"` = `'https://www.youtube.com/youtubei/'`
+
+##### PRODUCTION\_2
+
+> **PRODUCTION\_2**: `"https://youtubei.googleapis.com/youtubei/"` = `'https://youtubei.googleapis.com/youtubei/'`
+
+##### RELEASE
+
+> **RELEASE**: `"https://release-youtubei.sandbox.googleapis.com/youtubei/"` = `'https://release-youtubei.sandbox.googleapis.com/youtubei/'`
+
+##### STAGING
+
+> **STAGING**: `"https://green-youtubei.sandbox.googleapis.com/youtubei/"` = `'https://green-youtubei.sandbox.googleapis.com/youtubei/'`
+
+##### TEST
+
+> **TEST**: `"https://test-youtubei.sandbox.googleapis.com/youtubei/"` = `'https://test-youtubei.sandbox.googleapis.com/youtubei/'`
+
+##### UYTFE
+
+> **UYTFE**: `"https://uytfe.sandbox.google.com/youtubei/"` = `'https://uytfe.sandbox.google.com/youtubei/'`
+
+### GOOGLE\_SEARCH\_BASE
+
+> **GOOGLE\_SEARCH\_BASE**: `"https://www.google.com/"` = `'https://www.google.com/'`
+
+### YT\_BASE
+
+> **YT\_BASE**: `"https://www.youtube.com"` = `'https://www.youtube.com'`
+
+### YT\_MUSIC\_BASE
+
+> **YT\_MUSIC\_BASE**: `"https://music.youtube.com"` = `'https://music.youtube.com'`
+
+### YT\_SUGGESTIONS
+
+> **YT\_SUGGESTIONS**: `"https://suggestqueries.google.com/complete/"` = `'https://suggestqueries.google.com/complete/'`
+
+### YT\_UPLOAD
+
+> **YT\_UPLOAD**: `"https://upload.youtube.com/"` = `'https://upload.youtube.com/'`
+
+## Defined in
+
+[src/utils/Constants.ts:2](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Constants.ts#L2)
diff --git a/docs/api/namespaces/Endpoints/README.md b/docs/api/namespaces/Endpoints/README.md
new file mode 100644
index 000000000..0b7160834
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/README.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../README.md) / Endpoints
+
+# Endpoints
+
+## Index
+
+### Namespaces
+
+- [Account](namespaces/Account/README.md)
+- [Browse](namespaces/Browse/README.md)
+- [BrowseEndpoint](namespaces/BrowseEndpoint/README.md)
+- [Channel](namespaces/Channel/README.md)
+- [Comment](namespaces/Comment/README.md)
+- [GetNotificationMenuEndpoint](namespaces/GetNotificationMenuEndpoint/README.md)
+- [GuideEndpoint](namespaces/GuideEndpoint/README.md)
+- [Kids](namespaces/Kids/README.md)
+- [Like](namespaces/Like/README.md)
+- [Music](namespaces/Music/README.md)
+- [NextEndpoint](namespaces/NextEndpoint/README.md)
+- [Notification](namespaces/Notification/README.md)
+- [PlayerEndpoint](namespaces/PlayerEndpoint/README.md)
+- [Playlist](namespaces/Playlist/README.md)
+- [Reel](namespaces/Reel/README.md)
+- [ResolveURLEndpoint](namespaces/ResolveURLEndpoint/README.md)
+- [SearchEndpoint](namespaces/SearchEndpoint/README.md)
+- [Subscription](namespaces/Subscription/README.md)
+- [Upload](namespaces/Upload/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Account/README.md b/docs/api/namespaces/Endpoints/namespaces/Account/README.md
new file mode 100644
index 000000000..c71dd86d3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Account/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Account
+
+# Account
+
+## Index
+
+### Namespaces
+
+- [AccountListEndpoint](namespaces/AccountListEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/README.md
new file mode 100644
index 000000000..e358c5cca
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Account](../../README.md) / AccountListEndpoint
+
+# AccountListEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/functions/build.md
new file mode 100644
index 000000000..316528a30
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/functions/build.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Account](../../../README.md) / [AccountListEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(): [`IAccountListRequest`](../../../../../../Types/interfaces/IAccountListRequest.md)
+
+Builds a `/account/accounts_list` request payload.
+
+## Returns
+
+[`IAccountListRequest`](../../../../../../Types/interfaces/IAccountListRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/account/AccountListEndpoint.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/account/AccountListEndpoint.ts#L9)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/variables/PATH.md
new file mode 100644
index 000000000..75f838193
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Account/namespaces/AccountListEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Account](../../../README.md) / [AccountListEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/account/accounts_list"` = `'/account/accounts_list'`
+
+## Defined in
+
+[src/core/endpoints/account/AccountListEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/account/AccountListEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Browse/README.md b/docs/api/namespaces/Endpoints/namespaces/Browse/README.md
new file mode 100644
index 000000000..f7d087070
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Browse/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Browse
+
+# Browse
+
+## Index
+
+### Namespaces
+
+- [EditPlaylistEndpoint](namespaces/EditPlaylistEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/README.md
new file mode 100644
index 000000000..d12b830a7
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Browse](../../README.md) / EditPlaylistEndpoint
+
+# EditPlaylistEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/functions/build.md
new file mode 100644
index 000000000..9400f806d
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Browse](../../../README.md) / [EditPlaylistEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IEditPlaylistRequest`](../../../../../../Types/type-aliases/IEditPlaylistRequest.md)
+
+Builds a `/browse/edit_playlist` request payload.
+
+## Parameters
+
+β’ **opts**: [`EditPlaylistEndpointOptions`](../../../../../../Types/type-aliases/EditPlaylistEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IEditPlaylistRequest`](../../../../../../Types/type-aliases/IEditPlaylistRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/browse/EditPlaylistEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/browse/EditPlaylistEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/variables/PATH.md
new file mode 100644
index 000000000..6a235dcf3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Browse/namespaces/EditPlaylistEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Browse](../../../README.md) / [EditPlaylistEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/browse/edit_playlist"` = `'/browse/edit_playlist'`
+
+## Defined in
+
+[src/core/endpoints/browse/EditPlaylistEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/browse/EditPlaylistEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/README.md
new file mode 100644
index 000000000..f3d24dafc
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / BrowseEndpoint
+
+# BrowseEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/functions/build.md
new file mode 100644
index 000000000..4dab13138
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [BrowseEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IBrowseRequest`](../../../../Types/type-aliases/IBrowseRequest.md)
+
+Builds a `/browse` request payload.
+
+## Parameters
+
+β’ **opts**: [`BrowseEndpointOptions`](../../../../Types/type-aliases/BrowseEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IBrowseRequest`](../../../../Types/type-aliases/IBrowseRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/BrowseEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/BrowseEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/variables/PATH.md
new file mode 100644
index 000000000..aca5a9135
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/BrowseEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [BrowseEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/browse"` = `'/browse'`
+
+## Defined in
+
+[src/core/endpoints/BrowseEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/BrowseEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/README.md b/docs/api/namespaces/Endpoints/namespaces/Channel/README.md
new file mode 100644
index 000000000..aa885237c
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Channel
+
+# Channel
+
+## Index
+
+### Namespaces
+
+- [EditDescriptionEndpoint](namespaces/EditDescriptionEndpoint/README.md)
+- [EditNameEndpoint](namespaces/EditNameEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/README.md
new file mode 100644
index 000000000..b1acaaebf
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Channel](../../README.md) / EditDescriptionEndpoint
+
+# EditDescriptionEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/functions/build.md
new file mode 100644
index 000000000..ae9f8a10b
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Channel](../../../README.md) / [EditDescriptionEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IChannelEditDescriptionRequest`](../../../../../../Types/interfaces/IChannelEditDescriptionRequest.md)
+
+Builds a `/channel/edit_description` request payload.
+
+## Parameters
+
+β’ **options**: [`ChannelEditDescriptionEndpointOptions`](../../../../../../Types/type-aliases/ChannelEditDescriptionEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IChannelEditDescriptionRequest`](../../../../../../Types/interfaces/IChannelEditDescriptionRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/channel/EditDescriptionEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/channel/EditDescriptionEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/variables/PATH.md
new file mode 100644
index 000000000..d85095ce2
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditDescriptionEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Channel](../../../README.md) / [EditDescriptionEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/channel/edit_description"` = `'/channel/edit_description'`
+
+## Defined in
+
+[src/core/endpoints/channel/EditDescriptionEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/channel/EditDescriptionEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/README.md
new file mode 100644
index 000000000..214384c8b
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Channel](../../README.md) / EditNameEndpoint
+
+# EditNameEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/functions/build.md
new file mode 100644
index 000000000..c5f400065
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Channel](../../../README.md) / [EditNameEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IChannelEditNameRequest`](../../../../../../Types/interfaces/IChannelEditNameRequest.md)
+
+Builds a `/channel/edit_name` request payload.
+
+## Parameters
+
+β’ **options**: [`ChannelEditNameEndpointOptions`](../../../../../../Types/type-aliases/ChannelEditNameEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IChannelEditNameRequest`](../../../../../../Types/interfaces/IChannelEditNameRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/channel/EditNameEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/channel/EditNameEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/variables/PATH.md
new file mode 100644
index 000000000..e25bd6148
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Channel/namespaces/EditNameEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Channel](../../../README.md) / [EditNameEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/channel/edit_name"` = `'/channel/edit_name'`
+
+## Defined in
+
+[src/core/endpoints/channel/EditNameEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/channel/EditNameEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/README.md b/docs/api/namespaces/Endpoints/namespaces/Comment/README.md
new file mode 100644
index 000000000..044256670
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Comment
+
+# Comment
+
+## Index
+
+### Namespaces
+
+- [CreateCommentEndpoint](namespaces/CreateCommentEndpoint/README.md)
+- [PerformCommentActionEndpoint](namespaces/PerformCommentActionEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/README.md
new file mode 100644
index 000000000..edab77bf6
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Comment](../../README.md) / CreateCommentEndpoint
+
+# CreateCommentEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/functions/build.md
new file mode 100644
index 000000000..2884a325f
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Comment](../../../README.md) / [CreateCommentEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`ICreateCommentRequest`](../../../../../../Types/type-aliases/ICreateCommentRequest.md)
+
+Builds a `/comment/create_comment` request payload.
+
+## Parameters
+
+β’ **options**: [`CreateCommentEndpointOptions`](../../../../../../Types/type-aliases/CreateCommentEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`ICreateCommentRequest`](../../../../../../Types/type-aliases/ICreateCommentRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/comment/CreateCommentEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/comment/CreateCommentEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/variables/PATH.md
new file mode 100644
index 000000000..439607171
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/CreateCommentEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Comment](../../../README.md) / [CreateCommentEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/comment/create_comment"` = `'/comment/create_comment'`
+
+## Defined in
+
+[src/core/endpoints/comment/CreateCommentEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/comment/CreateCommentEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/README.md
new file mode 100644
index 000000000..5fbc488b4
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Comment](../../README.md) / PerformCommentActionEndpoint
+
+# PerformCommentActionEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/functions/build.md
new file mode 100644
index 000000000..0cd4199c3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Comment](../../../README.md) / [PerformCommentActionEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IPerformCommentActionRequest`](../../../../../../Types/interfaces/IPerformCommentActionRequest.md)
+
+Builds a `/comment/perform_comment_action` request payload.
+
+## Parameters
+
+β’ **options**: [`IPerformCommentActionRequest`](../../../../../../Types/interfaces/IPerformCommentActionRequest.md)
+
+The options to use.
+
+## Returns
+
+[`IPerformCommentActionRequest`](../../../../../../Types/interfaces/IPerformCommentActionRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/comment/PerformCommentActionEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/comment/PerformCommentActionEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/variables/PATH.md
new file mode 100644
index 000000000..32f0ca066
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Comment/namespaces/PerformCommentActionEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Comment](../../../README.md) / [PerformCommentActionEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/comment/perform_comment_action"` = `'/comment/perform_comment_action'`
+
+## Defined in
+
+[src/core/endpoints/comment/PerformCommentActionEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/comment/PerformCommentActionEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/README.md
new file mode 100644
index 000000000..a4c639ed2
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / GetNotificationMenuEndpoint
+
+# GetNotificationMenuEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/functions/build.md
new file mode 100644
index 000000000..cf808b5bf
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [GetNotificationMenuEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IGetNotificationMenuRequest`](../../../../Types/type-aliases/IGetNotificationMenuRequest.md)
+
+Builds a `/get_notification_menu` request payload.
+
+## Parameters
+
+β’ **opts**: [`GetNotificationMenuEndpointOptions`](../../../../Types/type-aliases/GetNotificationMenuEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IGetNotificationMenuRequest`](../../../../Types/type-aliases/IGetNotificationMenuRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/GetNotificationMenuEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/GetNotificationMenuEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/variables/PATH.md
new file mode 100644
index 000000000..68af7b61f
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/GetNotificationMenuEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [GetNotificationMenuEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/notification/get_notification_menu"` = `'/notification/get_notification_menu'`
+
+## Defined in
+
+[src/core/endpoints/GetNotificationMenuEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/GetNotificationMenuEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/GuideEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/GuideEndpoint/README.md
new file mode 100644
index 000000000..f1dc39c48
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/GuideEndpoint/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / GuideEndpoint
+
+# GuideEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/GuideEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/GuideEndpoint/variables/PATH.md
new file mode 100644
index 000000000..eb11eaf87
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/GuideEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [GuideEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/guide"` = `'/guide'`
+
+## Defined in
+
+[src/core/endpoints/GuideEndpoint.ts:1](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/GuideEndpoint.ts#L1)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Kids/README.md b/docs/api/namespaces/Endpoints/namespaces/Kids/README.md
new file mode 100644
index 000000000..ea6769651
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Kids/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Kids
+
+# Kids
+
+## Index
+
+### Namespaces
+
+- [BlocklistPickerEndpoint](namespaces/BlocklistPickerEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/README.md
new file mode 100644
index 000000000..f37c0ef6c
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Kids](../../README.md) / BlocklistPickerEndpoint
+
+# BlocklistPickerEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/functions/build.md
new file mode 100644
index 000000000..42995ab51
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Kids](../../../README.md) / [BlocklistPickerEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IBlocklistPickerRequest`](../../../../../../Types/type-aliases/IBlocklistPickerRequest.md)
+
+Builds a `/kids/get_kids_blocklist_picker` request payload.
+
+## Parameters
+
+β’ **options**: [`BlocklistPickerRequestEndpointOptions`](../../../../../../Types/type-aliases/BlocklistPickerRequestEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IBlocklistPickerRequest`](../../../../../../Types/type-aliases/IBlocklistPickerRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/kids/BlocklistPickerEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/kids/BlocklistPickerEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/variables/PATH.md
new file mode 100644
index 000000000..8b0bcf8bc
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Kids/namespaces/BlocklistPickerEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Kids](../../../README.md) / [BlocklistPickerEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/kids/get_kids_blocklist_picker"` = `'/kids/get_kids_blocklist_picker'`
+
+## Defined in
+
+[src/core/endpoints/kids/BlocklistPickerEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/kids/BlocklistPickerEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/README.md b/docs/api/namespaces/Endpoints/namespaces/Like/README.md
new file mode 100644
index 000000000..51f9914fa
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/README.md
@@ -0,0 +1,11 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Like
+
+# Like
+
+## Index
+
+### Namespaces
+
+- [DislikeEndpoint](namespaces/DislikeEndpoint/README.md)
+- [LikeEndpoint](namespaces/LikeEndpoint/README.md)
+- [RemoveLikeEndpoint](namespaces/RemoveLikeEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/README.md
new file mode 100644
index 000000000..d38be5c16
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Like](../../README.md) / DislikeEndpoint
+
+# DislikeEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/functions/build.md
new file mode 100644
index 000000000..915d70e90
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Like](../../../README.md) / [DislikeEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IDislikeRequest`](../../../../../../Types/type-aliases/IDislikeRequest.md)
+
+Builds a `/like/dislike` endpoint payload.
+
+## Parameters
+
+β’ **options**: [`LikeEndpointOptions`](../../../../../../Types/type-aliases/LikeEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IDislikeRequest`](../../../../../../Types/type-aliases/IDislikeRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/like/DislikeEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/like/DislikeEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/variables/PATH.md
new file mode 100644
index 000000000..da6051957
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/DislikeEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Like](../../../README.md) / [DislikeEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/like/dislike"` = `'/like/dislike'`
+
+## Defined in
+
+[src/core/endpoints/like/DislikeEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/like/DislikeEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/README.md
new file mode 100644
index 000000000..63a21d6c6
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Like](../../README.md) / LikeEndpoint
+
+# LikeEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/functions/build.md
new file mode 100644
index 000000000..1ccc519e6
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Like](../../../README.md) / [LikeEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`ILikeRequest`](../../../../../../Types/type-aliases/ILikeRequest.md)
+
+Builds a `/like/like` endpoint payload.
+
+## Parameters
+
+β’ **options**: [`LikeEndpointOptions`](../../../../../../Types/type-aliases/LikeEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`ILikeRequest`](../../../../../../Types/type-aliases/ILikeRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/like/LikeEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/like/LikeEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/variables/PATH.md
new file mode 100644
index 000000000..86e48be39
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/LikeEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Like](../../../README.md) / [LikeEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/like/like"` = `'/like/like'`
+
+## Defined in
+
+[src/core/endpoints/like/LikeEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/like/LikeEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/README.md
new file mode 100644
index 000000000..ab4f85ba9
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Like](../../README.md) / RemoveLikeEndpoint
+
+# RemoveLikeEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/functions/build.md
new file mode 100644
index 000000000..dfc85ac70
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Like](../../../README.md) / [RemoveLikeEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IRemoveLikeRequest`](../../../../../../Types/type-aliases/IRemoveLikeRequest.md)
+
+Builds a `/like/removelike` endpoint payload.
+
+## Parameters
+
+β’ **options**: [`LikeEndpointOptions`](../../../../../../Types/type-aliases/LikeEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IRemoveLikeRequest`](../../../../../../Types/type-aliases/IRemoveLikeRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/like/RemoveLikeEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/like/RemoveLikeEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/variables/PATH.md
new file mode 100644
index 000000000..0afccf354
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Like/namespaces/RemoveLikeEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Like](../../../README.md) / [RemoveLikeEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/like/removelike"` = `'/like/removelike'`
+
+## Defined in
+
+[src/core/endpoints/like/RemoveLikeEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/like/RemoveLikeEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Music/README.md b/docs/api/namespaces/Endpoints/namespaces/Music/README.md
new file mode 100644
index 000000000..95dc620b7
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Music/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Music
+
+# Music
+
+## Index
+
+### Namespaces
+
+- [GetSearchSuggestionsEndpoint](namespaces/GetSearchSuggestionsEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/README.md
new file mode 100644
index 000000000..5aa29b07b
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Music](../../README.md) / GetSearchSuggestionsEndpoint
+
+# GetSearchSuggestionsEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/functions/build.md
new file mode 100644
index 000000000..77e16ca7f
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Music](../../../README.md) / [GetSearchSuggestionsEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IMusicGetSearchSuggestionsRequest`](../../../../../../Types/interfaces/IMusicGetSearchSuggestionsRequest.md)
+
+Builds a `/music/get_search_suggestions` request payload.
+
+## Parameters
+
+β’ **opts**: [`MusicGetSearchSuggestionsEndpointOptions`](../../../../../../Types/type-aliases/MusicGetSearchSuggestionsEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IMusicGetSearchSuggestionsRequest`](../../../../../../Types/interfaces/IMusicGetSearchSuggestionsRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/music/GetSearchSuggestionsEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/music/GetSearchSuggestionsEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/variables/PATH.md
new file mode 100644
index 000000000..68a47023f
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Music/namespaces/GetSearchSuggestionsEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Music](../../../README.md) / [GetSearchSuggestionsEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/music/get_search_suggestions"` = `'/music/get_search_suggestions'`
+
+## Defined in
+
+[src/core/endpoints/music/GetSearchSuggestionsEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/music/GetSearchSuggestionsEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/README.md
new file mode 100644
index 000000000..9faa56b28
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / NextEndpoint
+
+# NextEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/functions/build.md
new file mode 100644
index 000000000..e0ad7a516
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [NextEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`INextRequest`](../../../../Types/type-aliases/INextRequest.md)
+
+Builds a `/next` request payload.
+
+## Parameters
+
+β’ **opts**: [`NextEndpointOptions`](../../../../Types/type-aliases/NextEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`INextRequest`](../../../../Types/type-aliases/INextRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/NextEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/NextEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/variables/PATH.md
new file mode 100644
index 000000000..f29ec16da
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/NextEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [NextEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/next"` = `'/next'`
+
+## Defined in
+
+[src/core/endpoints/NextEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/NextEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Notification/README.md b/docs/api/namespaces/Endpoints/namespaces/Notification/README.md
new file mode 100644
index 000000000..a98ffbbf3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Notification/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Notification
+
+# Notification
+
+## Index
+
+### Namespaces
+
+- [GetUnseenCountEndpoint](namespaces/GetUnseenCountEndpoint/README.md)
+- [ModifyChannelPreferenceEndpoint](namespaces/ModifyChannelPreferenceEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/GetUnseenCountEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/GetUnseenCountEndpoint/README.md
new file mode 100644
index 000000000..06837d716
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/GetUnseenCountEndpoint/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Notification](../../README.md) / GetUnseenCountEndpoint
+
+# GetUnseenCountEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/GetUnseenCountEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/GetUnseenCountEndpoint/variables/PATH.md
new file mode 100644
index 000000000..14eb412a3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/GetUnseenCountEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Notification](../../../README.md) / [GetUnseenCountEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/notification/get_unseen_count"` = `'/notification/get_unseen_count'`
+
+## Defined in
+
+[src/core/endpoints/notification/GetUnseenCountEndpoint.ts:1](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/notification/GetUnseenCountEndpoint.ts#L1)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/README.md
new file mode 100644
index 000000000..631481fe3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Notification](../../README.md) / ModifyChannelPreferenceEndpoint
+
+# ModifyChannelPreferenceEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/functions/build.md
new file mode 100644
index 000000000..bf2c3f835
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Notification](../../../README.md) / [ModifyChannelPreferenceEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IModifyChannelPreferenceRequest`](../../../../../../Types/interfaces/IModifyChannelPreferenceRequest.md)
+
+Builds a `/notification/modify_channel_preference` request payload.
+
+## Parameters
+
+β’ **options**: [`IModifyChannelPreferenceRequest`](../../../../../../Types/interfaces/IModifyChannelPreferenceRequest.md)
+
+The options to use.
+
+## Returns
+
+[`IModifyChannelPreferenceRequest`](../../../../../../Types/interfaces/IModifyChannelPreferenceRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/notification/ModifyChannelPreferenceEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/notification/ModifyChannelPreferenceEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/variables/PATH.md
new file mode 100644
index 000000000..34e44acf8
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Notification/namespaces/ModifyChannelPreferenceEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Notification](../../../README.md) / [ModifyChannelPreferenceEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/notification/modify_channel_preference"` = `'/notification/modify_channel_preference'`
+
+## Defined in
+
+[src/core/endpoints/notification/ModifyChannelPreferenceEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/notification/ModifyChannelPreferenceEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/README.md
new file mode 100644
index 000000000..d09e8b627
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / PlayerEndpoint
+
+# PlayerEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/functions/build.md
new file mode 100644
index 000000000..1d099c634
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [PlayerEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IPlayerRequest`](../../../../Types/interfaces/IPlayerRequest.md)
+
+Builds a `/player` request payload.
+
+## Parameters
+
+β’ **opts**: [`PlayerEndpointOptions`](../../../../Types/type-aliases/PlayerEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IPlayerRequest`](../../../../Types/interfaces/IPlayerRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/PlayerEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/PlayerEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/variables/PATH.md
new file mode 100644
index 000000000..bc0fa426b
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/PlayerEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [PlayerEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/player"` = `'/player'`
+
+## Defined in
+
+[src/core/endpoints/PlayerEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/PlayerEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/README.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/README.md
new file mode 100644
index 000000000..e30fe96ab
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Playlist
+
+# Playlist
+
+## Index
+
+### Namespaces
+
+- [CreateEndpoint](namespaces/CreateEndpoint/README.md)
+- [DeleteEndpoint](namespaces/DeleteEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/README.md
new file mode 100644
index 000000000..f6a71b31d
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Playlist](../../README.md) / CreateEndpoint
+
+# CreateEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/functions/build.md
new file mode 100644
index 000000000..64b3c38b3
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Playlist](../../../README.md) / [CreateEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`ICreatePlaylistRequest`](../../../../../../Types/type-aliases/ICreatePlaylistRequest.md)
+
+Builds a `/playlist/create` request payload.
+
+## Parameters
+
+β’ **opts**: [`CreatePlaylistEndpointOptions`](../../../../../../Types/type-aliases/CreatePlaylistEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`ICreatePlaylistRequest`](../../../../../../Types/type-aliases/ICreatePlaylistRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/playlist/CreateEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/playlist/CreateEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/variables/PATH.md
new file mode 100644
index 000000000..8ab9bde67
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/CreateEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Playlist](../../../README.md) / [CreateEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/playlist/create"` = `'/playlist/create'`
+
+## Defined in
+
+[src/core/endpoints/playlist/CreateEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/playlist/CreateEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/README.md
new file mode 100644
index 000000000..4aa2ba9ff
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Playlist](../../README.md) / DeleteEndpoint
+
+# DeleteEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/functions/build.md
new file mode 100644
index 000000000..36a348451
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Playlist](../../../README.md) / [DeleteEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IDeletePlaylistRequest`](../../../../../../Types/type-aliases/IDeletePlaylistRequest.md)
+
+Builds a `/playlist/delete` request payload.
+
+## Parameters
+
+β’ **opts**: [`DeletePlaylistEndpointOptions`](../../../../../../Types/type-aliases/DeletePlaylistEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IDeletePlaylistRequest`](../../../../../../Types/type-aliases/IDeletePlaylistRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/playlist/DeleteEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/playlist/DeleteEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/variables/PATH.md
new file mode 100644
index 000000000..5389ce47c
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Playlist/namespaces/DeleteEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Playlist](../../../README.md) / [DeleteEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/playlist/delete"` = `'/playlist/delete'`
+
+## Defined in
+
+[src/core/endpoints/playlist/DeleteEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/playlist/DeleteEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/README.md b/docs/api/namespaces/Endpoints/namespaces/Reel/README.md
new file mode 100644
index 000000000..f6f8a5c9a
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Reel
+
+# Reel
+
+## Index
+
+### Namespaces
+
+- [ReelItemWatchEndpoint](namespaces/ReelItemWatchEndpoint/README.md)
+- [ReelWatchSequenceEndpoint](namespaces/ReelWatchSequenceEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/README.md
new file mode 100644
index 000000000..ab63b552e
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Reel](../../README.md) / ReelItemWatchEndpoint
+
+# ReelItemWatchEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/functions/build.md
new file mode 100644
index 000000000..0fcefcaa8
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Reel](../../../README.md) / [ReelItemWatchEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IReelItemWatchRequest`](../../../../../../Types/interfaces/IReelItemWatchRequest.md)
+
+Builds a `/reel/reel_watch_sequence` request payload.
+
+## Parameters
+
+β’ **opts**: [`ReelItemWatchEndpointOptions`](../../../../../../Types/type-aliases/ReelItemWatchEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IReelItemWatchRequest`](../../../../../../Types/interfaces/IReelItemWatchRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/reel/ReelItemWatchEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/reel/ReelItemWatchEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/variables/PATH.md
new file mode 100644
index 000000000..bb34f7ffc
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelItemWatchEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Reel](../../../README.md) / [ReelItemWatchEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/reel/reel_item_watch"` = `'/reel/reel_item_watch'`
+
+## Defined in
+
+[src/core/endpoints/reel/ReelItemWatchEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/reel/ReelItemWatchEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/README.md
new file mode 100644
index 000000000..fa8b7bad6
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Reel](../../README.md) / ReelWatchSequenceEndpoint
+
+# ReelWatchSequenceEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/functions/build.md
new file mode 100644
index 000000000..ae501ef10
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Reel](../../../README.md) / [ReelWatchSequenceEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IReelWatchSequenceRequest`](../../../../../../Types/interfaces/IReelWatchSequenceRequest.md)
+
+Builds a `/reel/reel_watch_sequence` request payload.
+
+## Parameters
+
+β’ **opts**: [`ReelWatchSequenceEndpointOptions`](../../../../../../Types/type-aliases/ReelWatchSequenceEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IReelWatchSequenceRequest`](../../../../../../Types/interfaces/IReelWatchSequenceRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/reel/ReelWatchSequenceEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/reel/ReelWatchSequenceEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/variables/PATH.md
new file mode 100644
index 000000000..3681baa80
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Reel/namespaces/ReelWatchSequenceEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Reel](../../../README.md) / [ReelWatchSequenceEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/reel/reel_watch_sequence"` = `'/reel/reel_watch_sequence'`
+
+## Defined in
+
+[src/core/endpoints/reel/ReelWatchSequenceEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/reel/ReelWatchSequenceEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/README.md
new file mode 100644
index 000000000..f7cdee097
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / ResolveURLEndpoint
+
+# ResolveURLEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/functions/build.md
new file mode 100644
index 000000000..39421828e
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [ResolveURLEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`IResolveURLRequest`](../../../../Types/interfaces/IResolveURLRequest.md)
+
+Builds a `/resolve_url` request payload.
+
+## Parameters
+
+β’ **opts**: [`IResolveURLRequest`](../../../../Types/interfaces/IResolveURLRequest.md)
+
+The options to use.
+
+## Returns
+
+[`IResolveURLRequest`](../../../../Types/interfaces/IResolveURLRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/ResolveURLEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/ResolveURLEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/variables/PATH.md
new file mode 100644
index 000000000..a6844289e
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/ResolveURLEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [ResolveURLEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/navigation/resolve_url"` = `'/navigation/resolve_url'`
+
+## Defined in
+
+[src/core/endpoints/ResolveURLEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/ResolveURLEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/README.md
new file mode 100644
index 000000000..56f703d45
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / SearchEndpoint
+
+# SearchEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/functions/build.md
new file mode 100644
index 000000000..03568ca7a
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [SearchEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`ISearchRequest`](../../../../Types/interfaces/ISearchRequest.md)
+
+Builds a `/search` request payload.
+
+## Parameters
+
+β’ **opts**: [`ISearchRequest`](../../../../Types/interfaces/ISearchRequest.md)
+
+The options to use.
+
+## Returns
+
+[`ISearchRequest`](../../../../Types/interfaces/ISearchRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/SearchEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/SearchEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/variables/PATH.md
new file mode 100644
index 000000000..d33098784
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/SearchEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../README.md) / [Endpoints](../../../README.md) / [SearchEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/search"` = `'/search'`
+
+## Defined in
+
+[src/core/endpoints/SearchEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/SearchEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/README.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/README.md
new file mode 100644
index 000000000..c44b7c25e
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Subscription
+
+# Subscription
+
+## Index
+
+### Namespaces
+
+- [SubscribeEndpoint](namespaces/SubscribeEndpoint/README.md)
+- [UnsubscribeEndpoint](namespaces/UnsubscribeEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/README.md
new file mode 100644
index 000000000..8a6fa32df
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Subscription](../../README.md) / SubscribeEndpoint
+
+# SubscribeEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/functions/build.md
new file mode 100644
index 000000000..b0b98ea0a
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Subscription](../../../README.md) / [SubscribeEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`ISubscribeRequest`](../../../../../../Types/type-aliases/ISubscribeRequest.md)
+
+Builds a `/subscription/subscribe` endpoint payload.
+
+## Parameters
+
+β’ **options**: [`SubscribeEndpointOptions`](../../../../../../Types/type-aliases/SubscribeEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`ISubscribeRequest`](../../../../../../Types/type-aliases/ISubscribeRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/subscription/SubscribeEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/subscription/SubscribeEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/variables/PATH.md
new file mode 100644
index 000000000..51aa36df4
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/SubscribeEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Subscription](../../../README.md) / [SubscribeEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/subscription/subscribe"` = `'/subscription/subscribe'`
+
+## Defined in
+
+[src/core/endpoints/subscription/SubscribeEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/subscription/SubscribeEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/README.md
new file mode 100644
index 000000000..8cdf60f9c
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Subscription](../../README.md) / UnsubscribeEndpoint
+
+# UnsubscribeEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/functions/build.md
new file mode 100644
index 000000000..6f77c7a99
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Subscription](../../../README.md) / [UnsubscribeEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`options`): [`IUnsubscribeRequest`](../../../../../../Types/type-aliases/IUnsubscribeRequest.md)
+
+Builds a `/subscription/unsubscribe` endpoint payload.
+
+## Parameters
+
+β’ **options**: [`SubscribeEndpointOptions`](../../../../../../Types/type-aliases/SubscribeEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`IUnsubscribeRequest`](../../../../../../Types/type-aliases/IUnsubscribeRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/subscription/UnsubscribeEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/subscription/UnsubscribeEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/variables/PATH.md
new file mode 100644
index 000000000..f616b8801
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Subscription/namespaces/UnsubscribeEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Subscription](../../../README.md) / [UnsubscribeEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/subscription/unsubscribe"` = `'/subscription/unsubscribe'`
+
+## Defined in
+
+[src/core/endpoints/subscription/UnsubscribeEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/subscription/UnsubscribeEndpoint.ts#L3)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Upload/README.md b/docs/api/namespaces/Endpoints/namespaces/Upload/README.md
new file mode 100644
index 000000000..d784c9471
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Upload/README.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../README.md) / [Endpoints](../../README.md) / Upload
+
+# Upload
+
+## Index
+
+### Namespaces
+
+- [CreateVideoEndpoint](namespaces/CreateVideoEndpoint/README.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/README.md b/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/README.md
new file mode 100644
index 000000000..caa661c9b
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/README.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../../../../README.md) / [Endpoints](../../../../README.md) / [Upload](../../README.md) / CreateVideoEndpoint
+
+# CreateVideoEndpoint
+
+## Index
+
+### Variables
+
+- [PATH](variables/PATH.md)
+
+### Functions
+
+- [build](functions/build.md)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/functions/build.md b/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/functions/build.md
new file mode 100644
index 000000000..64c2691c7
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/functions/build.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Upload](../../../README.md) / [CreateVideoEndpoint](../README.md) / build
+
+# Function: build()
+
+> **build**(`opts`): [`ICreateVideoRequest`](../../../../../../Types/type-aliases/ICreateVideoRequest.md)
+
+Builds a `/upload/createvideo` request payload.
+
+## Parameters
+
+β’ **opts**: [`CreateVideoEndpointOptions`](../../../../../../Types/type-aliases/CreateVideoEndpointOptions.md)
+
+The options to use.
+
+## Returns
+
+[`ICreateVideoRequest`](../../../../../../Types/type-aliases/ICreateVideoRequest.md)
+
+The payload.
+
+## Defined in
+
+[src/core/endpoints/upload/CreateVideoEndpoint.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/upload/CreateVideoEndpoint.ts#L10)
diff --git a/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/variables/PATH.md b/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/variables/PATH.md
new file mode 100644
index 000000000..5e10cab13
--- /dev/null
+++ b/docs/api/namespaces/Endpoints/namespaces/Upload/namespaces/CreateVideoEndpoint/variables/PATH.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../../../../../README.md) / [Endpoints](../../../../../README.md) / [Upload](../../../README.md) / [CreateVideoEndpoint](../README.md) / PATH
+
+# Variable: PATH
+
+> `const` **PATH**: `"/upload/createvideo"` = `'/upload/createvideo'`
+
+## Defined in
+
+[src/core/endpoints/upload/CreateVideoEndpoint.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/endpoints/upload/CreateVideoEndpoint.ts#L3)
diff --git a/docs/api/namespaces/FormatUtils/README.md b/docs/api/namespaces/FormatUtils/README.md
new file mode 100644
index 000000000..b80f428ad
--- /dev/null
+++ b/docs/api/namespaces/FormatUtils/README.md
@@ -0,0 +1,11 @@
+[youtubei.js](../../README.md) / FormatUtils
+
+# FormatUtils
+
+## Index
+
+### Functions
+
+- [chooseFormat](functions/chooseFormat.md)
+- [download](functions/download.md)
+- [toDash](functions/toDash.md)
diff --git a/docs/api/namespaces/FormatUtils/functions/chooseFormat.md b/docs/api/namespaces/FormatUtils/functions/chooseFormat.md
new file mode 100644
index 000000000..96e36a9a8
--- /dev/null
+++ b/docs/api/namespaces/FormatUtils/functions/chooseFormat.md
@@ -0,0 +1,25 @@
+[youtubei.js](../../../README.md) / [FormatUtils](../README.md) / chooseFormat
+
+# Function: chooseFormat()
+
+> **chooseFormat**(`options`, `streaming_data`?): [`Format`](../../Misc/classes/Format.md)
+
+Selects the format that best matches the given options.
+
+## Parameters
+
+β’ **options**: [`FormatOptions`](../../Types/interfaces/FormatOptions.md)
+
+Options
+
+β’ **streaming\_data?**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+Streaming data
+
+## Returns
+
+[`Format`](../../Misc/classes/Format.md)
+
+## Defined in
+
+[src/utils/FormatUtils.ts:133](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/FormatUtils.ts#L133)
diff --git a/docs/api/namespaces/FormatUtils/functions/download.md b/docs/api/namespaces/FormatUtils/functions/download.md
new file mode 100644
index 000000000..1515cf38f
--- /dev/null
+++ b/docs/api/namespaces/FormatUtils/functions/download.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [FormatUtils](../README.md) / download
+
+# Function: download()
+
+> **download**(`options`, `actions`, `playability_status`?, `streaming_data`?, `player`?, `cpn`?): `Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+## Parameters
+
+β’ **options**: [`DownloadOptions`](../../Types/interfaces/DownloadOptions.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **playability\_status?**: [`IPlayabilityStatus`](../../APIResponseTypes/interfaces/IPlayabilityStatus.md)
+
+β’ **streaming\_data?**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+β’ **player?**: [`Player`](../../../classes/Player.md)
+
+β’ **cpn?**: `string`
+
+## Returns
+
+`Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+## Defined in
+
+[src/utils/FormatUtils.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/FormatUtils.ts#L10)
diff --git a/docs/api/namespaces/FormatUtils/functions/toDash.md b/docs/api/namespaces/FormatUtils/functions/toDash.md
new file mode 100644
index 000000000..1c1c4316d
--- /dev/null
+++ b/docs/api/namespaces/FormatUtils/functions/toDash.md
@@ -0,0 +1,35 @@
+[youtubei.js](../../../README.md) / [FormatUtils](../README.md) / toDash
+
+# Function: toDash()
+
+> **toDash**(`streaming_data`?, `is_post_live_dvr`?, `url_transformer`?, `format_filter`?, `cpn`?, `player`?, `actions`?, `storyboards`?, `caption_tracks`?, `options`?): `Promise`\<`string`\>
+
+## Parameters
+
+β’ **streaming\_data?**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+β’ **is\_post\_live\_dvr?**: `boolean` = `false`
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md) = `...`
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+β’ **cpn?**: `string`
+
+β’ **player?**: [`Player`](../../../classes/Player.md)
+
+β’ **actions?**: [`Actions`](../../../classes/Actions.md)
+
+β’ **storyboards?**: [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md) \| [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+
+β’ **caption\_tracks?**: `CaptionTrackData`[]
+
+β’ **options?**: `StreamingInfoOptions`
+
+## Returns
+
+`Promise`\<`string`\>
+
+## Defined in
+
+[src/utils/DashManifest.tsx:269](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/DashManifest.tsx#L269)
diff --git a/docs/api/namespaces/Generator/README.md b/docs/api/namespaces/Generator/README.md
new file mode 100644
index 000000000..38e5bbfc6
--- /dev/null
+++ b/docs/api/namespaces/Generator/README.md
@@ -0,0 +1,36 @@
+[youtubei.js](../../README.md) / Generator
+
+# Generator
+
+## Index
+
+### Interfaces
+
+- [ObjectInferenceType](interfaces/ObjectInferenceType.md)
+- [PrimativeInferenceType](interfaces/PrimativeInferenceType.md)
+- [RendererInferenceType](interfaces/RendererInferenceType.md)
+
+### Type Aliases
+
+- [ArrayInferenceType](type-aliases/ArrayInferenceType.md)
+- [InferenceType](type-aliases/InferenceType.md)
+- [KeyInfo](type-aliases/KeyInfo.md)
+- [MiscInferenceType](type-aliases/MiscInferenceType.md)
+
+### Functions
+
+- [camelToSnake](functions/camelToSnake.md)
+- [createRuntimeClass](functions/createRuntimeClass.md)
+- [generateRuntimeClass](functions/generateRuntimeClass.md)
+- [generateTypescriptClass](functions/generateTypescriptClass.md)
+- [inferType](functions/inferType.md)
+- [introspect](functions/introspect.md)
+- [isArrayType](functions/isArrayType.md)
+- [isIgnoredKey](functions/isIgnoredKey.md)
+- [isMiscType](functions/isMiscType.md)
+- [isRenderer](functions/isRenderer.md)
+- [isRendererList](functions/isRendererList.md)
+- [mergeKeyInfo](functions/mergeKeyInfo.md)
+- [parse](functions/parse.md)
+- [toParser](functions/toParser.md)
+- [toTypeDeclaration](functions/toTypeDeclaration.md)
diff --git a/docs/api/namespaces/Generator/functions/camelToSnake.md b/docs/api/namespaces/Generator/functions/camelToSnake.md
new file mode 100644
index 000000000..24c8f5fa8
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/camelToSnake.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / camelToSnake
+
+# Function: camelToSnake()
+
+> **camelToSnake**(`str`): `string`
+
+## Parameters
+
+β’ **str**: `string`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/parser/generator.ts:80](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L80)
diff --git a/docs/api/namespaces/Generator/functions/createRuntimeClass.md b/docs/api/namespaces/Generator/functions/createRuntimeClass.md
new file mode 100644
index 000000000..648c3042c
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/createRuntimeClass.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / createRuntimeClass
+
+# Function: createRuntimeClass()
+
+> **createRuntimeClass**(`classname`, `key_info`, `logger`): [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)
+
+Given a classname and its resolved key info, create a new class
+
+## Parameters
+
+β’ **classname**: `string`
+
+The name of the class
+
+β’ **key\_info**: [`KeyInfo`](../type-aliases/KeyInfo.md)
+
+The resolved key info
+
+β’ **logger**: [`ParserErrorHandler`](../../Parser/type-aliases/ParserErrorHandler.md)
+
+## Returns
+
+[`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)
+
+Class based on the key info extending YTNode
+
+## Defined in
+
+[src/parser/generator.ts:408](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L408)
diff --git a/docs/api/namespaces/Generator/functions/generateRuntimeClass.md b/docs/api/namespaces/Generator/functions/generateRuntimeClass.md
new file mode 100644
index 000000000..4492d47b1
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/generateRuntimeClass.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / generateRuntimeClass
+
+# Function: generateRuntimeClass()
+
+> **generateRuntimeClass**(`classname`, `classdata`, `logger`): [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Given example data for a class, introspect, implement dependencies, and create a new class
+
+## Parameters
+
+β’ **classname**: `string`
+
+The name of the class
+
+β’ **classdata**: `unknown`
+
+The example of the class
+
+β’ **logger**: [`ParserErrorHandler`](../../Parser/type-aliases/ParserErrorHandler.md)
+
+## Returns
+
+[`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Class based on the example classdata extending YTNode
+
+## Defined in
+
+[src/parser/generator.ts:470](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L470)
diff --git a/docs/api/namespaces/Generator/functions/generateTypescriptClass.md b/docs/api/namespaces/Generator/functions/generateTypescriptClass.md
new file mode 100644
index 000000000..6e3c6f79c
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/generateTypescriptClass.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / generateTypescriptClass
+
+# Function: generateTypescriptClass()
+
+> **generateTypescriptClass**(`classname`, `key_info`): `string`
+
+Generate a typescript class based on the key info
+
+## Parameters
+
+β’ **classname**: `string`
+
+The name of the class
+
+β’ **key\_info**: [`KeyInfo`](../type-aliases/KeyInfo.md)
+
+The key info, as returned by [introspect](introspect.md)
+
+## Returns
+
+`string`
+
+Typescript class file
+
+## Defined in
+
+[src/parser/generator.ts:491](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L491)
diff --git a/docs/api/namespaces/Generator/functions/inferType.md b/docs/api/namespaces/Generator/functions/inferType.md
new file mode 100644
index 000000000..f5d32ce37
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/inferType.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / inferType
+
+# Function: inferType()
+
+> **inferType**(`key`, `value`): [`InferenceType`](../type-aliases/InferenceType.md)
+
+Infer the type of a key given its value
+
+## Parameters
+
+β’ **key**: `string`
+
+The key to infer the type of
+
+β’ **value**: `unknown`
+
+The value of the key
+
+## Returns
+
+[`InferenceType`](../type-aliases/InferenceType.md)
+
+The inferred type
+
+## Defined in
+
+[src/parser/generator.ts:90](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L90)
diff --git a/docs/api/namespaces/Generator/functions/introspect.md b/docs/api/namespaces/Generator/functions/introspect.md
new file mode 100644
index 000000000..f863a46c5
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/introspect.md
@@ -0,0 +1,31 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / introspect
+
+# Function: introspect()
+
+> **introspect**(`classdata`): `object`
+
+Introspect an example of a class in order to determine its key info and dependencies
+
+## Parameters
+
+β’ **classdata**: `unknown`
+
+The example of the class
+
+## Returns
+
+`object`
+
+The key info and any unimplemented dependencies
+
+### key\_info
+
+> **key\_info**: readonly [`string`, [`InferenceType`](../type-aliases/InferenceType.md)][]
+
+### unimplemented\_dependencies
+
+> **unimplemented\_dependencies**: [`string`, `any`][]
+
+## Defined in
+
+[src/parser/generator.ts:374](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L374)
diff --git a/docs/api/namespaces/Generator/functions/isArrayType.md b/docs/api/namespaces/Generator/functions/isArrayType.md
new file mode 100644
index 000000000..81fffdebe
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/isArrayType.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / isArrayType
+
+# Function: isArrayType()
+
+> **isArrayType**(`value`): `false` \| [`ArrayInferenceType`](../type-aliases/ArrayInferenceType.md)
+
+Checks if the given value is an array
+
+## Parameters
+
+β’ **value**: `unknown`
+
+The value to check
+
+## Returns
+
+`false` \| [`ArrayInferenceType`](../type-aliases/ArrayInferenceType.md)
+
+If it is an array, return the InferenceType. Otherwise, return false.
+
+## Defined in
+
+[src/parser/generator.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L220)
diff --git a/docs/api/namespaces/Generator/functions/isIgnoredKey.md b/docs/api/namespaces/Generator/functions/isIgnoredKey.md
new file mode 100644
index 000000000..23c60202f
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/isIgnoredKey.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / isIgnoredKey
+
+# Function: isIgnoredKey()
+
+> **isIgnoredKey**(`key`): `boolean`
+
+Is this key ignored by the parser?
+
+## Parameters
+
+β’ **key**: `string` \| `symbol`
+
+The key to check
+
+## Returns
+
+`boolean`
+
+Whether or not the key is ignored
+
+## Defined in
+
+[src/parser/generator.ts:398](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L398)
diff --git a/docs/api/namespaces/Generator/functions/isMiscType.md b/docs/api/namespaces/Generator/functions/isMiscType.md
new file mode 100644
index 000000000..6380740f5
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/isMiscType.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / isMiscType
+
+# Function: isMiscType()
+
+> **isMiscType**(`key`, `value`): [`MiscInferenceType`](../type-aliases/MiscInferenceType.md) \| `false`
+
+Check if the given value is a misc type.
+
+## Parameters
+
+β’ **key**: `string`
+
+The key of the value
+
+β’ **value**: `unknown`
+
+The value to check
+
+## Returns
+
+[`MiscInferenceType`](../type-aliases/MiscInferenceType.md) \| `false`
+
+If it is a misc type, return the InferenceType. Otherwise, return false.
+
+## Defined in
+
+[src/parser/generator.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L161)
diff --git a/docs/api/namespaces/Generator/functions/isRenderer.md b/docs/api/namespaces/Generator/functions/isRenderer.md
new file mode 100644
index 000000000..2a23ed079
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/isRenderer.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / isRenderer
+
+# Function: isRenderer()
+
+> **isRenderer**(`value`): `string` \| `false`
+
+Check if the given value is a renderer
+
+## Parameters
+
+β’ **value**: `unknown`
+
+The value to check
+
+## Returns
+
+`string` \| `false`
+
+If it is a renderer, return the class name. Otherwise, return false.
+
+## Defined in
+
+[src/parser/generator.ts:200](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L200)
diff --git a/docs/api/namespaces/Generator/functions/isRendererList.md b/docs/api/namespaces/Generator/functions/isRendererList.md
new file mode 100644
index 000000000..0faec3421
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/isRendererList.md
@@ -0,0 +1,24 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / isRendererList
+
+# Function: isRendererList()
+
+> **isRendererList**(`value`): `false` \| `object`
+
+Checks if the given value is an array of renderers
+
+## Parameters
+
+β’ **value**: `unknown`
+
+The value to check
+
+## Returns
+
+`false` \| `object`
+
+If it is a renderer list, return an object with keys being the classnames, and values being an example of that class.
+Otherwise, return false.
+
+## Defined in
+
+[src/parser/generator.ts:139](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L139)
diff --git a/docs/api/namespaces/Generator/functions/mergeKeyInfo.md b/docs/api/namespaces/Generator/functions/mergeKeyInfo.md
new file mode 100644
index 000000000..10445fa2c
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/mergeKeyInfo.md
@@ -0,0 +1,35 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / mergeKeyInfo
+
+# Function: mergeKeyInfo()
+
+> **mergeKeyInfo**(`key_info`, `new_key_info`): `object`
+
+Merges two sets of key info, resolving any conflicts
+
+## Parameters
+
+β’ **key\_info**: [`KeyInfo`](../type-aliases/KeyInfo.md)
+
+The current key info
+
+β’ **new\_key\_info**: [`KeyInfo`](../type-aliases/KeyInfo.md)
+
+The new key info
+
+## Returns
+
+`object`
+
+The merged key info
+
+### changed\_keys
+
+> **changed\_keys**: [`string`, [`InferenceType`](../type-aliases/InferenceType.md)][]
+
+### resolved\_key\_info
+
+> **resolved\_key\_info**: [`string`, [`InferenceType`](../type-aliases/InferenceType.md)][]
+
+## Defined in
+
+[src/parser/generator.ts:736](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L736)
diff --git a/docs/api/namespaces/Generator/functions/parse.md b/docs/api/namespaces/Generator/functions/parse.md
new file mode 100644
index 000000000..f965be22c
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/parse.md
@@ -0,0 +1,35 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / parse
+
+# Function: parse()
+
+> **parse**(`key`, `inference_type`, `data`, `key_path`): `any`
+
+Parse a value from a given key path using the given inference type
+
+## Parameters
+
+β’ **key**: `string`
+
+The key to parse
+
+β’ **inference\_type**: [`InferenceType`](../type-aliases/InferenceType.md)
+
+The inference type to parse
+
+β’ **data**: `unknown`
+
+The data to parse from
+
+β’ **key\_path**: `string`[] = `...`
+
+The path to the key (excluding the key itself)
+
+## Returns
+
+`any`
+
+The parsed value
+
+## Defined in
+
+[src/parser/generator.ts:678](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L678)
diff --git a/docs/api/namespaces/Generator/functions/toParser.md b/docs/api/namespaces/Generator/functions/toParser.md
new file mode 100644
index 000000000..032871760
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/toParser.md
@@ -0,0 +1,35 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / toParser
+
+# Function: toParser()
+
+> **toParser**(`key`, `inference_type`, `key_path`, `indentation`): `string`
+
+Generate statements to parse a given inference type
+
+## Parameters
+
+β’ **key**: `string`
+
+The key to parse
+
+β’ **inference\_type**: [`InferenceType`](../type-aliases/InferenceType.md)
+
+The inference type to parse
+
+β’ **key\_path**: `string`[] = `...`
+
+The path to the key (excluding the key itself)
+
+β’ **indentation**: `number` = `1`
+
+The indentation level (used for objects)
+
+## Returns
+
+`string`
+
+Statement to parse the given key
+
+## Defined in
+
+[src/parser/generator.ts:575](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L575)
diff --git a/docs/api/namespaces/Generator/functions/toTypeDeclaration.md b/docs/api/namespaces/Generator/functions/toTypeDeclaration.md
new file mode 100644
index 000000000..1cf2b34ec
--- /dev/null
+++ b/docs/api/namespaces/Generator/functions/toTypeDeclaration.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / toTypeDeclaration
+
+# Function: toTypeDeclaration()
+
+> **toTypeDeclaration**(`inference_type`, `indentation`): `string`
+
+For a given inference type, get the typescript type declaration
+
+## Parameters
+
+β’ **inference\_type**: [`InferenceType`](../type-aliases/InferenceType.md)
+
+The inference type to get the declaration for
+
+β’ **indentation**: `number` = `0`
+
+The indentation level (used for objects)
+
+## Returns
+
+`string`
+
+Typescript type declaration
+
+## Defined in
+
+[src/parser/generator.ts:516](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L516)
diff --git a/docs/api/namespaces/Generator/interfaces/ObjectInferenceType.md b/docs/api/namespaces/Generator/interfaces/ObjectInferenceType.md
new file mode 100644
index 000000000..44ea1aca7
--- /dev/null
+++ b/docs/api/namespaces/Generator/interfaces/ObjectInferenceType.md
@@ -0,0 +1,33 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / ObjectInferenceType
+
+# Interface: ObjectInferenceType
+
+## Properties
+
+### keys
+
+> **keys**: [`KeyInfo`](../type-aliases/KeyInfo.md)
+
+#### Defined in
+
+[src/parser/generator.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L37)
+
+***
+
+### optional
+
+> **optional**: `boolean`
+
+#### Defined in
+
+[src/parser/generator.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L38)
+
+***
+
+### type
+
+> **type**: `"object"`
+
+#### Defined in
+
+[src/parser/generator.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L36)
diff --git a/docs/api/namespaces/Generator/interfaces/PrimativeInferenceType.md b/docs/api/namespaces/Generator/interfaces/PrimativeInferenceType.md
new file mode 100644
index 000000000..3cc86e56a
--- /dev/null
+++ b/docs/api/namespaces/Generator/interfaces/PrimativeInferenceType.md
@@ -0,0 +1,33 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / PrimativeInferenceType
+
+# Interface: PrimativeInferenceType
+
+## Properties
+
+### optional
+
+> **optional**: `boolean`
+
+#### Defined in
+
+[src/parser/generator.ts:50](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L50)
+
+***
+
+### type
+
+> **type**: `"primative"`
+
+#### Defined in
+
+[src/parser/generator.ts:48](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L48)
+
+***
+
+### typeof
+
+> **typeof**: (`"string"` \| `"number"` \| `"bigint"` \| `"boolean"` \| `"symbol"` \| `"undefined"` \| `"function"` \| `"unknown"` \| `"never"`)[]
+
+#### Defined in
+
+[src/parser/generator.ts:49](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L49)
diff --git a/docs/api/namespaces/Generator/interfaces/RendererInferenceType.md b/docs/api/namespaces/Generator/interfaces/RendererInferenceType.md
new file mode 100644
index 000000000..673d0d2f2
--- /dev/null
+++ b/docs/api/namespaces/Generator/interfaces/RendererInferenceType.md
@@ -0,0 +1,33 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / RendererInferenceType
+
+# Interface: RendererInferenceType
+
+## Properties
+
+### optional
+
+> **optional**: `boolean`
+
+#### Defined in
+
+[src/parser/generator.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L44)
+
+***
+
+### renderers
+
+> **renderers**: `string`[]
+
+#### Defined in
+
+[src/parser/generator.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L43)
+
+***
+
+### type
+
+> **type**: `"renderer"`
+
+#### Defined in
+
+[src/parser/generator.ts:42](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L42)
diff --git a/docs/api/namespaces/Generator/type-aliases/ArrayInferenceType.md b/docs/api/namespaces/Generator/type-aliases/ArrayInferenceType.md
new file mode 100644
index 000000000..3d98f49b8
--- /dev/null
+++ b/docs/api/namespaces/Generator/type-aliases/ArrayInferenceType.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / ArrayInferenceType
+
+# Type Alias: ArrayInferenceType
+
+> **ArrayInferenceType**: `object` \| `object` \| `object`
+
+## Defined in
+
+[src/parser/generator.ts:53](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L53)
diff --git a/docs/api/namespaces/Generator/type-aliases/InferenceType.md b/docs/api/namespaces/Generator/type-aliases/InferenceType.md
new file mode 100644
index 000000000..e5bc1021b
--- /dev/null
+++ b/docs/api/namespaces/Generator/type-aliases/InferenceType.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / InferenceType
+
+# Type Alias: InferenceType
+
+> **InferenceType**: [`RendererInferenceType`](../interfaces/RendererInferenceType.md) \| [`MiscInferenceType`](MiscInferenceType.md) \| [`ObjectInferenceType`](../interfaces/ObjectInferenceType.md) \| [`PrimativeInferenceType`](../interfaces/PrimativeInferenceType.md) \| [`ArrayInferenceType`](ArrayInferenceType.md)
+
+## Defined in
+
+[src/parser/generator.ts:70](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L70)
diff --git a/docs/api/namespaces/Generator/type-aliases/KeyInfo.md b/docs/api/namespaces/Generator/type-aliases/KeyInfo.md
new file mode 100644
index 000000000..d1fae056f
--- /dev/null
+++ b/docs/api/namespaces/Generator/type-aliases/KeyInfo.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / KeyInfo
+
+# Type Alias: KeyInfo
+
+> **KeyInfo**: readonly [`string`, [`InferenceType`](InferenceType.md)][]
+
+## Defined in
+
+[src/parser/generator.ts:72](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L72)
diff --git a/docs/api/namespaces/Generator/type-aliases/MiscInferenceType.md b/docs/api/namespaces/Generator/type-aliases/MiscInferenceType.md
new file mode 100644
index 000000000..e74a314d5
--- /dev/null
+++ b/docs/api/namespaces/Generator/type-aliases/MiscInferenceType.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Generator](../README.md) / MiscInferenceType
+
+# Type Alias: MiscInferenceType
+
+> **MiscInferenceType**: `object` \| `object` \| `object` \| `object`
+
+## Defined in
+
+[src/parser/generator.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/generator.ts#L13)
diff --git a/docs/api/namespaces/Helpers/README.md b/docs/api/namespaces/Helpers/README.md
new file mode 100644
index 000000000..4b3e3ea70
--- /dev/null
+++ b/docs/api/namespaces/Helpers/README.md
@@ -0,0 +1,25 @@
+[youtubei.js](../../README.md) / Helpers
+
+# Helpers
+
+## Index
+
+### Classes
+
+- [Maybe](classes/Maybe.md)
+- [Memo](classes/Memo.md)
+- [SuperParsedResult](classes/SuperParsedResult.md)
+- [YTNode](classes/YTNode.md)
+
+### Interfaces
+
+- [Constructor](interfaces/Constructor.md)
+- [YTNodeConstructor](interfaces/YTNodeConstructor.md)
+
+### Type Aliases
+
+- [ObservedArray](type-aliases/ObservedArray.md)
+
+### Functions
+
+- [observe](functions/observe.md)
diff --git a/docs/api/namespaces/Helpers/classes/Maybe.md b/docs/api/namespaces/Helpers/classes/Maybe.md
new file mode 100644
index 000000000..904494e0e
--- /dev/null
+++ b/docs/api/namespaces/Helpers/classes/Maybe.md
@@ -0,0 +1,603 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / Maybe
+
+# Class: Maybe
+
+## Constructors
+
+### new Maybe()
+
+> **new Maybe**(`value`): [`Maybe`](Maybe.md)
+
+#### Parameters
+
+β’ **value**: `any`
+
+#### Returns
+
+[`Maybe`](Maybe.md)
+
+#### Defined in
+
+[src/parser/helpers.ts:69](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L69)
+
+## Accessors
+
+### typeof
+
+> `get` **typeof**(): `"string"` \| `"number"` \| `"bigint"` \| `"boolean"` \| `"symbol"` \| `"undefined"` \| `"object"` \| `"function"`
+
+#### Returns
+
+`"string"` \| `"number"` \| `"bigint"` \| `"boolean"` \| `"symbol"` \| `"undefined"` \| `"object"` \| `"function"`
+
+#### Defined in
+
+[src/parser/helpers.ts:87](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L87)
+
+## Methods
+
+### ~~any()~~
+
+> **any**(): `any`
+
+#### Returns
+
+`any`
+
+#### Deprecated
+
+This call is not meant to be used outside of debugging. Please use the specific type getter instead.
+
+#### Defined in
+
+[src/parser/helpers.ts:283](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L283)
+
+***
+
+### array()
+
+> **array**(): `any`[]
+
+Get the value as an array.
+
+#### Returns
+
+`any`[]
+
+the value as any[].
+
+#### Throws
+
+If the value is not an array.
+
+#### Defined in
+
+[src/parser/helpers.ts:171](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L171)
+
+***
+
+### arrayOfMaybe()
+
+> **arrayOfMaybe**(): [`Maybe`](Maybe.md)[]
+
+More typesafe variant of [Maybe#array](Maybe.md#array).
+
+#### Returns
+
+[`Maybe`](Maybe.md)[]
+
+a proxied array which returns all the values as [Maybe](Maybe.md).
+
+#### Throws
+
+If the value is not an array
+
+#### Defined in
+
+[src/parser/helpers.ts:183](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L183)
+
+***
+
+### bigint()
+
+> **bigint**(): `bigint`
+
+#### Returns
+
+`bigint`
+
+#### Defined in
+
+[src/parser/helpers.ts:107](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L107)
+
+***
+
+### boolean()
+
+> **boolean**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:115](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L115)
+
+***
+
+### function()
+
+> **function**(): `Function`
+
+#### Returns
+
+`Function`
+
+#### Defined in
+
+[src/parser/helpers.ts:158](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L158)
+
+***
+
+### instanceof()
+
+> **instanceof**\<`T`\>(`type`): `T`
+
+Get the node as an instance of the given class.
+
+#### Type Parameters
+
+β’ **T** *extends* `object`
+
+#### Parameters
+
+β’ **type**: [`Constructor`](../interfaces/Constructor.md)\<`T`\>
+
+The type to check.
+
+#### Returns
+
+`T`
+
+the value as the given type.
+
+#### Throws
+
+If the node is not of the given type.
+
+#### Defined in
+
+[src/parser/helpers.ts:294](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L294)
+
+***
+
+### isArray()
+
+> **isArray**(): `boolean`
+
+Check whether the value is an array.
+
+#### Returns
+
+`boolean`
+
+whether the value is an array.
+
+#### Defined in
+
+[src/parser/helpers.ts:199](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L199)
+
+***
+
+### isBigint()
+
+> **isBigint**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L111)
+
+***
+
+### isBoolean()
+
+> **isBoolean**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:119](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L119)
+
+***
+
+### isFunction()
+
+> **isFunction**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:162](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L162)
+
+***
+
+### isInstanceof()
+
+> **isInstanceof**\<`T`\>(`type`): `this is Maybe & T`
+
+Check if the node is an instance of the given class.
+
+#### Type Parameters
+
+β’ **T** *extends* `object`
+
+#### Parameters
+
+β’ **type**: [`Constructor`](../interfaces/Constructor.md)\<`T`\>
+
+The type to check.
+
+#### Returns
+
+`this is Maybe & T`
+
+Whether the node is an instance of the given type.
+
+#### Defined in
+
+[src/parser/helpers.ts:306](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L306)
+
+***
+
+### isNode()
+
+> **isNode**(): `boolean`
+
+Check if the value is a YTNode.
+
+#### Returns
+
+`boolean`
+
+Whether the value is a YTNode.
+
+#### Defined in
+
+[src/parser/helpers.ts:219](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L219)
+
+***
+
+### isNodeOfType()
+
+> **isNodeOfType**\<`T`, `K`\>(...`types`): `boolean`
+
+Check if the value is a YTNode of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+the type(s) to check.
+
+#### Returns
+
+`boolean`
+
+Whether the value is a YTNode of the given type.
+
+#### Defined in
+
+[src/parser/helpers.ts:238](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L238)
+
+***
+
+### isNull()
+
+> **isNull**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:145](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L145)
+
+***
+
+### isNumber()
+
+> **isNumber**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:103](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L103)
+
+***
+
+### isObject()
+
+> **isObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:153](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L153)
+
+***
+
+### isObserved()
+
+> **isObserved**(): `any`
+
+Check if the value is an ObservedArray.
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/parser/helpers.ts:256](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L256)
+
+***
+
+### isParsed()
+
+> **isParsed**(): `boolean`
+
+Is the result a SuperParsedResult?
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:275](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L275)
+
+***
+
+### isString()
+
+> **isString**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:95](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L95)
+
+***
+
+### isSymbol()
+
+> **isSymbol**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:127](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L127)
+
+***
+
+### isUndefined()
+
+> **isUndefined**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:135](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L135)
+
+***
+
+### node()
+
+> **node**(): [`YTNode`](YTNode.md)
+
+Get the value as a YTNode.
+
+#### Returns
+
+[`YTNode`](YTNode.md)
+
+the value as a YTNode.
+
+#### Throws
+
+If the value is not a YTNode.
+
+#### Defined in
+
+[src/parser/helpers.ts:208](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L208)
+
+***
+
+### nodeOfType()
+
+> **nodeOfType**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Get the value as a YTNode of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type(s) to cast to.
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+The node casted to the given type.
+
+#### Throws
+
+If the node is not of the given type.
+
+#### Defined in
+
+[src/parser/helpers.ts:229](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L229)
+
+***
+
+### null()
+
+> **null**(): `null`
+
+#### Returns
+
+`null`
+
+#### Defined in
+
+[src/parser/helpers.ts:139](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L139)
+
+***
+
+### number()
+
+> **number**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/parser/helpers.ts:99](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L99)
+
+***
+
+### object()
+
+> **object**(): `object`
+
+#### Returns
+
+`object`
+
+#### Defined in
+
+[src/parser/helpers.ts:149](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L149)
+
+***
+
+### observed()
+
+> **observed**(): [`ObservedArray`](../type-aliases/ObservedArray.md)\<[`YTNode`](YTNode.md)\>
+
+Get the value as an ObservedArray.
+
+#### Returns
+
+[`ObservedArray`](../type-aliases/ObservedArray.md)\<[`YTNode`](YTNode.md)\>
+
+the value of the Maybe as a ObservedArray.
+
+#### Defined in
+
+[src/parser/helpers.ts:246](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L246)
+
+***
+
+### parsed()
+
+> **parsed**(): [`SuperParsedResult`](SuperParsedResult.md)\<[`YTNode`](YTNode.md)\>
+
+Get the value of the Maybe as a SuperParsedResult.
+
+#### Returns
+
+[`SuperParsedResult`](SuperParsedResult.md)\<[`YTNode`](YTNode.md)\>
+
+the value as a SuperParsedResult.
+
+#### Throws
+
+If the value is not a SuperParsedResult.
+
+#### Defined in
+
+[src/parser/helpers.ts:265](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L265)
+
+***
+
+### string()
+
+> **string**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/parser/helpers.ts:91](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L91)
+
+***
+
+### symbol()
+
+> **symbol**(): `symbol`
+
+#### Returns
+
+`symbol`
+
+#### Defined in
+
+[src/parser/helpers.ts:123](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L123)
+
+***
+
+### undefined()
+
+> **undefined**(): `undefined`
+
+#### Returns
+
+`undefined`
+
+#### Defined in
+
+[src/parser/helpers.ts:131](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L131)
diff --git a/docs/api/namespaces/Helpers/classes/Memo.md b/docs/api/namespaces/Helpers/classes/Memo.md
new file mode 100644
index 000000000..331dc5e94
--- /dev/null
+++ b/docs/api/namespaces/Helpers/classes/Memo.md
@@ -0,0 +1,399 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / Memo
+
+# Class: Memo
+
+## Extends
+
+- `Map`\<`string`, [`YTNode`](YTNode.md)[]\>
+
+## Constructors
+
+### new Memo()
+
+> **new Memo**(`entries`?): [`Memo`](Memo.md)
+
+#### Parameters
+
+β’ **entries?**: `null` \| readonly readonly [`string`, [`YTNode`](YTNode.md)[]][]
+
+#### Returns
+
+[`Memo`](Memo.md)
+
+#### Inherited from
+
+`Map.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:50
+
+### new Memo()
+
+> **new Memo**(`iterable`?): [`Memo`](Memo.md)
+
+#### Parameters
+
+β’ **iterable?**: `null` \| `Iterable`\
+
+#### Returns
+
+[`Memo`](Memo.md)
+
+#### Inherited from
+
+`Map.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:49
+
+## Properties
+
+### \[toStringTag\]
+
+> `readonly` **\[toStringTag\]**: `string`
+
+#### Inherited from
+
+`Map.[toStringTag]`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:137
+
+***
+
+### size
+
+> `readonly` **size**: `number`
+
+#### Inherited from
+
+`Map.size`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:45
+
+***
+
+### \[species\]
+
+> `readonly` `static` **\[species\]**: `MapConstructor`
+
+#### Inherited from
+
+`Map.[species]`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:319
+
+## Methods
+
+### \[iterator\]()
+
+> **\[iterator\]**(): `IterableIterator`\<[`string`, [`YTNode`](YTNode.md)[]]\>
+
+Returns an iterable of entries in the map.
+
+#### Returns
+
+`IterableIterator`\<[`string`, [`YTNode`](YTNode.md)[]]\>
+
+#### Inherited from
+
+`Map.[iterator]`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.iterable.d.ts:119
+
+***
+
+### clear()
+
+> **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Map.clear`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:20
+
+***
+
+### delete()
+
+> **delete**(`key`): `boolean`
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`boolean`
+
+true if an element in the Map existed and has been removed, or false if the element does not exist.
+
+#### Inherited from
+
+`Map.delete`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:24
+
+***
+
+### entries()
+
+> **entries**(): `IterableIterator`\<[`string`, [`YTNode`](YTNode.md)[]]\>
+
+Returns an iterable of key, value pairs for every entry in the map.
+
+#### Returns
+
+`IterableIterator`\<[`string`, [`YTNode`](YTNode.md)[]]\>
+
+#### Inherited from
+
+`Map.entries`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.iterable.d.ts:124
+
+***
+
+### forEach()
+
+> **forEach**(`callbackfn`, `thisArg`?): `void`
+
+Executes a provided function once per each key/value pair in the Map, in insertion order.
+
+#### Parameters
+
+β’ **callbackfn**
+
+β’ **thisArg?**: `any`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Map.forEach`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:28
+
+***
+
+### get()
+
+> **get**(`key`): `undefined` \| [`YTNode`](YTNode.md)[]
+
+Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`undefined` \| [`YTNode`](YTNode.md)[]
+
+Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.
+
+#### Inherited from
+
+`Map.get`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:33
+
+***
+
+### getType()
+
+#### getType(types)
+
+> **getType**\<`T`, `K`\>(`types`): [`ObservedArray`](../type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+##### Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+##### Parameters
+
+β’ **types**: `K`
+
+##### Returns
+
+[`ObservedArray`](../type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+##### Defined in
+
+[src/parser/helpers.ts:478](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L478)
+
+#### getType(types)
+
+> **getType**\<`T`, `K`\>(...`types`): [`ObservedArray`](../type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+##### Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+##### Parameters
+
+β’ ...**types**: `K`
+
+##### Returns
+
+[`ObservedArray`](../type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+##### Defined in
+
+[src/parser/helpers.ts:479](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L479)
+
+***
+
+### has()
+
+> **has**(`key`): `boolean`
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`boolean`
+
+boolean indicating whether an element with the specified key exists or not.
+
+#### Inherited from
+
+`Map.has`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:37
+
+***
+
+### keys()
+
+> **keys**(): `IterableIterator`\<`string`\>
+
+Returns an iterable of keys in the map
+
+#### Returns
+
+`IterableIterator`\<`string`\>
+
+#### Inherited from
+
+`Map.keys`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.iterable.d.ts:129
+
+***
+
+### set()
+
+> **set**(`key`, `value`): `this`
+
+Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.
+
+#### Parameters
+
+β’ **key**: `string`
+
+β’ **value**: [`YTNode`](YTNode.md)[]
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`Map.set`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.collection.d.ts:41
+
+***
+
+### values()
+
+> **values**(): `IterableIterator`\<[`YTNode`](YTNode.md)[]\>
+
+Returns an iterable of values in the map
+
+#### Returns
+
+`IterableIterator`\<[`YTNode`](YTNode.md)[]\>
+
+#### Inherited from
+
+`Map.values`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2015.iterable.d.ts:134
+
+***
+
+### groupBy()
+
+> `static` **groupBy**\<`K`, `T`\>(`items`, `keySelector`): `Map`\<`K`, `T`[]\>
+
+Groups members of an iterable according to the return value of the passed callback.
+
+#### Type Parameters
+
+β’ **K**
+
+β’ **T**
+
+#### Parameters
+
+β’ **items**: `Iterable`\<`T`\>
+
+An iterable.
+
+β’ **keySelector**
+
+A callback which will be invoked for each item in items.
+
+#### Returns
+
+`Map`\<`K`, `T`[]\>
+
+#### Inherited from
+
+`Map.groupBy`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.esnext.collection.d.ts:25
diff --git a/docs/api/namespaces/Helpers/classes/SuperParsedResult.md b/docs/api/namespaces/Helpers/classes/SuperParsedResult.md
new file mode 100644
index 000000000..db2510257
--- /dev/null
+++ b/docs/api/namespaces/Helpers/classes/SuperParsedResult.md
@@ -0,0 +1,97 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / SuperParsedResult
+
+# Class: SuperParsedResult\
+
+Represents a parsed response in an unknown state. Either a YTNode or a YTNode[] or null.
+
+## Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md) = [`YTNode`](YTNode.md)
+
+## Constructors
+
+### new SuperParsedResult()
+
+> **new SuperParsedResult**\<`T`\>(`result`): [`SuperParsedResult`](SuperParsedResult.md)\<`T`\>
+
+#### Parameters
+
+β’ **result**: `null` \| `T` \| [`ObservedArray`](../type-aliases/ObservedArray.md)\<`T`\>
+
+#### Returns
+
+[`SuperParsedResult`](SuperParsedResult.md)\<`T`\>
+
+#### Defined in
+
+[src/parser/helpers.ts:326](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L326)
+
+## Accessors
+
+### is\_array
+
+> `get` **is\_array**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:333](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L333)
+
+***
+
+### is\_node
+
+> `get` **is\_node**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:336](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L336)
+
+***
+
+### is\_null
+
+> `get` **is\_null**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/helpers.ts:330](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L330)
+
+## Methods
+
+### array()
+
+> **array**(): [`ObservedArray`](../type-aliases/ObservedArray.md)\<`T`\>
+
+#### Returns
+
+[`ObservedArray`](../type-aliases/ObservedArray.md)\<`T`\>
+
+#### Defined in
+
+[src/parser/helpers.ts:340](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L340)
+
+***
+
+### item()
+
+> **item**(): `T`
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/parser/helpers.ts:347](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L347)
diff --git a/docs/api/namespaces/Helpers/classes/YTNode.md b/docs/api/namespaces/Helpers/classes/YTNode.md
new file mode 100644
index 000000000..e53d26996
--- /dev/null
+++ b/docs/api/namespaces/Helpers/classes/YTNode.md
@@ -0,0 +1,600 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / YTNode
+
+# Class: YTNode
+
+## Extended by
+
+- [`ChildElement`](../../Misc/classes/ChildElement.md)
+- [`AboutChannel`](../../YTNodes/classes/AboutChannel.md)
+- [`AboutChannelView`](../../YTNodes/classes/AboutChannelView.md)
+- [`AccountChannel`](../../YTNodes/classes/AccountChannel.md)
+- [`AccountItemSection`](../../YTNodes/classes/AccountItemSection.md)
+- [`AccountItemSectionHeader`](../../YTNodes/classes/AccountItemSectionHeader.md)
+- [`AccountSectionList`](../../YTNodes/classes/AccountSectionList.md)
+- [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)
+- [`OpenPopupAction`](../../YTNodes/classes/OpenPopupAction.md)
+- [`UpdateEngagementPanelAction`](../../YTNodes/classes/UpdateEngagementPanelAction.md)
+- [`Alert`](../../YTNodes/classes/Alert.md)
+- [`AlertWithButton`](../../YTNodes/classes/AlertWithButton.md)
+- [`AnalyticsMainAppKeyMetrics`](../../YTNodes/classes/AnalyticsMainAppKeyMetrics.md)
+- [`AnalyticsRoot`](../../YTNodes/classes/AnalyticsRoot.md)
+- [`AnalyticsShortsCarouselCard`](../../YTNodes/classes/AnalyticsShortsCarouselCard.md)
+- [`AnalyticsVideo`](../../YTNodes/classes/AnalyticsVideo.md)
+- [`AnalyticsVodCarouselCard`](../../YTNodes/classes/AnalyticsVodCarouselCard.md)
+- [`CtaGoToCreatorStudio`](../../YTNodes/classes/CtaGoToCreatorStudio.md)
+- [`DataModelSection`](../../YTNodes/classes/DataModelSection.md)
+- [`StatRow`](../../YTNodes/classes/StatRow.md)
+- [`AttributionView`](../../YTNodes/classes/AttributionView.md)
+- [`AudioOnlyPlayability`](../../YTNodes/classes/AudioOnlyPlayability.md)
+- [`AutomixPreviewVideo`](../../YTNodes/classes/AutomixPreviewVideo.md)
+- [`AvatarView`](../../YTNodes/classes/AvatarView.md)
+- [`BackstageImage`](../../YTNodes/classes/BackstageImage.md)
+- [`BackstagePost`](../../YTNodes/classes/BackstagePost.md)
+- [`BackstagePostThread`](../../YTNodes/classes/BackstagePostThread.md)
+- [`BadgeView`](../../YTNodes/classes/BadgeView.md)
+- [`BrowseFeedActions`](../../YTNodes/classes/BrowseFeedActions.md)
+- [`BrowserMediaSession`](../../YTNodes/classes/BrowserMediaSession.md)
+- [`Button`](../../YTNodes/classes/Button.md)
+- [`ButtonView`](../../YTNodes/classes/ButtonView.md)
+- [`C4TabbedHeader`](../../YTNodes/classes/C4TabbedHeader.md)
+- [`CallToActionButton`](../../YTNodes/classes/CallToActionButton.md)
+- [`Card`](../../YTNodes/classes/Card.md)
+- [`CardCollection`](../../YTNodes/classes/CardCollection.md)
+- [`CarouselHeader`](../../YTNodes/classes/CarouselHeader.md)
+- [`CarouselItem`](../../YTNodes/classes/CarouselItem.md)
+- [`CarouselLockup`](../../YTNodes/classes/CarouselLockup.md)
+- [`Channel`](../../YTNodes/classes/Channel.md)
+- [`ChannelAboutFullMetadata`](../../YTNodes/classes/ChannelAboutFullMetadata.md)
+- [`ChannelAgeGate`](../../YTNodes/classes/ChannelAgeGate.md)
+- [`ChannelExternalLinkView`](../../YTNodes/classes/ChannelExternalLinkView.md)
+- [`ChannelFeaturedContent`](../../YTNodes/classes/ChannelFeaturedContent.md)
+- [`ChannelHeaderLinks`](../../YTNodes/classes/ChannelHeaderLinks.md)
+- [`ChannelHeaderLinksView`](../../YTNodes/classes/ChannelHeaderLinksView.md)
+- [`ChannelMetadata`](../../YTNodes/classes/ChannelMetadata.md)
+- [`ChannelMobileHeader`](../../YTNodes/classes/ChannelMobileHeader.md)
+- [`ChannelOptions`](../../YTNodes/classes/ChannelOptions.md)
+- [`ChannelOwnerEmptyState`](../../YTNodes/classes/ChannelOwnerEmptyState.md)
+- [`ChannelSubMenu`](../../YTNodes/classes/ChannelSubMenu.md)
+- [`ChannelTagline`](../../YTNodes/classes/ChannelTagline.md)
+- [`ChannelThumbnailWithLink`](../../YTNodes/classes/ChannelThumbnailWithLink.md)
+- [`ChannelVideoPlayer`](../../YTNodes/classes/ChannelVideoPlayer.md)
+- [`Chapter`](../../YTNodes/classes/Chapter.md)
+- [`ChildVideo`](../../YTNodes/classes/ChildVideo.md)
+- [`ChipBarView`](../../YTNodes/classes/ChipBarView.md)
+- [`ChipCloud`](../../YTNodes/classes/ChipCloud.md)
+- [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+- [`ChipView`](../../YTNodes/classes/ChipView.md)
+- [`ClipAdState`](../../YTNodes/classes/ClipAdState.md)
+- [`ClipCreation`](../../YTNodes/classes/ClipCreation.md)
+- [`ClipCreationScrubber`](../../YTNodes/classes/ClipCreationScrubber.md)
+- [`ClipCreationTextInput`](../../YTNodes/classes/ClipCreationTextInput.md)
+- [`ClipSection`](../../YTNodes/classes/ClipSection.md)
+- [`CollaboratorInfoCardContent`](../../YTNodes/classes/CollaboratorInfoCardContent.md)
+- [`CollageHeroImage`](../../YTNodes/classes/CollageHeroImage.md)
+- [`CollectionThumbnailView`](../../YTNodes/classes/CollectionThumbnailView.md)
+- [`AuthorCommentBadge`](../../YTNodes/classes/AuthorCommentBadge.md)
+- [`Comment`](../../YTNodes/classes/Comment.md)
+- [`CommentActionButtons`](../../YTNodes/classes/CommentActionButtons.md)
+- [`CommentDialog`](../../YTNodes/classes/CommentDialog.md)
+- [`CommentReplies`](../../YTNodes/classes/CommentReplies.md)
+- [`CommentReplyDialog`](../../YTNodes/classes/CommentReplyDialog.md)
+- [`CommentsEntryPointHeader`](../../YTNodes/classes/CommentsEntryPointHeader.md)
+- [`CommentsEntryPointTeaser`](../../YTNodes/classes/CommentsEntryPointTeaser.md)
+- [`CommentsHeader`](../../YTNodes/classes/CommentsHeader.md)
+- [`CommentSimplebox`](../../YTNodes/classes/CommentSimplebox.md)
+- [`CommentsSimplebox`](../../YTNodes/classes/CommentsSimplebox.md)
+- [`CommentThread`](../../YTNodes/classes/CommentThread.md)
+- [`CommentView`](../../YTNodes/classes/CommentView.md)
+- [`CreatorHeart`](../../YTNodes/classes/CreatorHeart.md)
+- [`EmojiPicker`](../../YTNodes/classes/EmojiPicker.md)
+- [`PdgCommentChip`](../../YTNodes/classes/PdgCommentChip.md)
+- [`SponsorCommentBadge`](../../YTNodes/classes/SponsorCommentBadge.md)
+- [`CompactChannel`](../../YTNodes/classes/CompactChannel.md)
+- [`CompactLink`](../../YTNodes/classes/CompactLink.md)
+- [`CompactMovie`](../../YTNodes/classes/CompactMovie.md)
+- [`CompactStation`](../../YTNodes/classes/CompactStation.md)
+- [`CompactVideo`](../../YTNodes/classes/CompactVideo.md)
+- [`ConfirmDialog`](../../YTNodes/classes/ConfirmDialog.md)
+- [`ContentMetadataView`](../../YTNodes/classes/ContentMetadataView.md)
+- [`ContentPreviewImageView`](../../YTNodes/classes/ContentPreviewImageView.md)
+- [`ContinuationItem`](../../YTNodes/classes/ContinuationItem.md)
+- [`ConversationBar`](../../YTNodes/classes/ConversationBar.md)
+- [`CopyLink`](../../YTNodes/classes/CopyLink.md)
+- [`CreatePlaylistDialog`](../../YTNodes/classes/CreatePlaylistDialog.md)
+- [`DecoratedAvatarView`](../../YTNodes/classes/DecoratedAvatarView.md)
+- [`DecoratedPlayerBar`](../../YTNodes/classes/DecoratedPlayerBar.md)
+- [`DefaultPromoPanel`](../../YTNodes/classes/DefaultPromoPanel.md)
+- [`DescriptionPreviewView`](../../YTNodes/classes/DescriptionPreviewView.md)
+- [`DidYouMean`](../../YTNodes/classes/DidYouMean.md)
+- [`DislikeButtonView`](../../YTNodes/classes/DislikeButtonView.md)
+- [`DownloadButton`](../../YTNodes/classes/DownloadButton.md)
+- [`Dropdown`](../../YTNodes/classes/Dropdown.md)
+- [`DropdownItem`](../../YTNodes/classes/DropdownItem.md)
+- [`DynamicTextView`](../../YTNodes/classes/DynamicTextView.md)
+- [`Element`](../../YTNodes/classes/Element.md)
+- [`EmergencyOnebox`](../../YTNodes/classes/EmergencyOnebox.md)
+- [`EmojiPickerCategory`](../../YTNodes/classes/EmojiPickerCategory.md)
+- [`EmojiPickerCategoryButton`](../../YTNodes/classes/EmojiPickerCategoryButton.md)
+- [`EmojiPickerUpsellCategory`](../../YTNodes/classes/EmojiPickerUpsellCategory.md)
+- [`Endscreen`](../../YTNodes/classes/Endscreen.md)
+- [`EndscreenElement`](../../YTNodes/classes/EndscreenElement.md)
+- [`EndScreenPlaylist`](../../YTNodes/classes/EndScreenPlaylist.md)
+- [`EndScreenVideo`](../../YTNodes/classes/EndScreenVideo.md)
+- [`EngagementPanelSectionList`](../../YTNodes/classes/EngagementPanelSectionList.md)
+- [`EngagementPanelTitleHeader`](../../YTNodes/classes/EngagementPanelTitleHeader.md)
+- [`EomSettingsDisclaimer`](../../YTNodes/classes/EomSettingsDisclaimer.md)
+- [`ExpandableMetadata`](../../YTNodes/classes/ExpandableMetadata.md)
+- [`ExpandableTab`](../../YTNodes/classes/ExpandableTab.md)
+- [`ExpandableVideoDescriptionBody`](../../YTNodes/classes/ExpandableVideoDescriptionBody.md)
+- [`ExpandedShelfContents`](../../YTNodes/classes/ExpandedShelfContents.md)
+- [`Factoid`](../../YTNodes/classes/Factoid.md)
+- [`FancyDismissibleDialog`](../../YTNodes/classes/FancyDismissibleDialog.md)
+- [`FeedFilterChipBar`](../../YTNodes/classes/FeedFilterChipBar.md)
+- [`FeedNudge`](../../YTNodes/classes/FeedNudge.md)
+- [`FeedTabbedHeader`](../../YTNodes/classes/FeedTabbedHeader.md)
+- [`FlexibleActionsView`](../../YTNodes/classes/FlexibleActionsView.md)
+- [`GameCard`](../../YTNodes/classes/GameCard.md)
+- [`GameDetails`](../../YTNodes/classes/GameDetails.md)
+- [`Grid`](../../YTNodes/classes/Grid.md)
+- [`GridChannel`](../../YTNodes/classes/GridChannel.md)
+- [`GridHeader`](../../YTNodes/classes/GridHeader.md)
+- [`GridMix`](../../YTNodes/classes/GridMix.md)
+- [`GridMovie`](../../YTNodes/classes/GridMovie.md)
+- [`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md)
+- [`GridShow`](../../YTNodes/classes/GridShow.md)
+- [`GridVideo`](../../YTNodes/classes/GridVideo.md)
+- [`GuideCollapsibleEntry`](../../YTNodes/classes/GuideCollapsibleEntry.md)
+- [`GuideCollapsibleSectionEntry`](../../YTNodes/classes/GuideCollapsibleSectionEntry.md)
+- [`GuideEntry`](../../YTNodes/classes/GuideEntry.md)
+- [`GuideSection`](../../YTNodes/classes/GuideSection.md)
+- [`HashtagHeader`](../../YTNodes/classes/HashtagHeader.md)
+- [`HashtagTile`](../../YTNodes/classes/HashtagTile.md)
+- [`Heatmap`](../../YTNodes/classes/Heatmap.md)
+- [`HeatMarker`](../../YTNodes/classes/HeatMarker.md)
+- [`HeroPlaylistThumbnail`](../../YTNodes/classes/HeroPlaylistThumbnail.md)
+- [`HighlightsCarousel`](../../YTNodes/classes/HighlightsCarousel.md)
+- [`HorizontalCardList`](../../YTNodes/classes/HorizontalCardList.md)
+- [`HorizontalList`](../../YTNodes/classes/HorizontalList.md)
+- [`HorizontalMovieList`](../../YTNodes/classes/HorizontalMovieList.md)
+- [`IconLink`](../../YTNodes/classes/IconLink.md)
+- [`ImageBannerView`](../../YTNodes/classes/ImageBannerView.md)
+- [`IncludingResultsFor`](../../YTNodes/classes/IncludingResultsFor.md)
+- [`InfoPanelContainer`](../../YTNodes/classes/InfoPanelContainer.md)
+- [`InfoPanelContent`](../../YTNodes/classes/InfoPanelContent.md)
+- [`InfoRow`](../../YTNodes/classes/InfoRow.md)
+- [`InteractiveTabbedHeader`](../../YTNodes/classes/InteractiveTabbedHeader.md)
+- [`ItemSection`](../../YTNodes/classes/ItemSection.md)
+- [`ItemSectionHeader`](../../YTNodes/classes/ItemSectionHeader.md)
+- [`ItemSectionTab`](../../YTNodes/classes/ItemSectionTab.md)
+- [`ItemSectionTabbedHeader`](../../YTNodes/classes/ItemSectionTabbedHeader.md)
+- [`LikeButton`](../../YTNodes/classes/LikeButton.md)
+- [`LikeButtonView`](../../YTNodes/classes/LikeButtonView.md)
+- [`LiveChat`](../../YTNodes/classes/LiveChat.md)
+- [`AddBannerToLiveChatCommand`](../../YTNodes/classes/AddBannerToLiveChatCommand.md)
+- [`AddChatItemAction`](../../YTNodes/classes/AddChatItemAction.md)
+- [`AddLiveChatTickerItemAction`](../../YTNodes/classes/AddLiveChatTickerItemAction.md)
+- [`DimChatItemAction`](../../YTNodes/classes/DimChatItemAction.md)
+- [`LiveChatAutoModMessage`](../../YTNodes/classes/LiveChatAutoModMessage.md)
+- [`LiveChatBanner`](../../YTNodes/classes/LiveChatBanner.md)
+- [`LiveChatBannerHeader`](../../YTNodes/classes/LiveChatBannerHeader.md)
+- [`LiveChatBannerPoll`](../../YTNodes/classes/LiveChatBannerPoll.md)
+- [`LiveChatMembershipItem`](../../YTNodes/classes/LiveChatMembershipItem.md)
+- [`LiveChatPaidMessage`](../../YTNodes/classes/LiveChatPaidMessage.md)
+- [`LiveChatPaidSticker`](../../YTNodes/classes/LiveChatPaidSticker.md)
+- [`LiveChatPlaceholderItem`](../../YTNodes/classes/LiveChatPlaceholderItem.md)
+- [`LiveChatProductItem`](../../YTNodes/classes/LiveChatProductItem.md)
+- [`LiveChatRestrictedParticipation`](../../YTNodes/classes/LiveChatRestrictedParticipation.md)
+- [`LiveChatTickerPaidMessageItem`](../../YTNodes/classes/LiveChatTickerPaidMessageItem.md)
+- [`LiveChatTickerSponsorItem`](../../YTNodes/classes/LiveChatTickerSponsorItem.md)
+- [`PollHeader`](../../YTNodes/classes/PollHeader.md)
+- [`LiveChatActionPanel`](../../YTNodes/classes/LiveChatActionPanel.md)
+- [`MarkChatItemAsDeletedAction`](../../YTNodes/classes/MarkChatItemAsDeletedAction.md)
+- [`MarkChatItemsByAuthorAsDeletedAction`](../../YTNodes/classes/MarkChatItemsByAuthorAsDeletedAction.md)
+- [`RemoveBannerForLiveChatCommand`](../../YTNodes/classes/RemoveBannerForLiveChatCommand.md)
+- [`RemoveChatItemAction`](../../YTNodes/classes/RemoveChatItemAction.md)
+- [`RemoveChatItemByAuthorAction`](../../YTNodes/classes/RemoveChatItemByAuthorAction.md)
+- [`ReplaceChatItemAction`](../../YTNodes/classes/ReplaceChatItemAction.md)
+- [`ReplayChatItemAction`](../../YTNodes/classes/ReplayChatItemAction.md)
+- [`ShowLiveChatActionPanelAction`](../../YTNodes/classes/ShowLiveChatActionPanelAction.md)
+- [`ShowLiveChatDialogAction`](../../YTNodes/classes/ShowLiveChatDialogAction.md)
+- [`ShowLiveChatTooltipCommand`](../../YTNodes/classes/ShowLiveChatTooltipCommand.md)
+- [`UpdateDateTextAction`](../../YTNodes/classes/UpdateDateTextAction.md)
+- [`UpdateDescriptionAction`](../../YTNodes/classes/UpdateDescriptionAction.md)
+- [`UpdateLiveChatPollAction`](../../YTNodes/classes/UpdateLiveChatPollAction.md)
+- [`UpdateTitleAction`](../../YTNodes/classes/UpdateTitleAction.md)
+- [`UpdateToggleButtonTextAction`](../../YTNodes/classes/UpdateToggleButtonTextAction.md)
+- [`UpdateViewershipAction`](../../YTNodes/classes/UpdateViewershipAction.md)
+- [`LiveChatDialog`](../../YTNodes/classes/LiveChatDialog.md)
+- [`LiveChatHeader`](../../YTNodes/classes/LiveChatHeader.md)
+- [`LiveChatItemList`](../../YTNodes/classes/LiveChatItemList.md)
+- [`LiveChatMessageInput`](../../YTNodes/classes/LiveChatMessageInput.md)
+- [`LiveChatParticipant`](../../YTNodes/classes/LiveChatParticipant.md)
+- [`LiveChatParticipantsList`](../../YTNodes/classes/LiveChatParticipantsList.md)
+- [`LockupMetadataView`](../../YTNodes/classes/LockupMetadataView.md)
+- [`LockupView`](../../YTNodes/classes/LockupView.md)
+- [`MacroMarkersInfoItem`](../../YTNodes/classes/MacroMarkersInfoItem.md)
+- [`MacroMarkersList`](../../YTNodes/classes/MacroMarkersList.md)
+- [`MacroMarkersListItem`](../../YTNodes/classes/MacroMarkersListItem.md)
+- [`Menu`](../../YTNodes/classes/Menu.md)
+- [`MenuPopup`](../../YTNodes/classes/MenuPopup.md)
+- [`MenuServiceItemDownload`](../../YTNodes/classes/MenuServiceItemDownload.md)
+- [`MultiPageMenu`](../../YTNodes/classes/MultiPageMenu.md)
+- [`MultiPageMenuNotificationSection`](../../YTNodes/classes/MultiPageMenuNotificationSection.md)
+- [`MusicMenuItemDivider`](../../YTNodes/classes/MusicMenuItemDivider.md)
+- [`MusicMultiSelectMenu`](../../YTNodes/classes/MusicMultiSelectMenu.md)
+- [`MusicMultiSelectMenuItem`](../../YTNodes/classes/MusicMultiSelectMenuItem.md)
+- [`SimpleMenuHeader`](../../YTNodes/classes/SimpleMenuHeader.md)
+- [`MerchandiseItem`](../../YTNodes/classes/MerchandiseItem.md)
+- [`MerchandiseShelf`](../../YTNodes/classes/MerchandiseShelf.md)
+- [`Message`](../../YTNodes/classes/Message.md)
+- [`MetadataBadge`](../../YTNodes/classes/MetadataBadge.md)
+- [`MetadataRow`](../../YTNodes/classes/MetadataRow.md)
+- [`MetadataRowContainer`](../../YTNodes/classes/MetadataRowContainer.md)
+- [`MetadataRowHeader`](../../YTNodes/classes/MetadataRowHeader.md)
+- [`MetadataScreen`](../../YTNodes/classes/MetadataScreen.md)
+- [`MicroformatData`](../../YTNodes/classes/MicroformatData.md)
+- [`ModalWithTitleAndButton`](../../YTNodes/classes/ModalWithTitleAndButton.md)
+- [`Movie`](../../YTNodes/classes/Movie.md)
+- [`MovingThumbnail`](../../YTNodes/classes/MovingThumbnail.md)
+- [`MultiMarkersPlayerBar`](../../YTNodes/classes/MultiMarkersPlayerBar.md)
+- [`MusicCardShelf`](../../YTNodes/classes/MusicCardShelf.md)
+- [`MusicCardShelfHeaderBasic`](../../YTNodes/classes/MusicCardShelfHeaderBasic.md)
+- [`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md)
+- [`MusicCarouselShelfBasicHeader`](../../YTNodes/classes/MusicCarouselShelfBasicHeader.md)
+- [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)
+- [`MusicDetailHeader`](../../YTNodes/classes/MusicDetailHeader.md)
+- [`MusicDownloadStateBadge`](../../YTNodes/classes/MusicDownloadStateBadge.md)
+- [`MusicEditablePlaylistDetailHeader`](../../YTNodes/classes/MusicEditablePlaylistDetailHeader.md)
+- [`MusicElementHeader`](../../YTNodes/classes/MusicElementHeader.md)
+- [`MusicHeader`](../../YTNodes/classes/MusicHeader.md)
+- [`MusicImmersiveHeader`](../../YTNodes/classes/MusicImmersiveHeader.md)
+- [`MusicInlineBadge`](../../YTNodes/classes/MusicInlineBadge.md)
+- [`MusicItemThumbnailOverlay`](../../YTNodes/classes/MusicItemThumbnailOverlay.md)
+- [`MusicLargeCardItemCarousel`](../../YTNodes/classes/MusicLargeCardItemCarousel.md)
+- [`MusicMultiRowListItem`](../../YTNodes/classes/MusicMultiRowListItem.md)
+- [`MusicNavigationButton`](../../YTNodes/classes/MusicNavigationButton.md)
+- [`MusicPlayButton`](../../YTNodes/classes/MusicPlayButton.md)
+- [`MusicPlaylistEditHeader`](../../YTNodes/classes/MusicPlaylistEditHeader.md)
+- [`MusicPlaylistShelf`](../../YTNodes/classes/MusicPlaylistShelf.md)
+- [`MusicQueue`](../../YTNodes/classes/MusicQueue.md)
+- [`MusicResponsiveHeader`](../../YTNodes/classes/MusicResponsiveHeader.md)
+- [`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)
+- [`MusicResponsiveListItemFixedColumn`](../../YTNodes/classes/MusicResponsiveListItemFixedColumn.md)
+- [`MusicResponsiveListItemFlexColumn`](../../YTNodes/classes/MusicResponsiveListItemFlexColumn.md)
+- [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+- [`MusicSideAlignedItem`](../../YTNodes/classes/MusicSideAlignedItem.md)
+- [`MusicSortFilterButton`](../../YTNodes/classes/MusicSortFilterButton.md)
+- [`MusicTastebuilderShelf`](../../YTNodes/classes/MusicTastebuilderShelf.md)
+- [`MusicTastebuilderShelfThumbnail`](../../YTNodes/classes/MusicTastebuilderShelfThumbnail.md)
+- [`MusicThumbnail`](../../YTNodes/classes/MusicThumbnail.md)
+- [`MusicTwoRowItem`](../../YTNodes/classes/MusicTwoRowItem.md)
+- [`MusicVisualHeader`](../../YTNodes/classes/MusicVisualHeader.md)
+- [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+- [`Notification`](../../YTNodes/classes/Notification.md)
+- [`PageHeader`](../../YTNodes/classes/PageHeader.md)
+- [`PageHeaderView`](../../YTNodes/classes/PageHeaderView.md)
+- [`PageIntroduction`](../../YTNodes/classes/PageIntroduction.md)
+- [`PivotButton`](../../YTNodes/classes/PivotButton.md)
+- [`PlayerAnnotationsExpanded`](../../YTNodes/classes/PlayerAnnotationsExpanded.md)
+- [`PlayerCaptionsTracklist`](../../YTNodes/classes/PlayerCaptionsTracklist.md)
+- [`PlayerControlsOverlay`](../../YTNodes/classes/PlayerControlsOverlay.md)
+- [`PlayerErrorMessage`](../../YTNodes/classes/PlayerErrorMessage.md)
+- [`PlayerLegacyDesktopYpcOffer`](../../YTNodes/classes/PlayerLegacyDesktopYpcOffer.md)
+- [`PlayerLegacyDesktopYpcTrailer`](../../YTNodes/classes/PlayerLegacyDesktopYpcTrailer.md)
+- [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md)
+- [`PlayerMicroformat`](../../YTNodes/classes/PlayerMicroformat.md)
+- [`PlayerOverflow`](../../YTNodes/classes/PlayerOverflow.md)
+- [`PlayerOverlay`](../../YTNodes/classes/PlayerOverlay.md)
+- [`PlayerOverlayAutoplay`](../../YTNodes/classes/PlayerOverlayAutoplay.md)
+- [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+- [`Playlist`](../../YTNodes/classes/Playlist.md)
+- [`PlaylistCustomThumbnail`](../../YTNodes/classes/PlaylistCustomThumbnail.md)
+- [`PlaylistHeader`](../../YTNodes/classes/PlaylistHeader.md)
+- [`PlaylistInfoCardContent`](../../YTNodes/classes/PlaylistInfoCardContent.md)
+- [`PlaylistMetadata`](../../YTNodes/classes/PlaylistMetadata.md)
+- [`PlaylistPanel`](../../YTNodes/classes/PlaylistPanel.md)
+- [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md)
+- [`PlaylistPanelVideoWrapper`](../../YTNodes/classes/PlaylistPanelVideoWrapper.md)
+- [`PlaylistSidebar`](../../YTNodes/classes/PlaylistSidebar.md)
+- [`PlaylistSidebarPrimaryInfo`](../../YTNodes/classes/PlaylistSidebarPrimaryInfo.md)
+- [`PlaylistSidebarSecondaryInfo`](../../YTNodes/classes/PlaylistSidebarSecondaryInfo.md)
+- [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md)
+- [`PlaylistVideoList`](../../YTNodes/classes/PlaylistVideoList.md)
+- [`PlaylistVideoThumbnail`](../../YTNodes/classes/PlaylistVideoThumbnail.md)
+- [`Poll`](../../YTNodes/classes/Poll.md)
+- [`PostMultiImage`](../../YTNodes/classes/PostMultiImage.md)
+- [`ProductList`](../../YTNodes/classes/ProductList.md)
+- [`ProductListHeader`](../../YTNodes/classes/ProductListHeader.md)
+- [`ProductListItem`](../../YTNodes/classes/ProductListItem.md)
+- [`ProfileColumn`](../../YTNodes/classes/ProfileColumn.md)
+- [`ProfileColumnStats`](../../YTNodes/classes/ProfileColumnStats.md)
+- [`ProfileColumnStatsEntry`](../../YTNodes/classes/ProfileColumnStatsEntry.md)
+- [`ProfileColumnUserInfo`](../../YTNodes/classes/ProfileColumnUserInfo.md)
+- [`Quiz`](../../YTNodes/classes/Quiz.md)
+- [`RecognitionShelf`](../../YTNodes/classes/RecognitionShelf.md)
+- [`ReelItem`](../../YTNodes/classes/ReelItem.md)
+- [`ReelPlayerHeader`](../../YTNodes/classes/ReelPlayerHeader.md)
+- [`ReelPlayerOverlay`](../../YTNodes/classes/ReelPlayerOverlay.md)
+- [`ReelShelf`](../../YTNodes/classes/ReelShelf.md)
+- [`RelatedChipCloud`](../../YTNodes/classes/RelatedChipCloud.md)
+- [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+- [`RichItem`](../../YTNodes/classes/RichItem.md)
+- [`RichListHeader`](../../YTNodes/classes/RichListHeader.md)
+- [`RichMetadata`](../../YTNodes/classes/RichMetadata.md)
+- [`RichMetadataRow`](../../YTNodes/classes/RichMetadataRow.md)
+- [`RichSection`](../../YTNodes/classes/RichSection.md)
+- [`RichShelf`](../../YTNodes/classes/RichShelf.md)
+- [`SearchBox`](../../YTNodes/classes/SearchBox.md)
+- [`SearchFilter`](../../YTNodes/classes/SearchFilter.md)
+- [`SearchFilterGroup`](../../YTNodes/classes/SearchFilterGroup.md)
+- [`SearchFilterOptionsDialog`](../../YTNodes/classes/SearchFilterOptionsDialog.md)
+- [`SearchHeader`](../../YTNodes/classes/SearchHeader.md)
+- [`SearchRefinementCard`](../../YTNodes/classes/SearchRefinementCard.md)
+- [`SearchSubMenu`](../../YTNodes/classes/SearchSubMenu.md)
+- [`SearchSuggestion`](../../YTNodes/classes/SearchSuggestion.md)
+- [`SearchSuggestionsSection`](../../YTNodes/classes/SearchSuggestionsSection.md)
+- [`SecondarySearchContainer`](../../YTNodes/classes/SecondarySearchContainer.md)
+- [`SectionList`](../../YTNodes/classes/SectionList.md)
+- [`SegmentedLikeDislikeButton`](../../YTNodes/classes/SegmentedLikeDislikeButton.md)
+- [`SegmentedLikeDislikeButtonView`](../../YTNodes/classes/SegmentedLikeDislikeButtonView.md)
+- [`SettingBoolean`](../../YTNodes/classes/SettingBoolean.md)
+- [`SettingsCheckbox`](../../YTNodes/classes/SettingsCheckbox.md)
+- [`SettingsOptions`](../../YTNodes/classes/SettingsOptions.md)
+- [`SettingsSidebar`](../../YTNodes/classes/SettingsSidebar.md)
+- [`SettingsSwitch`](../../YTNodes/classes/SettingsSwitch.md)
+- [`SharedPost`](../../YTNodes/classes/SharedPost.md)
+- [`Shelf`](../../YTNodes/classes/Shelf.md)
+- [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md)
+- [`ShowCustomThumbnail`](../../YTNodes/classes/ShowCustomThumbnail.md)
+- [`ShowingResultsFor`](../../YTNodes/classes/ShowingResultsFor.md)
+- [`SimpleCardContent`](../../YTNodes/classes/SimpleCardContent.md)
+- [`SimpleCardTeaser`](../../YTNodes/classes/SimpleCardTeaser.md)
+- [`SimpleTextSection`](../../YTNodes/classes/SimpleTextSection.md)
+- [`SingleActionEmergencySupport`](../../YTNodes/classes/SingleActionEmergencySupport.md)
+- [`SingleColumnBrowseResults`](../../YTNodes/classes/SingleColumnBrowseResults.md)
+- [`SingleColumnMusicWatchNextResults`](../../YTNodes/classes/SingleColumnMusicWatchNextResults.md)
+- [`SingleHeroImage`](../../YTNodes/classes/SingleHeroImage.md)
+- [`SlimOwner`](../../YTNodes/classes/SlimOwner.md)
+- [`SlimVideoMetadata`](../../YTNodes/classes/SlimVideoMetadata.md)
+- [`SortFilterHeader`](../../YTNodes/classes/SortFilterHeader.md)
+- [`SortFilterSubMenu`](../../YTNodes/classes/SortFilterSubMenu.md)
+- [`StructuredDescriptionContent`](../../YTNodes/classes/StructuredDescriptionContent.md)
+- [`StructuredDescriptionPlaylistLockup`](../../YTNodes/classes/StructuredDescriptionPlaylistLockup.md)
+- [`SubFeedOption`](../../YTNodes/classes/SubFeedOption.md)
+- [`SubFeedSelector`](../../YTNodes/classes/SubFeedSelector.md)
+- [`SubscribeButton`](../../YTNodes/classes/SubscribeButton.md)
+- [`SubscriptionNotificationToggleButton`](../../YTNodes/classes/SubscriptionNotificationToggleButton.md)
+- [`Tab`](../../YTNodes/classes/Tab.md)
+- [`Tabbed`](../../YTNodes/classes/Tabbed.md)
+- [`TabbedSearchResults`](../../YTNodes/classes/TabbedSearchResults.md)
+- [`TextHeader`](../../YTNodes/classes/TextHeader.md)
+- [`ThumbnailBadgeView`](../../YTNodes/classes/ThumbnailBadgeView.md)
+- [`ThumbnailHoverOverlayView`](../../YTNodes/classes/ThumbnailHoverOverlayView.md)
+- [`ThumbnailLandscapePortrait`](../../YTNodes/classes/ThumbnailLandscapePortrait.md)
+- [`ThumbnailOverlayBadgeView`](../../YTNodes/classes/ThumbnailOverlayBadgeView.md)
+- [`ThumbnailOverlayBottomPanel`](../../YTNodes/classes/ThumbnailOverlayBottomPanel.md)
+- [`ThumbnailOverlayEndorsement`](../../YTNodes/classes/ThumbnailOverlayEndorsement.md)
+- [`ThumbnailOverlayHoverText`](../../YTNodes/classes/ThumbnailOverlayHoverText.md)
+- [`ThumbnailOverlayInlineUnplayable`](../../YTNodes/classes/ThumbnailOverlayInlineUnplayable.md)
+- [`ThumbnailOverlayLoadingPreview`](../../YTNodes/classes/ThumbnailOverlayLoadingPreview.md)
+- [`ThumbnailOverlayNowPlaying`](../../YTNodes/classes/ThumbnailOverlayNowPlaying.md)
+- [`ThumbnailOverlayPinking`](../../YTNodes/classes/ThumbnailOverlayPinking.md)
+- [`ThumbnailOverlayPlaybackStatus`](../../YTNodes/classes/ThumbnailOverlayPlaybackStatus.md)
+- [`ThumbnailOverlayResumePlayback`](../../YTNodes/classes/ThumbnailOverlayResumePlayback.md)
+- [`ThumbnailOverlaySidePanel`](../../YTNodes/classes/ThumbnailOverlaySidePanel.md)
+- [`ThumbnailOverlayTimeStatus`](../../YTNodes/classes/ThumbnailOverlayTimeStatus.md)
+- [`ThumbnailOverlayToggleButton`](../../YTNodes/classes/ThumbnailOverlayToggleButton.md)
+- [`ThumbnailView`](../../YTNodes/classes/ThumbnailView.md)
+- [`TimedMarkerDecoration`](../../YTNodes/classes/TimedMarkerDecoration.md)
+- [`TitleAndButtonListHeader`](../../YTNodes/classes/TitleAndButtonListHeader.md)
+- [`ToggleButton`](../../YTNodes/classes/ToggleButton.md)
+- [`ToggleButtonView`](../../YTNodes/classes/ToggleButtonView.md)
+- [`ToggleMenuServiceItem`](../../YTNodes/classes/ToggleMenuServiceItem.md)
+- [`Tooltip`](../../YTNodes/classes/Tooltip.md)
+- [`TopicChannelDetails`](../../YTNodes/classes/TopicChannelDetails.md)
+- [`Transcript`](../../YTNodes/classes/Transcript.md)
+- [`TranscriptFooter`](../../YTNodes/classes/TranscriptFooter.md)
+- [`TranscriptSearchBox`](../../YTNodes/classes/TranscriptSearchBox.md)
+- [`TranscriptSearchPanel`](../../YTNodes/classes/TranscriptSearchPanel.md)
+- [`TranscriptSectionHeader`](../../YTNodes/classes/TranscriptSectionHeader.md)
+- [`TranscriptSegment`](../../YTNodes/classes/TranscriptSegment.md)
+- [`TranscriptSegmentList`](../../YTNodes/classes/TranscriptSegmentList.md)
+- [`TwoColumnBrowseResults`](../../YTNodes/classes/TwoColumnBrowseResults.md)
+- [`TwoColumnSearchResults`](../../YTNodes/classes/TwoColumnSearchResults.md)
+- [`TwoColumnWatchNextResults`](../../YTNodes/classes/TwoColumnWatchNextResults.md)
+- [`UniversalWatchCard`](../../YTNodes/classes/UniversalWatchCard.md)
+- [`UploadTimeFactoid`](../../YTNodes/classes/UploadTimeFactoid.md)
+- [`UpsellDialog`](../../YTNodes/classes/UpsellDialog.md)
+- [`VerticalList`](../../YTNodes/classes/VerticalList.md)
+- [`VerticalWatchCardList`](../../YTNodes/classes/VerticalWatchCardList.md)
+- [`Video`](../../YTNodes/classes/Video.md)
+- [`VideoAttributesSectionView`](../../YTNodes/classes/VideoAttributesSectionView.md)
+- [`VideoAttributeView`](../../YTNodes/classes/VideoAttributeView.md)
+- [`VideoDescriptionCourseSection`](../../YTNodes/classes/VideoDescriptionCourseSection.md)
+- [`VideoDescriptionHeader`](../../YTNodes/classes/VideoDescriptionHeader.md)
+- [`VideoDescriptionInfocardsSection`](../../YTNodes/classes/VideoDescriptionInfocardsSection.md)
+- [`VideoDescriptionMusicSection`](../../YTNodes/classes/VideoDescriptionMusicSection.md)
+- [`VideoDescriptionTranscriptSection`](../../YTNodes/classes/VideoDescriptionTranscriptSection.md)
+- [`VideoInfoCardContent`](../../YTNodes/classes/VideoInfoCardContent.md)
+- [`VideoOwner`](../../YTNodes/classes/VideoOwner.md)
+- [`VideoPrimaryInfo`](../../YTNodes/classes/VideoPrimaryInfo.md)
+- [`VideoSecondaryInfo`](../../YTNodes/classes/VideoSecondaryInfo.md)
+- [`ViewCountFactoid`](../../YTNodes/classes/ViewCountFactoid.md)
+- [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)
+- [`WatchCardHeroVideo`](../../YTNodes/classes/WatchCardHeroVideo.md)
+- [`WatchCardRichHeader`](../../YTNodes/classes/WatchCardRichHeader.md)
+- [`WatchCardSectionSequence`](../../YTNodes/classes/WatchCardSectionSequence.md)
+- [`WatchNextEndScreen`](../../YTNodes/classes/WatchNextEndScreen.md)
+- [`YpcTrailer`](../../YTNodes/classes/YpcTrailer.md)
+- [`AnchoredSection`](../../YTNodes/classes/AnchoredSection.md)
+- [`KidsBlocklistPicker`](../../YTNodes/classes/KidsBlocklistPicker.md)
+- [`KidsBlocklistPickerItem`](../../YTNodes/classes/KidsBlocklistPickerItem.md)
+- [`KidsCategoriesHeader`](../../YTNodes/classes/KidsCategoriesHeader.md)
+- [`KidsCategoryTab`](../../YTNodes/classes/KidsCategoryTab.md)
+- [`KidsHomeScreen`](../../YTNodes/classes/KidsHomeScreen.md)
+- [`ItemSectionContinuation`](../../../classes/ItemSectionContinuation.md)
+- [`NavigateAction`](../../../classes/NavigateAction.md)
+- [`ShowMiniplayerCommand`](../../../classes/ShowMiniplayerCommand.md)
+- [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md)
+- [`SectionListContinuation`](../../../classes/SectionListContinuation.md)
+- [`MusicPlaylistShelfContinuation`](../../../classes/MusicPlaylistShelfContinuation.md)
+- [`MusicShelfContinuation`](../../../classes/MusicShelfContinuation.md)
+- [`GridContinuation`](../../../classes/GridContinuation.md)
+- [`PlaylistPanelContinuation`](../../../classes/PlaylistPanelContinuation.md)
+- [`Continuation`](../../../classes/Continuation.md)
+- [`LiveChatContinuation`](../../../classes/LiveChatContinuation.md)
+- [`ContinuationCommand`](../../../classes/ContinuationCommand.md)
+
+## Constructors
+
+### new YTNode()
+
+> **new YTNode**(): [`YTNode`](YTNode.md)
+
+#### Returns
+
+[`YTNode`](YTNode.md)
+
+#### Defined in
+
+[src/parser/helpers.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L10)
+
+## Properties
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `string` = `'YTNode'`
+
+#### Defined in
+
+[src/parser/helpers.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is YTNode & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is YTNode & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/Helpers/functions/observe.md b/docs/api/namespaces/Helpers/functions/observe.md
new file mode 100644
index 000000000..742a8bd68
--- /dev/null
+++ b/docs/api/namespaces/Helpers/functions/observe.md
@@ -0,0 +1,24 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / observe
+
+# Function: observe()
+
+> **observe**\<`T`\>(`obj`): [`ObservedArray`](../type-aliases/ObservedArray.md)\<`T`\>
+
+Creates a trap to intercept property access
+and add utilities to an object.
+
+## Type Parameters
+
+β’ **T** *extends* [`YTNode`](../classes/YTNode.md)
+
+## Parameters
+
+β’ **obj**: `T`[]
+
+## Returns
+
+[`ObservedArray`](../type-aliases/ObservedArray.md)\<`T`\>
+
+## Defined in
+
+[src/parser/helpers.ts:394](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L394)
diff --git a/docs/api/namespaces/Helpers/interfaces/Constructor.md b/docs/api/namespaces/Helpers/interfaces/Constructor.md
new file mode 100644
index 000000000..0f73c3d45
--- /dev/null
+++ b/docs/api/namespaces/Helpers/interfaces/Constructor.md
@@ -0,0 +1,25 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / Constructor
+
+# Interface: Constructor\
+
+## Type Parameters
+
+β’ **T**
+
+## Constructors
+
+### new Constructor()
+
+> **new Constructor**(...`args`): `T`
+
+#### Parameters
+
+β’ ...**args**: `any`[]
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/parser/helpers.ts:312](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L312)
diff --git a/docs/api/namespaces/Helpers/interfaces/YTNodeConstructor.md b/docs/api/namespaces/Helpers/interfaces/YTNodeConstructor.md
new file mode 100644
index 000000000..0129f4173
--- /dev/null
+++ b/docs/api/namespaces/Helpers/interfaces/YTNodeConstructor.md
@@ -0,0 +1,35 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / YTNodeConstructor
+
+# Interface: YTNodeConstructor\
+
+## Type Parameters
+
+β’ **T** *extends* [`YTNode`](../classes/YTNode.md) = [`YTNode`](../classes/YTNode.md)
+
+## Constructors
+
+### new YTNodeConstructor()
+
+> **new YTNodeConstructor**(`data`): `T`
+
+#### Parameters
+
+β’ **data**: `any`
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/parser/helpers.ts:316](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L316)
+
+## Properties
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Defined in
+
+[src/parser/helpers.ts:317](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L317)
diff --git a/docs/api/namespaces/Helpers/type-aliases/ObservedArray.md b/docs/api/namespaces/Helpers/type-aliases/ObservedArray.md
new file mode 100644
index 000000000..c10397c15
--- /dev/null
+++ b/docs/api/namespaces/Helpers/type-aliases/ObservedArray.md
@@ -0,0 +1,139 @@
+[youtubei.js](../../../README.md) / [Helpers](../README.md) / ObservedArray
+
+# Type Alias: ObservedArray\
+
+> **ObservedArray**\<`T`\>: `T`[] & `object`
+
+## Type declaration
+
+### first()
+
+> **first**: () => `T`
+
+Get the first item.
+
+#### Returns
+
+`T`
+
+### get()
+
+> **get**: (`rule`, `del_item`?) => `T` \| `undefined`
+
+Returns the first object to match the rule.
+
+#### Parameters
+
+β’ **rule**: `object`
+
+β’ **del\_item?**: `boolean`
+
+#### Returns
+
+`T` \| `undefined`
+
+### getAll()
+
+> **getAll**: (`rule`, `del_items`?) => `T`[]
+
+Returns all objects that match the rule.
+
+#### Parameters
+
+β’ **rule**: `object`
+
+β’ **del\_items?**: `boolean`
+
+#### Returns
+
+`T`[]
+
+### matchCondition()
+
+> **matchCondition**: (`condition`) => `T` \| `undefined`
+
+Returns the first object to match the condition.
+
+#### Parameters
+
+β’ **condition**
+
+#### Returns
+
+`T` \| `undefined`
+
+### remove()
+
+> **remove**: (`index`) => `T`[]
+
+Removes the item at the given index.
+
+#### Parameters
+
+β’ **index**: `number`
+
+#### Returns
+
+`T`[]
+
+### as()
+
+This is similar to filter but throws if there's a type mismatch.
+
+#### Type Parameters
+
+β’ **R** *extends* [`YTNode`](../classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`R`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+[`ObservedArray`](ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+### filterType()
+
+Get all items of a specific type.
+
+#### Type Parameters
+
+β’ **R** *extends* [`YTNode`](../classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`R`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+[`ObservedArray`](ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+### firstOfType()
+
+Get the first of a specific type.
+
+#### Type Parameters
+
+β’ **R** *extends* [`YTNode`](../classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../interfaces/YTNodeConstructor.md)\<`R`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`undefined` \| `InstanceType`\<`K`\[`number`\]\>
+
+## Type Parameters
+
+β’ **T** *extends* [`YTNode`](../classes/YTNode.md) = [`YTNode`](../classes/YTNode.md)
+
+## Defined in
+
+[src/parser/helpers.ts:355](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L355)
diff --git a/docs/api/namespaces/LZW/README.md b/docs/api/namespaces/LZW/README.md
new file mode 100644
index 000000000..de4d5db8d
--- /dev/null
+++ b/docs/api/namespaces/LZW/README.md
@@ -0,0 +1,10 @@
+[youtubei.js](../../README.md) / LZW
+
+# LZW
+
+## Index
+
+### Functions
+
+- [compress](functions/compress.md)
+- [decompress](functions/decompress.md)
diff --git a/docs/api/namespaces/LZW/functions/compress.md b/docs/api/namespaces/LZW/functions/compress.md
new file mode 100644
index 000000000..98bd0a027
--- /dev/null
+++ b/docs/api/namespaces/LZW/functions/compress.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [LZW](../README.md) / compress
+
+# Function: compress()
+
+> **compress**(`input`): `string`
+
+Compresses a string using the LZW compression algorithm.
+
+## Parameters
+
+β’ **input**: `string`
+
+The data to compress.
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/LZW.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/LZW.ts#L5)
diff --git a/docs/api/namespaces/LZW/functions/decompress.md b/docs/api/namespaces/LZW/functions/decompress.md
new file mode 100644
index 000000000..f22468ec9
--- /dev/null
+++ b/docs/api/namespaces/LZW/functions/decompress.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [LZW](../README.md) / decompress
+
+# Function: decompress()
+
+> **decompress**(`input`): `string`
+
+Decompresses data that was compressed using the LZW compression algorithm.
+
+## Parameters
+
+β’ **input**: `string`
+
+The data to be decompressed.
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/LZW.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/LZW.ts#L40)
diff --git a/docs/api/namespaces/Managers/README.md b/docs/api/namespaces/Managers/README.md
new file mode 100644
index 000000000..f7ea7febc
--- /dev/null
+++ b/docs/api/namespaces/Managers/README.md
@@ -0,0 +1,11 @@
+[youtubei.js](../../README.md) / Managers
+
+# Managers
+
+## Index
+
+### Classes
+
+- [AccountManager](classes/AccountManager.md)
+- [InteractionManager](classes/InteractionManager.md)
+- [PlaylistManager](classes/PlaylistManager.md)
diff --git a/docs/api/namespaces/Managers/classes/AccountManager.md b/docs/api/namespaces/Managers/classes/AccountManager.md
new file mode 100644
index 000000000..467e19742
--- /dev/null
+++ b/docs/api/namespaces/Managers/classes/AccountManager.md
@@ -0,0 +1,127 @@
+[youtubei.js](../../../README.md) / [Managers](../README.md) / AccountManager
+
+# Class: AccountManager
+
+## Constructors
+
+### new AccountManager()
+
+> **new AccountManager**(`actions`): [`AccountManager`](AccountManager.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`AccountManager`](AccountManager.md)
+
+#### Defined in
+
+[src/core/managers/AccountManager.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/AccountManager.ts#L22)
+
+## Properties
+
+### channel
+
+> **channel**: `object`
+
+#### editDescription()
+
+> **editDescription**: (`new_description`) => `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+##### Parameters
+
+β’ **new\_description**: `string`
+
+##### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### editName()
+
+> **editName**: (`new_name`) => `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+##### Parameters
+
+β’ **new\_name**: `string`
+
+##### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### getBasicAnalytics()
+
+> **getBasicAnalytics**: () => `Promise`\<[`Analytics`](../../YT/classes/Analytics.md)\>
+
+##### Returns
+
+`Promise`\<[`Analytics`](../../YT/classes/Analytics.md)\>
+
+#### Defined in
+
+[src/core/managers/AccountManager.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/AccountManager.ts#L16)
+
+## Methods
+
+### getAnalytics()
+
+> **getAnalytics**(): `Promise`\<[`Analytics`](../../YT/classes/Analytics.md)\>
+
+Retrieves basic channel analytics.
+
+#### Returns
+
+`Promise`\<[`Analytics`](../../YT/classes/Analytics.md)\>
+
+#### Defined in
+
+[src/core/managers/AccountManager.ts:107](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/AccountManager.ts#L107)
+
+***
+
+### getInfo()
+
+> **getInfo**(): `Promise`\<[`AccountInfo`](../../YT/classes/AccountInfo.md)\>
+
+Retrieves channel info.
+
+#### Returns
+
+`Promise`\<[`AccountInfo`](../../YT/classes/AccountInfo.md)\>
+
+#### Defined in
+
+[src/core/managers/AccountManager.ts:66](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/AccountManager.ts#L66)
+
+***
+
+### getSettings()
+
+> **getSettings**(): `Promise`\<[`Settings`](../../YT/classes/Settings.md)\>
+
+Opens YouTube settings.
+
+#### Returns
+
+`Promise`\<[`Settings`](../../YT/classes/Settings.md)\>
+
+#### Defined in
+
+[src/core/managers/AccountManager.ts:95](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/AccountManager.ts#L95)
+
+***
+
+### getTimeWatched()
+
+> **getTimeWatched**(): `Promise`\<[`TimeWatched`](../../YT/classes/TimeWatched.md)\>
+
+Retrieves time watched statistics.
+
+#### Returns
+
+`Promise`\<[`TimeWatched`](../../YT/classes/TimeWatched.md)\>
+
+#### Defined in
+
+[src/core/managers/AccountManager.ts:81](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/AccountManager.ts#L81)
diff --git a/docs/api/namespaces/Managers/classes/InteractionManager.md b/docs/api/namespaces/Managers/classes/InteractionManager.md
new file mode 100644
index 000000000..d3a52772b
--- /dev/null
+++ b/docs/api/namespaces/Managers/classes/InteractionManager.md
@@ -0,0 +1,232 @@
+[youtubei.js](../../../README.md) / [Managers](../README.md) / InteractionManager
+
+# Class: InteractionManager
+
+## Constructors
+
+### new InteractionManager()
+
+> **new InteractionManager**(`actions`): [`InteractionManager`](InteractionManager.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`InteractionManager`](InteractionManager.md)
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L16)
+
+## Methods
+
+### comment()
+
+> **comment**(`video_id`, `text`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Posts a comment on a given video.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video ID
+
+β’ **text**: `string`
+
+The comment text
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:127](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L127)
+
+***
+
+### dislike()
+
+> **dislike**(`video_id`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Dislikes a given video.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video ID
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L44)
+
+***
+
+### like()
+
+> **like**(`video_id`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Likes a given video.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video ID
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L24)
+
+***
+
+### removeRating()
+
+> **removeRating**(`video_id`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Removes a like/dislike.
+
+#### Parameters
+
+β’ **video\_id**: `string`
+
+The video ID
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:64](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L64)
+
+***
+
+### setNotificationPreferences()
+
+> **setNotificationPreferences**(`channel_id`, `type`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Changes notification preferences for a given channel.
+Only works with channels you are subscribed to.
+
+#### Parameters
+
+β’ **channel\_id**: `string`
+
+The channel ID.
+
+β’ **type**: `"PERSONALIZED"` \| `"ALL"` \| `"NONE"`
+
+The notification type.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:188](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L188)
+
+***
+
+### subscribe()
+
+> **subscribe**(`channel_id`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Subscribes to a given channel.
+
+#### Parameters
+
+β’ **channel\_id**: `string`
+
+The channel ID
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L84)
+
+***
+
+### translate()
+
+> **translate**(`text`, `target_language`, `args`): `Promise`\<`object`\>
+
+Translates a given text using YouTube's comment translate feature.
+
+#### Parameters
+
+β’ **text**: `string`
+
+β’ **target\_language**: `string`
+
+an ISO language code
+
+β’ **args** = `{}`
+
+optional arguments
+
+β’ **args.comment\_id?**: `string`
+
+β’ **args.video\_id?**: `string`
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### data
+
+> **data**: [`IRawResponse`](../../APIResponseTypes/interfaces/IRawResponse.md) = `response.data`
+
+##### status\_code
+
+> **status\_code**: `number` = `response.status_code`
+
+##### success
+
+> **success**: `boolean` = `response.success`
+
+##### translated\_content
+
+> **translated\_content**: `any` = `mutation.translatedContent.content`
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:160](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L160)
+
+***
+
+### unsubscribe()
+
+> **unsubscribe**(`channel_id`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Unsubscribes from a given channel.
+
+#### Parameters
+
+β’ **channel\_id**: `string`
+
+The channel ID
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/core/managers/InteractionManager.ts:105](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/InteractionManager.ts#L105)
diff --git a/docs/api/namespaces/Managers/classes/PlaylistManager.md b/docs/api/namespaces/Managers/classes/PlaylistManager.md
new file mode 100644
index 000000000..d331d97ee
--- /dev/null
+++ b/docs/api/namespaces/Managers/classes/PlaylistManager.md
@@ -0,0 +1,279 @@
+[youtubei.js](../../../README.md) / [Managers](../README.md) / PlaylistManager
+
+# Class: PlaylistManager
+
+## Constructors
+
+### new PlaylistManager()
+
+> **new PlaylistManager**(`actions`): [`PlaylistManager`](PlaylistManager.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`PlaylistManager`](PlaylistManager.md)
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L14)
+
+## Methods
+
+### addVideos()
+
+> **addVideos**(`playlist_id`, `video_ids`): `Promise`\<`object`\>
+
+Adds videos to a given playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist ID.
+
+β’ **video\_ids**: `string`[]
+
+An array of video IDs to add to the playlist.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### action\_result
+
+> **action\_result**: `any`
+
+##### playlist\_id
+
+> **playlist\_id**: `string`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:73](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L73)
+
+***
+
+### create()
+
+> **create**(`title`, `video_ids`): `Promise`\<`object`\>
+
+Creates a playlist.
+
+#### Parameters
+
+β’ **title**: `string`
+
+The title of the playlist.
+
+β’ **video\_ids**: `string`[]
+
+An array of video IDs to add to the playlist.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### data
+
+> **data**: `any`
+
+##### playlist\_id?
+
+> `optional` **playlist\_id**: `string`
+
+##### status\_code
+
+> **status\_code**: `number`
+
+##### success
+
+> **success**: `boolean`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L23)
+
+***
+
+### delete()
+
+> **delete**(`playlist_id`): `Promise`\<`object`\>
+
+Deletes a given playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist ID.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### data
+
+> **data**: `any`
+
+##### playlist\_id
+
+> **playlist\_id**: `string`
+
+##### status\_code
+
+> **status\_code**: `number`
+
+##### success
+
+> **success**: `boolean`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:48](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L48)
+
+***
+
+### moveVideo()
+
+> **moveVideo**(`playlist_id`, `moved_video_id`, `predecessor_video_id`): `Promise`\<`object`\>
+
+Moves a video to a new position within a given playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist ID.
+
+β’ **moved\_video\_id**: `string`
+
+The video ID to move.
+
+β’ **predecessor\_video\_id**: `string`
+
+The video ID to move the moved video before.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### action\_result
+
+> **action\_result**: `any`
+
+##### playlist\_id
+
+> **playlist\_id**: `string`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:156](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L156)
+
+***
+
+### removeVideos()
+
+> **removeVideos**(`playlist_id`, `video_ids`, `use_set_video_ids`): `Promise`\<`object`\>
+
+Removes videos from a given playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist ID.
+
+β’ **video\_ids**: `string`[]
+
+An array of video IDs to remove from the playlist.
+
+β’ **use\_set\_video\_ids**: `boolean` = `false`
+
+Option to remove videos using set video IDs.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### action\_result
+
+> **action\_result**: `any`
+
+##### playlist\_id
+
+> **playlist\_id**: `string`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:101](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L101)
+
+***
+
+### setDescription()
+
+> **setDescription**(`playlist_id`, `description`): `Promise`\<`object`\>
+
+Sets the description for the given playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist ID.
+
+β’ **description**: `string`
+
+The description to use for the playlist.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### action\_result
+
+> **action\_result**: `any`
+
+##### playlist\_id
+
+> **playlist\_id**: `string`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:239](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L239)
+
+***
+
+### setName()
+
+> **setName**(`playlist_id`, `name`): `Promise`\<`object`\>
+
+Sets the name (title) for the given playlist.
+
+#### Parameters
+
+β’ **playlist\_id**: `string`
+
+The playlist ID.
+
+β’ **name**: `string`
+
+The name / title to use for the playlist.
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### action\_result
+
+> **action\_result**: `any`
+
+##### playlist\_id
+
+> **playlist\_id**: `string`
+
+#### Defined in
+
+[src/core/managers/PlaylistManager.ts:211](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/managers/PlaylistManager.ts#L211)
diff --git a/docs/api/namespaces/Misc/README.md b/docs/api/namespaces/Misc/README.md
new file mode 100644
index 000000000..cd31c5a16
--- /dev/null
+++ b/docs/api/namespaces/Misc/README.md
@@ -0,0 +1,16 @@
+[youtubei.js](../../README.md) / Misc
+
+# Misc
+
+## Index
+
+### Classes
+
+- [Author](classes/Author.md)
+- [ChildElement](classes/ChildElement.md)
+- [EmojiRun](classes/EmojiRun.md)
+- [Format](classes/Format.md)
+- [Text](classes/Text.md)
+- [TextRun](classes/TextRun.md)
+- [Thumbnail](classes/Thumbnail.md)
+- [VideoDetails](classes/VideoDetails.md)
diff --git a/docs/api/namespaces/Misc/classes/Author.md b/docs/api/namespaces/Misc/classes/Author.md
new file mode 100644
index 000000000..46f322965
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/Author.md
@@ -0,0 +1,131 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / Author
+
+# Class: Author
+
+## Constructors
+
+### new Author()
+
+> **new Author**(`item`, `badges`?, `thumbs`?, `id`?): [`Author`](Author.md)
+
+#### Parameters
+
+β’ **item**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+β’ **badges?**: `any`
+
+β’ **thumbs?**: `any`
+
+β’ **id?**: `string`
+
+#### Returns
+
+[`Author`](Author.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L21)
+
+## Properties
+
+### badges
+
+> **badges**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L15)
+
+***
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L14)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L11)
+
+***
+
+### is\_moderator?
+
+> `optional` **is\_moderator**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L16)
+
+***
+
+### is\_verified?
+
+> `optional` **is\_verified**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L17)
+
+***
+
+### is\_verified\_artist?
+
+> `optional` **is\_verified\_artist**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L18)
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L12)
+
+***
+
+### thumbnails
+
+> **thumbnails**: [`Thumbnail`](Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L13)
+
+***
+
+### url
+
+> **url**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L19)
+
+## Accessors
+
+### best\_thumbnail
+
+> `get` **best\_thumbnail**(): `undefined` \| [`Thumbnail`](Thumbnail.md)
+
+#### Returns
+
+`undefined` \| [`Thumbnail`](Thumbnail.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Author.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Author.ts#L51)
diff --git a/docs/api/namespaces/Misc/classes/ChildElement.md b/docs/api/namespaces/Misc/classes/ChildElement.md
new file mode 100644
index 000000000..cad39aec7
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/ChildElement.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / ChildElement
+
+# Class: ChildElement
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChildElement()
+
+> **new ChildElement**(`data`): [`ChildElement`](ChildElement.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChildElement`](ChildElement.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/misc/ChildElement.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/ChildElement.ts#L11)
+
+## Properties
+
+### child\_elements?
+
+> `optional` **child\_elements**: [`ChildElement`](ChildElement.md)[]
+
+#### Defined in
+
+[src/parser/classes/misc/ChildElement.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/ChildElement.ts#L9)
+
+***
+
+### properties
+
+> **properties**: `any`
+
+#### Defined in
+
+[src/parser/classes/misc/ChildElement.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/ChildElement.ts#L8)
+
+***
+
+### text?
+
+> `optional` **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/ChildElement.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/ChildElement.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChildElement'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/misc/ChildElement.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/ChildElement.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChildElement & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChildElement & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/Misc/classes/EmojiRun.md b/docs/api/namespaces/Misc/classes/EmojiRun.md
new file mode 100644
index 000000000..ebb625610
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/EmojiRun.md
@@ -0,0 +1,105 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / EmojiRun
+
+# Class: EmojiRun
+
+## Implements
+
+- `Run`
+
+## Constructors
+
+### new EmojiRun()
+
+> **new EmojiRun**(`data`): [`EmojiRun`](EmojiRun.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`EmojiRun`](EmojiRun.md)
+
+#### Defined in
+
+[src/parser/classes/misc/EmojiRun.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/EmojiRun.ts#L15)
+
+## Properties
+
+### emoji
+
+> **emoji**: `object`
+
+#### emoji\_id
+
+> **emoji\_id**: `string`
+
+#### image
+
+> **image**: [`Thumbnail`](Thumbnail.md)[]
+
+#### is\_custom
+
+> **is\_custom**: `boolean`
+
+#### search\_terms
+
+> **search\_terms**: `string`[]
+
+#### shortcuts
+
+> **shortcuts**: `string`[]
+
+#### Defined in
+
+[src/parser/classes/misc/EmojiRun.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/EmojiRun.ts#L7)
+
+***
+
+### text
+
+> **text**: `string`
+
+#### Implementation of
+
+`Run.text`
+
+#### Defined in
+
+[src/parser/classes/misc/EmojiRun.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/EmojiRun.ts#L6)
+
+## Methods
+
+### toHTML()
+
+> **toHTML**(): `string`
+
+#### Returns
+
+`string`
+
+#### Implementation of
+
+`Run.toHTML`
+
+#### Defined in
+
+[src/parser/classes/misc/EmojiRun.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/EmojiRun.ts#L35)
+
+***
+
+### toString()
+
+> **toString**(): `string`
+
+#### Returns
+
+`string`
+
+#### Implementation of
+
+`Run.toString`
+
+#### Defined in
+
+[src/parser/classes/misc/EmojiRun.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/EmojiRun.ts#L31)
diff --git a/docs/api/namespaces/Misc/classes/Format.md b/docs/api/namespaces/Misc/classes/Format.md
new file mode 100644
index 000000000..b68d8a155
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/Format.md
@@ -0,0 +1,575 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / Format
+
+# Class: Format
+
+## Constructors
+
+### new Format()
+
+> **new Format**(`data`, `this_response_nsig_cache`?): [`Format`](Format.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+β’ **this\_response\_nsig\_cache?**: `Map`\<`string`, `string`\>
+
+#### Returns
+
+[`Format`](Format.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:76](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L76)
+
+## Properties
+
+### approx\_duration\_ms
+
+> **approx\_duration\_ms**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L30)
+
+***
+
+### audio\_channels?
+
+> `optional` **audio\_channels**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L32)
+
+***
+
+### audio\_quality?
+
+> `optional` **audio\_quality**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L29)
+
+***
+
+### audio\_sample\_rate?
+
+> `optional` **audio\_sample\_rate**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L31)
+
+***
+
+### audio\_track?
+
+> `optional` **audio\_track**: `object`
+
+#### audio\_is\_default
+
+> **audio\_is\_default**: `boolean`
+
+#### display\_name
+
+> **display\_name**: `string`
+
+#### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:50](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L50)
+
+***
+
+### average\_bitrate?
+
+> `optional` **average\_bitrate**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L21)
+
+***
+
+### bitrate
+
+> **bitrate**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L22)
+
+***
+
+### caption\_track?
+
+> `optional` **caption\_track**: `object`
+
+#### display\_name
+
+> **display\_name**: `string`
+
+#### id
+
+> **id**: `string`
+
+#### kind?
+
+> `optional` **kind**: `"asr"` \| `"frc"`
+
+#### language\_code
+
+> **language\_code**: `string`
+
+#### vss\_id
+
+> **vss\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:68](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L68)
+
+***
+
+### cipher?
+
+> `optional` **cipher**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:49](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L49)
+
+***
+
+### color\_info?
+
+> `optional` **color\_info**: `object`
+
+#### matrix\_coefficients?
+
+> `optional` **matrix\_coefficients**: `string`
+
+#### primaries?
+
+> `optional` **primaries**: `string`
+
+#### transfer\_characteristics?
+
+> `optional` **transfer\_characteristics**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:63](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L63)
+
+***
+
+### content\_length?
+
+> `optional` **content\_length**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L14)
+
+***
+
+### distinct\_params?
+
+> `optional` **distinct\_params**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L37)
+
+***
+
+### drm\_families?
+
+> `optional` **drm\_families**: `string`[]
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L17)
+
+***
+
+### drm\_track\_type?
+
+> `optional` **drm\_track\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L36)
+
+***
+
+### fair\_play\_key\_uri?
+
+> `optional` **fair\_play\_key\_uri**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L25)
+
+***
+
+### fps?
+
+> `optional` **fps**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L18)
+
+***
+
+### has\_audio
+
+> **has\_audio**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L55)
+
+***
+
+### has\_text
+
+> **has\_text**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L57)
+
+***
+
+### has\_video
+
+> **has\_video**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:56](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L56)
+
+***
+
+### height?
+
+> `optional` **height**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L11)
+
+***
+
+### high\_replication?
+
+> `optional` **high\_replication**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L28)
+
+***
+
+### index\_range?
+
+> `optional` **index\_range**: `object`
+
+#### end
+
+> **end**: `number`
+
+#### start
+
+> **start**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L45)
+
+***
+
+### init\_range?
+
+> `optional` **init\_range**: `object`
+
+#### end
+
+> **end**: `number`
+
+#### start
+
+> **start**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L41)
+
+***
+
+### is\_descriptive?
+
+> `optional` **is\_descriptive**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:60](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L60)
+
+***
+
+### is\_drc?
+
+> `optional` **is\_drc**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L35)
+
+***
+
+### is\_dubbed?
+
+> `optional` **is\_dubbed**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:59](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L59)
+
+***
+
+### is\_original?
+
+> `optional` **is\_original**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:62](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L62)
+
+***
+
+### is\_secondary?
+
+> `optional` **is\_secondary**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:61](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L61)
+
+***
+
+### is\_type\_otf
+
+> **is\_type\_otf**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L40)
+
+***
+
+### itag
+
+> **itag**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L8)
+
+***
+
+### language?
+
+> `optional` **language**: `null` \| `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:58](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L58)
+
+***
+
+### last\_modified
+
+> **last\_modified**: `Date`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L12)
+
+***
+
+### last\_modified\_ms
+
+> **last\_modified\_ms**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L13)
+
+***
+
+### loudness\_db?
+
+> `optional` **loudness\_db**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L33)
+
+***
+
+### max\_dvr\_duration\_sec?
+
+> `optional` **max\_dvr\_duration\_sec**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L27)
+
+***
+
+### mime\_type
+
+> **mime\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L39)
+
+***
+
+### projection\_type?
+
+> `optional` **projection\_type**: `"RECTANGULAR"` \| `"EQUIRECTANGULAR"` \| `"EQUIRECTANGULAR_THREED_TOP_BOTTOM"` \| `"MESH"`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L20)
+
+***
+
+### quality?
+
+> `optional` **quality**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L15)
+
+***
+
+### quality\_label?
+
+> `optional` **quality\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L19)
+
+***
+
+### signature\_cipher?
+
+> `optional` **signature\_cipher**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L34)
+
+***
+
+### spatial\_audio\_type?
+
+> `optional` **spatial\_audio\_type**: `"AMBISONICS_5_1"` \| `"AMBISONICS_QUAD"` \| `"FOA_WITH_NON_DIEGETIC"`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L23)
+
+***
+
+### stereo\_layout?
+
+> `optional` **stereo\_layout**: `"LEFT_RIGHT"` \| `"TOP_BOTTOM"`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L26)
+
+***
+
+### target\_duration\_dec?
+
+> `optional` **target\_duration\_dec**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L24)
+
+***
+
+### track\_absolute\_loudness\_lkfs?
+
+> `optional` **track\_absolute\_loudness\_lkfs**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L38)
+
+***
+
+### url?
+
+> `optional` **url**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L9)
+
+***
+
+### width?
+
+> `optional` **width**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L10)
+
+***
+
+### xtags?
+
+> `optional` **xtags**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L16)
+
+## Methods
+
+### decipher()
+
+> **decipher**(`player`): `string`
+
+Deciphers the streaming url of the format.
+
+#### Parameters
+
+β’ **player**: `undefined` \| [`Player`](../../../classes/Player.md)
+
+#### Returns
+
+`string`
+
+Deciphered URL.
+
+#### Defined in
+
+[src/parser/classes/misc/Format.ts:234](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Format.ts#L234)
diff --git a/docs/api/namespaces/Misc/classes/Text.md b/docs/api/namespaces/Misc/classes/Text.md
new file mode 100644
index 000000000..acc4842c8
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/Text.md
@@ -0,0 +1,123 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / Text
+
+# Class: Text
+
+## Constructors
+
+### new Text()
+
+> **new Text**(`data`): [`Text`](Text.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Text`](Text.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L31)
+
+## Properties
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L29)
+
+***
+
+### runs?
+
+> `optional` **runs**: ([`EmojiRun`](EmojiRun.md) \| [`TextRun`](TextRun.md))[]
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L28)
+
+***
+
+### text?
+
+> `optional` **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L27)
+
+## Methods
+
+### isEmpty()
+
+> **isEmpty**(): `boolean`
+
+Checks if the text is empty.
+
+#### Returns
+
+`boolean`
+
+Whether the text is empty.
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:197](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L197)
+
+***
+
+### toHTML()
+
+> **toHTML**(): `undefined` \| `string`
+
+Converts the text to HTML.
+
+#### Returns
+
+`undefined` \| `string`
+
+The HTML.
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:189](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L189)
+
+***
+
+### toString()
+
+> **toString**(): `string`
+
+Converts the text to a string.
+
+#### Returns
+
+`string`
+
+The text.
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:205](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L205)
+
+***
+
+### fromAttributed()
+
+> `static` **fromAttributed**(`data`): [`Text`](Text.md)
+
+#### Parameters
+
+β’ **data**: `AttributedText`
+
+#### Returns
+
+[`Text`](Text.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Text.ts:54](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Text.ts#L54)
diff --git a/docs/api/namespaces/Misc/classes/TextRun.md b/docs/api/namespaces/Misc/classes/TextRun.md
new file mode 100644
index 000000000..a69e84af3
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/TextRun.md
@@ -0,0 +1,125 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / TextRun
+
+# Class: TextRun
+
+## Implements
+
+- `Run`
+
+## Constructors
+
+### new TextRun()
+
+> **new TextRun**(`data`): [`TextRun`](TextRun.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`TextRun`](TextRun.md)
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L13)
+
+## Properties
+
+### attachment
+
+> **attachment**: `any`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L11)
+
+***
+
+### bold
+
+> **bold**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L8)
+
+***
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L7)
+
+***
+
+### italics
+
+> **italics**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L9)
+
+***
+
+### strikethrough
+
+> **strikethrough**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L10)
+
+***
+
+### text
+
+> **text**: `string`
+
+#### Implementation of
+
+`Run.text`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L6)
+
+## Methods
+
+### toHTML()
+
+> **toHTML**(): `string`
+
+#### Returns
+
+`string`
+
+#### Implementation of
+
+`Run.toHTML`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L30)
+
+***
+
+### toString()
+
+> **toString**(): `string`
+
+#### Returns
+
+`string`
+
+#### Implementation of
+
+`Run.toString`
+
+#### Defined in
+
+[src/parser/classes/misc/TextRun.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/TextRun.ts#L26)
diff --git a/docs/api/namespaces/Misc/classes/Thumbnail.md b/docs/api/namespaces/Misc/classes/Thumbnail.md
new file mode 100644
index 000000000..3fba840b9
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/Thumbnail.md
@@ -0,0 +1,71 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / Thumbnail
+
+# Class: Thumbnail
+
+## Constructors
+
+### new Thumbnail()
+
+> **new Thumbnail**(`data`): [`Thumbnail`](Thumbnail.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Thumbnail`](Thumbnail.md)
+
+#### Defined in
+
+[src/parser/classes/misc/Thumbnail.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Thumbnail.ts#L8)
+
+## Properties
+
+### height
+
+> **height**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Thumbnail.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Thumbnail.ts#L6)
+
+***
+
+### url
+
+> **url**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/Thumbnail.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Thumbnail.ts#L4)
+
+***
+
+### width
+
+> **width**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/Thumbnail.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Thumbnail.ts#L5)
+
+## Methods
+
+### fromResponse()
+
+> `static` **fromResponse**(`data`): [`Thumbnail`](Thumbnail.md)[]
+
+Get thumbnails from response object.
+
+#### Parameters
+
+β’ **data**: `any`
+
+#### Returns
+
+[`Thumbnail`](Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/misc/Thumbnail.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/Thumbnail.ts#L17)
diff --git a/docs/api/namespaces/Misc/classes/VideoDetails.md b/docs/api/namespaces/Misc/classes/VideoDetails.md
new file mode 100644
index 000000000..250fa492c
--- /dev/null
+++ b/docs/api/namespaces/Misc/classes/VideoDetails.md
@@ -0,0 +1,221 @@
+[youtubei.js](../../../README.md) / [Misc](../README.md) / VideoDetails
+
+# Class: VideoDetails
+
+## Constructors
+
+### new VideoDetails()
+
+> **new VideoDetails**(`data`): [`VideoDetails`](VideoDetails.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`VideoDetails`](VideoDetails.md)
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L26)
+
+## Properties
+
+### allow\_ratings
+
+> **allow\_ratings**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L13)
+
+***
+
+### author
+
+> **author**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L15)
+
+***
+
+### channel\_id
+
+> **channel\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L6)
+
+***
+
+### duration
+
+> **duration**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L8)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L5)
+
+***
+
+### is\_crawlable
+
+> **is\_crawlable**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L21)
+
+***
+
+### is\_live
+
+> **is\_live**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L17)
+
+***
+
+### is\_live\_content
+
+> **is\_live\_content**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L18)
+
+***
+
+### is\_live\_dvr\_enabled
+
+> **is\_live\_dvr\_enabled**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L19)
+
+***
+
+### is\_low\_latency\_live\_stream
+
+> **is\_low\_latency\_live\_stream**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L23)
+
+***
+
+### is\_owner\_viewing
+
+> **is\_owner\_viewing**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L10)
+
+***
+
+### is\_post\_live\_dvr
+
+> **is\_post\_live\_dvr**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L22)
+
+***
+
+### is\_private
+
+> **is\_private**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L16)
+
+***
+
+### is\_upcoming
+
+> **is\_upcoming**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L20)
+
+***
+
+### keywords
+
+> **keywords**: `string`[]
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L9)
+
+***
+
+### live\_chunk\_readahead?
+
+> `optional` **live\_chunk\_readahead**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L24)
+
+***
+
+### short\_description
+
+> **short\_description**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L11)
+
+***
+
+### thumbnail
+
+> **thumbnail**: [`Thumbnail`](Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L12)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L7)
+
+***
+
+### view\_count
+
+> **view\_count**: `number`
+
+#### Defined in
+
+[src/parser/classes/misc/VideoDetails.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/misc/VideoDetails.ts#L14)
diff --git a/docs/api/namespaces/Mixins/README.md b/docs/api/namespaces/Mixins/README.md
new file mode 100644
index 000000000..cdd241928
--- /dev/null
+++ b/docs/api/namespaces/Mixins/README.md
@@ -0,0 +1,12 @@
+[youtubei.js](../../README.md) / Mixins
+
+# Mixins
+
+## Index
+
+### Classes
+
+- [Feed](classes/Feed.md)
+- [FilterableFeed](classes/FilterableFeed.md)
+- [MediaInfo](classes/MediaInfo.md)
+- [TabbedFeed](classes/TabbedFeed.md)
diff --git a/docs/api/namespaces/Mixins/classes/Feed.md b/docs/api/namespaces/Mixins/classes/Feed.md
new file mode 100644
index 000000000..1596ea800
--- /dev/null
+++ b/docs/api/namespaces/Mixins/classes/Feed.md
@@ -0,0 +1,306 @@
+[youtubei.js](../../../README.md) / [Mixins](../README.md) / Feed
+
+# Class: Feed\
+
+## Extended by
+
+- [`FilterableFeed`](FilterableFeed.md)
+- [`TabbedFeed`](TabbedFeed.md)
+- [`History`](../../YT/classes/History.md)
+- [`Library`](../../YT/classes/Library.md)
+- [`Playlist`](../../YT/classes/Playlist.md)
+- [`Search`](../../YT/classes/Search.md)
+- [`ChannelListContinuation`](../../YT/classes/ChannelListContinuation.md)
+- [`Channel`](../../YTKids/classes/Channel.md)
+- [`HomeFeed`](../../YTKids/classes/HomeFeed.md)
+- [`Search`](../../YTKids/classes/Search.md)
+
+## Type Parameters
+
+β’ **T** *extends* [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md) = [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+## Constructors
+
+### new Feed()
+
+> **new Feed**\<`T`\>(`actions`, `response`, `already_parsed`): [`Feed`](Feed.md)\<`T`\>
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **response**: [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md) \| [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`Feed`](Feed.md)\<`T`\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:46](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L46)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+Retrieves next batch of contents and returns a new [Feed](Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| `T`\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| `T`\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/Mixins/classes/FilterableFeed.md b/docs/api/namespaces/Mixins/classes/FilterableFeed.md
new file mode 100644
index 000000000..d97228b59
--- /dev/null
+++ b/docs/api/namespaces/Mixins/classes/FilterableFeed.md
@@ -0,0 +1,423 @@
+[youtubei.js](../../../README.md) / [Mixins](../README.md) / FilterableFeed
+
+# Class: FilterableFeed\
+
+## Extends
+
+- [`Feed`](Feed.md)\<`T`\>
+
+## Extended by
+
+- [`HomeFeed`](../../YT/classes/HomeFeed.md)
+- [`HashtagFeed`](../../YT/classes/HashtagFeed.md)
+- [`FilteredChannelList`](../../YT/classes/FilteredChannelList.md)
+
+## Type Parameters
+
+β’ **T** *extends* [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+## Constructors
+
+### new FilterableFeed()
+
+> **new FilterableFeed**\<`T`\>(`actions`, `data`, `already_parsed`): [`FilterableFeed`](FilterableFeed.md)\<`T`\>
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| `T`
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`FilterableFeed`](FilterableFeed.md)\<`T`\>
+
+#### Overrides
+
+[`Feed`](Feed.md).[`constructor`](Feed.md#constructors)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L13)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`actions`](Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`channels`](Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### filter\_chips
+
+> `get` **filter\_chips**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+Returns the filter chips.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L20)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+Returns available filters.
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L38)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`has_continuation`](Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`memo`](Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`page`](Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`page_contents`](Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`playlists`](Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`posts`](Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`secondary_contents`](Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`shelves`](Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`videos`](Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+Retrieves next batch of contents and returns a new [Feed](Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getContinuation`](Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| `T`\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| `T`\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getContinuationData`](Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getFilteredFeed()
+
+> **getFilteredFeed**(`filter`): `Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+Applies given filter and returns a new [Feed](Feed.md) object.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L45)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getShelf`](Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getPlaylistsFromMemo`](Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getVideosFromMemo`](Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/Mixins/classes/MediaInfo.md b/docs/api/namespaces/Mixins/classes/MediaInfo.md
new file mode 100644
index 000000000..532cdb96a
--- /dev/null
+++ b/docs/api/namespaces/Mixins/classes/MediaInfo.md
@@ -0,0 +1,440 @@
+[youtubei.js](../../../README.md) / [Mixins](../README.md) / MediaInfo
+
+# Class: MediaInfo
+
+## Extended by
+
+- [`VideoInfo`](../../YT/classes/VideoInfo.md)
+- [`TrackInfo`](../../YTMusic/classes/TrackInfo.md)
+- [`VideoInfo`](../../YTKids/classes/VideoInfo.md)
+- [`ShortFormVideoInfo`](../../YTShorts/classes/ShortFormVideoInfo.md)
+
+## Constructors
+
+### new MediaInfo()
+
+> **new MediaInfo**(`data`, `actions`, `cpn`): [`MediaInfo`](MediaInfo.md)
+
+#### Parameters
+
+β’ **data**: [[`ApiResponse`](../../../interfaces/ApiResponse.md), `ApiResponse?`]
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **cpn**: `string`
+
+#### Returns
+
+[`MediaInfo`](MediaInfo.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L40)
+
+## Properties
+
+### annotations?
+
+> `optional` **annotations**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlayerAnnotationsExpanded`](../../YTNodes/classes/PlayerAnnotationsExpanded.md)\>
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L31)
+
+***
+
+### basic\_info
+
+> **basic\_info**: `object`
+
+#### allow\_ratings?
+
+> `optional` **allow\_ratings**: `boolean`
+
+#### author?
+
+> `optional` **author**: `string`
+
+#### category
+
+> **category**: `null` \| `string`
+
+#### channel
+
+> **channel**: `null` \| `object`
+
+#### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### duration?
+
+> `optional` **duration**: `number`
+
+#### embed
+
+> **embed**: `undefined` \| `null` \| `object`
+
+#### end\_timestamp
+
+> **end\_timestamp**: `null` \| `Date`
+
+#### has\_ypc\_metadata
+
+> **has\_ypc\_metadata**: `null` \| `boolean`
+
+#### id?
+
+> `optional` **id**: `string`
+
+#### is\_crawlable?
+
+> `optional` **is\_crawlable**: `boolean`
+
+#### is\_disliked
+
+> **is\_disliked**: `undefined` \| `boolean`
+
+#### is\_family\_safe
+
+> **is\_family\_safe**: `undefined` \| `boolean` = `info.microformat.is_family_safe`
+
+#### is\_liked
+
+> **is\_liked**: `undefined` \| `boolean`
+
+#### is\_live?
+
+> `optional` **is\_live**: `boolean`
+
+#### is\_live\_content?
+
+> `optional` **is\_live\_content**: `boolean`
+
+#### is\_live\_dvr\_enabled?
+
+> `optional` **is\_live\_dvr\_enabled**: `boolean`
+
+#### is\_low\_latency\_live\_stream?
+
+> `optional` **is\_low\_latency\_live\_stream**: `boolean`
+
+#### is\_owner\_viewing?
+
+> `optional` **is\_owner\_viewing**: `boolean`
+
+#### is\_post\_live\_dvr?
+
+> `optional` **is\_post\_live\_dvr**: `boolean`
+
+#### is\_private?
+
+> `optional` **is\_private**: `boolean`
+
+#### is\_unlisted
+
+> **is\_unlisted**: `undefined` \| `boolean` = `info.microformat.is_unlisted`
+
+#### is\_upcoming?
+
+> `optional` **is\_upcoming**: `boolean`
+
+#### keywords?
+
+> `optional` **keywords**: `string`[]
+
+#### like\_count
+
+> **like\_count**: `undefined` \| `number`
+
+#### live\_chunk\_readahead?
+
+> `optional` **live\_chunk\_readahead**: `number`
+
+#### short\_description?
+
+> `optional` **short\_description**: `string`
+
+#### start\_timestamp
+
+> **start\_timestamp**: `null` \| `Date`
+
+#### tags
+
+> **tags**: `null` \| `string`[]
+
+#### thumbnail?
+
+> `optional` **thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### title?
+
+> `optional` **title**: `string`
+
+#### url\_canonical
+
+> **url\_canonical**: `null` \| `string`
+
+#### view\_count
+
+> **view\_count**: `undefined` \| `number`
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L30)
+
+***
+
+### captions?
+
+> `optional` **captions**: [`PlayerCaptionsTracklist`](../../YTNodes/classes/PlayerCaptionsTracklist.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L34)
+
+***
+
+### cards?
+
+> `optional` **cards**: [`CardCollection`](../../YTNodes/classes/CardCollection.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L35)
+
+***
+
+### endscreen?
+
+> `optional` **endscreen**: [`Endscreen`](../../YTNodes/classes/Endscreen.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L33)
+
+***
+
+### playability\_status?
+
+> `optional` **playability\_status**: [`IPlayabilityStatus`](../../APIResponseTypes/interfaces/IPlayabilityStatus.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L37)
+
+***
+
+### player\_config?
+
+> `optional` **player\_config**: [`IPlayerConfig`](../../APIResponseTypes/interfaces/IPlayerConfig.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L38)
+
+***
+
+### storyboards?
+
+> `optional` **storyboards**: [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md) \| [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L32)
+
+***
+
+### streaming\_data?
+
+> `optional` **streaming\_data**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L36)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+Actions instance.
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:223](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L223)
+
+***
+
+### cpn
+
+> `get` **cpn**(): `string`
+
+Content Playback Nonce.
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:230](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L230)
+
+***
+
+### page
+
+> `get` **page**(): [[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+Original parsed InnerTube response.
+
+#### Returns
+
+[[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:237](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L237)
+
+## Methods
+
+### addToWatchHistory()
+
+> **addToWatchHistory**(`client_name`, `client_version`, `replacement`): `Promise`\<`Response`\>
+
+Adds video to the watch history.
+
+#### Parameters
+
+β’ **client\_name**: `string` = `Constants.CLIENTS.WEB.NAME`
+
+β’ **client\_version**: `string` = `Constants.CLIENTS.WEB.VERSION`
+
+β’ **replacement**: `string` = `'https://www.'`
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:199](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L199)
+
+***
+
+### chooseFormat()
+
+> **chooseFormat**(`options`): [`Format`](../../Misc/classes/Format.md)
+
+Selects the format that best matches the given options.
+
+#### Parameters
+
+β’ **options**: [`FormatOptions`](../../Types/interfaces/FormatOptions.md)
+
+Options
+
+#### Returns
+
+[`Format`](../../Misc/classes/Format.md)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:149](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L149)
+
+***
+
+### download()
+
+> **download**(`options`): `Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+Downloads the video.
+
+#### Parameters
+
+β’ **options**: [`DownloadOptions`](../../Types/interfaces/DownloadOptions.md) = `{}`
+
+Download options.
+
+#### Returns
+
+`Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L157)
+
+***
+
+### getStreamingInfo()
+
+> **getStreamingInfo**(`url_transformer`?, `format_filter`?): `StreamingInfo`
+
+Get a cleaned up representation of the adaptive_formats
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+#### Returns
+
+`StreamingInfo`
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L132)
+
+***
+
+### getTranscript()
+
+> **getTranscript**(): `Promise`\<[`TranscriptInfo`](../../YT/classes/TranscriptInfo.md)\>
+
+Retrieves the video's transcript.
+
+#### Returns
+
+`Promise`\<[`TranscriptInfo`](../../YT/classes/TranscriptInfo.md)\>
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:170](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L170)
+
+***
+
+### toDash()
+
+> **toDash**(`url_transformer`?, `format_filter`?, `options`?): `Promise`\<`string`\>
+
+Generates a DASH manifest from the streaming data.
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+Function to transform the URLs.
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+Function to filter the formats.
+
+β’ **options?**: `DashOptions` = `...`
+
+Additional options to customise the manifest generation
+
+#### Returns
+
+`Promise`\<`string`\>
+
+DASH manifest
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:97](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L97)
diff --git a/docs/api/namespaces/Mixins/classes/TabbedFeed.md b/docs/api/namespaces/Mixins/classes/TabbedFeed.md
new file mode 100644
index 000000000..68f0a83ab
--- /dev/null
+++ b/docs/api/namespaces/Mixins/classes/TabbedFeed.md
@@ -0,0 +1,451 @@
+[youtubei.js](../../../README.md) / [Mixins](../README.md) / TabbedFeed
+
+# Class: TabbedFeed\
+
+## Extends
+
+- [`Feed`](Feed.md)\<`T`\>
+
+## Extended by
+
+- [`Channel`](../../YT/classes/Channel.md)
+
+## Type Parameters
+
+β’ **T** *extends* [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+## Constructors
+
+### new TabbedFeed()
+
+> **new TabbedFeed**\<`T`\>(`actions`, `data`, `already_parsed`): [`TabbedFeed`](TabbedFeed.md)\<`T`\>
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md) \| [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`TabbedFeed`](TabbedFeed.md)\<`T`\>
+
+#### Overrides
+
+[`Feed`](Feed.md).[`constructor`](Feed.md#constructors)
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L13)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`actions`](Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`channels`](Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`has_continuation`](Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`memo`](Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`page`](Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`page_contents`](Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`playlists`](Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`posts`](Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`secondary_contents`](Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`shelves`](Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### tabs
+
+> `get` **tabs**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L19)
+
+***
+
+### title
+
+> `get` **title**(): `undefined` \| `string`
+
+#### Returns
+
+`undefined` \| `string`
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L55)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`videos`](Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+Retrieves next batch of contents and returns a new [Feed](Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](Feed.md)\<`T`\>\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getContinuation`](Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| `T`\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| `T`\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getContinuationData`](Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getShelf`](Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getTabByName()
+
+> **getTabByName**(`title`): `Promise`\<[`TabbedFeed`](TabbedFeed.md)\<`T`\>\>
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`Promise`\<[`TabbedFeed`](TabbedFeed.md)\<`T`\>\>
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L23)
+
+***
+
+### getTabByURL()
+
+> **getTabByURL**(`url`): `Promise`\<[`TabbedFeed`](TabbedFeed.md)\<`T`\>\>
+
+#### Parameters
+
+β’ **url**: `string`
+
+#### Returns
+
+`Promise`\<[`TabbedFeed`](TabbedFeed.md)\<`T`\>\>
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L37)
+
+***
+
+### hasTabWithURL()
+
+> **hasTabWithURL**(`url`): `boolean`
+
+#### Parameters
+
+β’ **url**: `string`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L51)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getPlaylistsFromMemo`](Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](Feed.md).[`getVideosFromMemo`](Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/Parser/README.md b/docs/api/namespaces/Parser/README.md
new file mode 100644
index 000000000..be6d31cfe
--- /dev/null
+++ b/docs/api/namespaces/Parser/README.md
@@ -0,0 +1,31 @@
+[youtubei.js](../../README.md) / Parser
+
+# Parser
+
+## Index
+
+### Type Aliases
+
+- [ParserError](type-aliases/ParserError.md)
+- [ParserErrorHandler](type-aliases/ParserErrorHandler.md)
+
+### Functions
+
+- [addRuntimeParser](functions/addRuntimeParser.md)
+- [applyCommentsMutations](functions/applyCommentsMutations.md)
+- [applyMutations](functions/applyMutations.md)
+- [getDynamicParsers](functions/getDynamicParsers.md)
+- [getParserByName](functions/getParserByName.md)
+- [hasParser](functions/hasParser.md)
+- [parse](functions/parse.md)
+- [parseActions](functions/parseActions.md)
+- [parseArray](functions/parseArray.md)
+- [parseC](functions/parseC.md)
+- [parseFormats](functions/parseFormats.md)
+- [parseItem](functions/parseItem.md)
+- [parseLC](functions/parseLC.md)
+- [parseResponse](functions/parseResponse.md)
+- [parseRR](functions/parseRR.md)
+- [sanitizeClassName](functions/sanitizeClassName.md)
+- [setParserErrorHandler](functions/setParserErrorHandler.md)
+- [shouldIgnore](functions/shouldIgnore.md)
diff --git a/docs/api/namespaces/Parser/functions/addRuntimeParser.md b/docs/api/namespaces/Parser/functions/addRuntimeParser.md
new file mode 100644
index 000000000..4f181a8f4
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/addRuntimeParser.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / addRuntimeParser
+
+# Function: addRuntimeParser()
+
+> **addRuntimeParser**(`classname`, `ParserConstructor`): `void`
+
+## Parameters
+
+β’ **classname**: `string`
+
+β’ **ParserConstructor**: [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+## Returns
+
+`void`
+
+## Defined in
+
+[src/parser/parser.ts:209](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L209)
diff --git a/docs/api/namespaces/Parser/functions/applyCommentsMutations.md b/docs/api/namespaces/Parser/functions/applyCommentsMutations.md
new file mode 100644
index 000000000..6e60bb899
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/applyCommentsMutations.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / applyCommentsMutations
+
+# Function: applyCommentsMutations()
+
+> **applyCommentsMutations**(`memo`, `mutations`): `void`
+
+## Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+β’ **mutations**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+## Returns
+
+`void`
+
+## Defined in
+
+[src/parser/parser.ts:720](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L720)
diff --git a/docs/api/namespaces/Parser/functions/applyMutations.md b/docs/api/namespaces/Parser/functions/applyMutations.md
new file mode 100644
index 000000000..cf921e9ac
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/applyMutations.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / applyMutations
+
+# Function: applyMutations()
+
+> **applyMutations**(`memo`, `mutations`): `void`
+
+## Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+β’ **mutations**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+## Returns
+
+`void`
+
+## Defined in
+
+[src/parser/parser.ts:684](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L684)
diff --git a/docs/api/namespaces/Parser/functions/getDynamicParsers.md b/docs/api/namespaces/Parser/functions/getDynamicParsers.md
new file mode 100644
index 000000000..913dfc0ad
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/getDynamicParsers.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / getDynamicParsers
+
+# Function: getDynamicParsers()
+
+> **getDynamicParsers**(): `object`
+
+## Returns
+
+`object`
+
+## Defined in
+
+[src/parser/parser.ts:214](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L214)
diff --git a/docs/api/namespaces/Parser/functions/getParserByName.md b/docs/api/namespaces/Parser/functions/getParserByName.md
new file mode 100644
index 000000000..832c6f4e0
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/getParserByName.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / getParserByName
+
+# Function: getParserByName()
+
+> **getParserByName**(`classname`): [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+## Parameters
+
+β’ **classname**: `string`
+
+## Returns
+
+[`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+## Defined in
+
+[src/parser/parser.ts:193](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L193)
diff --git a/docs/api/namespaces/Parser/functions/hasParser.md b/docs/api/namespaces/Parser/functions/hasParser.md
new file mode 100644
index 000000000..dd2b4e103
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/hasParser.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / hasParser
+
+# Function: hasParser()
+
+> **hasParser**(`classname`): `boolean`
+
+## Parameters
+
+β’ **classname**: `string`
+
+## Returns
+
+`boolean`
+
+## Defined in
+
+[src/parser/parser.ts:205](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L205)
diff --git a/docs/api/namespaces/Parser/functions/parse.md b/docs/api/namespaces/Parser/functions/parse.md
new file mode 100644
index 000000000..750b564b3
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parse.md
@@ -0,0 +1,87 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parse
+
+# Function: parse()
+
+## parse(data, requireArray, validTypes)
+
+> **parse**\<`T`, `K`\>(`data`, `requireArray`, `validTypes`?): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\> \| `null`
+
+Parses an item or an array of items.
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+### Parameters
+
+β’ **data**: [`RawData`](../../APIResponseTypes/type-aliases/RawData.md)
+
+The data to parse.
+
+β’ **requireArray**: `true`
+
+Whether the data should be parsed as an array.
+
+β’ **validTypes?**: `K`
+
+YTNode types that are allowed to be parsed.
+
+### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\> \| `null`
+
+### Defined in
+
+[src/parser/parser.ts:604](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L604)
+
+## parse(data, requireArray, validTypes)
+
+> **parse**\<`T`, `K`\>(`data`, `requireArray`, `validTypes`?): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\>\> \| `null`
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>
+
+### Parameters
+
+β’ **data**: [`RawData`](../../APIResponseTypes/type-aliases/RawData.md)
+
+β’ **requireArray**: `true`
+
+β’ **validTypes?**: `K`
+
+### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\>\> \| `null`
+
+### Defined in
+
+[src/parser/parser.ts:605](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L605)
+
+## parse(data, requireArray, validTypes)
+
+> **parse**\<`T`\>(`data`?, `requireArray`?, `validTypes`?): [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<`T`\>
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md) = [`YTNode`](../../Helpers/classes/YTNode.md)
+
+### Parameters
+
+β’ **data?**: [`RawData`](../../APIResponseTypes/type-aliases/RawData.md)
+
+β’ **requireArray?**: `false`
+
+β’ **validTypes?**: [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\> \| [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+### Returns
+
+[`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<`T`\>
+
+### Defined in
+
+[src/parser/parser.ts:606](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L606)
diff --git a/docs/api/namespaces/Parser/functions/parseActions.md b/docs/api/namespaces/Parser/functions/parseActions.md
new file mode 100644
index 000000000..79a468565
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseActions.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseActions
+
+# Function: parseActions()
+
+> **parseActions**(`data`): [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+## Parameters
+
+β’ **data**: [`RawData`](../../APIResponseTypes/type-aliases/RawData.md)
+
+## Returns
+
+[`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+## Defined in
+
+[src/parser/parser.ts:670](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L670)
diff --git a/docs/api/namespaces/Parser/functions/parseArray.md b/docs/api/namespaces/Parser/functions/parseArray.md
new file mode 100644
index 000000000..4873d6e66
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseArray.md
@@ -0,0 +1,71 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseArray
+
+# Function: parseArray()
+
+## parseArray(data, validTypes)
+
+> **parseArray**\<`T`, `K`\>(`data`, `validTypes`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+Parses an array of items.
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+### Parameters
+
+β’ **data**: `undefined` \| [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+The data to parse.
+
+β’ **validTypes**: `K`
+
+YTNode types that are allowed to be parsed.
+
+### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`InstanceType`\<`K`\[`number`\]\>\>
+
+### Defined in
+
+[src/parser/parser.ts:577](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L577)
+
+## parseArray(data, validType)
+
+> **parseArray**\<`T`\>(`data`, `validType`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`T`\>
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md) = [`YTNode`](../../Helpers/classes/YTNode.md)
+
+### Parameters
+
+β’ **data**: `undefined` \| [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+β’ **validType**: [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>
+
+### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`T`\>
+
+### Defined in
+
+[src/parser/parser.ts:578](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L578)
+
+## parseArray(data)
+
+> **parseArray**(`data`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+### Parameters
+
+β’ **data**: `undefined` \| [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+### Defined in
+
+[src/parser/parser.ts:579](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L579)
diff --git a/docs/api/namespaces/Parser/functions/parseC.md b/docs/api/namespaces/Parser/functions/parseC.md
new file mode 100644
index 000000000..889896272
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseC.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseC
+
+# Function: parseC()
+
+> **parseC**(`data`): `null` \| [`Continuation`](../../../classes/Continuation.md)
+
+## Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+## Returns
+
+`null` \| [`Continuation`](../../../classes/Continuation.md)
+
+## Defined in
+
+[src/parser/parser.ts:630](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L630)
diff --git a/docs/api/namespaces/Parser/functions/parseFormats.md b/docs/api/namespaces/Parser/functions/parseFormats.md
new file mode 100644
index 000000000..18c8c4537
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseFormats.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseFormats
+
+# Function: parseFormats()
+
+> **parseFormats**(`formats`, `this_response_nsig_cache`): [`Format`](../../Misc/classes/Format.md)[]
+
+## Parameters
+
+β’ **formats**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+β’ **this\_response\_nsig\_cache**: `Map`\<`string`, `string`\>
+
+## Returns
+
+[`Format`](../../Misc/classes/Format.md)[]
+
+## Defined in
+
+[src/parser/parser.ts:680](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L680)
diff --git a/docs/api/namespaces/Parser/functions/parseItem.md b/docs/api/namespaces/Parser/functions/parseItem.md
new file mode 100644
index 000000000..f4455f926
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseItem.md
@@ -0,0 +1,71 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseItem
+
+# Function: parseItem()
+
+## parseItem(data, validTypes)
+
+> **parseItem**\<`T`, `K`\>(`data`, `validTypes`): `InstanceType`\<`K`\[`number`\]\> \| `null`
+
+Parses a single item.
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+### Parameters
+
+β’ **data**: `undefined` \| [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+The data to parse.
+
+β’ **validTypes**: `K`
+
+YTNode types that are allowed to be parsed.
+
+### Returns
+
+`InstanceType`\<`K`\[`number`\]\> \| `null`
+
+### Defined in
+
+[src/parser/parser.ts:511](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L511)
+
+## parseItem(data, validTypes)
+
+> **parseItem**\<`T`\>(`data`, `validTypes`): `T` \| `null`
+
+### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+### Parameters
+
+β’ **data**: `undefined` \| [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+β’ **validTypes**: [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>
+
+### Returns
+
+`T` \| `null`
+
+### Defined in
+
+[src/parser/parser.ts:512](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L512)
+
+## parseItem(data)
+
+> **parseItem**(`data`?): [`YTNode`](../../Helpers/classes/YTNode.md)
+
+### Parameters
+
+β’ **data?**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+### Returns
+
+[`YTNode`](../../Helpers/classes/YTNode.md)
+
+### Defined in
+
+[src/parser/parser.ts:513](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L513)
diff --git a/docs/api/namespaces/Parser/functions/parseLC.md b/docs/api/namespaces/Parser/functions/parseLC.md
new file mode 100644
index 000000000..ba2fb84a0
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseLC.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseLC
+
+# Function: parseLC()
+
+> **parseLC**(`data`): `null` \| [`ItemSectionContinuation`](../../../classes/ItemSectionContinuation.md) \| [`SectionListContinuation`](../../../classes/SectionListContinuation.md) \| [`LiveChatContinuation`](../../../classes/LiveChatContinuation.md) \| [`MusicPlaylistShelfContinuation`](../../../classes/MusicPlaylistShelfContinuation.md) \| [`MusicShelfContinuation`](../../../classes/MusicShelfContinuation.md) \| [`GridContinuation`](../../../classes/GridContinuation.md) \| [`PlaylistPanelContinuation`](../../../classes/PlaylistPanelContinuation.md) \| [`ContinuationCommand`](../../../classes/ContinuationCommand.md)
+
+## Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+## Returns
+
+`null` \| [`ItemSectionContinuation`](../../../classes/ItemSectionContinuation.md) \| [`SectionListContinuation`](../../../classes/SectionListContinuation.md) \| [`LiveChatContinuation`](../../../classes/LiveChatContinuation.md) \| [`MusicPlaylistShelfContinuation`](../../../classes/MusicPlaylistShelfContinuation.md) \| [`MusicShelfContinuation`](../../../classes/MusicShelfContinuation.md) \| [`GridContinuation`](../../../classes/GridContinuation.md) \| [`PlaylistPanelContinuation`](../../../classes/PlaylistPanelContinuation.md) \| [`ContinuationCommand`](../../../classes/ContinuationCommand.md)
+
+## Defined in
+
+[src/parser/parser.ts:636](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L636)
diff --git a/docs/api/namespaces/Parser/functions/parseRR.md b/docs/api/namespaces/Parser/functions/parseRR.md
new file mode 100644
index 000000000..fa5f24c9d
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseRR.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseRR
+
+# Function: parseRR()
+
+> **parseRR**(`actions`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)\>
+
+## Parameters
+
+β’ **actions**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)[]
+
+## Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)\>
+
+## Defined in
+
+[src/parser/parser.ts:657](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L657)
diff --git a/docs/api/namespaces/Parser/functions/parseResponse.md b/docs/api/namespaces/Parser/functions/parseResponse.md
new file mode 100644
index 000000000..6b1bc254f
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/parseResponse.md
@@ -0,0 +1,25 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / parseResponse
+
+# Function: parseResponse()
+
+> **parseResponse**\<`T`\>(`data`): `T`
+
+Parses given InnerTube response.
+
+## Type Parameters
+
+β’ **T** *extends* [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md) = [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+## Parameters
+
+β’ **data**: [`IRawResponse`](../../APIResponseTypes/interfaces/IRawResponse.md)
+
+Raw data.
+
+## Returns
+
+`T`
+
+## Defined in
+
+[src/parser/parser.ts:222](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L222)
diff --git a/docs/api/namespaces/Parser/functions/sanitizeClassName.md b/docs/api/namespaces/Parser/functions/sanitizeClassName.md
new file mode 100644
index 000000000..c8657b9a6
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/sanitizeClassName.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / sanitizeClassName
+
+# Function: sanitizeClassName()
+
+> **sanitizeClassName**(`input`): `string`
+
+## Parameters
+
+β’ **input**: `string`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/parser/parser.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L187)
diff --git a/docs/api/namespaces/Parser/functions/setParserErrorHandler.md b/docs/api/namespaces/Parser/functions/setParserErrorHandler.md
new file mode 100644
index 000000000..8a6c79a54
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/setParserErrorHandler.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / setParserErrorHandler
+
+# Function: setParserErrorHandler()
+
+> **setParserErrorHandler**(`handler`): `void`
+
+## Parameters
+
+β’ **handler**: [`ParserErrorHandler`](../type-aliases/ParserErrorHandler.md)
+
+## Returns
+
+`void`
+
+## Defined in
+
+[src/parser/parser.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L154)
diff --git a/docs/api/namespaces/Parser/functions/shouldIgnore.md b/docs/api/namespaces/Parser/functions/shouldIgnore.md
new file mode 100644
index 000000000..007adb639
--- /dev/null
+++ b/docs/api/namespaces/Parser/functions/shouldIgnore.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / shouldIgnore
+
+# Function: shouldIgnore()
+
+> **shouldIgnore**(`classname`): `boolean`
+
+## Parameters
+
+β’ **classname**: `string`
+
+## Returns
+
+`boolean`
+
+## Defined in
+
+[src/parser/parser.ts:183](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L183)
diff --git a/docs/api/namespaces/Parser/type-aliases/ParserError.md b/docs/api/namespaces/Parser/type-aliases/ParserError.md
new file mode 100644
index 000000000..692679b27
--- /dev/null
+++ b/docs/api/namespaces/Parser/type-aliases/ParserError.md
@@ -0,0 +1,15 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / ParserError
+
+# Type Alias: ParserError
+
+> **ParserError**: `object` & `object` \| `object` \| `object` \| `object` \| `object` \| `object`
+
+## Type declaration
+
+### classname
+
+> **classname**: `string`
+
+## Defined in
+
+[src/parser/parser.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L37)
diff --git a/docs/api/namespaces/Parser/type-aliases/ParserErrorHandler.md b/docs/api/namespaces/Parser/type-aliases/ParserErrorHandler.md
new file mode 100644
index 000000000..ff59c5e5e
--- /dev/null
+++ b/docs/api/namespaces/Parser/type-aliases/ParserErrorHandler.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Parser](../README.md) / ParserErrorHandler
+
+# Type Alias: ParserErrorHandler()
+
+> **ParserErrorHandler**: (`error`) => `void`
+
+## Parameters
+
+β’ **error**: [`ParserError`](ParserError.md)
+
+## Returns
+
+`void`
+
+## Defined in
+
+[src/parser/parser.ts:64](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/parser.ts#L64)
diff --git a/docs/api/namespaces/ProtoUtils/README.md b/docs/api/namespaces/ProtoUtils/README.md
new file mode 100644
index 000000000..dd413d9f8
--- /dev/null
+++ b/docs/api/namespaces/ProtoUtils/README.md
@@ -0,0 +1,11 @@
+[youtubei.js](../../README.md) / ProtoUtils
+
+# ProtoUtils
+
+## Index
+
+### Functions
+
+- [decodeVisitorData](functions/decodeVisitorData.md)
+- [encodeCommentActionParams](functions/encodeCommentActionParams.md)
+- [encodeVisitorData](functions/encodeVisitorData.md)
diff --git a/docs/api/namespaces/ProtoUtils/functions/decodeVisitorData.md b/docs/api/namespaces/ProtoUtils/functions/decodeVisitorData.md
new file mode 100644
index 000000000..ce6afed8a
--- /dev/null
+++ b/docs/api/namespaces/ProtoUtils/functions/decodeVisitorData.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [ProtoUtils](../README.md) / decodeVisitorData
+
+# Function: decodeVisitorData()
+
+> **decodeVisitorData**(`visitor_data`): `VisitorData`
+
+## Parameters
+
+β’ **visitor\_data**: `string`
+
+## Returns
+
+`VisitorData`
+
+## Defined in
+
+[src/utils/ProtoUtils.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/ProtoUtils.ts#L9)
diff --git a/docs/api/namespaces/ProtoUtils/functions/encodeCommentActionParams.md b/docs/api/namespaces/ProtoUtils/functions/encodeCommentActionParams.md
new file mode 100644
index 000000000..be6a51421
--- /dev/null
+++ b/docs/api/namespaces/ProtoUtils/functions/encodeCommentActionParams.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [ProtoUtils](../README.md) / encodeCommentActionParams
+
+# Function: encodeCommentActionParams()
+
+> **encodeCommentActionParams**(`type`, `args`): `string`
+
+## Parameters
+
+β’ **type**: `number`
+
+β’ **args** = `{}`
+
+β’ **args.comment\_id?**: `string`
+
+β’ **args.target\_language?**: `string`
+
+β’ **args.text?**: `string`
+
+β’ **args.video\_id?**: `string`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/ProtoUtils.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/ProtoUtils.ts#L14)
diff --git a/docs/api/namespaces/ProtoUtils/functions/encodeVisitorData.md b/docs/api/namespaces/ProtoUtils/functions/encodeVisitorData.md
new file mode 100644
index 000000000..2484dc2fb
--- /dev/null
+++ b/docs/api/namespaces/ProtoUtils/functions/encodeVisitorData.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [ProtoUtils](../README.md) / encodeVisitorData
+
+# Function: encodeVisitorData()
+
+> **encodeVisitorData**(`id`, `timestamp`): `string`
+
+## Parameters
+
+β’ **id**: `string`
+
+β’ **timestamp**: `number`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/ProtoUtils.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/ProtoUtils.ts#L4)
diff --git a/docs/api/namespaces/Types/README.md b/docs/api/namespaces/Types/README.md
new file mode 100644
index 000000000..305e92035
--- /dev/null
+++ b/docs/api/namespaces/Types/README.md
@@ -0,0 +1,84 @@
+[youtubei.js](../../README.md) / Types
+
+# Types
+
+## Index
+
+### Interfaces
+
+- [DownloadOptions](interfaces/DownloadOptions.md)
+- [FormatOptions](interfaces/FormatOptions.md)
+- [IAccountListRequest](interfaces/IAccountListRequest.md)
+- [ICache](interfaces/ICache.md)
+- [ICacheConstructor](interfaces/ICacheConstructor.md)
+- [IChannelEditDescriptionRequest](interfaces/IChannelEditDescriptionRequest.md)
+- [IChannelEditNameRequest](interfaces/IChannelEditNameRequest.md)
+- [IModifyChannelPreferenceRequest](interfaces/IModifyChannelPreferenceRequest.md)
+- [IMusicGetSearchSuggestionsRequest](interfaces/IMusicGetSearchSuggestionsRequest.md)
+- [IPerformCommentActionRequest](interfaces/IPerformCommentActionRequest.md)
+- [IPlayerRequest](interfaces/IPlayerRequest.md)
+- [IReelItemWatchRequest](interfaces/IReelItemWatchRequest.md)
+- [IReelWatchSequenceRequest](interfaces/IReelWatchSequenceRequest.md)
+- [IResolveURLRequest](interfaces/IResolveURLRequest.md)
+- [ISearchRequest](interfaces/ISearchRequest.md)
+- [PlatformShim](interfaces/PlatformShim.md)
+
+### Type Aliases
+
+- [BlocklistPickerRequestEndpointOptions](type-aliases/BlocklistPickerRequestEndpointOptions.md)
+- [BrowseEndpointOptions](type-aliases/BrowseEndpointOptions.md)
+- [ChannelEditDescriptionEndpointOptions](type-aliases/ChannelEditDescriptionEndpointOptions.md)
+- [ChannelEditNameEndpointOptions](type-aliases/ChannelEditNameEndpointOptions.md)
+- [CreateCommentEndpointOptions](type-aliases/CreateCommentEndpointOptions.md)
+- [CreatePlaylistEndpointOptions](type-aliases/CreatePlaylistEndpointOptions.md)
+- [CreateVideoEndpointOptions](type-aliases/CreateVideoEndpointOptions.md)
+- [DeletePlaylistEndpointOptions](type-aliases/DeletePlaylistEndpointOptions.md)
+- [DislikeEndpointOptions](type-aliases/DislikeEndpointOptions.md)
+- [Duration](type-aliases/Duration.md)
+- [EditPlaylistEndpointOptions](type-aliases/EditPlaylistEndpointOptions.md)
+- [Feature](type-aliases/Feature.md)
+- [FetchFunction](type-aliases/FetchFunction.md)
+- [FormatFilter](type-aliases/FormatFilter.md)
+- [GetNotificationMenuEndpointOptions](type-aliases/GetNotificationMenuEndpointOptions.md)
+- [IBlocklistPickerRequest](type-aliases/IBlocklistPickerRequest.md)
+- [IBrowseRequest](type-aliases/IBrowseRequest.md)
+- [ICreateCommentRequest](type-aliases/ICreateCommentRequest.md)
+- [ICreatePlaylistRequest](type-aliases/ICreatePlaylistRequest.md)
+- [ICreateVideoRequest](type-aliases/ICreateVideoRequest.md)
+- [IDeletePlaylistRequest](type-aliases/IDeletePlaylistRequest.md)
+- [IDislikeRequest](type-aliases/IDislikeRequest.md)
+- [IEditPlaylistRequest](type-aliases/IEditPlaylistRequest.md)
+- [IGetNotificationMenuRequest](type-aliases/IGetNotificationMenuRequest.md)
+- [ILikeRequest](type-aliases/ILikeRequest.md)
+- [INextRequest](type-aliases/INextRequest.md)
+- [InnerTubeClient](type-aliases/InnerTubeClient.md)
+- [InnerTubeConfig](type-aliases/InnerTubeConfig.md)
+- [IRemoveLikeRequest](type-aliases/IRemoveLikeRequest.md)
+- [ISubscribeRequest](type-aliases/ISubscribeRequest.md)
+- [IUnsubscribeRequest](type-aliases/IUnsubscribeRequest.md)
+- [LikeEndpointOptions](type-aliases/LikeEndpointOptions.md)
+- [ModifyChannelPreferenceEndpointOptions](type-aliases/ModifyChannelPreferenceEndpointOptions.md)
+- [MusicGetSearchSuggestionsEndpointOptions](type-aliases/MusicGetSearchSuggestionsEndpointOptions.md)
+- [MusicSearchFilters](type-aliases/MusicSearchFilters.md)
+- [MusicSearchType](type-aliases/MusicSearchType.md)
+- [NextEndpointOptions](type-aliases/NextEndpointOptions.md)
+- [ObjectSnakeToCamel](type-aliases/ObjectSnakeToCamel.md)
+- [PerformCommentActionEndpointOptions](type-aliases/PerformCommentActionEndpointOptions.md)
+- [PlayerEndpointOptions](type-aliases/PlayerEndpointOptions.md)
+- [ReelItemWatchEndpointOptions](type-aliases/ReelItemWatchEndpointOptions.md)
+- [ReelWatchSequenceEndpointOptions](type-aliases/ReelWatchSequenceEndpointOptions.md)
+- [RemoveLikeEndpointOptions](type-aliases/RemoveLikeEndpointOptions.md)
+- [ResolveURLEndpointOptions](type-aliases/ResolveURLEndpointOptions.md)
+- [Runtime](type-aliases/Runtime.md)
+- [SearchEndpointOptions](type-aliases/SearchEndpointOptions.md)
+- [SearchFilters](type-aliases/SearchFilters.md)
+- [SearchType](type-aliases/SearchType.md)
+- [SnakeToCamel](type-aliases/SnakeToCamel.md)
+- [SortBy](type-aliases/SortBy.md)
+- [SubscribeEndpointOptions](type-aliases/SubscribeEndpointOptions.md)
+- [UnsubscribeEndpointOptions](type-aliases/UnsubscribeEndpointOptions.md)
+- [UpdateVideoMetadataOptions](type-aliases/UpdateVideoMetadataOptions.md)
+- [UploadDate](type-aliases/UploadDate.md)
+- [UploadedVideoMetadataOptions](type-aliases/UploadedVideoMetadataOptions.md)
+- [URLTransformer](type-aliases/URLTransformer.md)
+- [VMPrimative](type-aliases/VMPrimative.md)
diff --git a/docs/api/namespaces/Types/interfaces/DownloadOptions.md b/docs/api/namespaces/Types/interfaces/DownloadOptions.md
new file mode 100644
index 000000000..62fe482ef
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/DownloadOptions.md
@@ -0,0 +1,107 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / DownloadOptions
+
+# Interface: DownloadOptions
+
+## Extends
+
+- [`FormatOptions`](FormatOptions.md)
+
+## Properties
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+InnerTube client.
+
+#### Inherited from
+
+[`FormatOptions`](FormatOptions.md).[`client`](FormatOptions.md#client)
+
+#### Defined in
+
+[src/types/FormatUtils.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L27)
+
+***
+
+### format?
+
+> `optional` **format**: `string`
+
+File format, use 'any' to download any format
+
+#### Inherited from
+
+[`FormatOptions`](FormatOptions.md).[`format`](FormatOptions.md#format)
+
+#### Defined in
+
+[src/types/FormatUtils.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L23)
+
+***
+
+### language?
+
+> `optional` **language**: `string`
+
+Language code, defaults to 'original'.
+
+#### Inherited from
+
+[`FormatOptions`](FormatOptions.md).[`language`](FormatOptions.md#language)
+
+#### Defined in
+
+[src/types/FormatUtils.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L19)
+
+***
+
+### quality?
+
+> `optional` **quality**: `string`
+
+Video quality; 360p, 720p, 1080p, etc... also accepts 'best' and 'bestefficiency'.
+
+#### Inherited from
+
+[`FormatOptions`](FormatOptions.md).[`quality`](FormatOptions.md#quality)
+
+#### Defined in
+
+[src/types/FormatUtils.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L11)
+
+***
+
+### range?
+
+> `optional` **range**: `object`
+
+Download range, indicates which bytes should be downloaded.
+
+#### end
+
+> **end**: `number`
+
+#### start
+
+> **start**: `number`
+
+#### Defined in
+
+[src/types/FormatUtils.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L34)
+
+***
+
+### type?
+
+> `optional` **type**: `"video"` \| `"audio"` \| `"video+audio"`
+
+Download type, can be: video, audio or video+audio
+
+#### Inherited from
+
+[`FormatOptions`](FormatOptions.md).[`type`](FormatOptions.md#type)
+
+#### Defined in
+
+[src/types/FormatUtils.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L15)
diff --git a/docs/api/namespaces/Types/interfaces/FormatOptions.md b/docs/api/namespaces/Types/interfaces/FormatOptions.md
new file mode 100644
index 000000000..dfb267e22
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/FormatOptions.md
@@ -0,0 +1,67 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / FormatOptions
+
+# Interface: FormatOptions
+
+## Extended by
+
+- [`DownloadOptions`](DownloadOptions.md)
+
+## Properties
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+InnerTube client.
+
+#### Defined in
+
+[src/types/FormatUtils.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L27)
+
+***
+
+### format?
+
+> `optional` **format**: `string`
+
+File format, use 'any' to download any format
+
+#### Defined in
+
+[src/types/FormatUtils.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L23)
+
+***
+
+### language?
+
+> `optional` **language**: `string`
+
+Language code, defaults to 'original'.
+
+#### Defined in
+
+[src/types/FormatUtils.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L19)
+
+***
+
+### quality?
+
+> `optional` **quality**: `string`
+
+Video quality; 360p, 720p, 1080p, etc... also accepts 'best' and 'bestefficiency'.
+
+#### Defined in
+
+[src/types/FormatUtils.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L11)
+
+***
+
+### type?
+
+> `optional` **type**: `"video"` \| `"audio"` \| `"video+audio"`
+
+Download type, can be: video, audio or video+audio
+
+#### Defined in
+
+[src/types/FormatUtils.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L15)
diff --git a/docs/api/namespaces/Types/interfaces/IAccountListRequest.md b/docs/api/namespaces/Types/interfaces/IAccountListRequest.md
new file mode 100644
index 000000000..9e3ff75d1
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IAccountListRequest.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IAccountListRequest
+
+# Interface: IAccountListRequest
+
+## Properties
+
+### client
+
+> **client**: `"ANDROID"`
+
+#### Defined in
+
+[src/types/Endpoints.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L187)
diff --git a/docs/api/namespaces/Types/interfaces/ICache.md b/docs/api/namespaces/Types/interfaces/ICache.md
new file mode 100644
index 000000000..ec4e0660e
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/ICache.md
@@ -0,0 +1,69 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ICache
+
+# Interface: ICache
+
+## Properties
+
+### cache\_dir
+
+> **cache\_dir**: `string`
+
+#### Defined in
+
+[src/types/Cache.ts:2](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Cache.ts#L2)
+
+## Methods
+
+### get()
+
+> **get**(`key`): `Promise`\<`undefined` \| `ArrayBuffer`\>
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `ArrayBuffer`\>
+
+#### Defined in
+
+[src/types/Cache.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Cache.ts#L3)
+
+***
+
+### remove()
+
+> **remove**(`key`): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **key**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/types/Cache.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Cache.ts#L5)
+
+***
+
+### set()
+
+> **set**(`key`, `value`): `Promise`\<`void`\>
+
+#### Parameters
+
+β’ **key**: `string`
+
+β’ **value**: `ArrayBuffer`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/types/Cache.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Cache.ts#L4)
diff --git a/docs/api/namespaces/Types/interfaces/ICacheConstructor.md b/docs/api/namespaces/Types/interfaces/ICacheConstructor.md
new file mode 100644
index 000000000..7d6874ff7
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/ICacheConstructor.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ICacheConstructor
+
+# Interface: ICacheConstructor
+
+## Constructors
+
+### new ICacheConstructor()
+
+> **new ICacheConstructor**(`persistent`, `persistent_directory`?): [`ICache`](ICache.md)
+
+#### Parameters
+
+β’ **persistent**: `boolean`
+
+β’ **persistent\_directory?**: `string`
+
+#### Returns
+
+[`ICache`](ICache.md)
+
+#### Defined in
+
+[src/types/Cache.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Cache.ts#L9)
diff --git a/docs/api/namespaces/Types/interfaces/IChannelEditDescriptionRequest.md b/docs/api/namespaces/Types/interfaces/IChannelEditDescriptionRequest.md
new file mode 100644
index 000000000..247ba507b
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IChannelEditDescriptionRequest.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IChannelEditDescriptionRequest
+
+# Interface: IChannelEditDescriptionRequest
+
+## Extends
+
+- [`ObjectSnakeToCamel`](../type-aliases/ObjectSnakeToCamel.md)\<[`ChannelEditDescriptionEndpointOptions`](../type-aliases/ChannelEditDescriptionEndpointOptions.md)\>
+
+## Properties
+
+### client
+
+> **client**: `"ANDROID"`
+
+#### Defined in
+
+[src/types/Endpoints.ts:183](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L183)
+
+***
+
+### givenDescription
+
+> **givenDescription**: `string`
+
+#### Inherited from
+
+`ObjectSnakeToCamel.givenDescription`
diff --git a/docs/api/namespaces/Types/interfaces/IChannelEditNameRequest.md b/docs/api/namespaces/Types/interfaces/IChannelEditNameRequest.md
new file mode 100644
index 000000000..b201b0600
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IChannelEditNameRequest.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IChannelEditNameRequest
+
+# Interface: IChannelEditNameRequest
+
+## Extends
+
+- [`ObjectSnakeToCamel`](../type-aliases/ObjectSnakeToCamel.md)\<[`ChannelEditNameEndpointOptions`](../type-aliases/ChannelEditNameEndpointOptions.md)\>
+
+## Properties
+
+### client
+
+> **client**: `"ANDROID"`
+
+#### Defined in
+
+[src/types/Endpoints.ts:172](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L172)
+
+***
+
+### givenName
+
+> **givenName**: `string`
+
+#### Inherited from
+
+`ObjectSnakeToCamel.givenName`
diff --git a/docs/api/namespaces/Types/interfaces/IModifyChannelPreferenceRequest.md b/docs/api/namespaces/Types/interfaces/IModifyChannelPreferenceRequest.md
new file mode 100644
index 000000000..1a4f7aeb0
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IModifyChannelPreferenceRequest.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IModifyChannelPreferenceRequest
+
+# Interface: IModifyChannelPreferenceRequest
+
+## Properties
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+The client to use.
+
+#### Defined in
+
+[src/types/Endpoints.ts:269](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L269)
+
+***
+
+### params
+
+> **params**: `string`
+
+Protobuf-encoded parameters.
+
+#### Defined in
+
+[src/types/Endpoints.ts:265](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L265)
diff --git a/docs/api/namespaces/Types/interfaces/IMusicGetSearchSuggestionsRequest.md b/docs/api/namespaces/Types/interfaces/IMusicGetSearchSuggestionsRequest.md
new file mode 100644
index 000000000..30a01a113
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IMusicGetSearchSuggestionsRequest.md
@@ -0,0 +1,33 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IMusicGetSearchSuggestionsRequest
+
+# Interface: IMusicGetSearchSuggestionsRequest
+
+## Extends
+
+- [`MusicGetSearchSuggestionsEndpointOptions`](../type-aliases/MusicGetSearchSuggestionsEndpointOptions.md)
+
+## Properties
+
+### client
+
+> **client**: `"YTMUSIC"`
+
+#### Defined in
+
+[src/types/Endpoints.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L161)
+
+***
+
+### input
+
+> **input**: `string`
+
+The query to search for.
+
+#### Inherited from
+
+`MusicGetSearchSuggestionsEndpointOptions.input`
+
+#### Defined in
+
+[src/types/Endpoints.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L157)
diff --git a/docs/api/namespaces/Types/interfaces/IPerformCommentActionRequest.md b/docs/api/namespaces/Types/interfaces/IPerformCommentActionRequest.md
new file mode 100644
index 000000000..4aef9102a
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IPerformCommentActionRequest.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IPerformCommentActionRequest
+
+# Interface: IPerformCommentActionRequest
+
+## Properties
+
+### actions
+
+> **actions**: `string`[]
+
+An array of protobuf-encoded actions.
+
+#### Defined in
+
+[src/types/Endpoints.ts:235](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L235)
+
+***
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+The client to use.
+
+#### Defined in
+
+[src/types/Endpoints.ts:239](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L239)
diff --git a/docs/api/namespaces/Types/interfaces/IPlayerRequest.md b/docs/api/namespaces/Types/interfaces/IPlayerRequest.md
new file mode 100644
index 000000000..1fabcc231
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IPlayerRequest.md
@@ -0,0 +1,141 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IPlayerRequest
+
+# Interface: IPlayerRequest
+
+## Properties
+
+### attestationRequest
+
+> **attestationRequest**: `object`
+
+#### omitBotguardData
+
+> **omitBotguardData**: `boolean`
+
+#### Defined in
+
+[src/types/Endpoints.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L23)
+
+***
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+#### Defined in
+
+[src/types/Endpoints.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L31)
+
+***
+
+### contentCheckOk
+
+> **contentCheckOk**: `boolean`
+
+#### Defined in
+
+[src/types/Endpoints.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L28)
+
+***
+
+### params?
+
+> `optional` **params**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L30)
+
+***
+
+### playbackContext
+
+> **playbackContext**: `object`
+
+#### contentPlaybackContext
+
+> **contentPlaybackContext**: `object`
+
+#### contentPlaybackContext.autoCaptionsDefaultOn
+
+> **autoCaptionsDefaultOn**: `boolean`
+
+#### contentPlaybackContext.autonavState
+
+> **autonavState**: `string`
+
+#### contentPlaybackContext.currentUrl
+
+> **currentUrl**: `string`
+
+#### contentPlaybackContext.html5Preference
+
+> **html5Preference**: `string`
+
+#### contentPlaybackContext.lactMilliseconds
+
+> **lactMilliseconds**: `string`
+
+#### contentPlaybackContext.referer
+
+> **referer**: `string`
+
+#### contentPlaybackContext.signatureTimestamp?
+
+> `optional` **signatureTimestamp**: `number`
+
+#### contentPlaybackContext.splay
+
+> **splay**: `boolean`
+
+#### contentPlaybackContext.vis
+
+> **vis**: `number`
+
+#### Defined in
+
+[src/types/Endpoints.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L10)
+
+***
+
+### playlistId?
+
+> `optional` **playlistId**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L29)
+
+***
+
+### racyCheckOk
+
+> **racyCheckOk**: `boolean`
+
+#### Defined in
+
+[src/types/Endpoints.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L27)
+
+***
+
+### serviceIntegrityDimensions?
+
+> `optional` **serviceIntegrityDimensions**: `object`
+
+#### poToken
+
+> **poToken**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L32)
+
+***
+
+### videoId
+
+> **videoId**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L26)
diff --git a/docs/api/namespaces/Types/interfaces/IReelItemWatchRequest.md b/docs/api/namespaces/Types/interfaces/IReelItemWatchRequest.md
new file mode 100644
index 000000000..fbc08abdc
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IReelItemWatchRequest.md
@@ -0,0 +1,51 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IReelItemWatchRequest
+
+# Interface: IReelItemWatchRequest
+
+## Properties
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+#### Defined in
+
+[src/types/Endpoints.ts:372](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L372)
+
+***
+
+### disablePlayerResponse
+
+> **disablePlayerResponse**: `boolean`
+
+#### Defined in
+
+[src/types/Endpoints.ts:366](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L366)
+
+***
+
+### params?
+
+> `optional` **params**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:371](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L371)
+
+***
+
+### playerRequest
+
+> **playerRequest**: `object`
+
+#### params
+
+> **params**: `string`
+
+#### videoId
+
+> **videoId**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:367](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L367)
diff --git a/docs/api/namespaces/Types/interfaces/IReelWatchSequenceRequest.md b/docs/api/namespaces/Types/interfaces/IReelWatchSequenceRequest.md
new file mode 100644
index 000000000..b32aeed3b
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IReelWatchSequenceRequest.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IReelWatchSequenceRequest
+
+# Interface: IReelWatchSequenceRequest
+
+## Properties
+
+### sequenceParams
+
+> **sequenceParams**: `string`
+
+#### Defined in
+
+[src/types/Endpoints.ts:391](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L391)
diff --git a/docs/api/namespaces/Types/interfaces/IResolveURLRequest.md b/docs/api/namespaces/Types/interfaces/IResolveURLRequest.md
new file mode 100644
index 000000000..61621df6b
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/IResolveURLRequest.md
@@ -0,0 +1,15 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IResolveURLRequest
+
+# Interface: IResolveURLRequest
+
+## Properties
+
+### url
+
+> **url**: `string`
+
+The URL to resolve.
+
+#### Defined in
+
+[src/types/Endpoints.ts:139](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L139)
diff --git a/docs/api/namespaces/Types/interfaces/ISearchRequest.md b/docs/api/namespaces/Types/interfaces/ISearchRequest.md
new file mode 100644
index 000000000..f7ead23d2
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/ISearchRequest.md
@@ -0,0 +1,51 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ISearchRequest
+
+# Interface: ISearchRequest
+
+## Properties
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](../type-aliases/InnerTubeClient.md)
+
+The client to use.
+
+#### Defined in
+
+[src/types/Endpoints.ts:130](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L130)
+
+***
+
+### continuation?
+
+> `optional` **continuation**: `string`
+
+The continuation token. Mostly sed for pagination.
+
+#### Defined in
+
+[src/types/Endpoints.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L126)
+
+***
+
+### params?
+
+> `optional` **params**: `string`
+
+Additional protobuf parameters.
+
+#### Defined in
+
+[src/types/Endpoints.ts:122](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L122)
+
+***
+
+### query?
+
+> `optional` **query**: `string`
+
+The query to search for.
+
+#### Defined in
+
+[src/types/Endpoints.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L118)
diff --git a/docs/api/namespaces/Types/interfaces/PlatformShim.md b/docs/api/namespaces/Types/interfaces/PlatformShim.md
new file mode 100644
index 000000000..4227a92ab
--- /dev/null
+++ b/docs/api/namespaces/Types/interfaces/PlatformShim.md
@@ -0,0 +1,355 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / PlatformShim
+
+# Interface: PlatformShim
+
+## Properties
+
+### Cache
+
+> **Cache**: [`ICacheConstructor`](ICacheConstructor.md)
+
+#### Defined in
+
+[src/types/PlatformShim.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L17)
+
+***
+
+### CustomEvent()
+
+> **CustomEvent**: \<`T`\>(`type`, `eventInitDict`?) => `CustomEvent`\<`T`\>
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **eventInitDict?**: `CustomEventInit`\<`T`\>
+
+#### Returns
+
+`CustomEvent`\<`T`\>
+
+#### prototype
+
+> **prototype**: `CustomEvent`\<`any`\>
+
+#### Defined in
+
+[src/types/PlatformShim.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L28)
+
+***
+
+### fetch()
+
+> **fetch**: (`input`, `init`?) => `Promise`\<`Response`\>
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch)
+
+#### Parameters
+
+β’ **input**: `URL` \| `RequestInfo`
+
+β’ **init?**: `RequestInit`
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Defined in
+
+[src/types/PlatformShim.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L21)
+
+***
+
+### File()
+
+> **File**: (`fileBits`, `fileName`, `options`?) => `File`
+
+#### Parameters
+
+β’ **fileBits**: `BlobPart`[]
+
+β’ **fileName**: `string`
+
+β’ **options?**: `FilePropertyBag`
+
+#### Returns
+
+`File`
+
+#### prototype
+
+> **prototype**: `File`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L26)
+
+***
+
+### FormData()
+
+> **FormData**: (`form`?, `submitter`?) => `FormData`
+
+#### Parameters
+
+β’ **form?**: `HTMLFormElement`
+
+β’ **submitter?**: `null` \| `HTMLElement`
+
+#### Returns
+
+`FormData`
+
+#### prototype
+
+> **prototype**: `FormData`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L25)
+
+***
+
+### Headers()
+
+> **Headers**: (`init`?) => `Headers`
+
+#### Parameters
+
+β’ **init?**: `HeadersInit`
+
+#### Returns
+
+`Headers`
+
+#### prototype
+
+> **prototype**: `Headers`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L24)
+
+***
+
+### info
+
+> **info**: `object`
+
+#### bugs\_url
+
+> **bugs\_url**: `string`
+
+#### repo\_url
+
+> **repo\_url**: `string`
+
+#### version
+
+> **version**: `string`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L11)
+
+***
+
+### ReadableStream()
+
+> **ReadableStream**: (`underlyingSource`, `strategy`?) => `ReadableStream`\<`Uint8Array`\>\<`R`\>(`underlyingSource`, `strategy`?) => `ReadableStream`\<`R`\>\<`R`\>(`underlyingSource`?, `strategy`?) => `ReadableStream`\<`R`\>
+
+#### Parameters
+
+β’ **underlyingSource**: `UnderlyingByteSource`
+
+β’ **strategy?**
+
+β’ **strategy.highWaterMark?**: `number`
+
+#### Returns
+
+`ReadableStream`\<`Uint8Array`\>
+
+#### Parameters
+
+β’ **underlyingSource**: `UnderlyingDefaultSource`\<`R`\>
+
+β’ **strategy?**: `QueuingStrategy`\<`R`\>
+
+#### Returns
+
+`ReadableStream`\<`R`\>
+
+#### Parameters
+
+β’ **underlyingSource?**: `UnderlyingSource`\<`R`\>
+
+β’ **strategy?**: `QueuingStrategy`\<`R`\>
+
+#### Returns
+
+`ReadableStream`\<`R`\>
+
+#### prototype
+
+> **prototype**: `ReadableStream`\<`any`\>
+
+#### Defined in
+
+[src/types/PlatformShim.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L27)
+
+***
+
+### Request()
+
+> **Request**: (`input`, `init`?) => `Request`
+
+#### Parameters
+
+β’ **input**: `URL` \| `RequestInfo`
+
+β’ **init?**: `RequestInit`
+
+#### Returns
+
+`Request`
+
+#### prototype
+
+> **prototype**: `Request`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L22)
+
+***
+
+### Response()
+
+> **Response**: (`body`?, `init`?) => `Response`
+
+#### Parameters
+
+β’ **body?**: `null` \| `BodyInit`
+
+β’ **init?**: `ResponseInit`
+
+#### Returns
+
+`Response`
+
+#### prototype
+
+> **prototype**: `Response`
+
+#### error()
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/error_static)
+
+##### Returns
+
+`Response`
+
+#### json()
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/json_static)
+
+##### Parameters
+
+β’ **data**: `any`
+
+β’ **init?**: `ResponseInit`
+
+##### Returns
+
+`Response`
+
+#### redirect()
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/redirect_static)
+
+##### Parameters
+
+β’ **url**: `string` \| `URL`
+
+β’ **status?**: `number`
+
+##### Returns
+
+`Response`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L23)
+
+***
+
+### runtime
+
+> **runtime**: [`Runtime`](../type-aliases/Runtime.md)
+
+#### Defined in
+
+[src/types/PlatformShim.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L10)
+
+***
+
+### server
+
+> **server**: `boolean`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L16)
+
+## Methods
+
+### eval()
+
+> **eval**(`code`, `env`): `unknown`
+
+#### Parameters
+
+β’ **code**: `string`
+
+β’ **env**: `Record`\<`string`, [`VMPrimative`](../type-aliases/VMPrimative.md)\>
+
+#### Returns
+
+`unknown`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L20)
+
+***
+
+### sha1Hash()
+
+> **sha1Hash**(`data`): `Promise`\<`string`\>
+
+#### Parameters
+
+β’ **data**: `string`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[src/types/PlatformShim.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L18)
+
+***
+
+### uuidv4()
+
+> **uuidv4**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/types/PlatformShim.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L19)
diff --git a/docs/api/namespaces/Types/type-aliases/BlocklistPickerRequestEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/BlocklistPickerRequestEndpointOptions.md
new file mode 100644
index 000000000..8170c395f
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/BlocklistPickerRequestEndpointOptions.md
@@ -0,0 +1,15 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / BlocklistPickerRequestEndpointOptions
+
+# Type Alias: BlocklistPickerRequestEndpointOptions
+
+> **BlocklistPickerRequestEndpointOptions**: `object`
+
+## Type declaration
+
+### channel\_id
+
+> **channel\_id**: `string`
+
+## Defined in
+
+[src/types/Endpoints.ts:355](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L355)
diff --git a/docs/api/namespaces/Types/type-aliases/BrowseEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/BrowseEndpointOptions.md
new file mode 100644
index 000000000..529042493
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/BrowseEndpointOptions.md
@@ -0,0 +1,35 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / BrowseEndpointOptions
+
+# Type Alias: BrowseEndpointOptions
+
+> **BrowseEndpointOptions**: `object`
+
+## Type declaration
+
+### browse\_id?
+
+> `optional` **browse\_id**: `string`
+
+The browse ID.
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### continuation?
+
+> `optional` **continuation**: `string`
+
+The continuation token. Mostly used for pagination.
+
+### params?
+
+> `optional` **params**: `string`
+
+Additional protobuf parameters.
+
+## Defined in
+
+[src/types/Endpoints.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L93)
diff --git a/docs/api/namespaces/Types/type-aliases/ChannelEditDescriptionEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/ChannelEditDescriptionEndpointOptions.md
new file mode 100644
index 000000000..3490289d2
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ChannelEditDescriptionEndpointOptions.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ChannelEditDescriptionEndpointOptions
+
+# Type Alias: ChannelEditDescriptionEndpointOptions
+
+> **ChannelEditDescriptionEndpointOptions**: `object`
+
+## Type declaration
+
+### given\_description
+
+> **given\_description**: `string`
+
+The new channel description.
+
+## Defined in
+
+[src/types/Endpoints.ts:175](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L175)
diff --git a/docs/api/namespaces/Types/type-aliases/ChannelEditNameEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/ChannelEditNameEndpointOptions.md
new file mode 100644
index 000000000..bc2d3122f
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ChannelEditNameEndpointOptions.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ChannelEditNameEndpointOptions
+
+# Type Alias: ChannelEditNameEndpointOptions
+
+> **ChannelEditNameEndpointOptions**: `object`
+
+## Type declaration
+
+### given\_name
+
+> **given\_name**: `string`
+
+The new channel name.
+
+## Defined in
+
+[src/types/Endpoints.ts:164](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L164)
diff --git a/docs/api/namespaces/Types/type-aliases/CreateCommentEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/CreateCommentEndpointOptions.md
new file mode 100644
index 000000000..c4b0a8651
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/CreateCommentEndpointOptions.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / CreateCommentEndpointOptions
+
+# Type Alias: CreateCommentEndpointOptions
+
+> **CreateCommentEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### comment\_text
+
+> **comment\_text**: `string`
+
+The comment text.
+
+### create\_comment\_params
+
+> **create\_comment\_params**: `string`
+
+Additional protobuf parameters.
+
+## Defined in
+
+[src/types/Endpoints.ts:244](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L244)
diff --git a/docs/api/namespaces/Types/type-aliases/CreatePlaylistEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/CreatePlaylistEndpointOptions.md
new file mode 100644
index 000000000..269c0c250
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/CreatePlaylistEndpointOptions.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / CreatePlaylistEndpointOptions
+
+# Type Alias: CreatePlaylistEndpointOptions
+
+> **CreatePlaylistEndpointOptions**: `object`
+
+## Type declaration
+
+### ids
+
+> **ids**: `string`[]
+
+The video IDs to add to the playlist.
+
+### title
+
+> **title**: `string`
+
+The playlist title.
+
+## Defined in
+
+[src/types/Endpoints.ts:313](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L313)
diff --git a/docs/api/namespaces/Types/type-aliases/CreateVideoEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/CreateVideoEndpointOptions.md
new file mode 100644
index 000000000..ae8dec087
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/CreateVideoEndpointOptions.md
@@ -0,0 +1,79 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / CreateVideoEndpointOptions
+
+# Type Alias: CreateVideoEndpointOptions
+
+> **CreateVideoEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### frontend\_upload\_id
+
+> **frontend\_upload\_id**: `string`
+
+The id of the frontend.
+
+### initial\_metadata
+
+> **initial\_metadata**: `object`
+
+The metadata to set after the video is uploaded.
+
+### initial\_metadata.description
+
+> **description**: `object`
+
+### initial\_metadata.description.new\_description
+
+> **new\_description**: `string`
+
+### initial\_metadata.description.should\_segment
+
+> **should\_segment**: `boolean`
+
+### initial\_metadata.draft\_state
+
+> **draft\_state**: `object`
+
+### initial\_metadata.draft\_state.is\_draft?
+
+> `optional` **is\_draft**: `boolean`
+
+### initial\_metadata.privacy
+
+> **privacy**: `object`
+
+### initial\_metadata.privacy.new\_privacy
+
+> **new\_privacy**: `string`
+
+### initial\_metadata.title
+
+> **title**: `object`
+
+### initial\_metadata.title.new\_title
+
+> **new\_title**: `string`
+
+### resource\_id
+
+> **resource\_id**: `object`
+
+The id of the uploaded resource.
+
+### resource\_id.scotty\_resource\_id
+
+> **scotty\_resource\_id**: `object`
+
+### resource\_id.scotty\_resource\_id.id
+
+> **id**: `string`
+
+## Defined in
+
+[src/types/Endpoints.ts:274](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L274)
diff --git a/docs/api/namespaces/Types/type-aliases/DeletePlaylistEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/DeletePlaylistEndpointOptions.md
new file mode 100644
index 000000000..e6660c19b
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/DeletePlaylistEndpointOptions.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / DeletePlaylistEndpointOptions
+
+# Type Alias: DeletePlaylistEndpointOptions
+
+> **DeletePlaylistEndpointOptions**: `object`
+
+## Type declaration
+
+### playlist\_id
+
+> **playlist\_id**: `string`
+
+The ID of the playlist to delete.
+
+## Defined in
+
+[src/types/Endpoints.ts:326](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L326)
diff --git a/docs/api/namespaces/Types/type-aliases/DislikeEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/DislikeEndpointOptions.md
new file mode 100644
index 000000000..1b138691f
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/DislikeEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / DislikeEndpointOptions
+
+# Type Alias: DislikeEndpointOptions
+
+> **DislikeEndpointOptions**: [`LikeEndpointOptions`](LikeEndpointOptions.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:206](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L206)
diff --git a/docs/api/namespaces/Types/type-aliases/Duration.md b/docs/api/namespaces/Types/type-aliases/Duration.md
new file mode 100644
index 000000000..d8fac020a
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/Duration.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / Duration
+
+# Type Alias: Duration
+
+> **Duration**: `"all"` \| `"short"` \| `"medium"` \| `"long"`
+
+## Defined in
+
+[src/types/Misc.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L8)
diff --git a/docs/api/namespaces/Types/type-aliases/EditPlaylistEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/EditPlaylistEndpointOptions.md
new file mode 100644
index 000000000..5bbeb6d02
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/EditPlaylistEndpointOptions.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / EditPlaylistEndpointOptions
+
+# Type Alias: EditPlaylistEndpointOptions
+
+> **EditPlaylistEndpointOptions**: `object`
+
+## Type declaration
+
+### actions
+
+> **actions**: `object`[]
+
+The changes to make to the playlist.
+
+### playlist\_id
+
+> **playlist\_id**: `string`
+
+The ID of the playlist to edit.
+
+## Defined in
+
+[src/types/Endpoints.ts:335](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L335)
diff --git a/docs/api/namespaces/Types/type-aliases/Feature.md b/docs/api/namespaces/Types/type-aliases/Feature.md
new file mode 100644
index 000000000..2abd17534
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/Feature.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / Feature
+
+# Type Alias: Feature
+
+> **Feature**: `"hd"` \| `"subtitles"` \| `"creative_commons"` \| `"3d"` \| `"live"` \| `"purchased"` \| `"4k"` \| `"360"` \| `"location"` \| `"hdr"` \| `"vr180"`
+
+## Defined in
+
+[src/types/Misc.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L10)
diff --git a/docs/api/namespaces/Types/type-aliases/FetchFunction.md b/docs/api/namespaces/Types/type-aliases/FetchFunction.md
new file mode 100644
index 000000000..68654cad2
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/FetchFunction.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / FetchFunction
+
+# Type Alias: FetchFunction
+
+> **FetchFunction**: *typeof* `fetch`
+
+## Defined in
+
+[src/types/PlatformShim.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L5)
diff --git a/docs/api/namespaces/Types/type-aliases/FormatFilter.md b/docs/api/namespaces/Types/type-aliases/FormatFilter.md
new file mode 100644
index 000000000..2e24655cb
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/FormatFilter.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / FormatFilter
+
+# Type Alias: FormatFilter()
+
+> **FormatFilter**: (`format`) => `boolean`
+
+## Parameters
+
+β’ **format**: [`Format`](../../Misc/classes/Format.md)
+
+## Returns
+
+`boolean`
+
+## Defined in
+
+[src/types/FormatUtils.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L5)
diff --git a/docs/api/namespaces/Types/type-aliases/GetNotificationMenuEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/GetNotificationMenuEndpointOptions.md
new file mode 100644
index 000000000..dba340eb3
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/GetNotificationMenuEndpointOptions.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / GetNotificationMenuEndpointOptions
+
+# Type Alias: GetNotificationMenuEndpointOptions
+
+> **GetNotificationMenuEndpointOptions**: `object`
+
+## Type declaration
+
+### notifications\_menu\_request\_type
+
+> **notifications\_menu\_request\_type**: `"NOTIFICATIONS_MENU_REQUEST_TYPE_INBOX"` \| `"NOTIFICATIONS_MENU_REQUEST_TYPE_COMMENTS"`
+
+The type of notifications to request.
+
+## Defined in
+
+[src/types/Endpoints.ts:144](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L144)
diff --git a/docs/api/namespaces/Types/type-aliases/IBlocklistPickerRequest.md b/docs/api/namespaces/Types/type-aliases/IBlocklistPickerRequest.md
new file mode 100644
index 000000000..87c168ff1
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IBlocklistPickerRequest.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IBlocklistPickerRequest
+
+# Type Alias: IBlocklistPickerRequest
+
+> **IBlocklistPickerRequest**: `object`
+
+## Type declaration
+
+### blockedForKidsContent
+
+> **blockedForKidsContent**: `object`
+
+### blockedForKidsContent.external\_channel\_id
+
+> **external\_channel\_id**: `string`
+
+## Defined in
+
+[src/types/Endpoints.ts:359](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L359)
diff --git a/docs/api/namespaces/Types/type-aliases/IBrowseRequest.md b/docs/api/namespaces/Types/type-aliases/IBrowseRequest.md
new file mode 100644
index 000000000..e1a82d4f7
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IBrowseRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IBrowseRequest
+
+# Type Alias: IBrowseRequest
+
+> **IBrowseRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`BrowseEndpointOptions`](BrowseEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:112](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L112)
diff --git a/docs/api/namespaces/Types/type-aliases/ICreateCommentRequest.md b/docs/api/namespaces/Types/type-aliases/ICreateCommentRequest.md
new file mode 100644
index 000000000..32d5ae0a9
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ICreateCommentRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ICreateCommentRequest
+
+# Type Alias: ICreateCommentRequest
+
+> **ICreateCommentRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`CreateCommentEndpointOptions`](CreateCommentEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:259](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L259)
diff --git a/docs/api/namespaces/Types/type-aliases/ICreatePlaylistRequest.md b/docs/api/namespaces/Types/type-aliases/ICreatePlaylistRequest.md
new file mode 100644
index 000000000..7fcbd9a3c
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ICreatePlaylistRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ICreatePlaylistRequest
+
+# Type Alias: ICreatePlaylistRequest
+
+> **ICreatePlaylistRequest**: [`CreatePlaylistEndpointOptions`](CreatePlaylistEndpointOptions.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:324](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L324)
diff --git a/docs/api/namespaces/Types/type-aliases/ICreateVideoRequest.md b/docs/api/namespaces/Types/type-aliases/ICreateVideoRequest.md
new file mode 100644
index 000000000..d33b9ff5f
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ICreateVideoRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ICreateVideoRequest
+
+# Type Alias: ICreateVideoRequest
+
+> **ICreateVideoRequest**: `Omit`\<[`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`CreateVideoEndpointOptions`](CreateVideoEndpointOptions.md)\>, `"client"`\>
+
+## Defined in
+
+[src/types/Endpoints.ts:311](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L311)
diff --git a/docs/api/namespaces/Types/type-aliases/IDeletePlaylistRequest.md b/docs/api/namespaces/Types/type-aliases/IDeletePlaylistRequest.md
new file mode 100644
index 000000000..344643917
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IDeletePlaylistRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IDeletePlaylistRequest
+
+# Type Alias: IDeletePlaylistRequest
+
+> **IDeletePlaylistRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`DeletePlaylistEndpointOptions`](DeletePlaylistEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:333](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L333)
diff --git a/docs/api/namespaces/Types/type-aliases/IDislikeRequest.md b/docs/api/namespaces/Types/type-aliases/IDislikeRequest.md
new file mode 100644
index 000000000..b208f654f
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IDislikeRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IDislikeRequest
+
+# Type Alias: IDislikeRequest
+
+> **IDislikeRequest**: [`ILikeRequest`](ILikeRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:205](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L205)
diff --git a/docs/api/namespaces/Types/type-aliases/IEditPlaylistRequest.md b/docs/api/namespaces/Types/type-aliases/IEditPlaylistRequest.md
new file mode 100644
index 000000000..defa2fdad
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IEditPlaylistRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IEditPlaylistRequest
+
+# Type Alias: IEditPlaylistRequest
+
+> **IEditPlaylistRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`EditPlaylistEndpointOptions`](EditPlaylistEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:353](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L353)
diff --git a/docs/api/namespaces/Types/type-aliases/IGetNotificationMenuRequest.md b/docs/api/namespaces/Types/type-aliases/IGetNotificationMenuRequest.md
new file mode 100644
index 000000000..dc851c9ba
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IGetNotificationMenuRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IGetNotificationMenuRequest
+
+# Type Alias: IGetNotificationMenuRequest
+
+> **IGetNotificationMenuRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`GetNotificationMenuEndpointOptions`](GetNotificationMenuEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:151](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L151)
diff --git a/docs/api/namespaces/Types/type-aliases/ILikeRequest.md b/docs/api/namespaces/Types/type-aliases/ILikeRequest.md
new file mode 100644
index 000000000..85de3b9ea
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ILikeRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ILikeRequest
+
+# Type Alias: ILikeRequest
+
+> **ILikeRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`LikeEndpointOptions`](LikeEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:203](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L203)
diff --git a/docs/api/namespaces/Types/type-aliases/INextRequest.md b/docs/api/namespaces/Types/type-aliases/INextRequest.md
new file mode 100644
index 000000000..57fae1b34
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/INextRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / INextRequest
+
+# Type Alias: INextRequest
+
+> **INextRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`NextEndpointOptions`](NextEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:91](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L91)
diff --git a/docs/api/namespaces/Types/type-aliases/IRemoveLikeRequest.md b/docs/api/namespaces/Types/type-aliases/IRemoveLikeRequest.md
new file mode 100644
index 000000000..3940ff4e6
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IRemoveLikeRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IRemoveLikeRequest
+
+# Type Alias: IRemoveLikeRequest
+
+> **IRemoveLikeRequest**: [`ILikeRequest`](ILikeRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:208](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L208)
diff --git a/docs/api/namespaces/Types/type-aliases/ISubscribeRequest.md b/docs/api/namespaces/Types/type-aliases/ISubscribeRequest.md
new file mode 100644
index 000000000..230450ce6
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ISubscribeRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ISubscribeRequest
+
+# Type Alias: ISubscribeRequest
+
+> **ISubscribeRequest**: [`ObjectSnakeToCamel`](ObjectSnakeToCamel.md)\<[`SubscribeEndpointOptions`](SubscribeEndpointOptions.md)\>
+
+## Defined in
+
+[src/types/Endpoints.ts:226](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L226)
diff --git a/docs/api/namespaces/Types/type-aliases/IUnsubscribeRequest.md b/docs/api/namespaces/Types/type-aliases/IUnsubscribeRequest.md
new file mode 100644
index 000000000..ddeea7fd7
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/IUnsubscribeRequest.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / IUnsubscribeRequest
+
+# Type Alias: IUnsubscribeRequest
+
+> **IUnsubscribeRequest**: [`ISubscribeRequest`](ISubscribeRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:228](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L228)
diff --git a/docs/api/namespaces/Types/type-aliases/InnerTubeClient.md b/docs/api/namespaces/Types/type-aliases/InnerTubeClient.md
new file mode 100644
index 000000000..7e7300868
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/InnerTubeClient.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / InnerTubeClient
+
+# Type Alias: InnerTubeClient
+
+> **InnerTubeClient**: `"IOS"` \| `"WEB"` \| `"ANDROID"` \| `"YTMUSIC"` \| `"YTMUSIC_ANDROID"` \| `"YTSTUDIO_ANDROID"` \| `"TV_EMBEDDED"` \| `"YTKIDS"` \| `"WEB_EMBEDDED"`
+
+## Defined in
+
+[src/types/Misc.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L4)
diff --git a/docs/api/namespaces/Types/type-aliases/InnerTubeConfig.md b/docs/api/namespaces/Types/type-aliases/InnerTubeConfig.md
new file mode 100644
index 000000000..019bd43e3
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/InnerTubeConfig.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / InnerTubeConfig
+
+# Type Alias: InnerTubeConfig
+
+> **InnerTubeConfig**: [`SessionOptions`](../../../type-aliases/SessionOptions.md)
+
+## Defined in
+
+[src/types/Misc.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L3)
diff --git a/docs/api/namespaces/Types/type-aliases/LikeEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/LikeEndpointOptions.md
new file mode 100644
index 000000000..a82fef18a
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/LikeEndpointOptions.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / LikeEndpointOptions
+
+# Type Alias: LikeEndpointOptions
+
+> **LikeEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### target
+
+> **target**: `object`
+
+The target video.
+
+### target.video\_id
+
+> **video\_id**: `string`
+
+## Defined in
+
+[src/types/Endpoints.ts:190](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L190)
diff --git a/docs/api/namespaces/Types/type-aliases/ModifyChannelPreferenceEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/ModifyChannelPreferenceEndpointOptions.md
new file mode 100644
index 000000000..79ba5148c
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ModifyChannelPreferenceEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ModifyChannelPreferenceEndpointOptions
+
+# Type Alias: ModifyChannelPreferenceEndpointOptions
+
+> **ModifyChannelPreferenceEndpointOptions**: [`IModifyChannelPreferenceRequest`](../interfaces/IModifyChannelPreferenceRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:272](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L272)
diff --git a/docs/api/namespaces/Types/type-aliases/MusicGetSearchSuggestionsEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/MusicGetSearchSuggestionsEndpointOptions.md
new file mode 100644
index 000000000..84a8c99ad
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/MusicGetSearchSuggestionsEndpointOptions.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / MusicGetSearchSuggestionsEndpointOptions
+
+# Type Alias: MusicGetSearchSuggestionsEndpointOptions
+
+> **MusicGetSearchSuggestionsEndpointOptions**: `object`
+
+## Type declaration
+
+### input
+
+> **input**: `string`
+
+The query to search for.
+
+## Defined in
+
+[src/types/Endpoints.ts:153](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L153)
diff --git a/docs/api/namespaces/Types/type-aliases/MusicSearchFilters.md b/docs/api/namespaces/Types/type-aliases/MusicSearchFilters.md
new file mode 100644
index 000000000..20d55a4e5
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/MusicSearchFilters.md
@@ -0,0 +1,15 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / MusicSearchFilters
+
+# Type Alias: MusicSearchFilters
+
+> **MusicSearchFilters**: `object`
+
+## Type declaration
+
+### type?
+
+> `optional` **type**: [`MusicSearchType`](MusicSearchType.md)
+
+## Defined in
+
+[src/types/Misc.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L41)
diff --git a/docs/api/namespaces/Types/type-aliases/MusicSearchType.md b/docs/api/namespaces/Types/type-aliases/MusicSearchType.md
new file mode 100644
index 000000000..ae3f0a2c2
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/MusicSearchType.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / MusicSearchType
+
+# Type Alias: MusicSearchType
+
+> **MusicSearchType**: `"all"` \| `"song"` \| `"video"` \| `"album"` \| `"playlist"` \| `"artist"`
+
+## Defined in
+
+[src/types/Misc.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L39)
diff --git a/docs/api/namespaces/Types/type-aliases/NextEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/NextEndpointOptions.md
new file mode 100644
index 000000000..8e99894f7
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/NextEndpointOptions.md
@@ -0,0 +1,47 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / NextEndpointOptions
+
+# Type Alias: NextEndpointOptions
+
+> **NextEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### continuation?
+
+> `optional` **continuation**: `string`
+
+The continuation token. Mostly used for pagination.
+
+### params?
+
+> `optional` **params**: `string`
+
+Protobuf parameters.
+
+### playlist\_id?
+
+> `optional` **playlist\_id**: `string`
+
+The playlist associated with the video.
+
+### playlist\_index?
+
+> `optional` **playlist\_index**: `number`
+
+The playlist index.
+
+### video\_id?
+
+> `optional` **video\_id**: `string`
+
+The video ID.
+
+## Defined in
+
+[src/types/Endpoints.ts:64](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L64)
diff --git a/docs/api/namespaces/Types/type-aliases/ObjectSnakeToCamel.md b/docs/api/namespaces/Types/type-aliases/ObjectSnakeToCamel.md
new file mode 100644
index 000000000..fbeb23abd
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ObjectSnakeToCamel.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ObjectSnakeToCamel
+
+# Type Alias: ObjectSnakeToCamel\
+
+> **ObjectSnakeToCamel**\<`T`\>: `{ [K in keyof T as SnakeToCamel]: T[K] extends object ? ObjectSnakeToCamel : T[K] }`
+
+## Type Parameters
+
+β’ **T**
+
+## Defined in
+
+[src/types/Endpoints.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L5)
diff --git a/docs/api/namespaces/Types/type-aliases/PerformCommentActionEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/PerformCommentActionEndpointOptions.md
new file mode 100644
index 000000000..bba854e5d
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/PerformCommentActionEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / PerformCommentActionEndpointOptions
+
+# Type Alias: PerformCommentActionEndpointOptions
+
+> **PerformCommentActionEndpointOptions**: [`IPerformCommentActionRequest`](../interfaces/IPerformCommentActionRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:242](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L242)
diff --git a/docs/api/namespaces/Types/type-aliases/PlayerEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/PlayerEndpointOptions.md
new file mode 100644
index 000000000..b1b72b00e
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/PlayerEndpointOptions.md
@@ -0,0 +1,47 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / PlayerEndpointOptions
+
+# Type Alias: PlayerEndpointOptions
+
+> **PlayerEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### params?
+
+> `optional` **params**: `string`
+
+Additional protobuf parameters.
+
+### playlist\_id?
+
+> `optional` **playlist\_id**: `string`
+
+The playlist ID.
+
+### po\_token?
+
+> `optional` **po\_token**: `string`
+
+Token for serviceIntegrityDimensions
+
+### sts?
+
+> `optional` **sts**: `number`
+
+The player's signature timestamp.
+
+### video\_id
+
+> **video\_id**: `string`
+
+The video ID.
+
+## Defined in
+
+[src/types/Endpoints.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L37)
diff --git a/docs/api/namespaces/Types/type-aliases/ReelItemWatchEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/ReelItemWatchEndpointOptions.md
new file mode 100644
index 000000000..581b302a0
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ReelItemWatchEndpointOptions.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ReelItemWatchEndpointOptions
+
+# Type Alias: ReelItemWatchEndpointOptions
+
+> **ReelItemWatchEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### params?
+
+> `optional` **params**: `string`
+
+Additional protobuf parameters.
+
+### video\_id
+
+> **video\_id**: `string`
+
+The shorts ID.
+
+## Defined in
+
+[src/types/Endpoints.ts:375](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L375)
diff --git a/docs/api/namespaces/Types/type-aliases/ReelWatchSequenceEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/ReelWatchSequenceEndpointOptions.md
new file mode 100644
index 000000000..f202b08a1
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ReelWatchSequenceEndpointOptions.md
@@ -0,0 +1,23 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ReelWatchSequenceEndpointOptions
+
+# Type Alias: ReelWatchSequenceEndpointOptions
+
+> **ReelWatchSequenceEndpointOptions**: `object`
+
+## Type declaration
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### sequence\_params
+
+> **sequence\_params**: `string`
+
+The protobuf parameters.
+
+## Defined in
+
+[src/types/Endpoints.ts:394](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L394)
diff --git a/docs/api/namespaces/Types/type-aliases/RemoveLikeEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/RemoveLikeEndpointOptions.md
new file mode 100644
index 000000000..8f9f2a1cc
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/RemoveLikeEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / RemoveLikeEndpointOptions
+
+# Type Alias: RemoveLikeEndpointOptions
+
+> **RemoveLikeEndpointOptions**: [`LikeEndpointOptions`](LikeEndpointOptions.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:209](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L209)
diff --git a/docs/api/namespaces/Types/type-aliases/ResolveURLEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/ResolveURLEndpointOptions.md
new file mode 100644
index 000000000..c75690ac4
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/ResolveURLEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / ResolveURLEndpointOptions
+
+# Type Alias: ResolveURLEndpointOptions
+
+> **ResolveURLEndpointOptions**: [`IResolveURLRequest`](../interfaces/IResolveURLRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:142](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L142)
diff --git a/docs/api/namespaces/Types/type-aliases/Runtime.md b/docs/api/namespaces/Types/type-aliases/Runtime.md
new file mode 100644
index 000000000..176928633
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/Runtime.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / Runtime
+
+# Type Alias: Runtime
+
+> **Runtime**: `"deno"` \| `"node"` \| `"browser"` \| `"cf-worker"` \| `"unknown"` \| `"react-native"`
+
+## Defined in
+
+[src/types/PlatformShim.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L3)
diff --git a/docs/api/namespaces/Types/type-aliases/SearchEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/SearchEndpointOptions.md
new file mode 100644
index 000000000..a8713d043
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/SearchEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / SearchEndpointOptions
+
+# Type Alias: SearchEndpointOptions
+
+> **SearchEndpointOptions**: [`ISearchRequest`](../interfaces/ISearchRequest.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:133](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L133)
diff --git a/docs/api/namespaces/Types/type-aliases/SearchFilters.md b/docs/api/namespaces/Types/type-aliases/SearchFilters.md
new file mode 100644
index 000000000..8940d8faa
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/SearchFilters.md
@@ -0,0 +1,31 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / SearchFilters
+
+# Type Alias: SearchFilters
+
+> **SearchFilters**: `object`
+
+## Type declaration
+
+### duration?
+
+> `optional` **duration**: [`Duration`](Duration.md)
+
+### features?
+
+> `optional` **features**: [`Feature`](Feature.md)[]
+
+### sort\_by?
+
+> `optional` **sort\_by**: [`SortBy`](SortBy.md)
+
+### type?
+
+> `optional` **type**: [`SearchType`](SearchType.md)
+
+### upload\_date?
+
+> `optional` **upload\_date**: [`UploadDate`](UploadDate.md)
+
+## Defined in
+
+[src/types/Misc.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L12)
diff --git a/docs/api/namespaces/Types/type-aliases/SearchType.md b/docs/api/namespaces/Types/type-aliases/SearchType.md
new file mode 100644
index 000000000..d200b0f37
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/SearchType.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / SearchType
+
+# Type Alias: SearchType
+
+> **SearchType**: `"all"` \| `"video"` \| `"channel"` \| `"playlist"` \| `"movie"`
+
+## Defined in
+
+[src/types/Misc.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L7)
diff --git a/docs/api/namespaces/Types/type-aliases/SnakeToCamel.md b/docs/api/namespaces/Types/type-aliases/SnakeToCamel.md
new file mode 100644
index 000000000..7ab5c1d2a
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/SnakeToCamel.md
@@ -0,0 +1,13 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / SnakeToCamel
+
+# Type Alias: SnakeToCamel\
+
+> **SnakeToCamel**\<`S`\>: `S` *extends* \`$\{infer T\}\_$\{infer U\}\` ? \`$\{Lowercase\\}$\{Capitalize\\>\}\` : `S`
+
+## Type Parameters
+
+β’ **S** *extends* `string`
+
+## Defined in
+
+[src/types/Endpoints.ts:3](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L3)
diff --git a/docs/api/namespaces/Types/type-aliases/SortBy.md b/docs/api/namespaces/Types/type-aliases/SortBy.md
new file mode 100644
index 000000000..8d970032e
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/SortBy.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / SortBy
+
+# Type Alias: SortBy
+
+> **SortBy**: `"relevance"` \| `"rating"` \| `"upload_date"` \| `"view_count"`
+
+## Defined in
+
+[src/types/Misc.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L9)
diff --git a/docs/api/namespaces/Types/type-aliases/SubscribeEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/SubscribeEndpointOptions.md
new file mode 100644
index 000000000..800596052
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/SubscribeEndpointOptions.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / SubscribeEndpointOptions
+
+# Type Alias: SubscribeEndpointOptions
+
+> **SubscribeEndpointOptions**: `object`
+
+## Type declaration
+
+### channel\_ids
+
+> **channel\_ids**: `string`[]
+
+The channel IDs to subscribe to/unsubscribe from.
+
+### client?
+
+> `optional` **client**: [`InnerTubeClient`](InnerTubeClient.md)
+
+The client to use.
+
+### params?
+
+> `optional` **params**: `string`
+
+Additional protobuf parameters.
+
+## Defined in
+
+[src/types/Endpoints.ts:211](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L211)
diff --git a/docs/api/namespaces/Types/type-aliases/URLTransformer.md b/docs/api/namespaces/Types/type-aliases/URLTransformer.md
new file mode 100644
index 000000000..81c435111
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/URLTransformer.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / URLTransformer
+
+# Type Alias: URLTransformer()
+
+> **URLTransformer**: (`url`) => `URL`
+
+## Parameters
+
+β’ **url**: `URL`
+
+## Returns
+
+`URL`
+
+## Defined in
+
+[src/types/FormatUtils.ts:4](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/FormatUtils.ts#L4)
diff --git a/docs/api/namespaces/Types/type-aliases/UnsubscribeEndpointOptions.md b/docs/api/namespaces/Types/type-aliases/UnsubscribeEndpointOptions.md
new file mode 100644
index 000000000..d01207320
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/UnsubscribeEndpointOptions.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / UnsubscribeEndpointOptions
+
+# Type Alias: UnsubscribeEndpointOptions
+
+> **UnsubscribeEndpointOptions**: [`SubscribeEndpointOptions`](SubscribeEndpointOptions.md)
+
+## Defined in
+
+[src/types/Endpoints.ts:229](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Endpoints.ts#L229)
diff --git a/docs/api/namespaces/Types/type-aliases/UpdateVideoMetadataOptions.md b/docs/api/namespaces/Types/type-aliases/UpdateVideoMetadataOptions.md
new file mode 100644
index 000000000..84aa1d267
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/UpdateVideoMetadataOptions.md
@@ -0,0 +1,47 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / UpdateVideoMetadataOptions
+
+# Type Alias: UpdateVideoMetadataOptions
+
+> **UpdateVideoMetadataOptions**: `Partial`\<`object`\>
+
+## Type declaration
+
+### age\_restricted
+
+> **age\_restricted**: `boolean`
+
+### category
+
+> **category**: `number`
+
+### description
+
+> **description**: `string`
+
+### license
+
+> **license**: `string`
+
+### made\_for\_kids
+
+> **made\_for\_kids**: `boolean`
+
+### privacy
+
+> **privacy**: `"PUBLIC"` \| `"PRIVATE"` \| `"UNLISTED"`
+
+### tags
+
+> **tags**: `string`[]
+
+### thumbnail
+
+> **thumbnail**: `Uint8Array`
+
+### title
+
+> **title**: `string`
+
+## Defined in
+
+[src/types/Misc.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L20)
diff --git a/docs/api/namespaces/Types/type-aliases/UploadDate.md b/docs/api/namespaces/Types/type-aliases/UploadDate.md
new file mode 100644
index 000000000..011ff10f4
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/UploadDate.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / UploadDate
+
+# Type Alias: UploadDate
+
+> **UploadDate**: `"all"` \| `"hour"` \| `"today"` \| `"week"` \| `"month"` \| `"year"`
+
+## Defined in
+
+[src/types/Misc.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L6)
diff --git a/docs/api/namespaces/Types/type-aliases/UploadedVideoMetadataOptions.md b/docs/api/namespaces/Types/type-aliases/UploadedVideoMetadataOptions.md
new file mode 100644
index 000000000..441efe475
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/UploadedVideoMetadataOptions.md
@@ -0,0 +1,27 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / UploadedVideoMetadataOptions
+
+# Type Alias: UploadedVideoMetadataOptions
+
+> **UploadedVideoMetadataOptions**: `Partial`\<`object`\>
+
+## Type declaration
+
+### description
+
+> **description**: `string`
+
+### is\_draft
+
+> **is\_draft**: `boolean`
+
+### privacy
+
+> **privacy**: `"PUBLIC"` \| `"PRIVATE"` \| `"UNLISTED"`
+
+### title
+
+> **title**: `string`
+
+## Defined in
+
+[src/types/Misc.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/Misc.ts#L32)
diff --git a/docs/api/namespaces/Types/type-aliases/VMPrimative.md b/docs/api/namespaces/Types/type-aliases/VMPrimative.md
new file mode 100644
index 000000000..f9ffa266a
--- /dev/null
+++ b/docs/api/namespaces/Types/type-aliases/VMPrimative.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Types](../README.md) / VMPrimative
+
+# Type Alias: VMPrimative
+
+> **VMPrimative**: `string` \| `number` \| `boolean` \| `null` \| `undefined`
+
+## Defined in
+
+[src/types/PlatformShim.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/types/PlatformShim.ts#L7)
diff --git a/docs/api/namespaces/Utils/README.md b/docs/api/namespaces/Utils/README.md
new file mode 100644
index 000000000..af4dceabd
--- /dev/null
+++ b/docs/api/namespaces/Utils/README.md
@@ -0,0 +1,47 @@
+[youtubei.js](../../README.md) / Utils
+
+# Utils
+
+## Index
+
+### Classes
+
+- [ChannelError](classes/ChannelError.md)
+- [InnertubeError](classes/InnertubeError.md)
+- [MissingParamError](classes/MissingParamError.md)
+- [OAuth2Error](classes/OAuth2Error.md)
+- [ParsingError](classes/ParsingError.md)
+- [PlayerError](classes/PlayerError.md)
+- [SessionError](classes/SessionError.md)
+
+### Type Aliases
+
+- [DeviceCategory](type-aliases/DeviceCategory.md)
+- [FindFunctionArgs](type-aliases/FindFunctionArgs.md)
+- [FindFunctionResult](type-aliases/FindFunctionResult.md)
+
+### Functions
+
+- [base64ToU8](functions/base64ToU8.md)
+- [concatMemos](functions/concatMemos.md)
+- [debugFetch](functions/debugFetch.md)
+- [deepCompare](functions/deepCompare.md)
+- [escapeStringRegexp](functions/escapeStringRegexp.md)
+- [findFunction](functions/findFunction.md)
+- [generateRandomString](functions/generateRandomString.md)
+- [generateSidAuth](functions/generateSidAuth.md)
+- [getCookie](functions/getCookie.md)
+- [getRandomUserAgent](functions/getRandomUserAgent.md)
+- [getStringBetweenStrings](functions/getStringBetweenStrings.md)
+- [hasKeys](functions/hasKeys.md)
+- [isTextRun](functions/isTextRun.md)
+- [streamToIterable](functions/streamToIterable.md)
+- [throwIfMissing](functions/throwIfMissing.md)
+- [timeToSeconds](functions/timeToSeconds.md)
+- [u8ToBase64](functions/u8ToBase64.md)
+
+## References
+
+### Platform
+
+Re-exports [Platform](../../classes/Platform.md)
diff --git a/docs/api/namespaces/Utils/classes/ChannelError.md b/docs/api/namespaces/Utils/classes/ChannelError.md
new file mode 100644
index 000000000..ca4d69448
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/ChannelError.md
@@ -0,0 +1,177 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / ChannelError
+
+# Class: ChannelError
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### new ChannelError()
+
+> **new ChannelError**(`message`?): [`ChannelError`](ChannelError.md)
+
+#### Parameters
+
+β’ **message?**: `string`
+
+#### Returns
+
+[`ChannelError`](ChannelError.md)
+
+#### Inherited from
+
+`Error.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1082
+
+### new ChannelError()
+
+> **new ChannelError**(`message`?, `options`?): [`ChannelError`](ChannelError.md)
+
+#### Parameters
+
+β’ **message?**: `string`
+
+β’ **options?**: `ErrorOptions`
+
+#### Returns
+
+[`ChannelError`](ChannelError.md)
+
+#### Inherited from
+
+`Error.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1082
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+`Error.cause`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+`Error.message`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+`Error.name`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+`Error.stack`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+`Error.prepareStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+`Error.stackTraceLimit`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Error.captureStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/classes/InnertubeError.md b/docs/api/namespaces/Utils/classes/InnertubeError.md
new file mode 100644
index 000000000..a59623ce2
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/InnertubeError.md
@@ -0,0 +1,193 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / InnertubeError
+
+# Class: InnertubeError
+
+## Extends
+
+- `Error`
+
+## Extended by
+
+- [`ParsingError`](ParsingError.md)
+- [`MissingParamError`](MissingParamError.md)
+- [`OAuth2Error`](OAuth2Error.md)
+
+## Constructors
+
+### new InnertubeError()
+
+> **new InnertubeError**(`message`, `info`?): [`InnertubeError`](InnertubeError.md)
+
+#### Parameters
+
+β’ **message**: `string`
+
+β’ **info?**: `any`
+
+#### Returns
+
+[`InnertubeError`](InnertubeError.md)
+
+#### Overrides
+
+`Error.constructor`
+
+#### Defined in
+
+[src/utils/Utils.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L30)
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+`Error.cause`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### date
+
+> **date**: `Date`
+
+#### Defined in
+
+[src/utils/Utils.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L26)
+
+***
+
+### info?
+
+> `optional` **info**: `any`
+
+#### Defined in
+
+[src/utils/Utils.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L28)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+`Error.message`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+`Error.name`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+`Error.stack`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### version
+
+> **version**: `string`
+
+#### Defined in
+
+[src/utils/Utils.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L27)
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+`Error.prepareStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+`Error.stackTraceLimit`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Error.captureStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/classes/MissingParamError.md b/docs/api/namespaces/Utils/classes/MissingParamError.md
new file mode 100644
index 000000000..deabfa934
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/MissingParamError.md
@@ -0,0 +1,199 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / MissingParamError
+
+# Class: MissingParamError
+
+## Extends
+
+- [`InnertubeError`](InnertubeError.md)
+
+## Constructors
+
+### new MissingParamError()
+
+> **new MissingParamError**(`message`, `info`?): [`MissingParamError`](MissingParamError.md)
+
+#### Parameters
+
+β’ **message**: `string`
+
+β’ **info?**: `any`
+
+#### Returns
+
+[`MissingParamError`](MissingParamError.md)
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`constructor`](InnertubeError.md#constructors)
+
+#### Defined in
+
+[src/utils/Utils.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L30)
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`cause`](InnertubeError.md#cause)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### date
+
+> **date**: `Date`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`date`](InnertubeError.md#date)
+
+#### Defined in
+
+[src/utils/Utils.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L26)
+
+***
+
+### info?
+
+> `optional` **info**: `any`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`info`](InnertubeError.md#info)
+
+#### Defined in
+
+[src/utils/Utils.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L28)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`message`](InnertubeError.md#message)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`name`](InnertubeError.md#name)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`stack`](InnertubeError.md#stack)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### version
+
+> **version**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`version`](InnertubeError.md#version)
+
+#### Defined in
+
+[src/utils/Utils.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L27)
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`prepareStackTrace`](InnertubeError.md#preparestacktrace)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`stackTraceLimit`](InnertubeError.md#stacktracelimit)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`captureStackTrace`](InnertubeError.md#capturestacktrace)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/classes/OAuth2Error.md b/docs/api/namespaces/Utils/classes/OAuth2Error.md
new file mode 100644
index 000000000..6f24f648f
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/OAuth2Error.md
@@ -0,0 +1,199 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / OAuth2Error
+
+# Class: OAuth2Error
+
+## Extends
+
+- [`InnertubeError`](InnertubeError.md)
+
+## Constructors
+
+### new OAuth2Error()
+
+> **new OAuth2Error**(`message`, `info`?): [`OAuth2Error`](OAuth2Error.md)
+
+#### Parameters
+
+β’ **message**: `string`
+
+β’ **info?**: `any`
+
+#### Returns
+
+[`OAuth2Error`](OAuth2Error.md)
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`constructor`](InnertubeError.md#constructors)
+
+#### Defined in
+
+[src/utils/Utils.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L30)
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`cause`](InnertubeError.md#cause)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### date
+
+> **date**: `Date`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`date`](InnertubeError.md#date)
+
+#### Defined in
+
+[src/utils/Utils.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L26)
+
+***
+
+### info?
+
+> `optional` **info**: `any`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`info`](InnertubeError.md#info)
+
+#### Defined in
+
+[src/utils/Utils.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L28)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`message`](InnertubeError.md#message)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`name`](InnertubeError.md#name)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`stack`](InnertubeError.md#stack)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### version
+
+> **version**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`version`](InnertubeError.md#version)
+
+#### Defined in
+
+[src/utils/Utils.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L27)
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`prepareStackTrace`](InnertubeError.md#preparestacktrace)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`stackTraceLimit`](InnertubeError.md#stacktracelimit)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`captureStackTrace`](InnertubeError.md#capturestacktrace)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/classes/ParsingError.md b/docs/api/namespaces/Utils/classes/ParsingError.md
new file mode 100644
index 000000000..c3fbc0001
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/ParsingError.md
@@ -0,0 +1,199 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / ParsingError
+
+# Class: ParsingError
+
+## Extends
+
+- [`InnertubeError`](InnertubeError.md)
+
+## Constructors
+
+### new ParsingError()
+
+> **new ParsingError**(`message`, `info`?): [`ParsingError`](ParsingError.md)
+
+#### Parameters
+
+β’ **message**: `string`
+
+β’ **info?**: `any`
+
+#### Returns
+
+[`ParsingError`](ParsingError.md)
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`constructor`](InnertubeError.md#constructors)
+
+#### Defined in
+
+[src/utils/Utils.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L30)
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`cause`](InnertubeError.md#cause)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### date
+
+> **date**: `Date`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`date`](InnertubeError.md#date)
+
+#### Defined in
+
+[src/utils/Utils.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L26)
+
+***
+
+### info?
+
+> `optional` **info**: `any`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`info`](InnertubeError.md#info)
+
+#### Defined in
+
+[src/utils/Utils.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L28)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`message`](InnertubeError.md#message)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`name`](InnertubeError.md#name)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`stack`](InnertubeError.md#stack)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### version
+
+> **version**: `string`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`version`](InnertubeError.md#version)
+
+#### Defined in
+
+[src/utils/Utils.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L27)
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`prepareStackTrace`](InnertubeError.md#preparestacktrace)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`stackTraceLimit`](InnertubeError.md#stacktracelimit)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`InnertubeError`](InnertubeError.md).[`captureStackTrace`](InnertubeError.md#capturestacktrace)
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/classes/PlayerError.md b/docs/api/namespaces/Utils/classes/PlayerError.md
new file mode 100644
index 000000000..ff8e3452f
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/PlayerError.md
@@ -0,0 +1,177 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / PlayerError
+
+# Class: PlayerError
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### new PlayerError()
+
+> **new PlayerError**(`message`?): [`PlayerError`](PlayerError.md)
+
+#### Parameters
+
+β’ **message?**: `string`
+
+#### Returns
+
+[`PlayerError`](PlayerError.md)
+
+#### Inherited from
+
+`Error.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1082
+
+### new PlayerError()
+
+> **new PlayerError**(`message`?, `options`?): [`PlayerError`](PlayerError.md)
+
+#### Parameters
+
+β’ **message?**: `string`
+
+β’ **options?**: `ErrorOptions`
+
+#### Returns
+
+[`PlayerError`](PlayerError.md)
+
+#### Inherited from
+
+`Error.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1082
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+`Error.cause`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+`Error.message`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+`Error.name`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+`Error.stack`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+`Error.prepareStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+`Error.stackTraceLimit`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Error.captureStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/classes/SessionError.md b/docs/api/namespaces/Utils/classes/SessionError.md
new file mode 100644
index 000000000..6e82be45c
--- /dev/null
+++ b/docs/api/namespaces/Utils/classes/SessionError.md
@@ -0,0 +1,177 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / SessionError
+
+# Class: SessionError
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### new SessionError()
+
+> **new SessionError**(`message`?): [`SessionError`](SessionError.md)
+
+#### Parameters
+
+β’ **message?**: `string`
+
+#### Returns
+
+[`SessionError`](SessionError.md)
+
+#### Inherited from
+
+`Error.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1082
+
+### new SessionError()
+
+> **new SessionError**(`message`?, `options`?): [`SessionError`](SessionError.md)
+
+#### Parameters
+
+β’ **message?**: `string`
+
+β’ **options?**: `ErrorOptions`
+
+#### Returns
+
+[`SessionError`](SessionError.md)
+
+#### Inherited from
+
+`Error.constructor`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1082
+
+## Properties
+
+### cause?
+
+> `optional` **cause**: `unknown`
+
+#### Inherited from
+
+`Error.cause`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es2022.error.d.ts:24
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Inherited from
+
+`Error.message`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1077
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Inherited from
+
+`Error.name`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1076
+
+***
+
+### stack?
+
+> `optional` **stack**: `string`
+
+#### Inherited from
+
+`Error.stack`
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.es5.d.ts:1078
+
+***
+
+### prepareStackTrace()?
+
+> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
+
+Optional override for formatting stack traces
+
+#### Parameters
+
+β’ **err**: `Error`
+
+β’ **stackTraces**: `CallSite`[]
+
+#### Returns
+
+`any`
+
+#### See
+
+https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+
+#### Inherited from
+
+`Error.prepareStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:11
+
+***
+
+### stackTraceLimit
+
+> `static` **stackTraceLimit**: `number`
+
+#### Inherited from
+
+`Error.stackTraceLimit`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:13
+
+## Methods
+
+### captureStackTrace()
+
+> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
+
+Create .stack property on a target object
+
+#### Parameters
+
+β’ **targetObject**: `object`
+
+β’ **constructorOpt?**: `Function`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Error.captureStackTrace`
+
+#### Defined in
+
+node\_modules/@types/node/globals.d.ts:4
diff --git a/docs/api/namespaces/Utils/functions/base64ToU8.md b/docs/api/namespaces/Utils/functions/base64ToU8.md
new file mode 100644
index 000000000..e642c33a1
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/base64ToU8.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / base64ToU8
+
+# Function: base64ToU8()
+
+> **base64ToU8**(`base64`): `Uint8Array`
+
+## Parameters
+
+β’ **base64**: `string`
+
+## Returns
+
+`Uint8Array`
+
+## Defined in
+
+[src/utils/Utils.ts:236](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L236)
diff --git a/docs/api/namespaces/Utils/functions/concatMemos.md b/docs/api/namespaces/Utils/functions/concatMemos.md
new file mode 100644
index 000000000..151969593
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/concatMemos.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / concatMemos
+
+# Function: concatMemos()
+
+> **concatMemos**(...`iterables`): [`Memo`](../../Helpers/classes/Memo.md)
+
+## Parameters
+
+β’ ...**iterables**: (`undefined` \| [`Memo`](../../Helpers/classes/Memo.md))[]
+
+## Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+## Defined in
+
+[src/utils/Utils.ts:140](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L140)
diff --git a/docs/api/namespaces/Utils/functions/debugFetch.md b/docs/api/namespaces/Utils/functions/debugFetch.md
new file mode 100644
index 000000000..bc1d5763a
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/debugFetch.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / debugFetch
+
+# Function: debugFetch()
+
+> **debugFetch**(`input`, `init`?): `Promise`\<`Response`\>
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch)
+
+## Parameters
+
+β’ **input**: `URL` \| `RequestInfo`
+
+β’ **init?**: `RequestInit`
+
+## Returns
+
+`Promise`\<`Response`\>
+
+## Defined in
+
+[src/utils/Utils.ts:191](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L191)
diff --git a/docs/api/namespaces/Utils/functions/deepCompare.md b/docs/api/namespaces/Utils/functions/deepCompare.md
new file mode 100644
index 000000000..af672b01e
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/deepCompare.md
@@ -0,0 +1,22 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / deepCompare
+
+# Function: deepCompare()
+
+> **deepCompare**(`obj1`, `obj2`): `boolean`
+
+Compares given objects. May not work correctly for
+objects with methods.
+
+## Parameters
+
+β’ **obj1**: `any`
+
+β’ **obj2**: `any`
+
+## Returns
+
+`boolean`
+
+## Defined in
+
+[src/utils/Utils.ts:53](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L53)
diff --git a/docs/api/namespaces/Utils/functions/escapeStringRegexp.md b/docs/api/namespaces/Utils/functions/escapeStringRegexp.md
new file mode 100644
index 000000000..8ad0ec8c3
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/escapeStringRegexp.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / escapeStringRegexp
+
+# Function: escapeStringRegexp()
+
+> **escapeStringRegexp**(`input`): `string`
+
+## Parameters
+
+β’ **input**: `string`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/Utils.ts:76](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L76)
diff --git a/docs/api/namespaces/Utils/functions/findFunction.md b/docs/api/namespaces/Utils/functions/findFunction.md
new file mode 100644
index 000000000..ac7767bd3
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/findFunction.md
@@ -0,0 +1,30 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / findFunction
+
+# Function: findFunction()
+
+> **findFunction**(`source`, `args`): [`FindFunctionResult`](../type-aliases/FindFunctionResult.md) \| `undefined`
+
+Finds a function in a source string based on the provided search criteria.
+
+## Parameters
+
+β’ **source**: `string`
+
+β’ **args**: [`FindFunctionArgs`](../type-aliases/FindFunctionArgs.md)
+
+## Returns
+
+[`FindFunctionResult`](../type-aliases/FindFunctionResult.md) \| `undefined`
+
+## Example
+
+```ts
+const source = '(function() {var foo, bar; foo = function() { console.log("foo"); }; bar = function() { console.log("bar"); }; })();';
+const result = findFunction(source, { name: 'bar' });
+console.log(result);
+// Output: { start: 69, end: 110, name: 'bar', node: { ... }, result: 'bar = function() { console.log("bar"); };' }
+```
+
+## Defined in
+
+[src/utils/Utils.ts:288](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L288)
diff --git a/docs/api/namespaces/Utils/functions/generateRandomString.md b/docs/api/namespaces/Utils/functions/generateRandomString.md
new file mode 100644
index 000000000..dc180f389
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/generateRandomString.md
@@ -0,0 +1,19 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / generateRandomString
+
+# Function: generateRandomString()
+
+> **generateRandomString**(`length`): `string`
+
+Generates a random string with the given length.
+
+## Parameters
+
+β’ **length**: `number`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/Utils.ts:110](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L110)
diff --git a/docs/api/namespaces/Utils/functions/generateSidAuth.md b/docs/api/namespaces/Utils/functions/generateSidAuth.md
new file mode 100644
index 000000000..55e658a9f
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/generateSidAuth.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / generateSidAuth
+
+# Function: generateSidAuth()
+
+> **generateSidAuth**(`sid`): `Promise`\<`string`\>
+
+Generates an authentication token from a cookies' sid.
+
+## Parameters
+
+β’ **sid**: `string`
+
+Sid extracted from cookies
+
+## Returns
+
+`Promise`\<`string`\>
+
+## Defined in
+
+[src/utils/Utils.ts:96](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L96)
diff --git a/docs/api/namespaces/Utils/functions/getCookie.md b/docs/api/namespaces/Utils/functions/getCookie.md
new file mode 100644
index 000000000..2d3355313
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/getCookie.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / getCookie
+
+# Function: getCookie()
+
+> **getCookie**(`cookies`, `name`, `matchWholeName`): `string` \| `undefined`
+
+## Parameters
+
+β’ **cookies**: `string`
+
+β’ **name**: `string`
+
+β’ **matchWholeName**: `boolean` = `false`
+
+## Returns
+
+`string` \| `undefined`
+
+## Defined in
+
+[src/utils/Utils.ts:246](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L246)
diff --git a/docs/api/namespaces/Utils/functions/getRandomUserAgent.md b/docs/api/namespaces/Utils/functions/getRandomUserAgent.md
new file mode 100644
index 000000000..a7069ab2d
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/getRandomUserAgent.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / getRandomUserAgent
+
+# Function: getRandomUserAgent()
+
+> **getRandomUserAgent**(`type`): `string`
+
+Returns a random user agent.
+
+## Parameters
+
+β’ **type**: [`DeviceCategory`](../type-aliases/DeviceCategory.md)
+
+mobile | desktop
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/Utils.ts:86](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L86)
diff --git a/docs/api/namespaces/Utils/functions/getStringBetweenStrings.md b/docs/api/namespaces/Utils/functions/getStringBetweenStrings.md
new file mode 100644
index 000000000..a3a9f7bea
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/getStringBetweenStrings.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / getStringBetweenStrings
+
+# Function: getStringBetweenStrings()
+
+> **getStringBetweenStrings**(`data`, `start_string`, `end_string`): `string` \| `undefined`
+
+Finds a string between two delimiters.
+
+## Parameters
+
+β’ **data**: `string`
+
+the data.
+
+β’ **start\_string**: `string`
+
+start string.
+
+β’ **end\_string**: `string`
+
+end string.
+
+## Returns
+
+`string` \| `undefined`
+
+## Defined in
+
+[src/utils/Utils.ts:70](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L70)
diff --git a/docs/api/namespaces/Utils/functions/hasKeys.md b/docs/api/namespaces/Utils/functions/hasKeys.md
new file mode 100644
index 000000000..a7f987f56
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/hasKeys.md
@@ -0,0 +1,25 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / hasKeys
+
+# Function: hasKeys()
+
+> **hasKeys**\<`T`, `R`\>(`params`, ...`keys`): `params is Exclude & Required>`
+
+## Type Parameters
+
+β’ **T** *extends* `object`
+
+β’ **R** *extends* keyof `T`[]
+
+## Parameters
+
+β’ **params**: `T`
+
+β’ ...**keys**: `R`
+
+## Returns
+
+`params is Exclude & Required>`
+
+## Defined in
+
+[src/utils/Utils.ts:167](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L167)
diff --git a/docs/api/namespaces/Utils/functions/isTextRun.md b/docs/api/namespaces/Utils/functions/isTextRun.md
new file mode 100644
index 000000000..28532e298
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/isTextRun.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / isTextRun
+
+# Function: isTextRun()
+
+> **isTextRun**(`run`): `run is TextRun`
+
+## Parameters
+
+β’ **run**: [`EmojiRun`](../../Misc/classes/EmojiRun.md) \| [`TextRun`](../../Misc/classes/TextRun.md)
+
+## Returns
+
+`run is TextRun`
+
+## Defined in
+
+[src/utils/Utils.ts:242](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L242)
diff --git a/docs/api/namespaces/Utils/functions/streamToIterable.md b/docs/api/namespaces/Utils/functions/streamToIterable.md
new file mode 100644
index 000000000..73ec62101
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/streamToIterable.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / streamToIterable
+
+# Function: streamToIterable()
+
+> **streamToIterable**(`stream`): `AsyncGenerator`\<`Uint8Array`, `void`, `unknown`\>
+
+## Parameters
+
+β’ **stream**: `ReadableStream`\<`Uint8Array`\>
+
+## Returns
+
+`AsyncGenerator`\<`Uint8Array`, `void`, `unknown`\>
+
+## Defined in
+
+[src/utils/Utils.ts:175](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L175)
diff --git a/docs/api/namespaces/Utils/functions/throwIfMissing.md b/docs/api/namespaces/Utils/functions/throwIfMissing.md
new file mode 100644
index 000000000..69c736e23
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/throwIfMissing.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / throwIfMissing
+
+# Function: throwIfMissing()
+
+> **throwIfMissing**(`params`): `void`
+
+## Parameters
+
+β’ **params**: `object`
+
+## Returns
+
+`void`
+
+## Defined in
+
+[src/utils/Utils.ts:160](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L160)
diff --git a/docs/api/namespaces/Utils/functions/timeToSeconds.md b/docs/api/namespaces/Utils/functions/timeToSeconds.md
new file mode 100644
index 000000000..20a03754d
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/timeToSeconds.md
@@ -0,0 +1,21 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / timeToSeconds
+
+# Function: timeToSeconds()
+
+> **timeToSeconds**(`time`): `number`
+
+Converts time (h:m:s) to seconds.
+
+## Parameters
+
+β’ **time**: `string`
+
+## Returns
+
+`number`
+
+seconds
+
+## Defined in
+
+[src/utils/Utils.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L126)
diff --git a/docs/api/namespaces/Utils/functions/u8ToBase64.md b/docs/api/namespaces/Utils/functions/u8ToBase64.md
new file mode 100644
index 000000000..eacc692d0
--- /dev/null
+++ b/docs/api/namespaces/Utils/functions/u8ToBase64.md
@@ -0,0 +1,17 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / u8ToBase64
+
+# Function: u8ToBase64()
+
+> **u8ToBase64**(`u8`): `string`
+
+## Parameters
+
+β’ **u8**: `Uint8Array`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[src/utils/Utils.ts:232](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L232)
diff --git a/docs/api/namespaces/Utils/type-aliases/DeviceCategory.md b/docs/api/namespaces/Utils/type-aliases/DeviceCategory.md
new file mode 100644
index 000000000..db7e35f9a
--- /dev/null
+++ b/docs/api/namespaces/Utils/type-aliases/DeviceCategory.md
@@ -0,0 +1,9 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / DeviceCategory
+
+# Type Alias: DeviceCategory
+
+> **DeviceCategory**: `"mobile"` \| `"desktop"`
+
+## Defined in
+
+[src/utils/Utils.ts:80](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L80)
diff --git a/docs/api/namespaces/Utils/type-aliases/FindFunctionArgs.md b/docs/api/namespaces/Utils/type-aliases/FindFunctionArgs.md
new file mode 100644
index 000000000..dd5abf796
--- /dev/null
+++ b/docs/api/namespaces/Utils/type-aliases/FindFunctionArgs.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / FindFunctionArgs
+
+# Type Alias: FindFunctionArgs
+
+> **FindFunctionArgs**: `object`
+
+## Type declaration
+
+### includes?
+
+> `optional` **includes**: `string`
+
+A string that must be included in the function's code for it to be considered.
+
+### name?
+
+> `optional` **name**: `string`
+
+The name of the function.
+
+### regexp?
+
+> `optional` **regexp**: `RegExp`
+
+A regular expression that the function's code must match.
+
+## Defined in
+
+[src/utils/Utils.ts:252](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L252)
diff --git a/docs/api/namespaces/Utils/type-aliases/FindFunctionResult.md b/docs/api/namespaces/Utils/type-aliases/FindFunctionResult.md
new file mode 100644
index 000000000..4fa410121
--- /dev/null
+++ b/docs/api/namespaces/Utils/type-aliases/FindFunctionResult.md
@@ -0,0 +1,31 @@
+[youtubei.js](../../../README.md) / [Utils](../README.md) / FindFunctionResult
+
+# Type Alias: FindFunctionResult
+
+> **FindFunctionResult**: `object`
+
+## Type declaration
+
+### end
+
+> **end**: `number`
+
+### name
+
+> **name**: `string`
+
+### node
+
+> **node**: `Record`\<`string`, `any`\>
+
+### result
+
+> **result**: `string`
+
+### start
+
+> **start**: `number`
+
+## Defined in
+
+[src/utils/Utils.ts:269](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/Utils.ts#L269)
diff --git a/docs/api/namespaces/YT/README.md b/docs/api/namespaces/YT/README.md
new file mode 100644
index 000000000..1fd94595e
--- /dev/null
+++ b/docs/api/namespaces/YT/README.md
@@ -0,0 +1,29 @@
+[youtubei.js](../../README.md) / YT
+
+# YT
+
+## Index
+
+### Classes
+
+- [AccountInfo](classes/AccountInfo.md)
+- [Analytics](classes/Analytics.md)
+- [Channel](classes/Channel.md)
+- [ChannelListContinuation](classes/ChannelListContinuation.md)
+- [Comments](classes/Comments.md)
+- [FilteredChannelList](classes/FilteredChannelList.md)
+- [Guide](classes/Guide.md)
+- [HashtagFeed](classes/HashtagFeed.md)
+- [History](classes/History.md)
+- [HomeFeed](classes/HomeFeed.md)
+- [ItemMenu](classes/ItemMenu.md)
+- [Library](classes/Library.md)
+- [LiveChat](classes/LiveChat.md)
+- [NotificationsMenu](classes/NotificationsMenu.md)
+- [Playlist](classes/Playlist.md)
+- [Search](classes/Search.md)
+- [Settings](classes/Settings.md)
+- [SmoothedQueue](classes/SmoothedQueue.md)
+- [TimeWatched](classes/TimeWatched.md)
+- [TranscriptInfo](classes/TranscriptInfo.md)
+- [VideoInfo](classes/VideoInfo.md)
diff --git a/docs/api/namespaces/YT/classes/AccountInfo.md b/docs/api/namespaces/YT/classes/AccountInfo.md
new file mode 100644
index 000000000..cd733748c
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/AccountInfo.md
@@ -0,0 +1,55 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / AccountInfo
+
+# Class: AccountInfo
+
+## Constructors
+
+### new AccountInfo()
+
+> **new AccountInfo**(`response`): [`AccountInfo`](AccountInfo.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`AccountInfo`](AccountInfo.md)
+
+#### Defined in
+
+[src/parser/youtube/AccountInfo.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/AccountInfo.ts#L16)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`AccountItemSection`](../../YTNodes/classes/AccountItemSection.md)
+
+#### Defined in
+
+[src/parser/youtube/AccountInfo.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/AccountInfo.ts#L13)
+
+***
+
+### footers
+
+> **footers**: `null` \| [`AccountChannel`](../../YTNodes/classes/AccountChannel.md)
+
+#### Defined in
+
+[src/parser/youtube/AccountInfo.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/AccountInfo.ts#L14)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+#### Returns
+
+[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/AccountInfo.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/AccountInfo.ts#L31)
diff --git a/docs/api/namespaces/YT/classes/Analytics.md b/docs/api/namespaces/YT/classes/Analytics.md
new file mode 100644
index 000000000..7fd75b02b
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Analytics.md
@@ -0,0 +1,45 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Analytics
+
+# Class: Analytics
+
+## Constructors
+
+### new Analytics()
+
+> **new Analytics**(`response`): [`Analytics`](Analytics.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`Analytics`](Analytics.md)
+
+#### Defined in
+
+[src/parser/youtube/Analytics.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Analytics.ts#L10)
+
+## Properties
+
+### sections
+
+> **sections**: `undefined` \| [`YTNode`](../../Helpers/classes/YTNode.md)[]
+
+#### Defined in
+
+[src/parser/youtube/Analytics.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Analytics.ts#L8)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/Analytics.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Analytics.ts#L15)
diff --git a/docs/api/namespaces/YT/classes/Channel.md b/docs/api/namespaces/YT/classes/Channel.md
new file mode 100644
index 000000000..255131978
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Channel.md
@@ -0,0 +1,1036 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Channel
+
+# Class: Channel
+
+## Extends
+
+- [`TabbedFeed`](../../Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new Channel()
+
+> **new Channel**(`actions`, `data`, `already_parsed`): [`Channel`](Channel.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`Channel`](Channel.md)
+
+#### Overrides
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`constructor`](../../Mixins/classes/TabbedFeed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L36)
+
+## Properties
+
+### current\_tab?
+
+> `optional` **current\_tab**: [`Tab`](../../YTNodes/classes/Tab.md) \| [`ExpandableTab`](../../YTNodes/classes/ExpandableTab.md)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L34)
+
+***
+
+### header?
+
+> `optional` **header**: [`C4TabbedHeader`](../../YTNodes/classes/C4TabbedHeader.md) \| [`CarouselHeader`](../../YTNodes/classes/CarouselHeader.md) \| [`InteractiveTabbedHeader`](../../YTNodes/classes/InteractiveTabbedHeader.md) \| [`PageHeader`](../../YTNodes/classes/PageHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L31)
+
+***
+
+### metadata
+
+> **metadata**: `object`
+
+#### android\_appindexing\_link?
+
+> `optional` **android\_appindexing\_link**: `string`
+
+#### android\_deep\_link?
+
+> `optional` **android\_deep\_link**: `string`
+
+#### android\_package?
+
+> `optional` **android\_package**: `string`
+
+#### app\_name?
+
+> `optional` **app\_name**: `string`
+
+#### available\_countries?
+
+> `optional` **available\_countries**: `string`[]
+
+#### avatar?
+
+> `optional` **avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### description?
+
+> `optional` **description**: `string`
+
+#### external\_id?
+
+> `optional` **external\_id**: `string`
+
+#### ios\_app\_arguments?
+
+> `optional` **ios\_app\_arguments**: `string`
+
+#### ios\_app\_store\_id?
+
+> `optional` **ios\_app\_store\_id**: `string`
+
+#### ios\_appindexing\_link?
+
+> `optional` **ios\_appindexing\_link**: `string`
+
+#### is\_family\_safe?
+
+> `optional` **is\_family\_safe**: `boolean`
+
+#### is\_unlisted?
+
+> `optional` **is\_unlisted**: `boolean`
+
+#### keywords?
+
+> `optional` **keywords**: `string`[]
+
+#### music\_artist\_name?
+
+> `optional` **music\_artist\_name**: `string`
+
+#### noindex?
+
+> `optional` **noindex**: `string`
+
+#### og\_type?
+
+> `optional` **og\_type**: `string`
+
+#### rss\_url?
+
+> `optional` **rss\_url**: `string`
+
+#### schema\_dot\_org\_type?
+
+> `optional` **schema\_dot\_org\_type**: `string`
+
+#### site\_name?
+
+> `optional` **site\_name**: `string`
+
+#### tags?
+
+> `optional` **tags**: `string`[]
+
+#### thumbnail?
+
+> `optional` **thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### title?
+
+> `optional` **title**: `string`
+
+#### twitter\_card\_type?
+
+> `optional` **twitter\_card\_type**: `string`
+
+#### twitter\_site\_handle?
+
+> `optional` **twitter\_site\_handle**: `string`
+
+#### type?
+
+> `readonly` `optional` **type**: `string`
+
+#### url?
+
+> `optional` **url**: `string`
+
+#### url\_applinks\_android?
+
+> `optional` **url\_applinks\_android**: `string`
+
+#### url\_applinks\_ios?
+
+> `optional` **url\_applinks\_ios**: `string`
+
+#### url\_applinks\_web?
+
+> `optional` **url\_applinks\_web**: `string`
+
+#### url\_canonical?
+
+> `optional` **url\_canonical**: `string`
+
+#### url\_twitter\_android?
+
+> `optional` **url\_twitter\_android**: `string`
+
+#### url\_twitter\_ios?
+
+> `optional` **url\_twitter\_ios**: `string`
+
+#### vanity\_channel\_url?
+
+> `optional` **vanity\_channel\_url**: `string`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L32)
+
+***
+
+### subscribe\_button?
+
+> `optional` **subscribe\_button**: [`SubscribeButton`](../../YTNodes/classes/SubscribeButton.md)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L33)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`actions`](../../Mixins/classes/TabbedFeed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`channels`](../../Mixins/classes/TabbedFeed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### content\_type\_filters
+
+> `get` **content\_type\_filters**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:144](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L144)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:135](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L135)
+
+***
+
+### has\_about
+
+> `get` **has\_about**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:273](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L273)
+
+***
+
+### has\_community
+
+> `get` **has\_community**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:269](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L269)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`has_continuation`](../../Mixins/classes/TabbedFeed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### has\_home
+
+> `get` **has\_home**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:241](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L241)
+
+***
+
+### has\_live\_streams
+
+> `get` **has\_live\_streams**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:253](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L253)
+
+***
+
+### has\_playlists
+
+> `get` **has\_playlists**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:265](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L265)
+
+***
+
+### has\_podcasts
+
+> `get` **has\_podcasts**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:261](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L261)
+
+***
+
+### has\_releases
+
+> `get` **has\_releases**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:257](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L257)
+
+***
+
+### has\_search
+
+> `get` **has\_search**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:280](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L280)
+
+***
+
+### has\_shorts
+
+> `get` **has\_shorts**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:249](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L249)
+
+***
+
+### has\_videos
+
+> `get` **has\_videos**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:245](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L245)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`memo`](../../Mixins/classes/TabbedFeed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`page`](../../Mixins/classes/TabbedFeed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`page_contents`](../../Mixins/classes/TabbedFeed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`playlists`](../../Mixins/classes/TabbedFeed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`posts`](../../Mixins/classes/TabbedFeed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`secondary_contents`](../../Mixins/classes/TabbedFeed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`shelves`](../../Mixins/classes/TabbedFeed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### sort\_filters
+
+> `get` **sort\_filters**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:139](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L139)
+
+***
+
+### tabs
+
+> `get` **tabs**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`tabs`](../../Mixins/classes/TabbedFeed.md#tabs)
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L19)
+
+***
+
+### title
+
+> `get` **title**(): `undefined` \| `string`
+
+#### Returns
+
+`undefined` \| `string`
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`title`](../../Mixins/classes/TabbedFeed.md#title)
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L55)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`videos`](../../Mixins/classes/TabbedFeed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### applyContentTypeFilter()
+
+> **applyContentTypeFilter**(`content_type_filter`): `Promise`\<[`Channel`](Channel.md)\>
+
+Applies given content type filter to the list. Use [content_type_filters](Channel.md#content_type_filters) to get available filters.
+
+#### Parameters
+
+β’ **content\_type\_filter**: `string`
+
+The content type filter to apply
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:116](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L116)
+
+***
+
+### applyFilter()
+
+> **applyFilter**(`filter`): `Promise`\<[`FilteredChannelList`](FilteredChannelList.md)\>
+
+Applies given filter to the list. Use [filters](Channel.md#filters) to get available filters.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+The filter to apply
+
+#### Returns
+
+`Promise`\<[`FilteredChannelList`](FilteredChannelList.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:65](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L65)
+
+***
+
+### applySort()
+
+> **applySort**(`sort`): `Promise`\<[`Channel`](Channel.md)\>
+
+Applies given sort filter to the list. Use [sort_filters](Channel.md#sort_filters) to get available filters.
+
+#### Parameters
+
+β’ **sort**: `string`
+
+The sort filter to apply
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L93)
+
+***
+
+### getAbout()
+
+> **getAbout**(): `Promise`\<[`ChannelAboutFullMetadata`](../../YTNodes/classes/ChannelAboutFullMetadata.md) \| [`AboutChannel`](../../YTNodes/classes/AboutChannel.md)\>
+
+Retrieves the about page.
+Note that this does not return a new [Channel](Channel.md) object.
+
+#### Returns
+
+`Promise`\<[`ChannelAboutFullMetadata`](../../YTNodes/classes/ChannelAboutFullMetadata.md) \| [`AboutChannel`](../../YTNodes/classes/AboutChannel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:193](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L193)
+
+***
+
+### getCommunity()
+
+> **getCommunity**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:184](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L184)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`ChannelListContinuation`](ChannelListContinuation.md)\>
+
+Retrives list continuation.
+
+#### Returns
+
+`Promise`\<[`ChannelListContinuation`](ChannelListContinuation.md)\>
+
+#### Overrides
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getContinuation`](../../Mixins/classes/TabbedFeed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:287](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L287)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getContinuationData`](../../Mixins/classes/TabbedFeed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getHome()
+
+> **getHome**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:149](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L149)
+
+***
+
+### getLiveStreams()
+
+> **getLiveStreams**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:164](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L164)
+
+***
+
+### getPlaylists()
+
+> **getPlaylists**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:179](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L179)
+
+***
+
+### getPodcasts()
+
+> **getPodcasts**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:174](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L174)
+
+***
+
+### getReleases()
+
+> **getReleases**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:169](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L169)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getShelf`](../../Mixins/classes/TabbedFeed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getShorts()
+
+> **getShorts**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:159](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L159)
+
+***
+
+### getTabByName()
+
+> **getTabByName**(`title`): `Promise`\<[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`Promise`\<[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getTabByName`](../../Mixins/classes/TabbedFeed.md#gettabbyname)
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L23)
+
+***
+
+### getTabByURL()
+
+> **getTabByURL**(`url`): `Promise`\<[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Parameters
+
+β’ **url**: `string`
+
+#### Returns
+
+`Promise`\<[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getTabByURL`](../../Mixins/classes/TabbedFeed.md#gettabbyurl)
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L37)
+
+***
+
+### getVideos()
+
+> **getVideos**(): `Promise`\<[`Channel`](Channel.md)\>
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L154)
+
+***
+
+### hasTabWithURL()
+
+> **hasTabWithURL**(`url`): `boolean`
+
+#### Parameters
+
+β’ **url**: `string`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`hasTabWithURL`](../../Mixins/classes/TabbedFeed.md#hastabwithurl)
+
+#### Defined in
+
+[src/core/mixins/TabbedFeed.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/TabbedFeed.ts#L51)
+
+***
+
+### search()
+
+> **search**(`query`): `Promise`\<[`Channel`](Channel.md)\>
+
+Searches within the channel.
+
+#### Parameters
+
+β’ **query**: `string`
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:230](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L230)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/TabbedFeed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`TabbedFeed`](../../Mixins/classes/TabbedFeed.md).[`getVideosFromMemo`](../../Mixins/classes/TabbedFeed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/ChannelListContinuation.md b/docs/api/namespaces/YT/classes/ChannelListContinuation.md
new file mode 100644
index 000000000..2529ea9ad
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/ChannelListContinuation.md
@@ -0,0 +1,371 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / ChannelListContinuation
+
+# Class: ChannelListContinuation
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new ChannelListContinuation()
+
+> **new ChannelListContinuation**(`actions`, `data`, `already_parsed`): [`ChannelListContinuation`](ChannelListContinuation.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`ChannelListContinuation`](ChannelListContinuation.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:298](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L298)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:296](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L296)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`ChannelListContinuation`](ChannelListContinuation.md)\>
+
+Retrieves list continuation.
+
+#### Returns
+
+`Promise`\<[`ChannelListContinuation`](ChannelListContinuation.md)\>
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:308](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L308)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/Comments.md b/docs/api/namespaces/YT/classes/Comments.md
new file mode 100644
index 000000000..1acdb782e
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Comments.md
@@ -0,0 +1,133 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Comments
+
+# Class: Comments
+
+## Constructors
+
+### new Comments()
+
+> **new Comments**(`actions`, `data`, `already_parsed`): [`Comments`](Comments.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: `any`
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`Comments`](Comments.md)
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L22)
+
+## Properties
+
+### contents
+
+> **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`CommentThread`](../../YTNodes/classes/CommentThread.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L20)
+
+***
+
+### header?
+
+> `optional` **header**: [`CommentsHeader`](../../YTNodes/classes/CommentsHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L19)
+
+## Accessors
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:117](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L117)
+
+***
+
+### page
+
+> `get` **page**(): [`INextResponse`](../../APIResponseTypes/type-aliases/INextResponse.md)
+
+#### Returns
+
+[`INextResponse`](../../APIResponseTypes/type-aliases/INextResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:121](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L121)
+
+## Methods
+
+### applySort()
+
+> **applySort**(`sort`): `Promise`\<[`Comments`](Comments.md)\>
+
+Applies given sort option to the comments.
+
+#### Parameters
+
+β’ **sort**: `"TOP_COMMENTS"` \| `"NEWEST_FIRST"`
+
+Sort type.
+
+#### Returns
+
+`Promise`\<[`Comments`](Comments.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L51)
+
+***
+
+### createComment()
+
+> **createComment**(`text`): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Creates a top-level comment.
+
+#### Parameters
+
+β’ **text**: `string`
+
+Comment text.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:78](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L78)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Comments`](Comments.md)\>
+
+Retrieves next batch of comments.
+
+#### Returns
+
+`Promise`\<[`Comments`](Comments.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Comments.ts:98](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Comments.ts#L98)
diff --git a/docs/api/namespaces/YT/classes/FilteredChannelList.md b/docs/api/namespaces/YT/classes/FilteredChannelList.md
new file mode 100644
index 000000000..cdd2fadd6
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/FilteredChannelList.md
@@ -0,0 +1,467 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / FilteredChannelList
+
+# Class: FilteredChannelList
+
+## Extends
+
+- [`FilterableFeed`](../../Mixins/classes/FilterableFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new FilteredChannelList()
+
+> **new FilteredChannelList**(`actions`, `data`, `already_parsed`): [`FilteredChannelList`](FilteredChannelList.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`FilteredChannelList`](FilteredChannelList.md)
+
+#### Overrides
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`constructor`](../../Mixins/classes/FilterableFeed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:320](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L320)
+
+## Properties
+
+### applied\_filter?
+
+> `optional` **applied\_filter**: [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:317](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L317)
+
+***
+
+### contents?
+
+> `optional` **contents**: [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:318](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L318)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`actions`](../../Mixins/classes/FilterableFeed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`channels`](../../Mixins/classes/FilterableFeed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### filter\_chips
+
+> `get` **filter\_chips**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+Returns the filter chips.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`filter_chips`](../../Mixins/classes/FilterableFeed.md#filter_chips)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L20)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+Returns available filters.
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`filters`](../../Mixins/classes/FilterableFeed.md#filters)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L38)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`has_continuation`](../../Mixins/classes/FilterableFeed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`memo`](../../Mixins/classes/FilterableFeed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`page`](../../Mixins/classes/FilterableFeed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`page_contents`](../../Mixins/classes/FilterableFeed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`playlists`](../../Mixins/classes/FilterableFeed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`posts`](../../Mixins/classes/FilterableFeed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`secondary_contents`](../../Mixins/classes/FilterableFeed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`shelves`](../../Mixins/classes/FilterableFeed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`videos`](../../Mixins/classes/FilterableFeed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### applyFilter()
+
+> **applyFilter**(`filter`): `Promise`\<[`FilteredChannelList`](FilteredChannelList.md)\>
+
+Applies given filter to the list.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+The filter to apply
+
+#### Returns
+
+`Promise`\<[`FilteredChannelList`](FilteredChannelList.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:340](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L340)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`FilteredChannelList`](FilteredChannelList.md)\>
+
+Retrieves list continuation.
+
+#### Returns
+
+`Promise`\<[`FilteredChannelList`](FilteredChannelList.md)\>
+
+#### Overrides
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getContinuation`](../../Mixins/classes/FilterableFeed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/Channel.ts:348](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Channel.ts#L348)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getContinuationData`](../../Mixins/classes/FilterableFeed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getFilteredFeed()
+
+> **getFilteredFeed**(`filter`): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Applies given filter and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getFilteredFeed`](../../Mixins/classes/FilterableFeed.md#getfilteredfeed)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L45)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getShelf`](../../Mixins/classes/FilterableFeed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/FilterableFeed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getVideosFromMemo`](../../Mixins/classes/FilterableFeed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/Guide.md b/docs/api/namespaces/YT/classes/Guide.md
new file mode 100644
index 000000000..fa93eb902
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Guide.md
@@ -0,0 +1,45 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Guide
+
+# Class: Guide
+
+## Constructors
+
+### new Guide()
+
+> **new Guide**(`data`): [`Guide`](Guide.md)
+
+#### Parameters
+
+β’ **data**: [`IRawResponse`](../../APIResponseTypes/interfaces/IRawResponse.md)
+
+#### Returns
+
+[`Guide`](Guide.md)
+
+#### Defined in
+
+[src/parser/youtube/Guide.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Guide.ts#L13)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GuideSection`](../../YTNodes/classes/GuideSection.md) \| [`GuideSubscriptionsSection`](../../YTNodes/classes/GuideSubscriptionsSection.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Guide.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Guide.ts#L11)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IGuideResponse`](../../APIResponseTypes/type-aliases/IGuideResponse.md)
+
+#### Returns
+
+[`IGuideResponse`](../../APIResponseTypes/type-aliases/IGuideResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/Guide.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Guide.ts#L19)
diff --git a/docs/api/namespaces/YT/classes/HashtagFeed.md b/docs/api/namespaces/YT/classes/HashtagFeed.md
new file mode 100644
index 000000000..5c6e8710e
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/HashtagFeed.md
@@ -0,0 +1,465 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / HashtagFeed
+
+# Class: HashtagFeed
+
+## Extends
+
+- [`FilterableFeed`](../../Mixins/classes/FilterableFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new HashtagFeed()
+
+> **new HashtagFeed**(`actions`, `response`): [`HashtagFeed`](HashtagFeed.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`HashtagFeed`](HashtagFeed.md)
+
+#### Overrides
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`constructor`](../../Mixins/classes/FilterableFeed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/HashtagFeed.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HashtagFeed.ts#L16)
+
+## Properties
+
+### contents
+
+> **contents**: [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Defined in
+
+[src/parser/youtube/HashtagFeed.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HashtagFeed.ts#L14)
+
+***
+
+### header?
+
+> `optional` **header**: [`PageHeader`](../../YTNodes/classes/PageHeader.md) \| [`HashtagHeader`](../../YTNodes/classes/HashtagHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/HashtagFeed.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HashtagFeed.ts#L13)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`actions`](../../Mixins/classes/FilterableFeed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`channels`](../../Mixins/classes/FilterableFeed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### filter\_chips
+
+> `get` **filter\_chips**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+Returns the filter chips.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`filter_chips`](../../Mixins/classes/FilterableFeed.md#filter_chips)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L20)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+Returns available filters.
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`filters`](../../Mixins/classes/FilterableFeed.md#filters)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L38)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`has_continuation`](../../Mixins/classes/FilterableFeed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`memo`](../../Mixins/classes/FilterableFeed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`page`](../../Mixins/classes/FilterableFeed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`page_contents`](../../Mixins/classes/FilterableFeed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`playlists`](../../Mixins/classes/FilterableFeed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`posts`](../../Mixins/classes/FilterableFeed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`secondary_contents`](../../Mixins/classes/FilterableFeed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`shelves`](../../Mixins/classes/FilterableFeed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`videos`](../../Mixins/classes/FilterableFeed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### applyFilter()
+
+> **applyFilter**(`filter`): `Promise`\<[`HashtagFeed`](HashtagFeed.md)\>
+
+Applies given filter and returns a new [HashtagFeed](HashtagFeed.md) object. Use [HashtagFeed.filters](FilteredChannelList.md#filters) to get available filters.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+Filter to apply.
+
+#### Returns
+
+`Promise`\<[`HashtagFeed`](HashtagFeed.md)\>
+
+#### Defined in
+
+[src/parser/youtube/HashtagFeed.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HashtagFeed.ts#L38)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Retrieves next batch of contents and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getContinuation`](../../Mixins/classes/FilterableFeed.md#getcontinuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getContinuationData`](../../Mixins/classes/FilterableFeed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getFilteredFeed()
+
+> **getFilteredFeed**(`filter`): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Applies given filter and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getFilteredFeed`](../../Mixins/classes/FilterableFeed.md#getfilteredfeed)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L45)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getShelf`](../../Mixins/classes/FilterableFeed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/FilterableFeed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getVideosFromMemo`](../../Mixins/classes/FilterableFeed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/History.md b/docs/api/namespaces/YT/classes/History.md
new file mode 100644
index 000000000..44d0cac62
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/History.md
@@ -0,0 +1,381 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / History
+
+# Class: History
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new History()
+
+> **new History**(`actions`, `data`, `already_parsed`): [`History`](History.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`History`](History.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/History.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/History.ts#L13)
+
+## Properties
+
+### feed\_actions
+
+> **feed\_actions**: [`BrowseFeedActions`](../../YTNodes/classes/BrowseFeedActions.md)
+
+#### Defined in
+
+[src/parser/youtube/History.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/History.ts#L11)
+
+***
+
+### sections
+
+> **sections**: [`ItemSection`](../../YTNodes/classes/ItemSection.md)[]
+
+#### Defined in
+
+[src/parser/youtube/History.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/History.ts#L10)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`History`](History.md)\>
+
+Retrieves next batch of contents.
+
+#### Returns
+
+`Promise`\<[`History`](History.md)\>
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/History.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/History.ts#L22)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/HomeFeed.md b/docs/api/namespaces/YT/classes/HomeFeed.md
new file mode 100644
index 000000000..c1667893d
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/HomeFeed.md
@@ -0,0 +1,467 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / HomeFeed
+
+# Class: HomeFeed
+
+## Extends
+
+- [`FilterableFeed`](../../Mixins/classes/FilterableFeed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new HomeFeed()
+
+> **new HomeFeed**(`actions`, `data`, `already_parsed`): [`HomeFeed`](HomeFeed.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`HomeFeed`](HomeFeed.md)
+
+#### Overrides
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`constructor`](../../Mixins/classes/FilterableFeed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/HomeFeed.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HomeFeed.ts#L14)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`AppendContinuationItemsAction`](../../YTNodes/classes/AppendContinuationItemsAction.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Defined in
+
+[src/parser/youtube/HomeFeed.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HomeFeed.ts#L11)
+
+***
+
+### header?
+
+> `optional` **header**: [`FeedTabbedHeader`](../../YTNodes/classes/FeedTabbedHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/HomeFeed.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HomeFeed.ts#L12)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`actions`](../../Mixins/classes/FilterableFeed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`channels`](../../Mixins/classes/FilterableFeed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### filter\_chips
+
+> `get` **filter\_chips**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+Returns the filter chips.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`filter_chips`](../../Mixins/classes/FilterableFeed.md#filter_chips)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L20)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+Returns available filters.
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`filters`](../../Mixins/classes/FilterableFeed.md#filters)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L38)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`has_continuation`](../../Mixins/classes/FilterableFeed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`memo`](../../Mixins/classes/FilterableFeed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`page`](../../Mixins/classes/FilterableFeed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`page_contents`](../../Mixins/classes/FilterableFeed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`playlists`](../../Mixins/classes/FilterableFeed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`posts`](../../Mixins/classes/FilterableFeed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`secondary_contents`](../../Mixins/classes/FilterableFeed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`shelves`](../../Mixins/classes/FilterableFeed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`videos`](../../Mixins/classes/FilterableFeed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### applyFilter()
+
+> **applyFilter**(`filter`): `Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+Applies given filter to the feed. Use [filters](FilteredChannelList.md#filters) to get available filters.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+Filter to apply.
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+#### Defined in
+
+[src/parser/youtube/HomeFeed.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HomeFeed.ts#L24)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+Retrieves next batch of contents.
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+#### Overrides
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getContinuation`](../../Mixins/classes/FilterableFeed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/HomeFeed.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/HomeFeed.ts#L32)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getContinuationData`](../../Mixins/classes/FilterableFeed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getFilteredFeed()
+
+> **getFilteredFeed**(`filter`): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Applies given filter and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getFilteredFeed`](../../Mixins/classes/FilterableFeed.md#getfilteredfeed)
+
+#### Defined in
+
+[src/core/mixins/FilterableFeed.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/FilterableFeed.ts#L45)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getShelf`](../../Mixins/classes/FilterableFeed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/FilterableFeed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`FilterableFeed`](../../Mixins/classes/FilterableFeed.md).[`getVideosFromMemo`](../../Mixins/classes/FilterableFeed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/ItemMenu.md b/docs/api/namespaces/YT/classes/ItemMenu.md
new file mode 100644
index 000000000..d67be37d8
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/ItemMenu.md
@@ -0,0 +1,87 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / ItemMenu
+
+# Class: ItemMenu
+
+## Constructors
+
+### new ItemMenu()
+
+> **new ItemMenu**(`data`, `actions`): [`ItemMenu`](ItemMenu.md)
+
+#### Parameters
+
+β’ **data**: [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`ItemMenu`](ItemMenu.md)
+
+#### Defined in
+
+[src/parser/youtube/ItemMenu.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/ItemMenu.ts#L16)
+
+## Methods
+
+### items()
+
+> **items**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/youtube/ItemMenu.ts:61](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/ItemMenu.ts#L61)
+
+***
+
+### page()
+
+> **page**(): [`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+#### Returns
+
+[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/ItemMenu.ts:65](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/ItemMenu.ts#L65)
+
+***
+
+### selectItem()
+
+#### selectItem(icon_type)
+
+> **selectItem**(`icon_type`): `Promise`\<[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)\>
+
+##### Parameters
+
+β’ **icon\_type**: `string`
+
+##### Returns
+
+`Promise`\<[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)\>
+
+##### Defined in
+
+[src/parser/youtube/ItemMenu.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/ItemMenu.ts#L28)
+
+#### selectItem(button)
+
+> **selectItem**(`button`): `Promise`\<[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)\>
+
+##### Parameters
+
+β’ **button**: [`Button`](../../YTNodes/classes/Button.md)
+
+##### Returns
+
+`Promise`\<[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)\>
+
+##### Defined in
+
+[src/parser/youtube/ItemMenu.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/ItemMenu.ts#L29)
diff --git a/docs/api/namespaces/YT/classes/Library.md b/docs/api/namespaces/YT/classes/Library.md
new file mode 100644
index 000000000..958c5f485
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Library.md
@@ -0,0 +1,449 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Library
+
+# Class: Library
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new Library()
+
+> **new Library**(`actions`, `data`): [`Library`](Library.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`Library`](Library.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L17)
+
+## Properties
+
+### header
+
+> **header**: `null` \| [`PageHeader`](../../YTNodes/classes/PageHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L14)
+
+***
+
+### sections
+
+> **sections**: `object`[]
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L15)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### clips
+
+> `get` **clips**(): `undefined` \| `object`
+
+#### Returns
+
+`undefined` \| `object`
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:75](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L75)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### history
+
+> `get` **history**(): `undefined` \| `object`
+
+#### Returns
+
+`undefined` \| `object`
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:59](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L59)
+
+***
+
+### liked\_videos
+
+> `get` **liked\_videos**(): `undefined` \| `object`
+
+#### Returns
+
+`undefined` \| `object`
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:67](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L67)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### playlists\_section
+
+> `get` **playlists\_section**(): `undefined` \| `object`
+
+#### Returns
+
+`undefined` \| `object`
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:71](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L71)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+***
+
+### watch\_later
+
+> `get` **watch\_later**(): `undefined` \| `object`
+
+#### Returns
+
+`undefined` \| `object`
+
+#### Defined in
+
+[src/parser/youtube/Library.ts:63](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Library.ts#L63)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Retrieves next batch of contents and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/LiveChat.md b/docs/api/namespaces/YT/classes/LiveChat.md
new file mode 100644
index 000000000..1d1ecf976
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/LiveChat.md
@@ -0,0 +1,565 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / LiveChat
+
+# Class: LiveChat
+
+## Extends
+
+- [`EventEmitter`](../../../classes/EventEmitter.md)
+
+## Constructors
+
+### new LiveChat()
+
+> **new LiveChat**(`video_info`): [`LiveChat`](LiveChat.md)
+
+#### Parameters
+
+β’ **video\_info**: [`VideoInfo`](VideoInfo.md)
+
+#### Returns
+
+[`LiveChat`](LiveChat.md)
+
+#### Overrides
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`constructor`](../../../classes/EventEmitter.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:71](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L71)
+
+## Properties
+
+### initial\_info?
+
+> `optional` **initial\_info**: [`LiveChatContinuation`](../../../classes/LiveChatContinuation.md)
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:65](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L65)
+
+***
+
+### is\_replay
+
+> **is\_replay**: `boolean` = `false`
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:69](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L69)
+
+***
+
+### metadata?
+
+> `optional` **metadata**: `LiveMetadata`
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:66](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L66)
+
+***
+
+### running
+
+> **running**: `boolean` = `false`
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:68](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L68)
+
+***
+
+### smoothed\_queue
+
+> **smoothed\_queue**: [`SmoothedQueue`](SmoothedQueue.md)
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:56](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L56)
+
+## Methods
+
+### addEventListener()
+
+> **addEventListener**(`type`, `callback`, `options`?): `void`
+
+Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.
+
+The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.
+
+When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.
+
+When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in Β§ 2.8 Observing event listeners.
+
+When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.
+
+If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.
+
+The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **callback**: `null` \| `EventListenerOrEventListenerObject`
+
+β’ **options?**: `boolean` \| `AddEventListenerOptions`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`addEventListener`](../../../classes/EventEmitter.md#addeventlistener)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8256
+
+***
+
+### applyFilter()
+
+> **applyFilter**(`filter`): `void`
+
+Applies given filter to the live chat.
+
+#### Parameters
+
+β’ **filter**: `"TOP_CHAT"` \| `"LIVE_CHAT"`
+
+Filter to apply.
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:285](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L285)
+
+***
+
+### dispatchEvent()
+
+> **dispatchEvent**(`event`): `boolean`
+
+Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
+
+#### Parameters
+
+β’ **event**: `Event`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`dispatchEvent`](../../../classes/EventEmitter.md#dispatchevent)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8262
+
+***
+
+### emit()
+
+> **emit**(`type`, ...`args`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ ...**args**: `any`[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`emit`](../../../classes/EventEmitter.md#emit)
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L10)
+
+***
+
+### getItemMenu()
+
+> **getItemMenu**(`item`): `Promise`\<[`ItemMenu`](ItemMenu.md)\>
+
+Retrieves given chat item's menu.
+
+#### Parameters
+
+β’ **item**: `ChatItemWithMenu`
+
+#### Returns
+
+`Promise`\<[`ItemMenu`](ItemMenu.md)\>
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:303](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L303)
+
+***
+
+### off()
+
+> **off**(`type`, `listener`): `void`
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **listener**
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`off`](../../../classes/EventEmitter.md#off)
+
+#### Defined in
+
+[src/utils/EventEmitterLike.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/utils/EventEmitterLike.ts#L40)
+
+***
+
+### on()
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`on`](../../../classes/EventEmitter.md#on)
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:106](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L106)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"chat-update"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:107](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L107)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"metadata-update"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:108](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L108)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:109](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L109)
+
+#### on(type, listener)
+
+> **on**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.on`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:110](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L110)
+
+***
+
+### once()
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`once`](../../../classes/EventEmitter.md#once)
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:115](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L115)
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"chat-update"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.once`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:116](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L116)
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"metadata-update"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.once`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:117](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L117)
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.once`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L118)
+
+#### once(type, listener)
+
+> **once**(`type`, `listener`): `void`
+
+##### Parameters
+
+β’ **type**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`void`
+
+##### Overrides
+
+`EventEmitter.once`
+
+##### Defined in
+
+[src/parser/youtube/LiveChat.ts:119](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L119)
+
+***
+
+### removeEventListener()
+
+> **removeEventListener**(`type`, `callback`, `options`?): `void`
+
+Removes the event listener in target's event listener list with the same type, callback, and options.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
+
+#### Parameters
+
+β’ **type**: `string`
+
+β’ **callback**: `null` \| `EventListenerOrEventListenerObject`
+
+β’ **options?**: `boolean` \| `EventListenerOptions`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[`EventEmitter`](../../../classes/EventEmitter.md).[`removeEventListener`](../../../classes/EventEmitter.md#removeeventlistener)
+
+#### Defined in
+
+node\_modules/typescript/lib/lib.dom.d.ts:8268
+
+***
+
+### selectButton()
+
+> **selectButton**(`button`): `Promise`\<[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)\>
+
+Equivalent to "clicking" a button.
+
+#### Parameters
+
+β’ **button**: [`Button`](../../YTNodes/classes/Button.md)
+
+#### Returns
+
+`Promise`\<[`IParsedResponse`](../../APIResponseTypes/interfaces/IParsedResponse.md)\>
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:318](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L318)
+
+***
+
+### sendMessage()
+
+> **sendMessage**(`text`): `Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`AddChatItemAction`](../../YTNodes/classes/AddChatItemAction.md)\>\>
+
+Sends a message.
+
+#### Parameters
+
+β’ **text**: `string`
+
+Text to send.
+
+#### Returns
+
+`Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`AddChatItemAction`](../../YTNodes/classes/AddChatItemAction.md)\>\>
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:253](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L253)
+
+***
+
+### start()
+
+> **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:124](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L124)
+
+***
+
+### stop()
+
+> **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/parser/youtube/LiveChat.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/LiveChat.ts#L132)
diff --git a/docs/api/namespaces/YT/classes/NotificationsMenu.md b/docs/api/namespaces/YT/classes/NotificationsMenu.md
new file mode 100644
index 000000000..5250077c6
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/NotificationsMenu.md
@@ -0,0 +1,71 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / NotificationsMenu
+
+# Class: NotificationsMenu
+
+## Constructors
+
+### new NotificationsMenu()
+
+> **new NotificationsMenu**(`actions`, `response`): [`NotificationsMenu`](NotificationsMenu.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`NotificationsMenu`](NotificationsMenu.md)
+
+#### Defined in
+
+[src/parser/youtube/NotificationsMenu.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/NotificationsMenu.ts#L18)
+
+## Properties
+
+### contents
+
+> **contents**: [`Notification`](../../YTNodes/classes/Notification.md)[]
+
+#### Defined in
+
+[src/parser/youtube/NotificationsMenu.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/NotificationsMenu.ts#L16)
+
+***
+
+### header
+
+> **header**: [`SimpleMenuHeader`](../../YTNodes/classes/SimpleMenuHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/NotificationsMenu.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/NotificationsMenu.ts#L15)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IGetNotificationsMenuResponse`](../../APIResponseTypes/type-aliases/IGetNotificationsMenuResponse.md)
+
+#### Returns
+
+[`IGetNotificationsMenuResponse`](../../APIResponseTypes/type-aliases/IGetNotificationsMenuResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/NotificationsMenu.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/NotificationsMenu.ts#L40)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`NotificationsMenu`](NotificationsMenu.md)\>
+
+#### Returns
+
+`Promise`\<[`NotificationsMenu`](NotificationsMenu.md)\>
+
+#### Defined in
+
+[src/parser/youtube/NotificationsMenu.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/NotificationsMenu.ts#L29)
diff --git a/docs/api/namespaces/YT/classes/Playlist.md b/docs/api/namespaces/YT/classes/Playlist.md
new file mode 100644
index 000000000..51c09830d
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Playlist.md
@@ -0,0 +1,467 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Playlist
+
+# Class: Playlist
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new Playlist()
+
+> **new Playlist**(`actions`, `data`, `already_parsed`): [`Playlist`](Playlist.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`Playlist`](Playlist.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L31)
+
+## Properties
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L28)
+
+***
+
+### info
+
+> **info**: `object`
+
+#### author
+
+> **author**: [`Author`](../../Misc/classes/Author.md)
+
+#### can\_delete
+
+> **can\_delete**: `boolean` = `header.can_delete`
+
+#### can\_share
+
+> **can\_share**: `boolean` = `header.can_share`
+
+#### description?
+
+> `optional` **description**: `string`
+
+#### is\_editable
+
+> **is\_editable**: `boolean` = `header.is_editable`
+
+#### last\_updated
+
+> **last\_updated**: `string`
+
+#### privacy
+
+> **privacy**: `string` = `header.privacy`
+
+#### subtitle
+
+> **subtitle**: `null` \| [`Text`](../../Misc/classes/Text.md)
+
+#### thumbnails
+
+> **thumbnails**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### title?
+
+> `optional` **title**: `string`
+
+#### total\_items
+
+> **total\_items**: `string`
+
+#### type?
+
+> `readonly` `optional` **type**: `string`
+
+#### views
+
+> **views**: `string`
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L26)
+
+***
+
+### menu
+
+> **menu**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L27)
+
+***
+
+### messages
+
+> **messages**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Message`](../../YTNodes/classes/Message.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L29)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:75](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L75)
+
+***
+
+### items
+
+> `get` **items**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md)\>
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:71](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L71)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Playlist`](Playlist.md)\>
+
+Retrieves next batch of contents and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Playlist`](Playlist.md)\>
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:105](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L105)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/parser/youtube/Playlist.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Playlist.ts#L84)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/Search.md b/docs/api/namespaces/YT/classes/Search.md
new file mode 100644
index 000000000..6296ee25d
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Search.md
@@ -0,0 +1,467 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Search
+
+# Class: Search
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>
+
+## Constructors
+
+### new Search()
+
+> **new Search**(`actions`, `data`, `already_parsed`): [`Search`](Search.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`Search`](Search.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L26)
+
+## Properties
+
+### estimated\_results
+
+> **estimated\_results**: `number`
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L21)
+
+***
+
+### header?
+
+> `optional` **header**: [`SearchHeader`](../../YTNodes/classes/SearchHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L18)
+
+***
+
+### refinement\_cards?
+
+> `optional` **refinement\_cards**: `null` \| [`HorizontalCardList`](../../YTNodes/classes/HorizontalCardList.md)
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L24)
+
+***
+
+### refinements
+
+> **refinements**: `string`[]
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L20)
+
+***
+
+### results
+
+> **results**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L19)
+
+***
+
+### sub\_menu?
+
+> `optional` **sub\_menu**: [`SearchSubMenu`](../../YTNodes/classes/SearchSubMenu.md)
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L22)
+
+***
+
+### watch\_card?
+
+> `optional` **watch\_card**: [`UniversalWatchCard`](../../YTNodes/classes/UniversalWatchCard.md)
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L23)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### refinement\_card\_queries
+
+> `get` **refinement\_card\_queries**(): `string`[]
+
+Returns a list of refinement card queries.
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L77)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Search`](Search.md)\>
+
+Retrieves next batch of results.
+
+#### Returns
+
+`Promise`\<[`Search`](Search.md)\>
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L84)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### selectRefinementCard()
+
+> **selectRefinementCard**(`card`): `Promise`\<[`Search`](Search.md)\>
+
+Applies given refinement card and returns a new [Search](Search.md) object. Use [refinement_card_queries](Search.md#refinement_card_queries) to get a list of available refinement cards.
+
+#### Parameters
+
+β’ **card**: `string` \| [`SearchRefinementCard`](../../YTNodes/classes/SearchRefinementCard.md)
+
+#### Returns
+
+`Promise`\<[`Search`](Search.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Search.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Search.ts#L55)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YT/classes/Settings.md b/docs/api/namespaces/YT/classes/Settings.md
new file mode 100644
index 000000000..c6071bd1f
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/Settings.md
@@ -0,0 +1,139 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / Settings
+
+# Class: Settings
+
+## Constructors
+
+### new Settings()
+
+> **new Settings**(`actions`, `response`): [`Settings`](Settings.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`Settings`](Settings.md)
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L28)
+
+## Properties
+
+### introduction?
+
+> `optional` **introduction**: [`PageIntroduction`](../../YTNodes/classes/PageIntroduction.md)
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L25)
+
+***
+
+### sections
+
+> **sections**: `undefined` \| `object`[]
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L26)
+
+***
+
+### sidebar?
+
+> `optional` **sidebar**: [`SettingsSidebar`](../../YTNodes/classes/SettingsSidebar.md)
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L24)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L132)
+
+***
+
+### setting\_options
+
+> `get` **setting\_options**(): `string`[]
+
+Returns settings available in the page.
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:105](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L105)
+
+***
+
+### sidebar\_items
+
+> `get` **sidebar\_items**(): `string`[]
+
+Returns options available in the sidebar.
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L125)
+
+## Methods
+
+### getSettingOption()
+
+> **getSettingOption**(`name`): [`SettingsSwitch`](../../YTNodes/classes/SettingsSwitch.md)
+
+Finds a setting by name and returns it. Use [setting_options](Settings.md#setting_options) to see available options.
+
+#### Parameters
+
+β’ **name**: `string`
+
+#### Returns
+
+[`SettingsSwitch`](../../YTNodes/classes/SettingsSwitch.md)
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:79](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L79)
+
+***
+
+### selectSidebarItem()
+
+> **selectSidebarItem**(`target_item`): `Promise`\<[`Settings`](Settings.md)\>
+
+Selects an item from the sidebar menu. Use [sidebar_items](Settings.md#sidebar_items) to see available items.
+
+#### Parameters
+
+β’ **target\_item**: `string` \| [`CompactLink`](../../YTNodes/classes/CompactLink.md)
+
+#### Returns
+
+`Promise`\<[`Settings`](Settings.md)\>
+
+#### Defined in
+
+[src/parser/youtube/Settings.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/Settings.ts#L55)
diff --git a/docs/api/namespaces/YT/classes/SmoothedQueue.md b/docs/api/namespaces/YT/classes/SmoothedQueue.md
new file mode 100644
index 000000000..8f52aa0c3
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/SmoothedQueue.md
@@ -0,0 +1,153 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / SmoothedQueue
+
+# Class: SmoothedQueue
+
+## Constructors
+
+### new SmoothedQueue()
+
+> **new SmoothedQueue**(): [`SmoothedQueue`](SmoothedQueue.md)
+
+#### Returns
+
+[`SmoothedQueue`](SmoothedQueue.md)
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:54](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L54)
+
+## Accessors
+
+### action\_queue
+
+> `get` **action\_queue**(): [`YTNode`](../../Helpers/classes/YTNode.md)[][]
+
+#### Returns
+
+[`YTNode`](../../Helpers/classes/YTNode.md)[][]
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:140](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L140)
+
+***
+
+### callback
+
+> `get` **callback**(): `null` \| (`actions`) => `void`
+
+> `set` **callback**(`cb`): `void`
+
+#### Parameters
+
+β’ **cb**: `null` \| (`actions`) => `void`
+
+#### Returns
+
+`null` \| (`actions`) => `void`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L136)
+
+***
+
+### estimated\_update\_interval
+
+> `get` **estimated\_update\_interval**(): `null` \| `number`
+
+#### Returns
+
+`null` \| `number`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:144](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L144)
+
+***
+
+### last\_update\_time
+
+> `get` **last\_update\_time**(): `null` \| `number`
+
+#### Returns
+
+`null` \| `number`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:148](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L148)
+
+***
+
+### next\_update\_id
+
+> `get` **next\_update\_id**(): `any`
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:152](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L152)
+
+***
+
+### poll\_response\_delay\_queue
+
+> `get` **poll\_response\_delay\_queue**(): `DelayQueue`
+
+#### Returns
+
+`DelayQueue`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:156](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L156)
+
+## Methods
+
+### clear()
+
+> **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:124](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L124)
+
+***
+
+### emitSmoothedActions()
+
+> **emitSmoothedActions**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:91](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L91)
+
+***
+
+### enqueueActionGroup()
+
+> **enqueueActionGroup**(`group`): `void`
+
+#### Parameters
+
+β’ **group**: [`YTNode`](../../Helpers/classes/YTNode.md)[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/parser/youtube/SmoothedQueue.ts:63](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/SmoothedQueue.ts#L63)
diff --git a/docs/api/namespaces/YT/classes/TimeWatched.md b/docs/api/namespaces/YT/classes/TimeWatched.md
new file mode 100644
index 000000000..1820334a0
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/TimeWatched.md
@@ -0,0 +1,45 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / TimeWatched
+
+# Class: TimeWatched
+
+## Constructors
+
+### new TimeWatched()
+
+> **new TimeWatched**(`response`): [`TimeWatched`](TimeWatched.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`TimeWatched`](TimeWatched.md)
+
+#### Defined in
+
+[src/parser/youtube/TimeWatched.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TimeWatched.ts#L15)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ItemSection`](../../YTNodes/classes/ItemSection.md)\>
+
+#### Defined in
+
+[src/parser/youtube/TimeWatched.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TimeWatched.ts#L13)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/TimeWatched.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TimeWatched.ts#L29)
diff --git a/docs/api/namespaces/YT/classes/TranscriptInfo.md b/docs/api/namespaces/YT/classes/TranscriptInfo.md
new file mode 100644
index 000000000..f8f76c919
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/TranscriptInfo.md
@@ -0,0 +1,101 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / TranscriptInfo
+
+# Class: TranscriptInfo
+
+## Constructors
+
+### new TranscriptInfo()
+
+> **new TranscriptInfo**(`actions`, `response`): [`TranscriptInfo`](TranscriptInfo.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`TranscriptInfo`](TranscriptInfo.md)
+
+#### Defined in
+
+[src/parser/youtube/TranscriptInfo.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TranscriptInfo.ts#L12)
+
+## Properties
+
+### transcript
+
+> **transcript**: [`Transcript`](../../YTNodes/classes/Transcript.md)
+
+#### Defined in
+
+[src/parser/youtube/TranscriptInfo.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TranscriptInfo.ts#L10)
+
+## Accessors
+
+### languages
+
+> `get` **languages**(): `string`[]
+
+Returns available languages.
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/TranscriptInfo.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TranscriptInfo.ts#L45)
+
+***
+
+### page
+
+> `get` **page**(): [`IGetTranscriptResponse`](../../APIResponseTypes/type-aliases/IGetTranscriptResponse.md)
+
+#### Returns
+
+[`IGetTranscriptResponse`](../../APIResponseTypes/type-aliases/IGetTranscriptResponse.md)
+
+#### Defined in
+
+[src/parser/youtube/TranscriptInfo.ts:56](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TranscriptInfo.ts#L56)
+
+***
+
+### selectedLanguage
+
+> `get` **selectedLanguage**(): `string`
+
+Returns the currently selected language.
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/parser/youtube/TranscriptInfo.ts:52](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TranscriptInfo.ts#L52)
+
+## Methods
+
+### selectLanguage()
+
+> **selectLanguage**(`language`): `Promise`\<[`TranscriptInfo`](TranscriptInfo.md)\>
+
+Selects a language from the language menu and returns the updated transcript.
+
+#### Parameters
+
+β’ **language**: `string`
+
+Language to select.
+
+#### Returns
+
+`Promise`\<[`TranscriptInfo`](TranscriptInfo.md)\>
+
+#### Defined in
+
+[src/parser/youtube/TranscriptInfo.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/TranscriptInfo.ts#L26)
diff --git a/docs/api/namespaces/YT/classes/VideoInfo.md b/docs/api/namespaces/YT/classes/VideoInfo.md
new file mode 100644
index 000000000..1f9b33692
--- /dev/null
+++ b/docs/api/namespaces/YT/classes/VideoInfo.md
@@ -0,0 +1,869 @@
+[youtubei.js](../../../README.md) / [YT](../README.md) / VideoInfo
+
+# Class: VideoInfo
+
+## Extends
+
+- [`MediaInfo`](../../Mixins/classes/MediaInfo.md)
+
+## Constructors
+
+### new VideoInfo()
+
+> **new VideoInfo**(`data`, `actions`, `cpn`): [`VideoInfo`](VideoInfo.md)
+
+#### Parameters
+
+β’ **data**: [[`ApiResponse`](../../../interfaces/ApiResponse.md), `ApiResponse?`]
+
+API response.
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+Actions instance.
+
+β’ **cpn**: `string`
+
+Client Playback Nonce.
+
+#### Returns
+
+[`VideoInfo`](VideoInfo.md)
+
+#### Overrides
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`constructor`](../../Mixins/classes/MediaInfo.md#constructors)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:51](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L51)
+
+## Properties
+
+### annotations?
+
+> `optional` **annotations**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlayerAnnotationsExpanded`](../../YTNodes/classes/PlayerAnnotationsExpanded.md)\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`annotations`](../../Mixins/classes/MediaInfo.md#annotations)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L31)
+
+***
+
+### autoplay?
+
+> `optional` **autoplay**: `object`
+
+#### count\_down\_secs?
+
+> `optional` **count\_down\_secs**: `number`
+
+#### modified\_sets?
+
+> `optional` **modified\_sets**: `AutoplaySet`[]
+
+#### sets
+
+> **sets**: `AutoplaySet`[]
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L44)
+
+***
+
+### basic\_info
+
+> **basic\_info**: `object`
+
+#### allow\_ratings?
+
+> `optional` **allow\_ratings**: `boolean`
+
+#### author?
+
+> `optional` **author**: `string`
+
+#### category
+
+> **category**: `null` \| `string`
+
+#### channel
+
+> **channel**: `null` \| `object`
+
+#### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### duration?
+
+> `optional` **duration**: `number`
+
+#### embed
+
+> **embed**: `undefined` \| `null` \| `object`
+
+#### end\_timestamp
+
+> **end\_timestamp**: `null` \| `Date`
+
+#### has\_ypc\_metadata
+
+> **has\_ypc\_metadata**: `null` \| `boolean`
+
+#### id?
+
+> `optional` **id**: `string`
+
+#### is\_crawlable?
+
+> `optional` **is\_crawlable**: `boolean`
+
+#### is\_disliked
+
+> **is\_disliked**: `undefined` \| `boolean`
+
+#### is\_family\_safe
+
+> **is\_family\_safe**: `undefined` \| `boolean` = `info.microformat.is_family_safe`
+
+#### is\_liked
+
+> **is\_liked**: `undefined` \| `boolean`
+
+#### is\_live?
+
+> `optional` **is\_live**: `boolean`
+
+#### is\_live\_content?
+
+> `optional` **is\_live\_content**: `boolean`
+
+#### is\_live\_dvr\_enabled?
+
+> `optional` **is\_live\_dvr\_enabled**: `boolean`
+
+#### is\_low\_latency\_live\_stream?
+
+> `optional` **is\_low\_latency\_live\_stream**: `boolean`
+
+#### is\_owner\_viewing?
+
+> `optional` **is\_owner\_viewing**: `boolean`
+
+#### is\_post\_live\_dvr?
+
+> `optional` **is\_post\_live\_dvr**: `boolean`
+
+#### is\_private?
+
+> `optional` **is\_private**: `boolean`
+
+#### is\_unlisted
+
+> **is\_unlisted**: `undefined` \| `boolean` = `info.microformat.is_unlisted`
+
+#### is\_upcoming?
+
+> `optional` **is\_upcoming**: `boolean`
+
+#### keywords?
+
+> `optional` **keywords**: `string`[]
+
+#### like\_count
+
+> **like\_count**: `undefined` \| `number`
+
+#### live\_chunk\_readahead?
+
+> `optional` **live\_chunk\_readahead**: `number`
+
+#### short\_description?
+
+> `optional` **short\_description**: `string`
+
+#### start\_timestamp
+
+> **start\_timestamp**: `null` \| `Date`
+
+#### tags
+
+> **tags**: `null` \| `string`[]
+
+#### thumbnail?
+
+> `optional` **thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### title?
+
+> `optional` **title**: `string`
+
+#### url\_canonical
+
+> **url\_canonical**: `null` \| `string`
+
+#### view\_count
+
+> **view\_count**: `undefined` \| `number`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`basic_info`](../../Mixins/classes/MediaInfo.md#basic_info)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L30)
+
+***
+
+### captions?
+
+> `optional` **captions**: [`PlayerCaptionsTracklist`](../../YTNodes/classes/PlayerCaptionsTracklist.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`captions`](../../Mixins/classes/MediaInfo.md#captions)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L34)
+
+***
+
+### cards?
+
+> `optional` **cards**: [`CardCollection`](../../YTNodes/classes/CardCollection.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`cards`](../../Mixins/classes/MediaInfo.md#cards)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L35)
+
+***
+
+### comments\_entry\_point\_header?
+
+> `optional` **comments\_entry\_point\_header**: `null` \| [`CommentsEntryPointHeader`](../../YTNodes/classes/CommentsEntryPointHeader.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:42](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L42)
+
+***
+
+### endscreen?
+
+> `optional` **endscreen**: [`Endscreen`](../../YTNodes/classes/Endscreen.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`endscreen`](../../Mixins/classes/MediaInfo.md#endscreen)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L33)
+
+***
+
+### game\_info?
+
+> `optional` **game\_info**: `object`
+
+#### release\_year
+
+> **release\_year**: `undefined` \| [`Text`](../../Misc/classes/Text.md)
+
+#### title
+
+> **title**: `undefined` \| [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L37)
+
+***
+
+### livechat?
+
+> `optional` **livechat**: `null` \| [`LiveChat`](../../YTNodes/classes/LiveChat.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L43)
+
+***
+
+### merchandise?
+
+> `optional` **merchandise**: `null` \| [`MerchandiseShelf`](../../YTNodes/classes/MerchandiseShelf.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L38)
+
+***
+
+### playability\_status?
+
+> `optional` **playability\_status**: [`IPlayabilityStatus`](../../APIResponseTypes/interfaces/IPlayabilityStatus.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`playability_status`](../../Mixins/classes/MediaInfo.md#playability_status)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L37)
+
+***
+
+### player\_config?
+
+> `optional` **player\_config**: [`IPlayerConfig`](../../APIResponseTypes/interfaces/IPlayerConfig.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`player_config`](../../Mixins/classes/MediaInfo.md#player_config)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L38)
+
+***
+
+### player\_overlays?
+
+> `optional` **player\_overlays**: `null` \| [`PlayerOverlay`](../../YTNodes/classes/PlayerOverlay.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L41)
+
+***
+
+### playlist?
+
+> `optional` **playlist**: `object`
+
+#### author
+
+> **author**: [`Text`](../../Misc/classes/Text.md) \| [`Author`](../../Misc/classes/Author.md)
+
+#### contents
+
+> **contents**: [`YTNode`](../../Helpers/classes/YTNode.md)[]
+
+#### current\_index
+
+> **current\_index**: `number`
+
+#### id
+
+> **id**: `string`
+
+#### is\_infinite
+
+> **is\_infinite**: `boolean`
+
+#### menu
+
+> **menu**: `null` \| [`Menu`](../../YTNodes/classes/Menu.md)
+
+#### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L36)
+
+***
+
+### primary\_info?
+
+> `optional` **primary\_info**: `null` \| [`VideoPrimaryInfo`](../../YTNodes/classes/VideoPrimaryInfo.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L34)
+
+***
+
+### related\_chip\_cloud?
+
+> `optional` **related\_chip\_cloud**: `null` \| [`ChipCloud`](../../YTNodes/classes/ChipCloud.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L39)
+
+***
+
+### secondary\_info?
+
+> `optional` **secondary\_info**: `null` \| [`VideoSecondaryInfo`](../../YTNodes/classes/VideoSecondaryInfo.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L35)
+
+***
+
+### storyboards?
+
+> `optional` **storyboards**: [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md) \| [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`storyboards`](../../Mixins/classes/MediaInfo.md#storyboards)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L32)
+
+***
+
+### streaming\_data?
+
+> `optional` **streaming\_data**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`streaming_data`](../../Mixins/classes/MediaInfo.md#streaming_data)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L36)
+
+***
+
+### watch\_next\_feed?
+
+> `optional` **watch\_next\_feed**: `null` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L40)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+Actions instance.
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`actions`](../../Mixins/classes/MediaInfo.md#actions)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:223](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L223)
+
+***
+
+### autoplay\_video\_endpoint
+
+> `get` **autoplay\_video\_endpoint**(): `null` \| [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+Gets the endpoint of the autoplay video
+
+#### Returns
+
+`null` \| [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:379](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L379)
+
+***
+
+### cpn
+
+> `get` **cpn**(): `string`
+
+Content Playback Nonce.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`cpn`](../../Mixins/classes/MediaInfo.md#cpn)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:230](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L230)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+Watch next feed filters.
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:365](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L365)
+
+***
+
+### has\_trailer
+
+> `get` **has\_trailer**(): `boolean`
+
+Checks if trailer is available.
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:386](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L386)
+
+***
+
+### music\_tracks
+
+> `get` **music\_tracks**(): `object`[]
+
+Get songs used in the video.
+
+#### Returns
+
+`object`[]
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:393](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L393)
+
+***
+
+### page
+
+> `get` **page**(): [[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+Original parsed InnerTube response.
+
+#### Returns
+
+[[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`page`](../../Mixins/classes/MediaInfo.md#page)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:237](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L237)
+
+***
+
+### wn\_has\_continuation
+
+> `get` **wn\_has\_continuation**(): `boolean`
+
+Checks if continuation is available for the watch next feed.
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:372](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L372)
+
+## Methods
+
+### addToWatchHistory()
+
+> **addToWatchHistory**(): `Promise`\<`Response`\>
+
+Adds video to the watch history.
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Overrides
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`addToWatchHistory`](../../Mixins/classes/MediaInfo.md#addtowatchhistory)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:174](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L174)
+
+***
+
+### chooseFormat()
+
+> **chooseFormat**(`options`): [`Format`](../../Misc/classes/Format.md)
+
+Selects the format that best matches the given options.
+
+#### Parameters
+
+β’ **options**: [`FormatOptions`](../../Types/interfaces/FormatOptions.md)
+
+Options
+
+#### Returns
+
+[`Format`](../../Misc/classes/Format.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`chooseFormat`](../../Mixins/classes/MediaInfo.md#chooseformat)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:149](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L149)
+
+***
+
+### dislike()
+
+> **dislike**(): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Dislikes the video.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:245](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L245)
+
+***
+
+### download()
+
+> **download**(`options`): `Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+Downloads the video.
+
+#### Parameters
+
+β’ **options**: [`DownloadOptions`](../../Types/interfaces/DownloadOptions.md) = `{}`
+
+Download options.
+
+#### Returns
+
+`Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`download`](../../Mixins/classes/MediaInfo.md#download)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L157)
+
+***
+
+### getLiveChat()
+
+> **getLiveChat**(): [`LiveChat`](LiveChat.md)
+
+Retrieves Live Chat if available.
+
+#### Returns
+
+[`LiveChat`](LiveChat.md)
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:342](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L342)
+
+***
+
+### getStreamingInfo()
+
+> **getStreamingInfo**(`url_transformer`?, `format_filter`?): `StreamingInfo`
+
+Get a cleaned up representation of the adaptive_formats
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+#### Returns
+
+`StreamingInfo`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`getStreamingInfo`](../../Mixins/classes/MediaInfo.md#getstreaminginfo)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L132)
+
+***
+
+### getTrailerInfo()
+
+> **getTrailerInfo**(): `null` \| [`VideoInfo`](VideoInfo.md)
+
+Retrieves trailer info if available (typically for non-purchased movies or films).
+
+#### Returns
+
+`null` \| [`VideoInfo`](VideoInfo.md)
+
+`VideoInfo` for the trailer, or `null` if none.
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:352](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L352)
+
+***
+
+### getTranscript()
+
+> **getTranscript**(): `Promise`\<[`TranscriptInfo`](TranscriptInfo.md)\>
+
+Retrieves the video's transcript.
+
+#### Returns
+
+`Promise`\<[`TranscriptInfo`](TranscriptInfo.md)\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`getTranscript`](../../Mixins/classes/MediaInfo.md#gettranscript)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:170](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L170)
+
+***
+
+### getWatchNextContinuation()
+
+> **getWatchNextContinuation**(): `Promise`\<[`VideoInfo`](VideoInfo.md)\>
+
+Retrieves watch next feed continuation.
+
+#### Returns
+
+`Promise`\<[`VideoInfo`](VideoInfo.md)\>
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:181](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L181)
+
+***
+
+### like()
+
+> **like**(): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Likes the video.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:204](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L204)
+
+***
+
+### removeRating()
+
+> **removeRating**(): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Removes like/dislike.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:286](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L286)
+
+***
+
+### selectFilter()
+
+> **selectFilter**(`target_filter`): `Promise`\<[`VideoInfo`](VideoInfo.md)\>
+
+Applies given filter to the watch next feed. Use [filters](VideoInfo.md#filters) to get available filters.
+
+#### Parameters
+
+β’ **target\_filter**: `undefined` \| `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+Filter to apply.
+
+#### Returns
+
+`Promise`\<[`VideoInfo`](VideoInfo.md)\>
+
+#### Defined in
+
+[src/parser/youtube/VideoInfo.ts:142](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/youtube/VideoInfo.ts#L142)
+
+***
+
+### toDash()
+
+> **toDash**(`url_transformer`?, `format_filter`?, `options`?): `Promise`\<`string`\>
+
+Generates a DASH manifest from the streaming data.
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+Function to transform the URLs.
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+Function to filter the formats.
+
+β’ **options?**: `DashOptions` = `...`
+
+Additional options to customise the manifest generation
+
+#### Returns
+
+`Promise`\<`string`\>
+
+DASH manifest
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`toDash`](../../Mixins/classes/MediaInfo.md#todash)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:97](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L97)
diff --git a/docs/api/namespaces/YTKids/README.md b/docs/api/namespaces/YTKids/README.md
new file mode 100644
index 000000000..00a66e7bf
--- /dev/null
+++ b/docs/api/namespaces/YTKids/README.md
@@ -0,0 +1,12 @@
+[youtubei.js](../../README.md) / YTKids
+
+# YTKids
+
+## Index
+
+### Classes
+
+- [Channel](classes/Channel.md)
+- [HomeFeed](classes/HomeFeed.md)
+- [Search](classes/Search.md)
+- [VideoInfo](classes/VideoInfo.md)
diff --git a/docs/api/namespaces/YTKids/classes/Channel.md b/docs/api/namespaces/YTKids/classes/Channel.md
new file mode 100644
index 000000000..92e858c07
--- /dev/null
+++ b/docs/api/namespaces/YTKids/classes/Channel.md
@@ -0,0 +1,381 @@
+[youtubei.js](../../../README.md) / [YTKids](../README.md) / Channel
+
+# Class: Channel
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new Channel()
+
+> **new Channel**(`actions`, `data`, `already_parsed`): [`Channel`](Channel.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`Channel`](Channel.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/ytkids/Channel.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Channel.ts#L13)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ItemSectionContinuation`](../../../classes/ItemSectionContinuation.md) \| [`ItemSection`](../../YTNodes/classes/ItemSection.md)
+
+#### Defined in
+
+[src/parser/ytkids/Channel.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Channel.ts#L11)
+
+***
+
+### header?
+
+> `optional` **header**: [`C4TabbedHeader`](../../YTNodes/classes/C4TabbedHeader.md)
+
+#### Defined in
+
+[src/parser/ytkids/Channel.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Channel.ts#L10)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/parser/ytkids/Channel.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Channel.ts#L31)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Channel`](Channel.md)\>
+
+Retrieves next batch of videos.
+
+#### Returns
+
+`Promise`\<[`Channel`](Channel.md)\>
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/parser/ytkids/Channel.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Channel.ts#L22)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YTKids/classes/HomeFeed.md b/docs/api/namespaces/YTKids/classes/HomeFeed.md
new file mode 100644
index 000000000..e2208ea10
--- /dev/null
+++ b/docs/api/namespaces/YTKids/classes/HomeFeed.md
@@ -0,0 +1,417 @@
+[youtubei.js](../../../README.md) / [YTKids](../README.md) / HomeFeed
+
+# Class: HomeFeed
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+## Constructors
+
+### new HomeFeed()
+
+> **new HomeFeed**(`actions`, `data`, `already_parsed`): [`HomeFeed`](HomeFeed.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+β’ **already\_parsed**: `boolean` = `false`
+
+#### Returns
+
+[`HomeFeed`](HomeFeed.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/ytkids/HomeFeed.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/HomeFeed.ts#L15)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`KidsHomeScreen`](../../YTNodes/classes/KidsHomeScreen.md)
+
+#### Defined in
+
+[src/parser/ytkids/HomeFeed.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/HomeFeed.ts#L13)
+
+***
+
+### header?
+
+> `optional` **header**: [`KidsCategoriesHeader`](../../YTNodes/classes/KidsCategoriesHeader.md)
+
+#### Defined in
+
+[src/parser/ytkids/HomeFeed.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/HomeFeed.ts#L12)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### categories
+
+> `get` **categories**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/ytkids/HomeFeed.ts:46](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/HomeFeed.ts#L46)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+Retrieves next batch of contents and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### selectCategoryTab()
+
+> **selectCategoryTab**(`tab`): `Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+Retrieves the contents of the given category tab. Use [HomeFeed.categories](HomeFeed.md#categories) to get a list of available categories.
+
+#### Parameters
+
+β’ **tab**: `string` \| [`KidsCategoryTab`](../../YTNodes/classes/KidsCategoryTab.md)
+
+The tab to select
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+#### Defined in
+
+[src/parser/ytkids/HomeFeed.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/HomeFeed.ts#L25)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YTKids/classes/Search.md b/docs/api/namespaces/YTKids/classes/Search.md
new file mode 100644
index 000000000..5784006ea
--- /dev/null
+++ b/docs/api/namespaces/YTKids/classes/Search.md
@@ -0,0 +1,379 @@
+[youtubei.js](../../../README.md) / [YTKids](../README.md) / Search
+
+# Class: Search
+
+## Extends
+
+- [`Feed`](../../Mixins/classes/Feed.md)\<[`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>
+
+## Constructors
+
+### new Search()
+
+> **new Search**(`actions`, `data`): [`Search`](Search.md)
+
+#### Parameters
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **data**: [`ApiResponse`](../../../interfaces/ApiResponse.md) \| [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)
+
+#### Returns
+
+[`Search`](Search.md)
+
+#### Overrides
+
+[`Feed`](../../Mixins/classes/Feed.md).[`constructor`](../../Mixins/classes/Feed.md#constructors)
+
+#### Defined in
+
+[src/parser/ytkids/Search.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Search.ts#L13)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/ytkids/Search.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Search.ts#L11)
+
+***
+
+### estimated\_results?
+
+> `optional` **estimated\_results**: `number`
+
+#### Defined in
+
+[src/parser/ytkids/Search.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/Search.ts#L10)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`actions`](../../Mixins/classes/Feed.md#actions)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:180](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L180)
+
+***
+
+### channels
+
+> `get` **channels**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+Get all the channels in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Channel`](../../YTNodes/classes/Channel.md) \| [`GridChannel`](../../YTNodes/classes/GridChannel.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`channels`](../../Mixins/classes/Feed.md#channels)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:125](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L125)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+Checks if the feed has continuation.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`has_continuation`](../../Mixins/classes/Feed.md#has_continuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:194](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L194)
+
+***
+
+### memo
+
+> `get` **memo**(): [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`Memo`](../../Helpers/classes/Memo.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`memo`](../../Mixins/classes/Feed.md#memo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:136](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L136)
+
+***
+
+### page
+
+> `get` **page**(): `T`
+
+Get the original page data
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page`](../../Mixins/classes/Feed.md#page)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:187](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L187)
+
+***
+
+### page\_contents
+
+> `get` **page\_contents**(): [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+Returns contents from the page.
+
+#### Returns
+
+[`SectionList`](../../YTNodes/classes/SectionList.md) \| [`ReloadContinuationItemsCommand`](../../../classes/ReloadContinuationItemsCommand.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`page_contents`](../../Mixins/classes/Feed.md#page_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:143](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L143)
+
+***
+
+### playlists
+
+> `get` **playlists**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`playlists`](../../Mixins/classes/Feed.md#playlists)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L132)
+
+***
+
+### posts
+
+> `get` **posts**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+Get all the community posts in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`BackstagePost`](../../YTNodes/classes/BackstagePost.md) \| [`SharedPost`](../../YTNodes/classes/SharedPost.md) \| [`Post`](../../YTNodes/classes/Post.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`posts`](../../Mixins/classes/Feed.md#posts)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L118)
+
+***
+
+### secondary\_contents
+
+> `get` **secondary\_contents**(): `undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+Returns secondary contents from the page.
+
+#### Returns
+
+`undefined` \| [`SuperParsedResult`](../../Helpers/classes/SuperParsedResult.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`secondary_contents`](../../Mixins/classes/Feed.md#secondary_contents)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:168](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L168)
+
+***
+
+### shelves
+
+> `get` **shelves**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+Returns all segments/sections from the page.
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`shelves`](../../Mixins/classes/Feed.md#shelves)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:154](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L154)
+
+***
+
+### videos
+
+> `get` **videos**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all the videos in the feed
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`videos`](../../Mixins/classes/Feed.md#videos)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:111](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L111)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>\>
+
+Retrieves next batch of contents and returns a new [Feed](../../Mixins/classes/Feed.md) object.
+
+#### Returns
+
+`Promise`\<[`Feed`](../../Mixins/classes/Feed.md)\<[`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuation`](../../Mixins/classes/Feed.md#getcontinuation)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:220](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L220)
+
+***
+
+### getContinuationData()
+
+> **getContinuationData**(): `Promise`\<`undefined` \| [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>
+
+Retrieves continuation data as it is.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getContinuationData`](../../Mixins/classes/Feed.md#getcontinuationdata)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:201](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L201)
+
+***
+
+### getShelf()
+
+> **getShelf**(`title`): `undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+Finds shelf by title.
+
+#### Parameters
+
+β’ **title**: `string`
+
+#### Returns
+
+`undefined` \| [`ReelShelf`](../../YTNodes/classes/ReelShelf.md) \| [`RichShelf`](../../YTNodes/classes/RichShelf.md) \| [`Shelf`](../../YTNodes/classes/Shelf.md)
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getShelf`](../../Mixins/classes/Feed.md#getshelf)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:161](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L161)
+
+***
+
+### getPlaylistsFromMemo()
+
+> `static` **getPlaylistsFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+Get all playlists on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`GridPlaylist`](../../YTNodes/classes/GridPlaylist.md) \| [`LockupView`](../../YTNodes/classes/LockupView.md) \| [`Playlist`](../../YTNodes/classes/Playlist.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getPlaylistsFromMemo`](../../Mixins/classes/Feed.md#getplaylistsfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L93)
+
+***
+
+### getVideosFromMemo()
+
+> `static` **getVideosFromMemo**(`memo`): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+Get all videos on a given page via memo
+
+#### Parameters
+
+β’ **memo**: [`Memo`](../../Helpers/classes/Memo.md)
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Video`](../../YTNodes/classes/Video.md) \| [`CompactVideo`](../../YTNodes/classes/CompactVideo.md) \| [`GridVideo`](../../YTNodes/classes/GridVideo.md) \| [`PlaylistPanelVideo`](../../YTNodes/classes/PlaylistPanelVideo.md) \| [`PlaylistVideo`](../../YTNodes/classes/PlaylistVideo.md) \| [`ReelItem`](../../YTNodes/classes/ReelItem.md) \| [`ShortsLockupView`](../../YTNodes/classes/ShortsLockupView.md) \| [`WatchCardCompactVideo`](../../YTNodes/classes/WatchCardCompactVideo.md)\>
+
+#### Inherited from
+
+[`Feed`](../../Mixins/classes/Feed.md).[`getVideosFromMemo`](../../Mixins/classes/Feed.md#getvideosfrommemo)
+
+#### Defined in
+
+[src/core/mixins/Feed.ts:77](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/Feed.ts#L77)
diff --git a/docs/api/namespaces/YTKids/classes/VideoInfo.md b/docs/api/namespaces/YTKids/classes/VideoInfo.md
new file mode 100644
index 000000000..ce53c9e23
--- /dev/null
+++ b/docs/api/namespaces/YTKids/classes/VideoInfo.md
@@ -0,0 +1,553 @@
+[youtubei.js](../../../README.md) / [YTKids](../README.md) / VideoInfo
+
+# Class: VideoInfo
+
+## Extends
+
+- [`MediaInfo`](../../Mixins/classes/MediaInfo.md)
+
+## Constructors
+
+### new VideoInfo()
+
+> **new VideoInfo**(`data`, `actions`, `cpn`): [`VideoInfo`](VideoInfo.md)
+
+#### Parameters
+
+β’ **data**: [[`ApiResponse`](../../../interfaces/ApiResponse.md), `ApiResponse?`]
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **cpn**: `string`
+
+#### Returns
+
+[`VideoInfo`](VideoInfo.md)
+
+#### Overrides
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`constructor`](../../Mixins/classes/MediaInfo.md#constructors)
+
+#### Defined in
+
+[src/parser/ytkids/VideoInfo.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/VideoInfo.ts#L17)
+
+## Properties
+
+### annotations?
+
+> `optional` **annotations**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlayerAnnotationsExpanded`](../../YTNodes/classes/PlayerAnnotationsExpanded.md)\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`annotations`](../../Mixins/classes/MediaInfo.md#annotations)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L31)
+
+***
+
+### basic\_info
+
+> **basic\_info**: `object`
+
+#### allow\_ratings?
+
+> `optional` **allow\_ratings**: `boolean`
+
+#### author?
+
+> `optional` **author**: `string`
+
+#### category
+
+> **category**: `null` \| `string`
+
+#### channel
+
+> **channel**: `null` \| `object`
+
+#### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### duration?
+
+> `optional` **duration**: `number`
+
+#### embed
+
+> **embed**: `undefined` \| `null` \| `object`
+
+#### end\_timestamp
+
+> **end\_timestamp**: `null` \| `Date`
+
+#### has\_ypc\_metadata
+
+> **has\_ypc\_metadata**: `null` \| `boolean`
+
+#### id?
+
+> `optional` **id**: `string`
+
+#### is\_crawlable?
+
+> `optional` **is\_crawlable**: `boolean`
+
+#### is\_disliked
+
+> **is\_disliked**: `undefined` \| `boolean`
+
+#### is\_family\_safe
+
+> **is\_family\_safe**: `undefined` \| `boolean` = `info.microformat.is_family_safe`
+
+#### is\_liked
+
+> **is\_liked**: `undefined` \| `boolean`
+
+#### is\_live?
+
+> `optional` **is\_live**: `boolean`
+
+#### is\_live\_content?
+
+> `optional` **is\_live\_content**: `boolean`
+
+#### is\_live\_dvr\_enabled?
+
+> `optional` **is\_live\_dvr\_enabled**: `boolean`
+
+#### is\_low\_latency\_live\_stream?
+
+> `optional` **is\_low\_latency\_live\_stream**: `boolean`
+
+#### is\_owner\_viewing?
+
+> `optional` **is\_owner\_viewing**: `boolean`
+
+#### is\_post\_live\_dvr?
+
+> `optional` **is\_post\_live\_dvr**: `boolean`
+
+#### is\_private?
+
+> `optional` **is\_private**: `boolean`
+
+#### is\_unlisted
+
+> **is\_unlisted**: `undefined` \| `boolean` = `info.microformat.is_unlisted`
+
+#### is\_upcoming?
+
+> `optional` **is\_upcoming**: `boolean`
+
+#### keywords?
+
+> `optional` **keywords**: `string`[]
+
+#### like\_count
+
+> **like\_count**: `undefined` \| `number`
+
+#### live\_chunk\_readahead?
+
+> `optional` **live\_chunk\_readahead**: `number`
+
+#### short\_description?
+
+> `optional` **short\_description**: `string`
+
+#### start\_timestamp
+
+> **start\_timestamp**: `null` \| `Date`
+
+#### tags
+
+> **tags**: `null` \| `string`[]
+
+#### thumbnail?
+
+> `optional` **thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### title?
+
+> `optional` **title**: `string`
+
+#### url\_canonical
+
+> **url\_canonical**: `null` \| `string`
+
+#### view\_count
+
+> **view\_count**: `undefined` \| `number`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`basic_info`](../../Mixins/classes/MediaInfo.md#basic_info)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L30)
+
+***
+
+### captions?
+
+> `optional` **captions**: [`PlayerCaptionsTracklist`](../../YTNodes/classes/PlayerCaptionsTracklist.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`captions`](../../Mixins/classes/MediaInfo.md#captions)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L34)
+
+***
+
+### cards?
+
+> `optional` **cards**: [`CardCollection`](../../YTNodes/classes/CardCollection.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`cards`](../../Mixins/classes/MediaInfo.md#cards)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L35)
+
+***
+
+### current\_video\_endpoint?
+
+> `optional` **current\_video\_endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/ytkids/VideoInfo.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/VideoInfo.ts#L14)
+
+***
+
+### endscreen?
+
+> `optional` **endscreen**: [`Endscreen`](../../YTNodes/classes/Endscreen.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`endscreen`](../../Mixins/classes/MediaInfo.md#endscreen)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L33)
+
+***
+
+### playability\_status?
+
+> `optional` **playability\_status**: [`IPlayabilityStatus`](../../APIResponseTypes/interfaces/IPlayabilityStatus.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`playability_status`](../../Mixins/classes/MediaInfo.md#playability_status)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L37)
+
+***
+
+### player\_config?
+
+> `optional` **player\_config**: [`IPlayerConfig`](../../APIResponseTypes/interfaces/IPlayerConfig.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`player_config`](../../Mixins/classes/MediaInfo.md#player_config)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L38)
+
+***
+
+### player\_overlays?
+
+> `optional` **player\_overlays**: [`PlayerOverlay`](../../YTNodes/classes/PlayerOverlay.md)
+
+#### Defined in
+
+[src/parser/ytkids/VideoInfo.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/VideoInfo.ts#L15)
+
+***
+
+### slim\_video\_metadata?
+
+> `optional` **slim\_video\_metadata**: [`SlimVideoMetadata`](../../YTNodes/classes/SlimVideoMetadata.md)
+
+#### Defined in
+
+[src/parser/ytkids/VideoInfo.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/VideoInfo.ts#L12)
+
+***
+
+### storyboards?
+
+> `optional` **storyboards**: [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md) \| [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`storyboards`](../../Mixins/classes/MediaInfo.md#storyboards)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L32)
+
+***
+
+### streaming\_data?
+
+> `optional` **streaming\_data**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`streaming_data`](../../Mixins/classes/MediaInfo.md#streaming_data)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L36)
+
+***
+
+### watch\_next\_feed?
+
+> `optional` **watch\_next\_feed**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/ytkids/VideoInfo.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytkids/VideoInfo.ts#L13)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+Actions instance.
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`actions`](../../Mixins/classes/MediaInfo.md#actions)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:223](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L223)
+
+***
+
+### cpn
+
+> `get` **cpn**(): `string`
+
+Content Playback Nonce.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`cpn`](../../Mixins/classes/MediaInfo.md#cpn)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:230](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L230)
+
+***
+
+### page
+
+> `get` **page**(): [[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+Original parsed InnerTube response.
+
+#### Returns
+
+[[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`page`](../../Mixins/classes/MediaInfo.md#page)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:237](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L237)
+
+## Methods
+
+### addToWatchHistory()
+
+> **addToWatchHistory**(`client_name`, `client_version`, `replacement`): `Promise`\<`Response`\>
+
+Adds video to the watch history.
+
+#### Parameters
+
+β’ **client\_name**: `string` = `Constants.CLIENTS.WEB.NAME`
+
+β’ **client\_version**: `string` = `Constants.CLIENTS.WEB.VERSION`
+
+β’ **replacement**: `string` = `'https://www.'`
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`addToWatchHistory`](../../Mixins/classes/MediaInfo.md#addtowatchhistory)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:199](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L199)
+
+***
+
+### chooseFormat()
+
+> **chooseFormat**(`options`): [`Format`](../../Misc/classes/Format.md)
+
+Selects the format that best matches the given options.
+
+#### Parameters
+
+β’ **options**: [`FormatOptions`](../../Types/interfaces/FormatOptions.md)
+
+Options
+
+#### Returns
+
+[`Format`](../../Misc/classes/Format.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`chooseFormat`](../../Mixins/classes/MediaInfo.md#chooseformat)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:149](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L149)
+
+***
+
+### download()
+
+> **download**(`options`): `Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+Downloads the video.
+
+#### Parameters
+
+β’ **options**: [`DownloadOptions`](../../Types/interfaces/DownloadOptions.md) = `{}`
+
+Download options.
+
+#### Returns
+
+`Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`download`](../../Mixins/classes/MediaInfo.md#download)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L157)
+
+***
+
+### getStreamingInfo()
+
+> **getStreamingInfo**(`url_transformer`?, `format_filter`?): `StreamingInfo`
+
+Get a cleaned up representation of the adaptive_formats
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+#### Returns
+
+`StreamingInfo`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`getStreamingInfo`](../../Mixins/classes/MediaInfo.md#getstreaminginfo)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L132)
+
+***
+
+### getTranscript()
+
+> **getTranscript**(): `Promise`\<[`TranscriptInfo`](../../YT/classes/TranscriptInfo.md)\>
+
+Retrieves the video's transcript.
+
+#### Returns
+
+`Promise`\<[`TranscriptInfo`](../../YT/classes/TranscriptInfo.md)\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`getTranscript`](../../Mixins/classes/MediaInfo.md#gettranscript)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:170](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L170)
+
+***
+
+### toDash()
+
+> **toDash**(`url_transformer`?, `format_filter`?, `options`?): `Promise`\<`string`\>
+
+Generates a DASH manifest from the streaming data.
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+Function to transform the URLs.
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+Function to filter the formats.
+
+β’ **options?**: `DashOptions` = `...`
+
+Additional options to customise the manifest generation
+
+#### Returns
+
+`Promise`\<`string`\>
+
+DASH manifest
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`toDash`](../../Mixins/classes/MediaInfo.md#todash)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:97](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L97)
diff --git a/docs/api/namespaces/YTMusic/README.md b/docs/api/namespaces/YTMusic/README.md
new file mode 100644
index 000000000..40e3c5acd
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/README.md
@@ -0,0 +1,18 @@
+[youtubei.js](../../README.md) / YTMusic
+
+# YTMusic
+
+## Index
+
+### Classes
+
+- [Album](classes/Album.md)
+- [Artist](classes/Artist.md)
+- [Explore](classes/Explore.md)
+- [HomeFeed](classes/HomeFeed.md)
+- [Library](classes/Library.md)
+- [LibraryContinuation](classes/LibraryContinuation.md)
+- [Playlist](classes/Playlist.md)
+- [Recap](classes/Recap.md)
+- [Search](classes/Search.md)
+- [TrackInfo](classes/TrackInfo.md)
diff --git a/docs/api/namespaces/YTMusic/classes/Album.md b/docs/api/namespaces/YTMusic/classes/Album.md
new file mode 100644
index 000000000..a6cb7f5fc
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Album.md
@@ -0,0 +1,85 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Album
+
+# Class: Album
+
+## Constructors
+
+### new Album()
+
+> **new Album**(`response`): [`Album`](Album.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`Album`](Album.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L24)
+
+## Properties
+
+### background?
+
+> `optional` **background**: [`MusicThumbnail`](../../YTNodes/classes/MusicThumbnail.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L21)
+
+***
+
+### contents
+
+> **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L19)
+
+***
+
+### header?
+
+> `optional` **header**: [`MusicDetailHeader`](../../YTNodes/classes/MusicDetailHeader.md) \| [`MusicResponsiveHeader`](../../YTNodes/classes/MusicResponsiveHeader.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L18)
+
+***
+
+### sections
+
+> **sections**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L20)
+
+***
+
+### url?
+
+> `optional` **url**: `string`
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L22)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Album.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Album.ts#L37)
diff --git a/docs/api/namespaces/YTMusic/classes/Artist.md b/docs/api/namespaces/YTMusic/classes/Artist.md
new file mode 100644
index 000000000..05b67d454
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Artist.md
@@ -0,0 +1,71 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Artist
+
+# Class: Artist
+
+## Constructors
+
+### new Artist()
+
+> **new Artist**(`response`, `actions`): [`Artist`](Artist.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Artist`](Artist.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Artist.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Artist.ts#L23)
+
+## Properties
+
+### header?
+
+> `optional` **header**: [`MusicImmersiveHeader`](../../YTNodes/classes/MusicImmersiveHeader.md) \| [`MusicVisualHeader`](../../YTNodes/classes/MusicVisualHeader.md) \| [`MusicHeader`](../../YTNodes/classes/MusicHeader.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Artist.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Artist.ts#L20)
+
+***
+
+### sections
+
+> **sections**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md) \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Artist.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Artist.ts#L21)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Artist.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Artist.ts#L55)
+
+## Methods
+
+### getAllSongs()
+
+> **getAllSongs**(): `Promise`\<`undefined` \| [`MusicPlaylistShelf`](../../YTNodes/classes/MusicPlaylistShelf.md)\>
+
+#### Returns
+
+`Promise`\<`undefined` \| [`MusicPlaylistShelf`](../../YTNodes/classes/MusicPlaylistShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Artist.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Artist.ts#L35)
diff --git a/docs/api/namespaces/YTMusic/classes/Explore.md b/docs/api/namespaces/YTMusic/classes/Explore.md
new file mode 100644
index 000000000..8f6e5084f
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Explore.md
@@ -0,0 +1,55 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Explore
+
+# Class: Explore
+
+## Constructors
+
+### new Explore()
+
+> **new Explore**(`response`): [`Explore`](Explore.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+#### Returns
+
+[`Explore`](Explore.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Explore.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Explore.ts#L20)
+
+## Properties
+
+### sections
+
+> **sections**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Explore.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Explore.ts#L18)
+
+***
+
+### top\_buttons
+
+> **top\_buttons**: [`MusicNavigationButton`](../../YTNodes/classes/MusicNavigationButton.md)[]
+
+#### Defined in
+
+[src/parser/ytmusic/Explore.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Explore.ts#L17)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Explore.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Explore.ts#L37)
diff --git a/docs/api/namespaces/YTMusic/classes/HomeFeed.md b/docs/api/namespaces/YTMusic/classes/HomeFeed.md
new file mode 100644
index 000000000..b6bf79422
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/HomeFeed.md
@@ -0,0 +1,119 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / HomeFeed
+
+# Class: HomeFeed
+
+## Constructors
+
+### new HomeFeed()
+
+> **new HomeFeed**(`response`, `actions`): [`HomeFeed`](HomeFeed.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`HomeFeed`](HomeFeed.md)
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L22)
+
+## Properties
+
+### header?
+
+> `optional` **header**: [`ChipCloud`](../../YTNodes/classes/ChipCloud.md)
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L20)
+
+***
+
+### sections?
+
+> `optional` **sections**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md) \| [`MusicTastebuilderShelf`](../../YTNodes/classes/MusicTastebuilderShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L19)
+
+## Accessors
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:84](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L84)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:88](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L88)
+
+***
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:92](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L92)
+
+## Methods
+
+### applyFilter()
+
+> **applyFilter**(`target_filter`): `Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+#### Parameters
+
+β’ **target\_filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:61](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L61)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+Retrieves home feed continuation.
+
+#### Returns
+
+`Promise`\<[`HomeFeed`](HomeFeed.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/HomeFeed.ts:49](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/HomeFeed.ts#L49)
diff --git a/docs/api/namespaces/YTMusic/classes/Library.md b/docs/api/namespaces/YTMusic/classes/Library.md
new file mode 100644
index 000000000..d2918beff
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Library.md
@@ -0,0 +1,155 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Library
+
+# Class: Library
+
+## Constructors
+
+### new Library()
+
+> **new Library**(`response`, `actions`): [`Library`](Library.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Library`](Library.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L28)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicShelf`](../../YTNodes/classes/MusicShelf.md) \| [`Grid`](../../YTNodes/classes/Grid.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L26)
+
+***
+
+### header?
+
+> `optional` **header**: [`MusicSideAlignedItem`](../../YTNodes/classes/MusicSideAlignedItem.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L25)
+
+## Accessors
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:141](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L141)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:131](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L131)
+
+***
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:145](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L145)
+
+***
+
+### sort\_options
+
+> `get` **sort\_options**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:135](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L135)
+
+## Methods
+
+### applyFilter()
+
+> **applyFilter**(`filter`): `Promise`\<[`Library`](Library.md)\>
+
+Applies given filter to the library.
+
+#### Parameters
+
+β’ **filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`Library`](Library.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:93](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L93)
+
+***
+
+### applySort()
+
+> **applySort**(`sort_by`): `Promise`\<[`Library`](Library.md)\>
+
+Applies given sort option to the library items.
+
+#### Parameters
+
+β’ **sort\_by**: `string` \| [`MusicMultiSelectMenuItem`](../../YTNodes/classes/MusicMultiSelectMenuItem.md)
+
+#### Returns
+
+`Promise`\<[`Library`](Library.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L43)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`LibraryContinuation`](LibraryContinuation.md)\>
+
+Retrieves continuation of the library items.
+
+#### Returns
+
+`Promise`\<[`LibraryContinuation`](LibraryContinuation.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:119](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L119)
diff --git a/docs/api/namespaces/YTMusic/classes/LibraryContinuation.md b/docs/api/namespaces/YTMusic/classes/LibraryContinuation.md
new file mode 100644
index 000000000..7088285d7
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/LibraryContinuation.md
@@ -0,0 +1,75 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / LibraryContinuation
+
+# Class: LibraryContinuation
+
+## Constructors
+
+### new LibraryContinuation()
+
+> **new LibraryContinuation**(`response`, `actions`): [`LibraryContinuation`](LibraryContinuation.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`LibraryContinuation`](LibraryContinuation.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L157)
+
+## Properties
+
+### contents
+
+> **contents**: [`MusicShelfContinuation`](../../../classes/MusicShelfContinuation.md) \| [`GridContinuation`](../../../classes/GridContinuation.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:155](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L155)
+
+## Accessors
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:181](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L181)
+
+***
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:185](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L185)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`LibraryContinuation`](LibraryContinuation.md)\>
+
+#### Returns
+
+`Promise`\<[`LibraryContinuation`](LibraryContinuation.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Library.ts:169](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Library.ts#L169)
diff --git a/docs/api/namespaces/YTMusic/classes/Playlist.md b/docs/api/namespaces/YTMusic/classes/Playlist.md
new file mode 100644
index 000000000..cca55b516
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Playlist.md
@@ -0,0 +1,145 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Playlist
+
+# Class: Playlist
+
+## Constructors
+
+### new Playlist()
+
+> **new Playlist**(`response`, `actions`): [`Playlist`](Playlist.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Playlist`](Playlist.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L29)
+
+## Properties
+
+### background?
+
+> `optional` **background**: [`MusicThumbnail`](../../YTNodes/classes/MusicThumbnail.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L27)
+
+***
+
+### contents?
+
+> `optional` **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L26)
+
+***
+
+### header?
+
+> `optional` **header**: [`MusicDetailHeader`](../../YTNodes/classes/MusicDetailHeader.md) \| [`MusicResponsiveHeader`](../../YTNodes/classes/MusicResponsiveHeader.md) \| [`MusicEditablePlaylistDetailHeader`](../../YTNodes/classes/MusicEditablePlaylistDetailHeader.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L25)
+
+## Accessors
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:148](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L148)
+
+***
+
+### items
+
+> `get` **items**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:144](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L144)
+
+***
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:140](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L140)
+
+## Methods
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<[`Playlist`](Playlist.md)\>
+
+Retrieves playlist items continuation.
+
+#### Returns
+
+`Promise`\<[`Playlist`](Playlist.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:55](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L55)
+
+***
+
+### getRelated()
+
+> **getRelated**(): `Promise`\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md)\>
+
+Retrieves related playlists
+
+#### Returns
+
+`Promise`\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:70](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L70)
+
+***
+
+### getSuggestions()
+
+> **getSuggestions**(`refresh`): `Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>\>
+
+#### Parameters
+
+β’ **refresh**: `boolean` = `true`
+
+#### Returns
+
+`Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>\>
+
+#### Defined in
+
+[src/parser/ytmusic/Playlist.ts:99](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Playlist.ts#L99)
diff --git a/docs/api/namespaces/YTMusic/classes/Recap.md b/docs/api/namespaces/YTMusic/classes/Recap.md
new file mode 100644
index 000000000..37a6a8d92
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Recap.md
@@ -0,0 +1,73 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Recap
+
+# Class: Recap
+
+## Constructors
+
+### new Recap()
+
+> **new Recap**(`response`, `actions`): [`Recap`](Recap.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+#### Returns
+
+[`Recap`](Recap.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Recap.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Recap.ts#L26)
+
+## Properties
+
+### header?
+
+> `optional` **header**: [`MusicHeader`](../../YTNodes/classes/MusicHeader.md) \| [`HighlightsCarousel`](../../YTNodes/classes/HighlightsCarousel.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Recap.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Recap.ts#L23)
+
+***
+
+### sections?
+
+> `optional` **sections**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ItemSection`](../../YTNodes/classes/ItemSection.md) \| [`Message`](../../YTNodes/classes/Message.md) \| [`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Recap.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Recap.ts#L24)
+
+## Accessors
+
+### page
+
+> `get` **page**(): [`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Returns
+
+[`IBrowseResponse`](../../APIResponseTypes/type-aliases/IBrowseResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Recap.ts:60](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Recap.ts#L60)
+
+## Methods
+
+### getPlaylist()
+
+> **getPlaylist**(): `Promise`\<[`Playlist`](Playlist.md)\>
+
+Retrieves recap playlist.
+
+#### Returns
+
+`Promise`\<[`Playlist`](Playlist.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Recap.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Recap.ts#L47)
diff --git a/docs/api/namespaces/YTMusic/classes/Search.md b/docs/api/namespaces/YTMusic/classes/Search.md
new file mode 100644
index 000000000..9ffad9d59
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/Search.md
@@ -0,0 +1,291 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / Search
+
+# Class: Search
+
+## Constructors
+
+### new Search()
+
+> **new Search**(`response`, `actions`, `is_filtered`?): [`Search`](Search.md)
+
+#### Parameters
+
+β’ **response**: [`ApiResponse`](../../../interfaces/ApiResponse.md)
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **is\_filtered?**: `boolean`
+
+#### Returns
+
+[`Search`](Search.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L29)
+
+## Properties
+
+### contents?
+
+> `optional` **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ItemSection`](../../YTNodes/classes/ItemSection.md) \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md) \| [`MusicCardShelf`](../../YTNodes/classes/MusicCardShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L27)
+
+***
+
+### header?
+
+> `optional` **header**: [`ChipCloud`](../../YTNodes/classes/ChipCloud.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L26)
+
+## Accessors
+
+### albums
+
+> `get` **albums**(): `undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Returns
+
+`undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:138](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L138)
+
+***
+
+### artists
+
+> `get` **artists**(): `undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Returns
+
+`undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:142](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L142)
+
+***
+
+### did\_you\_mean
+
+> `get` **did\_you\_mean**(): `undefined` \| [`DidYouMean`](../../YTNodes/classes/DidYouMean.md)
+
+#### Returns
+
+`undefined` \| [`DidYouMean`](../../YTNodes/classes/DidYouMean.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:118](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L118)
+
+***
+
+### filters
+
+> `get` **filters**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:110](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L110)
+
+***
+
+### has\_continuation
+
+> `get` **has\_continuation**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:114](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L114)
+
+***
+
+### message
+
+> `get` **message**(): `undefined` \| [`Message`](../../YTNodes/classes/Message.md)
+
+#### Returns
+
+`undefined` \| [`Message`](../../YTNodes/classes/Message.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L126)
+
+***
+
+### page
+
+> `get` **page**(): [`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)
+
+#### Returns
+
+[`ISearchResponse`](../../APIResponseTypes/type-aliases/ISearchResponse.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:164](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L164)
+
+***
+
+### playlists
+
+> `get` **playlists**(): `undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Returns
+
+`undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:146](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L146)
+
+***
+
+### results
+
+> `get` **results**(): `undefined` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>
+
+#### Deprecated
+
+Use [Search.contents](Search.md#contents) instead.
+
+#### Returns
+
+`undefined` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicResponsiveListItem`](../../YTNodes/classes/MusicResponsiveListItem.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:153](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L153)
+
+***
+
+### sections
+
+> `get` **sections**(): `undefined` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicShelf`](../../YTNodes/classes/MusicShelf.md)\>
+
+#### Deprecated
+
+Use [Search.contents](Search.md#contents) instead.
+
+#### Returns
+
+`undefined` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicShelf`](../../YTNodes/classes/MusicShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:160](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L160)
+
+***
+
+### showing\_results\_for
+
+> `get` **showing\_results\_for**(): `undefined` \| [`ShowingResultsFor`](../../YTNodes/classes/ShowingResultsFor.md)
+
+#### Returns
+
+`undefined` \| [`ShowingResultsFor`](../../YTNodes/classes/ShowingResultsFor.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:122](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L122)
+
+***
+
+### songs
+
+> `get` **songs**(): `undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Returns
+
+`undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:130](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L130)
+
+***
+
+### videos
+
+> `get` **videos**(): `undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Returns
+
+`undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:134](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L134)
+
+## Methods
+
+### applyFilter()
+
+> **applyFilter**(`target_filter`): `Promise`\<[`Search`](Search.md)\>
+
+Applies given filter to the search.
+
+#### Parameters
+
+β’ **target\_filter**: `string` \| [`ChipCloudChip`](../../YTNodes/classes/ChipCloudChip.md)
+
+#### Returns
+
+`Promise`\<[`Search`](Search.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:87](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L87)
+
+***
+
+### getContinuation()
+
+> **getContinuation**(): `Promise`\<`SearchContinuation`\>
+
+Retrieves search continuation. Only available for filtered searches and shelf continuations.
+
+#### Returns
+
+`Promise`\<`SearchContinuation`\>
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:72](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L72)
+
+***
+
+### getMore()
+
+> **getMore**(`shelf`): `Promise`\<[`Search`](Search.md)\>
+
+Loads more items for the given shelf.
+
+#### Parameters
+
+β’ **shelf**: `undefined` \| [`MusicShelf`](../../YTNodes/classes/MusicShelf.md)
+
+#### Returns
+
+`Promise`\<[`Search`](Search.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/Search.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/Search.ts#L57)
diff --git a/docs/api/namespaces/YTMusic/classes/TrackInfo.md b/docs/api/namespaces/YTMusic/classes/TrackInfo.md
new file mode 100644
index 000000000..823906d1e
--- /dev/null
+++ b/docs/api/namespaces/YTMusic/classes/TrackInfo.md
@@ -0,0 +1,621 @@
+[youtubei.js](../../../README.md) / [YTMusic](../README.md) / TrackInfo
+
+# Class: TrackInfo
+
+## Extends
+
+- [`MediaInfo`](../../Mixins/classes/MediaInfo.md)
+
+## Constructors
+
+### new TrackInfo()
+
+> **new TrackInfo**(`data`, `actions`, `cpn`): [`TrackInfo`](TrackInfo.md)
+
+#### Parameters
+
+β’ **data**: [[`ApiResponse`](../../../interfaces/ApiResponse.md), `ApiResponse?`]
+
+β’ **actions**: [`Actions`](../../../classes/Actions.md)
+
+β’ **cpn**: `string`
+
+#### Returns
+
+[`TrackInfo`](TrackInfo.md)
+
+#### Overrides
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`constructor`](../../Mixins/classes/MediaInfo.md#constructors)
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L26)
+
+## Properties
+
+### annotations?
+
+> `optional` **annotations**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`PlayerAnnotationsExpanded`](../../YTNodes/classes/PlayerAnnotationsExpanded.md)\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`annotations`](../../Mixins/classes/MediaInfo.md#annotations)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L31)
+
+***
+
+### basic\_info
+
+> **basic\_info**: `object`
+
+#### allow\_ratings?
+
+> `optional` **allow\_ratings**: `boolean`
+
+#### author?
+
+> `optional` **author**: `string`
+
+#### category
+
+> **category**: `null` \| `string`
+
+#### channel
+
+> **channel**: `null` \| `object`
+
+#### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### duration?
+
+> `optional` **duration**: `number`
+
+#### embed
+
+> **embed**: `undefined` \| `null` \| `object`
+
+#### end\_timestamp
+
+> **end\_timestamp**: `null` \| `Date`
+
+#### has\_ypc\_metadata
+
+> **has\_ypc\_metadata**: `null` \| `boolean`
+
+#### id?
+
+> `optional` **id**: `string`
+
+#### is\_crawlable?
+
+> `optional` **is\_crawlable**: `boolean`
+
+#### is\_disliked
+
+> **is\_disliked**: `undefined` \| `boolean`
+
+#### is\_family\_safe
+
+> **is\_family\_safe**: `undefined` \| `boolean` = `info.microformat.is_family_safe`
+
+#### is\_liked
+
+> **is\_liked**: `undefined` \| `boolean`
+
+#### is\_live?
+
+> `optional` **is\_live**: `boolean`
+
+#### is\_live\_content?
+
+> `optional` **is\_live\_content**: `boolean`
+
+#### is\_live\_dvr\_enabled?
+
+> `optional` **is\_live\_dvr\_enabled**: `boolean`
+
+#### is\_low\_latency\_live\_stream?
+
+> `optional` **is\_low\_latency\_live\_stream**: `boolean`
+
+#### is\_owner\_viewing?
+
+> `optional` **is\_owner\_viewing**: `boolean`
+
+#### is\_post\_live\_dvr?
+
+> `optional` **is\_post\_live\_dvr**: `boolean`
+
+#### is\_private?
+
+> `optional` **is\_private**: `boolean`
+
+#### is\_unlisted
+
+> **is\_unlisted**: `undefined` \| `boolean` = `info.microformat.is_unlisted`
+
+#### is\_upcoming?
+
+> `optional` **is\_upcoming**: `boolean`
+
+#### keywords?
+
+> `optional` **keywords**: `string`[]
+
+#### like\_count
+
+> **like\_count**: `undefined` \| `number`
+
+#### live\_chunk\_readahead?
+
+> `optional` **live\_chunk\_readahead**: `number`
+
+#### short\_description?
+
+> `optional` **short\_description**: `string`
+
+#### start\_timestamp
+
+> **start\_timestamp**: `null` \| `Date`
+
+#### tags
+
+> **tags**: `null` \| `string`[]
+
+#### thumbnail?
+
+> `optional` **thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### title?
+
+> `optional` **title**: `string`
+
+#### url\_canonical
+
+> **url\_canonical**: `null` \| `string`
+
+#### view\_count
+
+> **view\_count**: `undefined` \| `number`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`basic_info`](../../Mixins/classes/MediaInfo.md#basic_info)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L30)
+
+***
+
+### captions?
+
+> `optional` **captions**: [`PlayerCaptionsTracklist`](../../YTNodes/classes/PlayerCaptionsTracklist.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`captions`](../../Mixins/classes/MediaInfo.md#captions)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L34)
+
+***
+
+### cards?
+
+> `optional` **cards**: [`CardCollection`](../../YTNodes/classes/CardCollection.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`cards`](../../Mixins/classes/MediaInfo.md#cards)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L35)
+
+***
+
+### current\_video\_endpoint?
+
+> `optional` **current\_video\_endpoint**: [`NavigationEndpoint`](../../YTNodes/classes/NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L23)
+
+***
+
+### endscreen?
+
+> `optional` **endscreen**: [`Endscreen`](../../YTNodes/classes/Endscreen.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`endscreen`](../../Mixins/classes/MediaInfo.md#endscreen)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L33)
+
+***
+
+### playability\_status?
+
+> `optional` **playability\_status**: [`IPlayabilityStatus`](../../APIResponseTypes/interfaces/IPlayabilityStatus.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`playability_status`](../../Mixins/classes/MediaInfo.md#playability_status)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L37)
+
+***
+
+### player\_config?
+
+> `optional` **player\_config**: [`IPlayerConfig`](../../APIResponseTypes/interfaces/IPlayerConfig.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`player_config`](../../Mixins/classes/MediaInfo.md#player_config)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L38)
+
+***
+
+### player\_overlays?
+
+> `optional` **player\_overlays**: [`PlayerOverlay`](../../YTNodes/classes/PlayerOverlay.md)
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L24)
+
+***
+
+### storyboards?
+
+> `optional` **storyboards**: [`PlayerLiveStoryboardSpec`](../../YTNodes/classes/PlayerLiveStoryboardSpec.md) \| [`PlayerStoryboardSpec`](../../YTNodes/classes/PlayerStoryboardSpec.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`storyboards`](../../Mixins/classes/MediaInfo.md#storyboards)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L32)
+
+***
+
+### streaming\_data?
+
+> `optional` **streaming\_data**: [`IStreamingData`](../../APIResponseTypes/interfaces/IStreamingData.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`streaming_data`](../../Mixins/classes/MediaInfo.md#streaming_data)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L36)
+
+***
+
+### tabs?
+
+> `optional` **tabs**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Tab`](../../YTNodes/classes/Tab.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L22)
+
+## Accessors
+
+### actions
+
+> `get` **actions**(): [`Actions`](../../../classes/Actions.md)
+
+Actions instance.
+
+#### Returns
+
+[`Actions`](../../../classes/Actions.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`actions`](../../Mixins/classes/MediaInfo.md#actions)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:223](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L223)
+
+***
+
+### available\_tabs
+
+> `get` **available\_tabs**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:126](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L126)
+
+***
+
+### cpn
+
+> `get` **cpn**(): `string`
+
+Content Playback Nonce.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`cpn`](../../Mixins/classes/MediaInfo.md#cpn)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:230](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L230)
+
+***
+
+### page
+
+> `get` **page**(): [[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+Original parsed InnerTube response.
+
+#### Returns
+
+[[`IPlayerResponse`](../../APIResponseTypes/type-aliases/IPlayerResponse.md), `INextResponse?`]
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`page`](../../Mixins/classes/MediaInfo.md#page)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:237](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L237)
+
+## Methods
+
+### addToWatchHistory()
+
+> **addToWatchHistory**(): `Promise`\<`Response`\>
+
+Adds the song to the watch history.
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Overrides
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`addToWatchHistory`](../../Mixins/classes/MediaInfo.md#addtowatchhistory)
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:122](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L122)
+
+***
+
+### chooseFormat()
+
+> **chooseFormat**(`options`): [`Format`](../../Misc/classes/Format.md)
+
+Selects the format that best matches the given options.
+
+#### Parameters
+
+β’ **options**: [`FormatOptions`](../../Types/interfaces/FormatOptions.md)
+
+Options
+
+#### Returns
+
+[`Format`](../../Misc/classes/Format.md)
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`chooseFormat`](../../Mixins/classes/MediaInfo.md#chooseformat)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:149](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L149)
+
+***
+
+### download()
+
+> **download**(`options`): `Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+Downloads the video.
+
+#### Parameters
+
+β’ **options**: [`DownloadOptions`](../../Types/interfaces/DownloadOptions.md) = `{}`
+
+Download options.
+
+#### Returns
+
+`Promise`\<`ReadableStream`\<`Uint8Array`\>\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`download`](../../Mixins/classes/MediaInfo.md#download)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:157](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L157)
+
+***
+
+### getLyrics()
+
+> **getLyrics**(): `Promise`\<`undefined` \| [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)\>
+
+Retrieves lyrics.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:114](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L114)
+
+***
+
+### getRelated()
+
+> **getRelated**(): `Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md) \| [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)\>\>
+
+Retrieves related content.
+
+#### Returns
+
+`Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`MusicCarouselShelf`](../../YTNodes/classes/MusicCarouselShelf.md) \| [`MusicDescriptionShelf`](../../YTNodes/classes/MusicDescriptionShelf.md)\>\>
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:106](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L106)
+
+***
+
+### getStreamingInfo()
+
+> **getStreamingInfo**(`url_transformer`?, `format_filter`?): `StreamingInfo`
+
+Get a cleaned up representation of the adaptive_formats
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+#### Returns
+
+`StreamingInfo`
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`getStreamingInfo`](../../Mixins/classes/MediaInfo.md#getstreaminginfo)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:132](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L132)
+
+***
+
+### getTab()
+
+> **getTab**(`title_or_page_type`): `Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\> \| [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md) \| [`Message`](../../YTNodes/classes/Message.md)\>
+
+Retrieves contents of the given tab.
+
+#### Parameters
+
+β’ **title\_or\_page\_type**: `string`
+
+#### Returns
+
+`Promise`\<[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\> \| [`SectionList`](../../YTNodes/classes/SectionList.md) \| [`MusicQueue`](../../YTNodes/classes/MusicQueue.md) \| [`RichGrid`](../../YTNodes/classes/RichGrid.md) \| [`Message`](../../YTNodes/classes/Message.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L45)
+
+***
+
+### getTranscript()
+
+> **getTranscript**(): `Promise`\<[`TranscriptInfo`](../../YT/classes/TranscriptInfo.md)\>
+
+Retrieves the video's transcript.
+
+#### Returns
+
+`Promise`\<[`TranscriptInfo`](../../YT/classes/TranscriptInfo.md)\>
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`getTranscript`](../../Mixins/classes/MediaInfo.md#gettranscript)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:170](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L170)
+
+***
+
+### getUpNext()
+
+> **getUpNext**(`automix`): `Promise`\<[`PlaylistPanel`](../../YTNodes/classes/PlaylistPanel.md)\>
+
+Retrieves up next.
+
+#### Parameters
+
+β’ **automix**: `boolean` = `true`
+
+#### Returns
+
+`Promise`\<[`PlaylistPanel`](../../YTNodes/classes/PlaylistPanel.md)\>
+
+#### Defined in
+
+[src/parser/ytmusic/TrackInfo.ts:74](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/ytmusic/TrackInfo.ts#L74)
+
+***
+
+### toDash()
+
+> **toDash**(`url_transformer`?, `format_filter`?, `options`?): `Promise`\<`string`\>
+
+Generates a DASH manifest from the streaming data.
+
+#### Parameters
+
+β’ **url\_transformer?**: [`URLTransformer`](../../Types/type-aliases/URLTransformer.md)
+
+Function to transform the URLs.
+
+β’ **format\_filter?**: [`FormatFilter`](../../Types/type-aliases/FormatFilter.md)
+
+Function to filter the formats.
+
+β’ **options?**: `DashOptions` = `...`
+
+Additional options to customise the manifest generation
+
+#### Returns
+
+`Promise`\<`string`\>
+
+DASH manifest
+
+#### Inherited from
+
+[`MediaInfo`](../../Mixins/classes/MediaInfo.md).[`toDash`](../../Mixins/classes/MediaInfo.md#todash)
+
+#### Defined in
+
+[src/core/mixins/MediaInfo.ts:97](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/core/mixins/MediaInfo.ts#L97)
diff --git a/docs/api/namespaces/YTNodes/README.md b/docs/api/namespaces/YTNodes/README.md
new file mode 100644
index 000000000..389b1fc1d
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/README.md
@@ -0,0 +1,450 @@
+[youtubei.js](../../README.md) / YTNodes
+
+# YTNodes
+
+## Index
+
+### Classes
+
+- [AboutChannel](classes/AboutChannel.md)
+- [AboutChannelView](classes/AboutChannelView.md)
+- [AccountChannel](classes/AccountChannel.md)
+- [AccountItemSection](classes/AccountItemSection.md)
+- [AccountItemSectionHeader](classes/AccountItemSectionHeader.md)
+- [AccountSectionList](classes/AccountSectionList.md)
+- [AddBannerToLiveChatCommand](classes/AddBannerToLiveChatCommand.md)
+- [AddChatItemAction](classes/AddChatItemAction.md)
+- [AddLiveChatTickerItemAction](classes/AddLiveChatTickerItemAction.md)
+- [Alert](classes/Alert.md)
+- [AlertWithButton](classes/AlertWithButton.md)
+- [AnalyticsMainAppKeyMetrics](classes/AnalyticsMainAppKeyMetrics.md)
+- [AnalyticsRoot](classes/AnalyticsRoot.md)
+- [AnalyticsShortsCarouselCard](classes/AnalyticsShortsCarouselCard.md)
+- [AnalyticsVideo](classes/AnalyticsVideo.md)
+- [AnalyticsVodCarouselCard](classes/AnalyticsVodCarouselCard.md)
+- [AnchoredSection](classes/AnchoredSection.md)
+- [AppendContinuationItemsAction](classes/AppendContinuationItemsAction.md)
+- [AttributionView](classes/AttributionView.md)
+- [AudioOnlyPlayability](classes/AudioOnlyPlayability.md)
+- [AuthorCommentBadge](classes/AuthorCommentBadge.md)
+- [AutomixPreviewVideo](classes/AutomixPreviewVideo.md)
+- [AvatarView](classes/AvatarView.md)
+- [BackstageImage](classes/BackstageImage.md)
+- [BackstagePost](classes/BackstagePost.md)
+- [BackstagePostThread](classes/BackstagePostThread.md)
+- [BadgeView](classes/BadgeView.md)
+- [BrowseFeedActions](classes/BrowseFeedActions.md)
+- [BrowserMediaSession](classes/BrowserMediaSession.md)
+- [Button](classes/Button.md)
+- [ButtonView](classes/ButtonView.md)
+- [C4TabbedHeader](classes/C4TabbedHeader.md)
+- [CallToActionButton](classes/CallToActionButton.md)
+- [Card](classes/Card.md)
+- [CardCollection](classes/CardCollection.md)
+- [CarouselHeader](classes/CarouselHeader.md)
+- [CarouselItem](classes/CarouselItem.md)
+- [CarouselLockup](classes/CarouselLockup.md)
+- [Channel](classes/Channel.md)
+- [ChannelAboutFullMetadata](classes/ChannelAboutFullMetadata.md)
+- [ChannelAgeGate](classes/ChannelAgeGate.md)
+- [ChannelExternalLinkView](classes/ChannelExternalLinkView.md)
+- [ChannelFeaturedContent](classes/ChannelFeaturedContent.md)
+- [ChannelHeaderLinks](classes/ChannelHeaderLinks.md)
+- [ChannelHeaderLinksView](classes/ChannelHeaderLinksView.md)
+- [ChannelMetadata](classes/ChannelMetadata.md)
+- [ChannelMobileHeader](classes/ChannelMobileHeader.md)
+- [ChannelOptions](classes/ChannelOptions.md)
+- [ChannelOwnerEmptyState](classes/ChannelOwnerEmptyState.md)
+- [ChannelSubMenu](classes/ChannelSubMenu.md)
+- [ChannelTagline](classes/ChannelTagline.md)
+- [ChannelThumbnailWithLink](classes/ChannelThumbnailWithLink.md)
+- [ChannelVideoPlayer](classes/ChannelVideoPlayer.md)
+- [Chapter](classes/Chapter.md)
+- [ChildVideo](classes/ChildVideo.md)
+- [ChipBarView](classes/ChipBarView.md)
+- [ChipCloud](classes/ChipCloud.md)
+- [ChipCloudChip](classes/ChipCloudChip.md)
+- [ChipView](classes/ChipView.md)
+- [ClipAdState](classes/ClipAdState.md)
+- [ClipCreation](classes/ClipCreation.md)
+- [ClipCreationScrubber](classes/ClipCreationScrubber.md)
+- [ClipCreationTextInput](classes/ClipCreationTextInput.md)
+- [ClipSection](classes/ClipSection.md)
+- [CollaboratorInfoCardContent](classes/CollaboratorInfoCardContent.md)
+- [CollageHeroImage](classes/CollageHeroImage.md)
+- [CollectionThumbnailView](classes/CollectionThumbnailView.md)
+- [Comment](classes/Comment.md)
+- [CommentActionButtons](classes/CommentActionButtons.md)
+- [CommentDialog](classes/CommentDialog.md)
+- [CommentReplies](classes/CommentReplies.md)
+- [CommentReplyDialog](classes/CommentReplyDialog.md)
+- [CommentsEntryPointHeader](classes/CommentsEntryPointHeader.md)
+- [CommentsEntryPointTeaser](classes/CommentsEntryPointTeaser.md)
+- [CommentsHeader](classes/CommentsHeader.md)
+- [CommentSimplebox](classes/CommentSimplebox.md)
+- [CommentsSimplebox](classes/CommentsSimplebox.md)
+- [CommentThread](classes/CommentThread.md)
+- [CommentView](classes/CommentView.md)
+- [CompactChannel](classes/CompactChannel.md)
+- [CompactLink](classes/CompactLink.md)
+- [CompactMix](classes/CompactMix.md)
+- [CompactMovie](classes/CompactMovie.md)
+- [CompactPlaylist](classes/CompactPlaylist.md)
+- [CompactStation](classes/CompactStation.md)
+- [CompactVideo](classes/CompactVideo.md)
+- [ConfirmDialog](classes/ConfirmDialog.md)
+- [ContentMetadataView](classes/ContentMetadataView.md)
+- [ContentPreviewImageView](classes/ContentPreviewImageView.md)
+- [ContinuationItem](classes/ContinuationItem.md)
+- [ConversationBar](classes/ConversationBar.md)
+- [CopyLink](classes/CopyLink.md)
+- [CreatePlaylistDialog](classes/CreatePlaylistDialog.md)
+- [CreatorHeart](classes/CreatorHeart.md)
+- [CtaGoToCreatorStudio](classes/CtaGoToCreatorStudio.md)
+- [DataModelSection](classes/DataModelSection.md)
+- [DecoratedAvatarView](classes/DecoratedAvatarView.md)
+- [DecoratedPlayerBar](classes/DecoratedPlayerBar.md)
+- [DefaultPromoPanel](classes/DefaultPromoPanel.md)
+- [DescriptionPreviewView](classes/DescriptionPreviewView.md)
+- [DidYouMean](classes/DidYouMean.md)
+- [DimChatItemAction](classes/DimChatItemAction.md)
+- [DislikeButtonView](classes/DislikeButtonView.md)
+- [DownloadButton](classes/DownloadButton.md)
+- [Dropdown](classes/Dropdown.md)
+- [DropdownItem](classes/DropdownItem.md)
+- [DynamicTextView](classes/DynamicTextView.md)
+- [Element](classes/Element.md)
+- [EmergencyOnebox](classes/EmergencyOnebox.md)
+- [EmojiPicker](classes/EmojiPicker.md)
+- [EmojiPickerCategory](classes/EmojiPickerCategory.md)
+- [EmojiPickerCategoryButton](classes/EmojiPickerCategoryButton.md)
+- [EmojiPickerUpsellCategory](classes/EmojiPickerUpsellCategory.md)
+- [Endscreen](classes/Endscreen.md)
+- [EndscreenElement](classes/EndscreenElement.md)
+- [EndScreenPlaylist](classes/EndScreenPlaylist.md)
+- [EndScreenVideo](classes/EndScreenVideo.md)
+- [EngagementPanelSectionList](classes/EngagementPanelSectionList.md)
+- [EngagementPanelTitleHeader](classes/EngagementPanelTitleHeader.md)
+- [EomSettingsDisclaimer](classes/EomSettingsDisclaimer.md)
+- [ExpandableMetadata](classes/ExpandableMetadata.md)
+- [ExpandableTab](classes/ExpandableTab.md)
+- [ExpandableVideoDescriptionBody](classes/ExpandableVideoDescriptionBody.md)
+- [ExpandedShelfContents](classes/ExpandedShelfContents.md)
+- [Factoid](classes/Factoid.md)
+- [FancyDismissibleDialog](classes/FancyDismissibleDialog.md)
+- [FeedFilterChipBar](classes/FeedFilterChipBar.md)
+- [FeedNudge](classes/FeedNudge.md)
+- [FeedTabbedHeader](classes/FeedTabbedHeader.md)
+- [FlexibleActionsView](classes/FlexibleActionsView.md)
+- [GameCard](classes/GameCard.md)
+- [GameDetails](classes/GameDetails.md)
+- [Grid](classes/Grid.md)
+- [GridChannel](classes/GridChannel.md)
+- [GridHeader](classes/GridHeader.md)
+- [GridMix](classes/GridMix.md)
+- [GridMovie](classes/GridMovie.md)
+- [GridPlaylist](classes/GridPlaylist.md)
+- [GridShow](classes/GridShow.md)
+- [GridVideo](classes/GridVideo.md)
+- [GuideCollapsibleEntry](classes/GuideCollapsibleEntry.md)
+- [GuideCollapsibleSectionEntry](classes/GuideCollapsibleSectionEntry.md)
+- [GuideDownloadsEntry](classes/GuideDownloadsEntry.md)
+- [GuideEntry](classes/GuideEntry.md)
+- [GuideSection](classes/GuideSection.md)
+- [GuideSubscriptionsSection](classes/GuideSubscriptionsSection.md)
+- [HashtagHeader](classes/HashtagHeader.md)
+- [HashtagTile](classes/HashtagTile.md)
+- [Heatmap](classes/Heatmap.md)
+- [HeatMarker](classes/HeatMarker.md)
+- [HeroPlaylistThumbnail](classes/HeroPlaylistThumbnail.md)
+- [HighlightsCarousel](classes/HighlightsCarousel.md)
+- [HistorySuggestion](classes/HistorySuggestion.md)
+- [HorizontalCardList](classes/HorizontalCardList.md)
+- [HorizontalList](classes/HorizontalList.md)
+- [HorizontalMovieList](classes/HorizontalMovieList.md)
+- [IconLink](classes/IconLink.md)
+- [ImageBannerView](classes/ImageBannerView.md)
+- [IncludingResultsFor](classes/IncludingResultsFor.md)
+- [InfoPanelContainer](classes/InfoPanelContainer.md)
+- [InfoPanelContent](classes/InfoPanelContent.md)
+- [InfoRow](classes/InfoRow.md)
+- [InteractiveTabbedHeader](classes/InteractiveTabbedHeader.md)
+- [ItemSection](classes/ItemSection.md)
+- [ItemSectionHeader](classes/ItemSectionHeader.md)
+- [ItemSectionTab](classes/ItemSectionTab.md)
+- [ItemSectionTabbedHeader](classes/ItemSectionTabbedHeader.md)
+- [KidsBlocklistPicker](classes/KidsBlocklistPicker.md)
+- [KidsBlocklistPickerItem](classes/KidsBlocklistPickerItem.md)
+- [KidsCategoriesHeader](classes/KidsCategoriesHeader.md)
+- [KidsCategoryTab](classes/KidsCategoryTab.md)
+- [KidsHomeScreen](classes/KidsHomeScreen.md)
+- [LikeButton](classes/LikeButton.md)
+- [LikeButtonView](classes/LikeButtonView.md)
+- [LiveChat](classes/LiveChat.md)
+- [LiveChatActionPanel](classes/LiveChatActionPanel.md)
+- [LiveChatAuthorBadge](classes/LiveChatAuthorBadge.md)
+- [LiveChatAutoModMessage](classes/LiveChatAutoModMessage.md)
+- [LiveChatBanner](classes/LiveChatBanner.md)
+- [LiveChatBannerHeader](classes/LiveChatBannerHeader.md)
+- [LiveChatBannerPoll](classes/LiveChatBannerPoll.md)
+- [LiveChatDialog](classes/LiveChatDialog.md)
+- [LiveChatHeader](classes/LiveChatHeader.md)
+- [LiveChatItemList](classes/LiveChatItemList.md)
+- [LiveChatMembershipItem](classes/LiveChatMembershipItem.md)
+- [LiveChatMessageInput](classes/LiveChatMessageInput.md)
+- [LiveChatPaidMessage](classes/LiveChatPaidMessage.md)
+- [LiveChatPaidSticker](classes/LiveChatPaidSticker.md)
+- [LiveChatParticipant](classes/LiveChatParticipant.md)
+- [LiveChatParticipantsList](classes/LiveChatParticipantsList.md)
+- [LiveChatPlaceholderItem](classes/LiveChatPlaceholderItem.md)
+- [LiveChatProductItem](classes/LiveChatProductItem.md)
+- [LiveChatRestrictedParticipation](classes/LiveChatRestrictedParticipation.md)
+- [LiveChatTextMessage](classes/LiveChatTextMessage.md)
+- [LiveChatTickerPaidMessageItem](classes/LiveChatTickerPaidMessageItem.md)
+- [LiveChatTickerPaidStickerItem](classes/LiveChatTickerPaidStickerItem.md)
+- [LiveChatTickerSponsorItem](classes/LiveChatTickerSponsorItem.md)
+- [LiveChatViewerEngagementMessage](classes/LiveChatViewerEngagementMessage.md)
+- [LockupMetadataView](classes/LockupMetadataView.md)
+- [LockupView](classes/LockupView.md)
+- [MacroMarkersInfoItem](classes/MacroMarkersInfoItem.md)
+- [MacroMarkersList](classes/MacroMarkersList.md)
+- [MacroMarkersListItem](classes/MacroMarkersListItem.md)
+- [MarkChatItemAsDeletedAction](classes/MarkChatItemAsDeletedAction.md)
+- [MarkChatItemsByAuthorAsDeletedAction](classes/MarkChatItemsByAuthorAsDeletedAction.md)
+- [Menu](classes/Menu.md)
+- [MenuNavigationItem](classes/MenuNavigationItem.md)
+- [MenuPopup](classes/MenuPopup.md)
+- [MenuServiceItem](classes/MenuServiceItem.md)
+- [MenuServiceItemDownload](classes/MenuServiceItemDownload.md)
+- [MerchandiseItem](classes/MerchandiseItem.md)
+- [MerchandiseShelf](classes/MerchandiseShelf.md)
+- [Message](classes/Message.md)
+- [MetadataBadge](classes/MetadataBadge.md)
+- [MetadataRow](classes/MetadataRow.md)
+- [MetadataRowContainer](classes/MetadataRowContainer.md)
+- [MetadataRowHeader](classes/MetadataRowHeader.md)
+- [MetadataScreen](classes/MetadataScreen.md)
+- [MicroformatData](classes/MicroformatData.md)
+- [Mix](classes/Mix.md)
+- [ModalWithTitleAndButton](classes/ModalWithTitleAndButton.md)
+- [Movie](classes/Movie.md)
+- [MovingThumbnail](classes/MovingThumbnail.md)
+- [MultiMarkersPlayerBar](classes/MultiMarkersPlayerBar.md)
+- [MultiPageMenu](classes/MultiPageMenu.md)
+- [MultiPageMenuNotificationSection](classes/MultiPageMenuNotificationSection.md)
+- [MusicCardShelf](classes/MusicCardShelf.md)
+- [MusicCardShelfHeaderBasic](classes/MusicCardShelfHeaderBasic.md)
+- [MusicCarouselShelf](classes/MusicCarouselShelf.md)
+- [MusicCarouselShelfBasicHeader](classes/MusicCarouselShelfBasicHeader.md)
+- [MusicDescriptionShelf](classes/MusicDescriptionShelf.md)
+- [MusicDetailHeader](classes/MusicDetailHeader.md)
+- [MusicDownloadStateBadge](classes/MusicDownloadStateBadge.md)
+- [MusicEditablePlaylistDetailHeader](classes/MusicEditablePlaylistDetailHeader.md)
+- [MusicElementHeader](classes/MusicElementHeader.md)
+- [MusicHeader](classes/MusicHeader.md)
+- [MusicImmersiveHeader](classes/MusicImmersiveHeader.md)
+- [MusicInlineBadge](classes/MusicInlineBadge.md)
+- [MusicItemThumbnailOverlay](classes/MusicItemThumbnailOverlay.md)
+- [MusicLargeCardItemCarousel](classes/MusicLargeCardItemCarousel.md)
+- [MusicMenuItemDivider](classes/MusicMenuItemDivider.md)
+- [MusicMultiRowListItem](classes/MusicMultiRowListItem.md)
+- [MusicMultiSelectMenu](classes/MusicMultiSelectMenu.md)
+- [MusicMultiSelectMenuItem](classes/MusicMultiSelectMenuItem.md)
+- [MusicNavigationButton](classes/MusicNavigationButton.md)
+- [MusicPlayButton](classes/MusicPlayButton.md)
+- [MusicPlaylistEditHeader](classes/MusicPlaylistEditHeader.md)
+- [MusicPlaylistShelf](classes/MusicPlaylistShelf.md)
+- [MusicQueue](classes/MusicQueue.md)
+- [MusicResponsiveHeader](classes/MusicResponsiveHeader.md)
+- [MusicResponsiveListItem](classes/MusicResponsiveListItem.md)
+- [MusicResponsiveListItemFixedColumn](classes/MusicResponsiveListItemFixedColumn.md)
+- [MusicResponsiveListItemFlexColumn](classes/MusicResponsiveListItemFlexColumn.md)
+- [MusicShelf](classes/MusicShelf.md)
+- [MusicSideAlignedItem](classes/MusicSideAlignedItem.md)
+- [MusicSortFilterButton](classes/MusicSortFilterButton.md)
+- [MusicTastebuilderShelf](classes/MusicTastebuilderShelf.md)
+- [MusicTastebuilderShelfThumbnail](classes/MusicTastebuilderShelfThumbnail.md)
+- [MusicThumbnail](classes/MusicThumbnail.md)
+- [MusicTwoRowItem](classes/MusicTwoRowItem.md)
+- [MusicVisualHeader](classes/MusicVisualHeader.md)
+- [NavigationEndpoint](classes/NavigationEndpoint.md)
+- [Notification](classes/Notification.md)
+- [OpenPopupAction](classes/OpenPopupAction.md)
+- [PageHeader](classes/PageHeader.md)
+- [PageHeaderView](classes/PageHeaderView.md)
+- [PageIntroduction](classes/PageIntroduction.md)
+- [PdgCommentChip](classes/PdgCommentChip.md)
+- [PivotButton](classes/PivotButton.md)
+- [PlayerAnnotationsExpanded](classes/PlayerAnnotationsExpanded.md)
+- [PlayerCaptionsTracklist](classes/PlayerCaptionsTracklist.md)
+- [PlayerControlsOverlay](classes/PlayerControlsOverlay.md)
+- [PlayerErrorMessage](classes/PlayerErrorMessage.md)
+- [PlayerLegacyDesktopYpcOffer](classes/PlayerLegacyDesktopYpcOffer.md)
+- [PlayerLegacyDesktopYpcTrailer](classes/PlayerLegacyDesktopYpcTrailer.md)
+- [PlayerLiveStoryboardSpec](classes/PlayerLiveStoryboardSpec.md)
+- [PlayerMicroformat](classes/PlayerMicroformat.md)
+- [PlayerOverflow](classes/PlayerOverflow.md)
+- [PlayerOverlay](classes/PlayerOverlay.md)
+- [PlayerOverlayAutoplay](classes/PlayerOverlayAutoplay.md)
+- [PlayerStoryboardSpec](classes/PlayerStoryboardSpec.md)
+- [Playlist](classes/Playlist.md)
+- [PlaylistCustomThumbnail](classes/PlaylistCustomThumbnail.md)
+- [PlaylistHeader](classes/PlaylistHeader.md)
+- [PlaylistInfoCardContent](classes/PlaylistInfoCardContent.md)
+- [PlaylistMetadata](classes/PlaylistMetadata.md)
+- [PlaylistPanel](classes/PlaylistPanel.md)
+- [PlaylistPanelVideo](classes/PlaylistPanelVideo.md)
+- [PlaylistPanelVideoWrapper](classes/PlaylistPanelVideoWrapper.md)
+- [PlaylistSidebar](classes/PlaylistSidebar.md)
+- [PlaylistSidebarPrimaryInfo](classes/PlaylistSidebarPrimaryInfo.md)
+- [PlaylistSidebarSecondaryInfo](classes/PlaylistSidebarSecondaryInfo.md)
+- [PlaylistVideo](classes/PlaylistVideo.md)
+- [PlaylistVideoList](classes/PlaylistVideoList.md)
+- [PlaylistVideoThumbnail](classes/PlaylistVideoThumbnail.md)
+- [Poll](classes/Poll.md)
+- [PollHeader](classes/PollHeader.md)
+- [Post](classes/Post.md)
+- [PostMultiImage](classes/PostMultiImage.md)
+- [ProductList](classes/ProductList.md)
+- [ProductListHeader](classes/ProductListHeader.md)
+- [ProductListItem](classes/ProductListItem.md)
+- [ProfileColumn](classes/ProfileColumn.md)
+- [ProfileColumnStats](classes/ProfileColumnStats.md)
+- [ProfileColumnStatsEntry](classes/ProfileColumnStatsEntry.md)
+- [ProfileColumnUserInfo](classes/ProfileColumnUserInfo.md)
+- [Quiz](classes/Quiz.md)
+- [RecognitionShelf](classes/RecognitionShelf.md)
+- [ReelItem](classes/ReelItem.md)
+- [ReelPlayerHeader](classes/ReelPlayerHeader.md)
+- [ReelPlayerOverlay](classes/ReelPlayerOverlay.md)
+- [ReelShelf](classes/ReelShelf.md)
+- [RelatedChipCloud](classes/RelatedChipCloud.md)
+- [RemoveBannerForLiveChatCommand](classes/RemoveBannerForLiveChatCommand.md)
+- [RemoveChatItemAction](classes/RemoveChatItemAction.md)
+- [RemoveChatItemByAuthorAction](classes/RemoveChatItemByAuthorAction.md)
+- [ReplaceChatItemAction](classes/ReplaceChatItemAction.md)
+- [ReplayChatItemAction](classes/ReplayChatItemAction.md)
+- [RichGrid](classes/RichGrid.md)
+- [RichItem](classes/RichItem.md)
+- [RichListHeader](classes/RichListHeader.md)
+- [RichMetadata](classes/RichMetadata.md)
+- [RichMetadataRow](classes/RichMetadataRow.md)
+- [RichSection](classes/RichSection.md)
+- [RichShelf](classes/RichShelf.md)
+- [SearchBox](classes/SearchBox.md)
+- [SearchFilter](classes/SearchFilter.md)
+- [SearchFilterGroup](classes/SearchFilterGroup.md)
+- [SearchFilterOptionsDialog](classes/SearchFilterOptionsDialog.md)
+- [SearchHeader](classes/SearchHeader.md)
+- [SearchRefinementCard](classes/SearchRefinementCard.md)
+- [SearchSubMenu](classes/SearchSubMenu.md)
+- [SearchSuggestion](classes/SearchSuggestion.md)
+- [SearchSuggestionsSection](classes/SearchSuggestionsSection.md)
+- [SecondarySearchContainer](classes/SecondarySearchContainer.md)
+- [SectionList](classes/SectionList.md)
+- [SegmentedLikeDislikeButton](classes/SegmentedLikeDislikeButton.md)
+- [SegmentedLikeDislikeButtonView](classes/SegmentedLikeDislikeButtonView.md)
+- [SettingBoolean](classes/SettingBoolean.md)
+- [SettingsCheckbox](classes/SettingsCheckbox.md)
+- [SettingsOptions](classes/SettingsOptions.md)
+- [SettingsSidebar](classes/SettingsSidebar.md)
+- [SettingsSwitch](classes/SettingsSwitch.md)
+- [SharedPost](classes/SharedPost.md)
+- [Shelf](classes/Shelf.md)
+- [ShortsLockupView](classes/ShortsLockupView.md)
+- [ShowCustomThumbnail](classes/ShowCustomThumbnail.md)
+- [ShowingResultsFor](classes/ShowingResultsFor.md)
+- [ShowLiveChatActionPanelAction](classes/ShowLiveChatActionPanelAction.md)
+- [ShowLiveChatDialogAction](classes/ShowLiveChatDialogAction.md)
+- [ShowLiveChatTooltipCommand](classes/ShowLiveChatTooltipCommand.md)
+- [SimpleCardContent](classes/SimpleCardContent.md)
+- [SimpleCardTeaser](classes/SimpleCardTeaser.md)
+- [SimpleMenuHeader](classes/SimpleMenuHeader.md)
+- [SimpleTextSection](classes/SimpleTextSection.md)
+- [SingleActionEmergencySupport](classes/SingleActionEmergencySupport.md)
+- [SingleColumnBrowseResults](classes/SingleColumnBrowseResults.md)
+- [SingleColumnMusicWatchNextResults](classes/SingleColumnMusicWatchNextResults.md)
+- [SingleHeroImage](classes/SingleHeroImage.md)
+- [SlimOwner](classes/SlimOwner.md)
+- [SlimVideoMetadata](classes/SlimVideoMetadata.md)
+- [SortFilterHeader](classes/SortFilterHeader.md)
+- [SortFilterSubMenu](classes/SortFilterSubMenu.md)
+- [SponsorCommentBadge](classes/SponsorCommentBadge.md)
+- [StatRow](classes/StatRow.md)
+- [StructuredDescriptionContent](classes/StructuredDescriptionContent.md)
+- [StructuredDescriptionPlaylistLockup](classes/StructuredDescriptionPlaylistLockup.md)
+- [SubFeedOption](classes/SubFeedOption.md)
+- [SubFeedSelector](classes/SubFeedSelector.md)
+- [SubscribeButton](classes/SubscribeButton.md)
+- [SubscriptionNotificationToggleButton](classes/SubscriptionNotificationToggleButton.md)
+- [Tab](classes/Tab.md)
+- [Tabbed](classes/Tabbed.md)
+- [TabbedSearchResults](classes/TabbedSearchResults.md)
+- [TextHeader](classes/TextHeader.md)
+- [ThumbnailBadgeView](classes/ThumbnailBadgeView.md)
+- [ThumbnailHoverOverlayView](classes/ThumbnailHoverOverlayView.md)
+- [ThumbnailLandscapePortrait](classes/ThumbnailLandscapePortrait.md)
+- [ThumbnailOverlayBadgeView](classes/ThumbnailOverlayBadgeView.md)
+- [ThumbnailOverlayBottomPanel](classes/ThumbnailOverlayBottomPanel.md)
+- [ThumbnailOverlayEndorsement](classes/ThumbnailOverlayEndorsement.md)
+- [ThumbnailOverlayHoverText](classes/ThumbnailOverlayHoverText.md)
+- [ThumbnailOverlayInlineUnplayable](classes/ThumbnailOverlayInlineUnplayable.md)
+- [ThumbnailOverlayLoadingPreview](classes/ThumbnailOverlayLoadingPreview.md)
+- [ThumbnailOverlayNowPlaying](classes/ThumbnailOverlayNowPlaying.md)
+- [ThumbnailOverlayPinking](classes/ThumbnailOverlayPinking.md)
+- [ThumbnailOverlayPlaybackStatus](classes/ThumbnailOverlayPlaybackStatus.md)
+- [ThumbnailOverlayResumePlayback](classes/ThumbnailOverlayResumePlayback.md)
+- [ThumbnailOverlaySidePanel](classes/ThumbnailOverlaySidePanel.md)
+- [ThumbnailOverlayTimeStatus](classes/ThumbnailOverlayTimeStatus.md)
+- [ThumbnailOverlayToggleButton](classes/ThumbnailOverlayToggleButton.md)
+- [ThumbnailView](classes/ThumbnailView.md)
+- [TimedMarkerDecoration](classes/TimedMarkerDecoration.md)
+- [TitleAndButtonListHeader](classes/TitleAndButtonListHeader.md)
+- [ToggleButton](classes/ToggleButton.md)
+- [ToggleButtonView](classes/ToggleButtonView.md)
+- [ToggleMenuServiceItem](classes/ToggleMenuServiceItem.md)
+- [Tooltip](classes/Tooltip.md)
+- [TopicChannelDetails](classes/TopicChannelDetails.md)
+- [Transcript](classes/Transcript.md)
+- [TranscriptFooter](classes/TranscriptFooter.md)
+- [TranscriptSearchBox](classes/TranscriptSearchBox.md)
+- [TranscriptSearchPanel](classes/TranscriptSearchPanel.md)
+- [TranscriptSectionHeader](classes/TranscriptSectionHeader.md)
+- [TranscriptSegment](classes/TranscriptSegment.md)
+- [TranscriptSegmentList](classes/TranscriptSegmentList.md)
+- [TwoColumnBrowseResults](classes/TwoColumnBrowseResults.md)
+- [TwoColumnSearchResults](classes/TwoColumnSearchResults.md)
+- [TwoColumnWatchNextResults](classes/TwoColumnWatchNextResults.md)
+- [UniversalWatchCard](classes/UniversalWatchCard.md)
+- [UpdateDateTextAction](classes/UpdateDateTextAction.md)
+- [UpdateDescriptionAction](classes/UpdateDescriptionAction.md)
+- [UpdateEngagementPanelAction](classes/UpdateEngagementPanelAction.md)
+- [UpdateLiveChatPollAction](classes/UpdateLiveChatPollAction.md)
+- [UpdateTitleAction](classes/UpdateTitleAction.md)
+- [UpdateToggleButtonTextAction](classes/UpdateToggleButtonTextAction.md)
+- [UpdateViewershipAction](classes/UpdateViewershipAction.md)
+- [UploadTimeFactoid](classes/UploadTimeFactoid.md)
+- [UpsellDialog](classes/UpsellDialog.md)
+- [VerticalList](classes/VerticalList.md)
+- [VerticalWatchCardList](classes/VerticalWatchCardList.md)
+- [Video](classes/Video.md)
+- [VideoAttributesSectionView](classes/VideoAttributesSectionView.md)
+- [VideoAttributeView](classes/VideoAttributeView.md)
+- [VideoCard](classes/VideoCard.md)
+- [VideoDescriptionCourseSection](classes/VideoDescriptionCourseSection.md)
+- [VideoDescriptionHeader](classes/VideoDescriptionHeader.md)
+- [VideoDescriptionInfocardsSection](classes/VideoDescriptionInfocardsSection.md)
+- [VideoDescriptionMusicSection](classes/VideoDescriptionMusicSection.md)
+- [VideoDescriptionTranscriptSection](classes/VideoDescriptionTranscriptSection.md)
+- [VideoInfoCardContent](classes/VideoInfoCardContent.md)
+- [VideoOwner](classes/VideoOwner.md)
+- [VideoPrimaryInfo](classes/VideoPrimaryInfo.md)
+- [VideoSecondaryInfo](classes/VideoSecondaryInfo.md)
+- [ViewCountFactoid](classes/ViewCountFactoid.md)
+- [WatchCardCompactVideo](classes/WatchCardCompactVideo.md)
+- [WatchCardHeroVideo](classes/WatchCardHeroVideo.md)
+- [WatchCardRichHeader](classes/WatchCardRichHeader.md)
+- [WatchCardSectionSequence](classes/WatchCardSectionSequence.md)
+- [WatchNextEndScreen](classes/WatchNextEndScreen.md)
+- [WatchNextTabbedResults](classes/WatchNextTabbedResults.md)
+- [YpcTrailer](classes/YpcTrailer.md)
diff --git a/docs/api/namespaces/YTNodes/classes/AboutChannel.md b/docs/api/namespaces/YTNodes/classes/AboutChannel.md
new file mode 100644
index 000000000..b0c16257f
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AboutChannel.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AboutChannel
+
+# Class: AboutChannel
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AboutChannel()
+
+> **new AboutChannel**(`data`): [`AboutChannel`](AboutChannel.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AboutChannel`](AboutChannel.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AboutChannel.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannel.ts#L12)
+
+## Properties
+
+### metadata
+
+> **metadata**: `null` \| [`AboutChannelView`](AboutChannelView.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannel.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannel.ts#L9)
+
+***
+
+### share\_channel
+
+> **share\_channel**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannel.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannel.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AboutChannel'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AboutChannel.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannel.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AboutChannel & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AboutChannel & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AboutChannelView.md b/docs/api/namespaces/YTNodes/classes/AboutChannelView.md
new file mode 100644
index 000000000..ec27d02ed
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AboutChannelView.md
@@ -0,0 +1,333 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AboutChannelView
+
+# Class: AboutChannelView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AboutChannelView()
+
+> **new AboutChannelView**(`data`): [`AboutChannelView`](AboutChannelView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AboutChannelView`](AboutChannelView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L26)
+
+## Properties
+
+### additional\_info\_label?
+
+> `optional` **additional\_info\_label**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L20)
+
+***
+
+### canonical\_channel\_url?
+
+> `optional` **canonical\_channel\_url**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L18)
+
+***
+
+### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L19)
+
+***
+
+### country?
+
+> `optional` **country**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L13)
+
+***
+
+### custom\_links\_label?
+
+> `optional` **custom\_links\_label**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L14)
+
+***
+
+### custom\_url\_on\_tap?
+
+> `optional` **custom\_url\_on\_tap**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L21)
+
+***
+
+### description?
+
+> `optional` **description**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L11)
+
+***
+
+### description\_label?
+
+> `optional` **description\_label**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L12)
+
+***
+
+### joined\_date?
+
+> `optional` **joined\_date**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L17)
+
+***
+
+### links
+
+> **links**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChannelExternalLinkView`](ChannelExternalLinkView.md)\>
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L24)
+
+***
+
+### sign\_in\_for\_business\_email?
+
+> `optional` **sign\_in\_for\_business\_email**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L23)
+
+***
+
+### subscriber\_count?
+
+> `optional` **subscriber\_count**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L15)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### video\_count?
+
+> `optional` **video\_count**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L22)
+
+***
+
+### view\_count?
+
+> `optional` **view\_count**: `string`
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L16)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AboutChannelView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AboutChannelView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AboutChannelView.ts#L9)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AboutChannelView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AboutChannelView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AccountChannel.md b/docs/api/namespaces/YTNodes/classes/AccountChannel.md
new file mode 100644
index 000000000..ea64bee3c
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AccountChannel.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AccountChannel
+
+# Class: AccountChannel
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AccountChannel()
+
+> **new AccountChannel**(`data`): [`AccountChannel`](AccountChannel.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AccountChannel`](AccountChannel.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AccountChannel.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountChannel.ts#L12)
+
+## Properties
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/AccountChannel.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountChannel.ts#L10)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AccountChannel.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountChannel.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AccountChannel'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AccountChannel.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountChannel.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AccountChannel & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AccountChannel & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AccountItemSection.md b/docs/api/namespaces/YTNodes/classes/AccountItemSection.md
new file mode 100644
index 000000000..f614151e9
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AccountItemSection.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AccountItemSection
+
+# Class: AccountItemSection
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AccountItemSection()
+
+> **new AccountItemSection**(`data`): [`AccountItemSection`](AccountItemSection.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AccountItemSection`](AccountItemSection.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AccountItemSection.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSection.ts#L13)
+
+## Properties
+
+### contents
+
+> **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`AccountItem`\>
+
+#### Defined in
+
+[src/parser/classes/AccountItemSection.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSection.ts#L10)
+
+***
+
+### header
+
+> **header**: `null` \| [`AccountItemSectionHeader`](AccountItemSectionHeader.md)
+
+#### Defined in
+
+[src/parser/classes/AccountItemSection.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSection.ts#L11)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AccountItemSection'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AccountItemSection.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSection.ts#L8)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AccountItemSection & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AccountItemSection & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AccountItemSectionHeader.md b/docs/api/namespaces/YTNodes/classes/AccountItemSectionHeader.md
new file mode 100644
index 000000000..16ac60408
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AccountItemSectionHeader.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AccountItemSectionHeader
+
+# Class: AccountItemSectionHeader
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AccountItemSectionHeader()
+
+> **new AccountItemSectionHeader**(`data`): [`AccountItemSectionHeader`](AccountItemSectionHeader.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AccountItemSectionHeader`](AccountItemSectionHeader.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AccountItemSectionHeader.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSectionHeader.ts#L10)
+
+## Properties
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AccountItemSectionHeader.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSectionHeader.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AccountItemSectionHeader'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AccountItemSectionHeader.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountItemSectionHeader.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AccountItemSectionHeader & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AccountItemSectionHeader & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AccountSectionList.md b/docs/api/namespaces/YTNodes/classes/AccountSectionList.md
new file mode 100644
index 000000000..010f87729
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AccountSectionList.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AccountSectionList
+
+# Class: AccountSectionList
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AccountSectionList()
+
+> **new AccountSectionList**(`data`): [`AccountSectionList`](AccountSectionList.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AccountSectionList`](AccountSectionList.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AccountSectionList.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountSectionList.ts#L14)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`AccountItemSection`](AccountItemSection.md)
+
+#### Defined in
+
+[src/parser/classes/AccountSectionList.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountSectionList.ts#L11)
+
+***
+
+### footers
+
+> **footers**: `null` \| [`AccountChannel`](AccountChannel.md)
+
+#### Defined in
+
+[src/parser/classes/AccountSectionList.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountSectionList.ts#L12)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AccountSectionList'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AccountSectionList.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AccountSectionList.ts#L9)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AccountSectionList & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AccountSectionList & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AddBannerToLiveChatCommand.md b/docs/api/namespaces/YTNodes/classes/AddBannerToLiveChatCommand.md
new file mode 100644
index 000000000..1666abefe
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AddBannerToLiveChatCommand.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AddBannerToLiveChatCommand
+
+# Class: AddBannerToLiveChatCommand
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AddBannerToLiveChatCommand()
+
+> **new AddBannerToLiveChatCommand**(`data`): [`AddBannerToLiveChatCommand`](AddBannerToLiveChatCommand.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AddBannerToLiveChatCommand`](AddBannerToLiveChatCommand.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddBannerToLiveChatCommand.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddBannerToLiveChatCommand.ts#L11)
+
+## Properties
+
+### banner
+
+> **banner**: `null` \| [`LiveChatBanner`](LiveChatBanner.md)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddBannerToLiveChatCommand.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddBannerToLiveChatCommand.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AddBannerToLiveChatCommand'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddBannerToLiveChatCommand.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddBannerToLiveChatCommand.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AddBannerToLiveChatCommand & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AddBannerToLiveChatCommand & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AddChatItemAction.md b/docs/api/namespaces/YTNodes/classes/AddChatItemAction.md
new file mode 100644
index 000000000..5276d9d02
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AddChatItemAction.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AddChatItemAction
+
+# Class: AddChatItemAction
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AddChatItemAction()
+
+> **new AddChatItemAction**(`data`): [`AddChatItemAction`](AddChatItemAction.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AddChatItemAction`](AddChatItemAction.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddChatItemAction.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddChatItemAction.ts#L11)
+
+## Properties
+
+### client\_id?
+
+> `optional` **client\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/livechat/AddChatItemAction.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddChatItemAction.ts#L9)
+
+***
+
+### item
+
+> **item**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddChatItemAction.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddChatItemAction.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AddChatItemAction'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddChatItemAction.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddChatItemAction.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AddChatItemAction & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AddChatItemAction & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AddLiveChatTickerItemAction.md b/docs/api/namespaces/YTNodes/classes/AddLiveChatTickerItemAction.md
new file mode 100644
index 000000000..7a739ecb5
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AddLiveChatTickerItemAction.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AddLiveChatTickerItemAction
+
+# Class: AddLiveChatTickerItemAction
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AddLiveChatTickerItemAction()
+
+> **new AddLiveChatTickerItemAction**(`data`): [`AddLiveChatTickerItemAction`](AddLiveChatTickerItemAction.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AddLiveChatTickerItemAction`](AddLiveChatTickerItemAction.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddLiveChatTickerItemAction.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddLiveChatTickerItemAction.ts#L11)
+
+## Properties
+
+### duration\_sec
+
+> **duration\_sec**: `string`
+
+#### Defined in
+
+[src/parser/classes/livechat/AddLiveChatTickerItemAction.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddLiveChatTickerItemAction.ts#L9)
+
+***
+
+### item
+
+> **item**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddLiveChatTickerItemAction.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddLiveChatTickerItemAction.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AddLiveChatTickerItemAction'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/livechat/AddLiveChatTickerItemAction.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/livechat/AddLiveChatTickerItemAction.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AddLiveChatTickerItemAction & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AddLiveChatTickerItemAction & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/Alert.md b/docs/api/namespaces/YTNodes/classes/Alert.md
new file mode 100644
index 000000000..0454d58e1
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/Alert.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / Alert
+
+# Class: Alert
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new Alert()
+
+> **new Alert**(`data`): [`Alert`](Alert.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Alert`](Alert.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/Alert.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Alert.ts#L11)
+
+## Properties
+
+### alert\_type
+
+> **alert\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/Alert.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Alert.ts#L9)
+
+***
+
+### text
+
+> **text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Alert.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Alert.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'Alert'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/Alert.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Alert.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Alert & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Alert & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AlertWithButton.md b/docs/api/namespaces/YTNodes/classes/AlertWithButton.md
new file mode 100644
index 000000000..10aa7ea8e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AlertWithButton.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AlertWithButton
+
+# Class: AlertWithButton
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AlertWithButton()
+
+> **new AlertWithButton**(`data`): [`AlertWithButton`](AlertWithButton.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AlertWithButton`](AlertWithButton.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AlertWithButton.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AlertWithButton.ts#L13)
+
+## Properties
+
+### alert\_type
+
+> **alert\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/AlertWithButton.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AlertWithButton.ts#L10)
+
+***
+
+### dismiss\_button
+
+> **dismiss\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/AlertWithButton.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AlertWithButton.ts#L11)
+
+***
+
+### text
+
+> **text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AlertWithButton.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AlertWithButton.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AlertWithButton'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AlertWithButton.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AlertWithButton.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AlertWithButton & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AlertWithButton & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AnalyticsMainAppKeyMetrics.md b/docs/api/namespaces/YTNodes/classes/AnalyticsMainAppKeyMetrics.md
new file mode 100644
index 000000000..89d204e0e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AnalyticsMainAppKeyMetrics.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AnalyticsMainAppKeyMetrics
+
+# Class: AnalyticsMainAppKeyMetrics
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AnalyticsMainAppKeyMetrics()
+
+> **new AnalyticsMainAppKeyMetrics**(`data`): [`AnalyticsMainAppKeyMetrics`](AnalyticsMainAppKeyMetrics.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AnalyticsMainAppKeyMetrics`](AnalyticsMainAppKeyMetrics.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts#L11)
+
+## Properties
+
+### period
+
+> **period**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts#L8)
+
+***
+
+### sections
+
+> **sections**: [`DataModelSection`](DataModelSection.md)[]
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AnalyticsMainAppKeyMetrics'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsMainAppKeyMetrics.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AnalyticsMainAppKeyMetrics & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AnalyticsMainAppKeyMetrics & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AnalyticsRoot.md b/docs/api/namespaces/YTNodes/classes/AnalyticsRoot.md
new file mode 100644
index 000000000..e88c8ac4e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AnalyticsRoot.md
@@ -0,0 +1,233 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AnalyticsRoot
+
+# Class: AnalyticsRoot
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AnalyticsRoot()
+
+> **new AnalyticsRoot**(`data`): [`AnalyticsRoot`](AnalyticsRoot.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AnalyticsRoot`](AnalyticsRoot.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsRoot.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsRoot.ts#L23)
+
+## Properties
+
+### selected\_card\_index\_key
+
+> **selected\_card\_index\_key**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsRoot.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsRoot.ts#L8)
+
+***
+
+### table\_cards
+
+> **table\_cards**: `object`[]
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsRoot.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsRoot.ts#L11)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsRoot.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsRoot.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### use\_main\_app\_specs
+
+> **use\_main\_app\_specs**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsRoot.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsRoot.ts#L9)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AnalyticsRoot'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsRoot.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsRoot.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AnalyticsRoot & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AnalyticsRoot & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AnalyticsShortsCarouselCard.md b/docs/api/namespaces/YTNodes/classes/AnalyticsShortsCarouselCard.md
new file mode 100644
index 000000000..b0382766e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AnalyticsShortsCarouselCard.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AnalyticsShortsCarouselCard
+
+# Class: AnalyticsShortsCarouselCard
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AnalyticsShortsCarouselCard()
+
+> **new AnalyticsShortsCarouselCard**(`data`): [`AnalyticsShortsCarouselCard`](AnalyticsShortsCarouselCard.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AnalyticsShortsCarouselCard`](AnalyticsShortsCarouselCard.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts#L15)
+
+## Properties
+
+### shorts
+
+> **shorts**: `object`[]
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts#L9)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AnalyticsShortsCarouselCard'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsShortsCarouselCard.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AnalyticsShortsCarouselCard & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AnalyticsShortsCarouselCard & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AnalyticsVideo.md b/docs/api/namespaces/YTNodes/classes/AnalyticsVideo.md
new file mode 100644
index 000000000..404bf7221
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AnalyticsVideo.md
@@ -0,0 +1,233 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AnalyticsVideo
+
+# Class: AnalyticsVideo
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AnalyticsVideo()
+
+> **new AnalyticsVideo**(`data`): [`AnalyticsVideo`](AnalyticsVideo.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AnalyticsVideo`](AnalyticsVideo.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVideo.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVideo.ts#L17)
+
+## Properties
+
+### metadata
+
+> **metadata**: `object`
+
+#### duration
+
+> **duration**: `string`
+
+#### is\_short
+
+> **is\_short**: `boolean`
+
+#### published
+
+> **published**: `string`
+
+#### thumbnails
+
+> **thumbnails**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### views
+
+> **views**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVideo.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVideo.ts#L9)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVideo.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVideo.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AnalyticsVideo'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVideo.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVideo.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AnalyticsVideo & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AnalyticsVideo & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AnalyticsVodCarouselCard.md b/docs/api/namespaces/YTNodes/classes/AnalyticsVodCarouselCard.md
new file mode 100644
index 000000000..d2fd0fbb7
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AnalyticsVodCarouselCard.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AnalyticsVodCarouselCard
+
+# Class: AnalyticsVodCarouselCard
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AnalyticsVodCarouselCard()
+
+> **new AnalyticsVodCarouselCard**(`data`): [`AnalyticsVodCarouselCard`](AnalyticsVodCarouselCard.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AnalyticsVodCarouselCard`](AnalyticsVodCarouselCard.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVodCarouselCard.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVodCarouselCard.ts#L12)
+
+## Properties
+
+### no\_data\_message?
+
+> `optional` **no\_data\_message**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVodCarouselCard.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVodCarouselCard.ts#L10)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVodCarouselCard.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVodCarouselCard.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### videos?
+
+> `optional` **videos**: [`AnalyticsVideo`](AnalyticsVideo.md)[]
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVodCarouselCard.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVodCarouselCard.ts#L9)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AnalyticsVodCarouselCard'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/analytics/AnalyticsVodCarouselCard.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/analytics/AnalyticsVodCarouselCard.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AnalyticsVodCarouselCard & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AnalyticsVodCarouselCard & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AnchoredSection.md b/docs/api/namespaces/YTNodes/classes/AnchoredSection.md
new file mode 100644
index 000000000..4d3290f74
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AnchoredSection.md
@@ -0,0 +1,251 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AnchoredSection
+
+# Class: AnchoredSection
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AnchoredSection()
+
+> **new AnchoredSection**(`data`): [`AnchoredSection`](AnchoredSection.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AnchoredSection`](AnchoredSection.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L19)
+
+## Properties
+
+### category\_assets
+
+> **category\_assets**: `object`
+
+#### asset\_key
+
+> **asset\_key**: `string`
+
+#### background\_color
+
+> **background\_color**: `string`
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L13)
+
+***
+
+### category\_type
+
+> **category\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L17)
+
+***
+
+### content
+
+> **content**: `null` \| [`SectionList`](SectionList.md)
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L11)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L12)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AnchoredSection'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ytkids/AnchoredSection.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ytkids/AnchoredSection.ts#L8)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AnchoredSection & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AnchoredSection & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AppendContinuationItemsAction.md b/docs/api/namespaces/YTNodes/classes/AppendContinuationItemsAction.md
new file mode 100644
index 000000000..b496dc073
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AppendContinuationItemsAction.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AppendContinuationItemsAction
+
+# Class: AppendContinuationItemsAction
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AppendContinuationItemsAction()
+
+> **new AppendContinuationItemsAction**(`data`): [`AppendContinuationItemsAction`](AppendContinuationItemsAction.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AppendContinuationItemsAction`](AppendContinuationItemsAction.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/actions/AppendContinuationItemsAction.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/actions/AppendContinuationItemsAction.ts#L12)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/actions/AppendContinuationItemsAction.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/actions/AppendContinuationItemsAction.ts#L9)
+
+***
+
+### target
+
+> **target**: `string`
+
+#### Defined in
+
+[src/parser/classes/actions/AppendContinuationItemsAction.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/actions/AppendContinuationItemsAction.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AppendContinuationItemsAction'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/actions/AppendContinuationItemsAction.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/actions/AppendContinuationItemsAction.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AppendContinuationItemsAction & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AppendContinuationItemsAction & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AttributionView.md b/docs/api/namespaces/YTNodes/classes/AttributionView.md
new file mode 100644
index 000000000..47e3753ad
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AttributionView.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AttributionView
+
+# Class: AttributionView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AttributionView()
+
+> **new AttributionView**(`data`): [`AttributionView`](AttributionView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AttributionView`](AttributionView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AttributionView.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AttributionView.ts#L11)
+
+## Properties
+
+### suffix
+
+> **suffix**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AttributionView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AttributionView.ts#L9)
+
+***
+
+### text
+
+> **text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/AttributionView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AttributionView.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AttributionView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AttributionView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AttributionView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AttributionView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AttributionView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AudioOnlyPlayability.md b/docs/api/namespaces/YTNodes/classes/AudioOnlyPlayability.md
new file mode 100644
index 000000000..0cc9abe8c
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AudioOnlyPlayability.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AudioOnlyPlayability
+
+# Class: AudioOnlyPlayability
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AudioOnlyPlayability()
+
+> **new AudioOnlyPlayability**(`data`): [`AudioOnlyPlayability`](AudioOnlyPlayability.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AudioOnlyPlayability`](AudioOnlyPlayability.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AudioOnlyPlayability.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AudioOnlyPlayability.ts#L9)
+
+## Properties
+
+### audio\_only\_availability
+
+> **audio\_only\_availability**: `string`
+
+#### Defined in
+
+[src/parser/classes/AudioOnlyPlayability.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AudioOnlyPlayability.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AudioOnlyPlayability'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AudioOnlyPlayability.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AudioOnlyPlayability.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AudioOnlyPlayability & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AudioOnlyPlayability & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AuthorCommentBadge.md b/docs/api/namespaces/YTNodes/classes/AuthorCommentBadge.md
new file mode 100644
index 000000000..307c065c8
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AuthorCommentBadge.md
@@ -0,0 +1,237 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AuthorCommentBadge
+
+# Class: AuthorCommentBadge
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AuthorCommentBadge()
+
+> **new AuthorCommentBadge**(`data`): [`AuthorCommentBadge`](AuthorCommentBadge.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AuthorCommentBadge`](AuthorCommentBadge.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/comments/AuthorCommentBadge.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/AuthorCommentBadge.ts#L13)
+
+## Properties
+
+### icon\_type?
+
+> `optional` **icon\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/comments/AuthorCommentBadge.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/AuthorCommentBadge.ts#L9)
+
+***
+
+### style?
+
+> `optional` **style**: `string`
+
+#### Defined in
+
+[src/parser/classes/comments/AuthorCommentBadge.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/AuthorCommentBadge.ts#L11)
+
+***
+
+### tooltip
+
+> **tooltip**: `string`
+
+#### Defined in
+
+[src/parser/classes/comments/AuthorCommentBadge.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/AuthorCommentBadge.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AuthorCommentBadge'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/comments/AuthorCommentBadge.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/AuthorCommentBadge.ts#L5)
+
+## Accessors
+
+### orig\_badge
+
+> `get` **orig\_badge**(): [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Defined in
+
+[src/parser/classes/comments/AuthorCommentBadge.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/AuthorCommentBadge.ts#L31)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AuthorCommentBadge & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AuthorCommentBadge & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AutomixPreviewVideo.md b/docs/api/namespaces/YTNodes/classes/AutomixPreviewVideo.md
new file mode 100644
index 000000000..122c8165a
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AutomixPreviewVideo.md
@@ -0,0 +1,207 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AutomixPreviewVideo
+
+# Class: AutomixPreviewVideo
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AutomixPreviewVideo()
+
+> **new AutomixPreviewVideo**(`data`): [`AutomixPreviewVideo`](AutomixPreviewVideo.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AutomixPreviewVideo`](AutomixPreviewVideo.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AutomixPreviewVideo.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AutomixPreviewVideo.ts#L10)
+
+## Properties
+
+### playlist\_video?
+
+> `optional` **playlist\_video**: `object`
+
+#### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/AutomixPreviewVideo.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AutomixPreviewVideo.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AutomixPreviewVideo'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AutomixPreviewVideo.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AutomixPreviewVideo.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AutomixPreviewVideo & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AutomixPreviewVideo & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/AvatarView.md b/docs/api/namespaces/YTNodes/classes/AvatarView.md
new file mode 100644
index 000000000..eea346033
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/AvatarView.md
@@ -0,0 +1,231 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / AvatarView
+
+# Class: AvatarView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new AvatarView()
+
+> **new AvatarView**(`data`): [`AvatarView`](AvatarView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`AvatarView`](AvatarView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/AvatarView.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AvatarView.ts#L16)
+
+## Properties
+
+### avatar\_image\_size
+
+> **avatar\_image\_size**: `string`
+
+#### Defined in
+
+[src/parser/classes/AvatarView.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AvatarView.ts#L14)
+
+***
+
+### image
+
+> **image**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/AvatarView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AvatarView.ts#L8)
+
+***
+
+### image\_processor
+
+> **image\_processor**: `object`
+
+#### border\_image\_processor
+
+> **border\_image\_processor**: `object`
+
+#### border\_image\_processor.circular
+
+> **circular**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/AvatarView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AvatarView.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'AvatarView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/AvatarView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/AvatarView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is AvatarView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is AvatarView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/BackstageImage.md b/docs/api/namespaces/YTNodes/classes/BackstageImage.md
new file mode 100644
index 000000000..ad07001c8
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/BackstageImage.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / BackstageImage
+
+# Class: BackstageImage
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new BackstageImage()
+
+> **new BackstageImage**(`data`): [`BackstageImage`](BackstageImage.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`BackstageImage`](BackstageImage.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/BackstageImage.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstageImage.ts#L12)
+
+## Properties
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/BackstageImage.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstageImage.ts#L10)
+
+***
+
+### image
+
+> **image**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/BackstageImage.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstageImage.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'BackstageImage'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/BackstageImage.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstageImage.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is BackstageImage & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is BackstageImage & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/BackstagePost.md b/docs/api/namespaces/YTNodes/classes/BackstagePost.md
new file mode 100644
index 000000000..c5e675902
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/BackstagePost.md
@@ -0,0 +1,327 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / BackstagePost
+
+# Class: BackstagePost
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Extended by
+
+- [`Post`](Post.md)
+
+## Constructors
+
+### new BackstagePost()
+
+> **new BackstagePost**(`data`): [`BackstagePost`](BackstagePost.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`BackstagePost`](BackstagePost.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L27)
+
+## Properties
+
+### action\_buttons?
+
+> `optional` **action\_buttons**: `null` \| [`CommentActionButtons`](CommentActionButtons.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L21)
+
+***
+
+### attachment
+
+> **attachment**: `undefined` \| [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L25)
+
+***
+
+### author
+
+> **author**: [`Author`](../../Misc/classes/Author.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L14)
+
+***
+
+### content
+
+> **content**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L15)
+
+***
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L24)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L13)
+
+***
+
+### menu?
+
+> `optional` **menu**: `null` \| [`Menu`](Menu.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L20)
+
+***
+
+### poll\_status?
+
+> `optional` **poll\_status**: `string`
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L17)
+
+***
+
+### published
+
+> **published**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L16)
+
+***
+
+### surface
+
+> **surface**: `string`
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L23)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### vote\_button?
+
+> `optional` **vote\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L22)
+
+***
+
+### vote\_count?
+
+> `optional` **vote\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L19)
+
+***
+
+### vote\_status?
+
+> `optional` **vote\_status**: `string`
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L18)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'BackstagePost'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/BackstagePost.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePost.ts#L11)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is BackstagePost & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is BackstagePost & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/BackstagePostThread.md b/docs/api/namespaces/YTNodes/classes/BackstagePostThread.md
new file mode 100644
index 000000000..e9e940110
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/BackstagePostThread.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / BackstagePostThread
+
+# Class: BackstagePostThread
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new BackstagePostThread()
+
+> **new BackstagePostThread**(`data`): [`BackstagePostThread`](BackstagePostThread.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`BackstagePostThread`](BackstagePostThread.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/BackstagePostThread.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePostThread.ts#L9)
+
+## Properties
+
+### post
+
+> **post**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/BackstagePostThread.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePostThread.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'BackstagePostThread'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/BackstagePostThread.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BackstagePostThread.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is BackstagePostThread & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is BackstagePostThread & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/BadgeView.md b/docs/api/namespaces/YTNodes/classes/BadgeView.md
new file mode 100644
index 000000000..5a7f4cbc8
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/BadgeView.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / BadgeView
+
+# Class: BadgeView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new BadgeView()
+
+> **new BadgeView**(`data`): [`BadgeView`](BadgeView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`BadgeView`](BadgeView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/BadgeView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BadgeView.ts#L9)
+
+## Properties
+
+### accessibility\_label
+
+> **accessibility\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/BadgeView.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BadgeView.ts#L7)
+
+***
+
+### style
+
+> **style**: `string`
+
+#### Defined in
+
+[src/parser/classes/BadgeView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BadgeView.ts#L6)
+
+***
+
+### text
+
+> **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/BadgeView.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BadgeView.ts#L5)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `readonly` `static` **type**: `string` = `'YTNode'`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/helpers.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is BadgeView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is BadgeView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/BrowseFeedActions.md b/docs/api/namespaces/YTNodes/classes/BrowseFeedActions.md
new file mode 100644
index 000000000..8a5f5e12a
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/BrowseFeedActions.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / BrowseFeedActions
+
+# Class: BrowseFeedActions
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new BrowseFeedActions()
+
+> **new BrowseFeedActions**(`data`): [`BrowseFeedActions`](BrowseFeedActions.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`BrowseFeedActions`](BrowseFeedActions.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/BrowseFeedActions.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowseFeedActions.ts#L9)
+
+## Properties
+
+### contents
+
+> **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/BrowseFeedActions.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowseFeedActions.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'BrowseFeedActions'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/BrowseFeedActions.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowseFeedActions.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is BrowseFeedActions & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is BrowseFeedActions & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/BrowserMediaSession.md b/docs/api/namespaces/YTNodes/classes/BrowserMediaSession.md
new file mode 100644
index 000000000..23bc45542
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/BrowserMediaSession.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / BrowserMediaSession
+
+# Class: BrowserMediaSession
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new BrowserMediaSession()
+
+> **new BrowserMediaSession**(`data`): [`BrowserMediaSession`](BrowserMediaSession.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`BrowserMediaSession`](BrowserMediaSession.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/BrowserMediaSession.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowserMediaSession.ts#L12)
+
+## Properties
+
+### album
+
+> **album**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/BrowserMediaSession.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowserMediaSession.ts#L9)
+
+***
+
+### thumbnails
+
+> **thumbnails**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/BrowserMediaSession.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowserMediaSession.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'BrowserMediaSession'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/BrowserMediaSession.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/BrowserMediaSession.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is BrowserMediaSession & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is BrowserMediaSession & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/Button.md b/docs/api/namespaces/YTNodes/classes/Button.md
new file mode 100644
index 000000000..371e9dc13
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/Button.md
@@ -0,0 +1,258 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / Button
+
+# Class: Button
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Extended by
+
+- [`MenuNavigationItem`](MenuNavigationItem.md)
+- [`MenuServiceItem`](MenuServiceItem.md)
+
+## Constructors
+
+### new Button()
+
+> **new Button**(`data`): [`Button`](Button.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Button`](Button.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/Button.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L16)
+
+## Properties
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/Button.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L14)
+
+***
+
+### icon\_type?
+
+> `optional` **icon\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/Button.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L12)
+
+***
+
+### is\_disabled?
+
+> `optional` **is\_disabled**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/Button.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L13)
+
+***
+
+### label?
+
+> `optional` **label**: `string`
+
+#### Defined in
+
+[src/parser/classes/Button.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L10)
+
+***
+
+### text?
+
+> `optional` **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/Button.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L9)
+
+***
+
+### tooltip?
+
+> `optional` **tooltip**: `string`
+
+#### Defined in
+
+[src/parser/classes/Button.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L11)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'Button'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/Button.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Button.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Button & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Button & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ButtonView.md b/docs/api/namespaces/YTNodes/classes/ButtonView.md
new file mode 100644
index 000000000..26fd5130e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ButtonView.md
@@ -0,0 +1,273 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ButtonView
+
+# Class: ButtonView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ButtonView()
+
+> **new ButtonView**(`data`): [`ButtonView`](ButtonView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ButtonView`](ButtonView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L17)
+
+## Properties
+
+### accessibility\_text
+
+> **accessibility\_text**: `string`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L10)
+
+***
+
+### button\_size
+
+> **button\_size**: `string`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L14)
+
+***
+
+### button\_type
+
+> **button\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L13)
+
+***
+
+### icon\_name
+
+> **icon\_name**: `string`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L8)
+
+***
+
+### is\_full\_width
+
+> **is\_full\_width**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L12)
+
+***
+
+### on\_tap
+
+> **on\_tap**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L15)
+
+***
+
+### style
+
+> **style**: `string`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L11)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ButtonView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ButtonView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ButtonView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ButtonView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ButtonView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/C4TabbedHeader.md b/docs/api/namespaces/YTNodes/classes/C4TabbedHeader.md
new file mode 100644
index 000000000..e67c9528a
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/C4TabbedHeader.md
@@ -0,0 +1,313 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / C4TabbedHeader
+
+# Class: C4TabbedHeader
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new C4TabbedHeader()
+
+> **new C4TabbedHeader**(`data`): [`C4TabbedHeader`](C4TabbedHeader.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`C4TabbedHeader`](C4TabbedHeader.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L28)
+
+## Properties
+
+### author
+
+> **author**: [`Author`](../../Misc/classes/Author.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L15)
+
+***
+
+### banner?
+
+> `optional` **banner**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L16)
+
+***
+
+### channel\_handle?
+
+> `optional` **channel\_handle**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L24)
+
+***
+
+### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L25)
+
+***
+
+### header\_links?
+
+> `optional` **header\_links**: `null` \| [`ChannelHeaderLinks`](ChannelHeaderLinks.md) \| [`ChannelHeaderLinksView`](ChannelHeaderLinksView.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L23)
+
+***
+
+### mobile\_banner?
+
+> `optional` **mobile\_banner**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L18)
+
+***
+
+### sponsor\_button?
+
+> `optional` **sponsor\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L21)
+
+***
+
+### subscribe\_button?
+
+> `optional` **subscribe\_button**: `null` \| [`Button`](Button.md) \| [`SubscribeButton`](SubscribeButton.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L22)
+
+***
+
+### subscribers?
+
+> `optional` **subscribers**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L19)
+
+***
+
+### tagline?
+
+> `optional` **tagline**: `null` \| [`ChannelTagline`](ChannelTagline.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L26)
+
+***
+
+### tv\_banner?
+
+> `optional` **tv\_banner**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L17)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### videos\_count?
+
+> `optional` **videos\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L20)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'C4TabbedHeader'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/C4TabbedHeader.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/C4TabbedHeader.ts#L13)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is C4TabbedHeader & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is C4TabbedHeader & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CallToActionButton.md b/docs/api/namespaces/YTNodes/classes/CallToActionButton.md
new file mode 100644
index 000000000..d7a20a7c4
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CallToActionButton.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CallToActionButton
+
+# Class: CallToActionButton
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CallToActionButton()
+
+> **new CallToActionButton**(`data`): [`CallToActionButton`](CallToActionButton.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CallToActionButton`](CallToActionButton.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CallToActionButton.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CallToActionButton.ts#L12)
+
+## Properties
+
+### icon\_type
+
+> **icon\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/CallToActionButton.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CallToActionButton.ts#L9)
+
+***
+
+### label
+
+> **label**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/CallToActionButton.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CallToActionButton.ts#L8)
+
+***
+
+### style
+
+> **style**: `string`
+
+#### Defined in
+
+[src/parser/classes/CallToActionButton.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CallToActionButton.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CallToActionButton'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CallToActionButton.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CallToActionButton.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CallToActionButton & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CallToActionButton & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/Card.md b/docs/api/namespaces/YTNodes/classes/Card.md
new file mode 100644
index 000000000..8153d4cf2
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/Card.md
@@ -0,0 +1,243 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / Card
+
+# Class: Card
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new Card()
+
+> **new Card**(`data`): [`Card`](Card.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Card`](Card.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/Card.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L19)
+
+## Properties
+
+### card\_id?
+
+> `optional` **card\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/Card.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L9)
+
+***
+
+### content
+
+> **content**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/Card.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L8)
+
+***
+
+### cue\_ranges
+
+> **cue\_ranges**: `object`[]
+
+#### Defined in
+
+[src/parser/classes/Card.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L12)
+
+***
+
+### feature?
+
+> `optional` **feature**: `string`
+
+#### Defined in
+
+[src/parser/classes/Card.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L10)
+
+***
+
+### teaser
+
+> **teaser**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/Card.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'Card'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/Card.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Card.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Card & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Card & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CardCollection.md b/docs/api/namespaces/YTNodes/classes/CardCollection.md
new file mode 100644
index 000000000..6c9d2bfe4
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CardCollection.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CardCollection
+
+# Class: CardCollection
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CardCollection()
+
+> **new CardCollection**(`data`): [`CardCollection`](CardCollection.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CardCollection`](CardCollection.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CardCollection.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CardCollection.ts#L12)
+
+## Properties
+
+### allow\_teaser\_dismiss
+
+> **allow\_teaser\_dismiss**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/CardCollection.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CardCollection.ts#L10)
+
+***
+
+### cards
+
+> **cards**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/CardCollection.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CardCollection.ts#L8)
+
+***
+
+### header
+
+> **header**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/CardCollection.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CardCollection.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CardCollection'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CardCollection.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CardCollection.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CardCollection & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CardCollection & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CarouselHeader.md b/docs/api/namespaces/YTNodes/classes/CarouselHeader.md
new file mode 100644
index 000000000..d231e6601
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CarouselHeader.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CarouselHeader
+
+# Class: CarouselHeader
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CarouselHeader()
+
+> **new CarouselHeader**(`data`): [`CarouselHeader`](CarouselHeader.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CarouselHeader`](CarouselHeader.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CarouselHeader.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselHeader.ts#L9)
+
+## Properties
+
+### contents
+
+> **contents**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/CarouselHeader.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselHeader.ts#L7)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CarouselHeader'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CarouselHeader.ts:5](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselHeader.ts#L5)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CarouselHeader & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CarouselHeader & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CarouselItem.md b/docs/api/namespaces/YTNodes/classes/CarouselItem.md
new file mode 100644
index 000000000..315acb3ff
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CarouselItem.md
@@ -0,0 +1,257 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CarouselItem
+
+# Class: CarouselItem
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CarouselItem()
+
+> **new CarouselItem**(`data`): [`CarouselItem`](CarouselItem.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CarouselItem`](CarouselItem.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L14)
+
+## Properties
+
+### background\_color
+
+> **background\_color**: `string`
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L9)
+
+***
+
+### items
+
+> **items**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L8)
+
+***
+
+### layout\_style
+
+> **layout\_style**: `string`
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L10)
+
+***
+
+### pagination\_thumbnails
+
+> **pagination\_thumbnails**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L11)
+
+***
+
+### paginator\_alignment
+
+> **paginator\_alignment**: `string`
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L12)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CarouselItem'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L6)
+
+## Accessors
+
+### contents
+
+> `get` **contents**(): [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Returns
+
+[`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/CarouselItem.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselItem.ts#L24)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CarouselItem & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CarouselItem & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CarouselLockup.md b/docs/api/namespaces/YTNodes/classes/CarouselLockup.md
new file mode 100644
index 000000000..c84fbe68e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CarouselLockup.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CarouselLockup
+
+# Class: CarouselLockup
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CarouselLockup()
+
+> **new CarouselLockup**(`data`): [`CarouselLockup`](CarouselLockup.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CarouselLockup`](CarouselLockup.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CarouselLockup.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselLockup.ts#L12)
+
+## Properties
+
+### info\_rows
+
+> **info\_rows**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`InfoRow`](InfoRow.md)\>
+
+#### Defined in
+
+[src/parser/classes/CarouselLockup.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselLockup.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### video\_lockup?
+
+> `optional` **video\_lockup**: `null` \| [`CompactVideo`](CompactVideo.md)
+
+#### Defined in
+
+[src/parser/classes/CarouselLockup.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselLockup.ts#L10)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CarouselLockup'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CarouselLockup.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CarouselLockup.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CarouselLockup & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CarouselLockup & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/Channel.md b/docs/api/namespaces/YTNodes/classes/Channel.md
new file mode 100644
index 000000000..e2b7681ef
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/Channel.md
@@ -0,0 +1,321 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / Channel
+
+# Class: Channel
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new Channel()
+
+> **new Channel**(`data`): [`Channel`](Channel.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Channel`](Channel.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L23)
+
+## Properties
+
+### author
+
+> **author**: [`Author`](../../Misc/classes/Author.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L14)
+
+***
+
+### description\_snippet
+
+> **description\_snippet**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L21)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L19)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L13)
+
+***
+
+### long\_byline
+
+> **long\_byline**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L17)
+
+***
+
+### short\_byline
+
+> **short\_byline**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L18)
+
+***
+
+### subscribe\_button
+
+> **subscribe\_button**: `null` \| [`Button`](Button.md) \| [`SubscribeButton`](SubscribeButton.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L20)
+
+***
+
+### subscriber\_count
+
+> **subscriber\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L15)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### video\_count
+
+> **video\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L16)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'Channel'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L11)
+
+## Accessors
+
+### subscribers
+
+> `get` **subscribers**(): [`Text`](../../Misc/classes/Text.md)
+
+#### Deprecated
+
+This will be removed in a future release.
+Please use [Channel.subscriber_count](Channel.md#subscriber_count) instead.
+
+#### Returns
+
+[`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L47)
+
+***
+
+### videos
+
+> `get` **videos**(): [`Text`](../../Misc/classes/Text.md)
+
+#### Deprecated
+
+This will be removed in a future release.
+Please use [Channel.video_count](Channel.md#video_count) instead.
+
+#### Returns
+
+[`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Channel.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Channel.ts#L57)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Channel & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Channel & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelAboutFullMetadata.md b/docs/api/namespaces/YTNodes/classes/ChannelAboutFullMetadata.md
new file mode 100644
index 000000000..7e0d267eb
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelAboutFullMetadata.md
@@ -0,0 +1,351 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelAboutFullMetadata
+
+# Class: ChannelAboutFullMetadata
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelAboutFullMetadata()
+
+> **new ChannelAboutFullMetadata**(`data`): [`ChannelAboutFullMetadata`](ChannelAboutFullMetadata.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelAboutFullMetadata`](ChannelAboutFullMetadata.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L31)
+
+## Properties
+
+### avatar
+
+> **avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L14)
+
+***
+
+### buttons
+
+> **buttons**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`Button`](Button.md)\>
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L29)
+
+***
+
+### can\_reveal\_email
+
+> **can\_reveal\_email**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L27)
+
+***
+
+### canonical\_channel\_url
+
+> **canonical\_channel\_url**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L15)
+
+***
+
+### country
+
+> **country**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L28)
+
+***
+
+### description
+
+> **description**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L25)
+
+***
+
+### email\_reveal
+
+> **email\_reveal**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L26)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L12)
+
+***
+
+### joined\_date
+
+> **joined\_date**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L24)
+
+***
+
+### name
+
+> **name**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L13)
+
+***
+
+### primary\_links
+
+> **primary\_links**: `object`[]
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L17)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### view\_count
+
+> **view\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L23)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelAboutFullMetadata'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L10)
+
+## Accessors
+
+### joined
+
+> `get` **joined**(): [`Text`](../../Misc/classes/Text.md)
+
+#### Deprecated
+
+This will be removed in a future release.
+Please use [ChannelAboutFullMetadata.joined_date](ChannelAboutFullMetadata.md#joined_date) instead.
+
+#### Returns
+
+[`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:68](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L68)
+
+***
+
+### views
+
+> `get` **views**(): [`Text`](../../Misc/classes/Text.md)
+
+#### Deprecated
+
+This will be removed in a future release.
+Please use [ChannelAboutFullMetadata.view_count](ChannelAboutFullMetadata.md#view_count) instead.
+
+#### Returns
+
+[`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAboutFullMetadata.ts:58](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAboutFullMetadata.ts#L58)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelAboutFullMetadata & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelAboutFullMetadata & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelAgeGate.md b/docs/api/namespaces/YTNodes/classes/ChannelAgeGate.md
new file mode 100644
index 000000000..7cd0a8e2a
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelAgeGate.md
@@ -0,0 +1,253 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelAgeGate
+
+# Class: ChannelAgeGate
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelAgeGate()
+
+> **new ChannelAgeGate**(`data`): [`ChannelAgeGate`](ChannelAgeGate.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelAgeGate`](ChannelAgeGate.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L18)
+
+## Properties
+
+### avatar
+
+> **avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L12)
+
+***
+
+### channel\_title
+
+> **channel\_title**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L11)
+
+***
+
+### header
+
+> **header**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L13)
+
+***
+
+### main\_text
+
+> **main\_text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L14)
+
+***
+
+### secondary\_text
+
+> **secondary\_text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L16)
+
+***
+
+### sign\_in\_button
+
+> **sign\_in\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L15)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelAgeGate'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelAgeGate.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelAgeGate.ts#L9)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelAgeGate & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelAgeGate & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelExternalLinkView.md b/docs/api/namespaces/YTNodes/classes/ChannelExternalLinkView.md
new file mode 100644
index 000000000..21de28f27
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelExternalLinkView.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelExternalLinkView
+
+# Class: ChannelExternalLinkView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelExternalLinkView()
+
+> **new ChannelExternalLinkView**(`data`): [`ChannelExternalLinkView`](ChannelExternalLinkView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelExternalLinkView`](ChannelExternalLinkView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelExternalLinkView.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelExternalLinkView.ts#L13)
+
+## Properties
+
+### favicon
+
+> **favicon**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelExternalLinkView.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelExternalLinkView.ts#L11)
+
+***
+
+### link
+
+> **link**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelExternalLinkView.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelExternalLinkView.ts#L10)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelExternalLinkView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelExternalLinkView.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelExternalLinkView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelExternalLinkView.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelExternalLinkView.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelExternalLinkView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelExternalLinkView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelFeaturedContent.md b/docs/api/namespaces/YTNodes/classes/ChannelFeaturedContent.md
new file mode 100644
index 000000000..ef13b1a26
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelFeaturedContent.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelFeaturedContent
+
+# Class: ChannelFeaturedContent
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelFeaturedContent()
+
+> **new ChannelFeaturedContent**(`data`): [`ChannelFeaturedContent`](ChannelFeaturedContent.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelFeaturedContent`](ChannelFeaturedContent.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelFeaturedContent.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelFeaturedContent.ts#L11)
+
+## Properties
+
+### items
+
+> **items**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`YTNode`](../../Helpers/classes/YTNode.md)\>
+
+#### Defined in
+
+[src/parser/classes/ChannelFeaturedContent.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelFeaturedContent.ts#L9)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelFeaturedContent.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelFeaturedContent.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelFeaturedContent'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelFeaturedContent.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelFeaturedContent.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelFeaturedContent & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelFeaturedContent & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelHeaderLinks.md b/docs/api/namespaces/YTNodes/classes/ChannelHeaderLinks.md
new file mode 100644
index 000000000..d975a3d58
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelHeaderLinks.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelHeaderLinks
+
+# Class: ChannelHeaderLinks
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelHeaderLinks()
+
+> **new ChannelHeaderLinks**(`data`): [`ChannelHeaderLinks`](ChannelHeaderLinks.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelHeaderLinks`](ChannelHeaderLinks.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinks.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinks.ts#L29)
+
+## Properties
+
+### primary
+
+> **primary**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`HeaderLink`\>
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinks.ts:26](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinks.ts#L26)
+
+***
+
+### secondary
+
+> **secondary**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<`HeaderLink`\>
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinks.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinks.ts#L27)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelHeaderLinks'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinks.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinks.ts#L24)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelHeaderLinks & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelHeaderLinks & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelHeaderLinksView.md b/docs/api/namespaces/YTNodes/classes/ChannelHeaderLinksView.md
new file mode 100644
index 000000000..4ece92837
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelHeaderLinksView.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelHeaderLinksView
+
+# Class: ChannelHeaderLinksView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelHeaderLinksView()
+
+> **new ChannelHeaderLinksView**(`data`): [`ChannelHeaderLinksView`](ChannelHeaderLinksView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelHeaderLinksView`](ChannelHeaderLinksView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinksView.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinksView.ts#L11)
+
+## Properties
+
+### first\_link?
+
+> `optional` **first\_link**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinksView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinksView.ts#L8)
+
+***
+
+### more?
+
+> `optional` **more**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinksView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinksView.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelHeaderLinksView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelHeaderLinksView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelHeaderLinksView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelHeaderLinksView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelHeaderLinksView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelMetadata.md b/docs/api/namespaces/YTNodes/classes/ChannelMetadata.md
new file mode 100644
index 000000000..5c7bf572e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelMetadata.md
@@ -0,0 +1,333 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelMetadata
+
+# Class: ChannelMetadata
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelMetadata()
+
+> **new ChannelMetadata**(`data`): [`ChannelMetadata`](ChannelMetadata.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelMetadata`](ChannelMetadata.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L23)
+
+## Properties
+
+### android\_appindexing\_link
+
+> **android\_appindexing\_link**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L20)
+
+***
+
+### android\_deep\_link
+
+> **android\_deep\_link**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L19)
+
+***
+
+### available\_countries
+
+> **available\_countries**: `string`[]
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L18)
+
+***
+
+### avatar
+
+> **avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L16)
+
+***
+
+### description
+
+> **description**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L9)
+
+***
+
+### external\_id
+
+> **external\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L13)
+
+***
+
+### ios\_appindexing\_link
+
+> **ios\_appindexing\_link**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L21)
+
+***
+
+### is\_family\_safe
+
+> **is\_family\_safe**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L14)
+
+***
+
+### keywords
+
+> **keywords**: `string`[]
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L15)
+
+***
+
+### music\_artist\_name?
+
+> `optional` **music\_artist\_name**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L17)
+
+***
+
+### rss\_url
+
+> **rss\_url**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L11)
+
+***
+
+### title
+
+> **title**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### url
+
+> **url**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L10)
+
+***
+
+### vanity\_channel\_url
+
+> **vanity\_channel\_url**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L12)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelMetadata'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelMetadata.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMetadata.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelMetadata & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelMetadata & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelMobileHeader.md b/docs/api/namespaces/YTNodes/classes/ChannelMobileHeader.md
new file mode 100644
index 000000000..96de0d37e
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelMobileHeader.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelMobileHeader
+
+# Class: ChannelMobileHeader
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelMobileHeader()
+
+> **new ChannelMobileHeader**(`data`): [`ChannelMobileHeader`](ChannelMobileHeader.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelMobileHeader`](ChannelMobileHeader.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelMobileHeader.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMobileHeader.ts#L10)
+
+## Properties
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelMobileHeader.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMobileHeader.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelMobileHeader'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelMobileHeader.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelMobileHeader.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelMobileHeader & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelMobileHeader & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelOptions.md b/docs/api/namespaces/YTNodes/classes/ChannelOptions.md
new file mode 100644
index 000000000..8e3a9600c
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelOptions.md
@@ -0,0 +1,233 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelOptions
+
+# Class: ChannelOptions
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelOptions()
+
+> **new ChannelOptions**(`data`): [`ChannelOptions`](ChannelOptions.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelOptions`](ChannelOptions.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelOptions.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOptions.ts#L15)
+
+## Properties
+
+### avatar
+
+> **avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelOptions.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOptions.ts#L10)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelOptions.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOptions.ts#L11)
+
+***
+
+### links
+
+> **links**: [`Text`](../../Misc/classes/Text.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelOptions.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOptions.ts#L13)
+
+***
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelOptions.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOptions.ts#L12)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelOptions'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelOptions.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOptions.ts#L8)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelOptions & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelOptions & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelOwnerEmptyState.md b/docs/api/namespaces/YTNodes/classes/ChannelOwnerEmptyState.md
new file mode 100644
index 000000000..942859532
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelOwnerEmptyState.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelOwnerEmptyState
+
+# Class: ChannelOwnerEmptyState
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelOwnerEmptyState()
+
+> **new ChannelOwnerEmptyState**(`data`): [`ChannelOwnerEmptyState`](ChannelOwnerEmptyState.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelOwnerEmptyState`](ChannelOwnerEmptyState.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelOwnerEmptyState.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOwnerEmptyState.ts#L12)
+
+## Properties
+
+### description
+
+> **description**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelOwnerEmptyState.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOwnerEmptyState.ts#L10)
+
+***
+
+### illustration
+
+> **illustration**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelOwnerEmptyState.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOwnerEmptyState.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelOwnerEmptyState'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelOwnerEmptyState.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelOwnerEmptyState.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelOwnerEmptyState & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelOwnerEmptyState & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelSubMenu.md b/docs/api/namespaces/YTNodes/classes/ChannelSubMenu.md
new file mode 100644
index 000000000..dba086625
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelSubMenu.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelSubMenu
+
+# Class: ChannelSubMenu
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelSubMenu()
+
+> **new ChannelSubMenu**(`data`): [`ChannelSubMenu`](ChannelSubMenu.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelSubMenu`](ChannelSubMenu.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelSubMenu.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelSubMenu.ts#L16)
+
+## Properties
+
+### content\_type\_sub\_menu\_items
+
+> **content\_type\_sub\_menu\_items**: `object`[]
+
+#### Defined in
+
+[src/parser/classes/ChannelSubMenu.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelSubMenu.ts#L8)
+
+***
+
+### sort\_setting
+
+> **sort\_setting**: [`YTNode`](../../Helpers/classes/YTNode.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelSubMenu.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelSubMenu.ts#L14)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelSubMenu'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelSubMenu.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelSubMenu.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelSubMenu & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelSubMenu & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelTagline.md b/docs/api/namespaces/YTNodes/classes/ChannelTagline.md
new file mode 100644
index 000000000..c96b2bde2
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelTagline.md
@@ -0,0 +1,253 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelTagline
+
+# Class: ChannelTagline
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelTagline()
+
+> **new ChannelTagline**(`data`): [`ChannelTagline`](ChannelTagline.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelTagline`](ChannelTagline.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L25)
+
+## Properties
+
+### content
+
+> **content**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L9)
+
+***
+
+### max\_lines
+
+> **max\_lines**: `number`
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L10)
+
+***
+
+### more\_endpoint
+
+> **more\_endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md) \| `object`
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L11)
+
+***
+
+### more\_icon\_type
+
+> **more\_icon\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L21)
+
+***
+
+### more\_label
+
+> **more\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L22)
+
+***
+
+### target\_id
+
+> **target\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L23)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelTagline'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelTagline.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelTagline.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelTagline & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelTagline & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelThumbnailWithLink.md b/docs/api/namespaces/YTNodes/classes/ChannelThumbnailWithLink.md
new file mode 100644
index 000000000..12848acb3
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelThumbnailWithLink.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelThumbnailWithLink
+
+# Class: ChannelThumbnailWithLink
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelThumbnailWithLink()
+
+> **new ChannelThumbnailWithLink**(`data`): [`ChannelThumbnailWithLink`](ChannelThumbnailWithLink.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelThumbnailWithLink`](ChannelThumbnailWithLink.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelThumbnailWithLink.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelThumbnailWithLink.ts#L13)
+
+## Properties
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelThumbnailWithLink.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelThumbnailWithLink.ts#L10)
+
+***
+
+### label?
+
+> `optional` **label**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelThumbnailWithLink.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelThumbnailWithLink.ts#L11)
+
+***
+
+### thumbnails
+
+> **thumbnails**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ChannelThumbnailWithLink.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelThumbnailWithLink.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelThumbnailWithLink'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelThumbnailWithLink.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelThumbnailWithLink.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelThumbnailWithLink & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelThumbnailWithLink & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChannelVideoPlayer.md b/docs/api/namespaces/YTNodes/classes/ChannelVideoPlayer.md
new file mode 100644
index 000000000..29914832c
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChannelVideoPlayer.md
@@ -0,0 +1,281 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChannelVideoPlayer
+
+# Class: ChannelVideoPlayer
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChannelVideoPlayer()
+
+> **new ChannelVideoPlayer**(`data`): [`ChannelVideoPlayer`](ChannelVideoPlayer.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChannelVideoPlayer`](ChannelVideoPlayer.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L15)
+
+## Properties
+
+### description
+
+> **description**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L11)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L9)
+
+***
+
+### published\_time
+
+> **published\_time**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L13)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### view\_count
+
+> **view\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L12)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChannelVideoPlayer'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L7)
+
+## Accessors
+
+### published
+
+> `get` **published**(): [`Text`](../../Misc/classes/Text.md)
+
+#### Deprecated
+
+This will be removed in a future release.
+Please use [ChannelVideoPlayer.published_time](ChannelVideoPlayer.md#published_time) instead.
+
+#### Returns
+
+[`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L39)
+
+***
+
+### views
+
+> `get` **views**(): [`Text`](../../Misc/classes/Text.md)
+
+#### Deprecated
+
+This will be removed in a future release.
+Please use [ChannelVideoPlayer.view_count](ChannelVideoPlayer.md#view_count) instead.
+
+#### Returns
+
+[`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChannelVideoPlayer.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChannelVideoPlayer.ts#L29)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChannelVideoPlayer & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChannelVideoPlayer & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/Chapter.md b/docs/api/namespaces/YTNodes/classes/Chapter.md
new file mode 100644
index 000000000..ace991583
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/Chapter.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / Chapter
+
+# Class: Chapter
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new Chapter()
+
+> **new Chapter**(`data`): [`Chapter`](Chapter.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Chapter`](Chapter.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/Chapter.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Chapter.ts#L13)
+
+## Properties
+
+### thumbnail
+
+> **thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/Chapter.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Chapter.ts#L11)
+
+***
+
+### time\_range\_start\_millis
+
+> **time\_range\_start\_millis**: `number`
+
+#### Defined in
+
+[src/parser/classes/Chapter.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Chapter.ts#L10)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/Chapter.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Chapter.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'Chapter'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/Chapter.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/Chapter.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Chapter & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Chapter & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChildVideo.md b/docs/api/namespaces/YTNodes/classes/ChildVideo.md
new file mode 100644
index 000000000..e66c11188
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChildVideo.md
@@ -0,0 +1,241 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChildVideo
+
+# Class: ChildVideo
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChildVideo()
+
+> **new ChildVideo**(`data`): [`ChildVideo`](ChildVideo.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChildVideo`](ChildVideo.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChildVideo.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChildVideo.ts#L20)
+
+## Properties
+
+### duration
+
+> **duration**: `object`
+
+#### seconds
+
+> **seconds**: `number`
+
+#### text
+
+> **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChildVideo.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChildVideo.ts#L13)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ChildVideo.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChildVideo.ts#L18)
+
+***
+
+### id
+
+> **id**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChildVideo.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChildVideo.ts#L10)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ChildVideo.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChildVideo.ts#L11)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChildVideo'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChildVideo.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChildVideo.ts#L8)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChildVideo & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChildVideo & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChipBarView.md b/docs/api/namespaces/YTNodes/classes/ChipBarView.md
new file mode 100644
index 000000000..8c0069d23
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChipBarView.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChipBarView
+
+# Class: ChipBarView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChipBarView()
+
+> **new ChipBarView**(`data`): [`ChipBarView`](ChipBarView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChipBarView`](ChipBarView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChipBarView.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipBarView.ts#L10)
+
+## Properties
+
+### chips
+
+> **chips**: `null` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipView`](ChipView.md)\>
+
+#### Defined in
+
+[src/parser/classes/ChipBarView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipBarView.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChipBarView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChipBarView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipBarView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChipBarView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChipBarView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChipCloud.md b/docs/api/namespaces/YTNodes/classes/ChipCloud.md
new file mode 100644
index 000000000..fa341a7b8
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChipCloud.md
@@ -0,0 +1,233 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChipCloud
+
+# Class: ChipCloud
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChipCloud()
+
+> **new ChipCloud**(`data`): [`ChipCloud`](ChipCloud.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChipCloud`](ChipCloud.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChipCloud.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloud.ts#L14)
+
+## Properties
+
+### chips
+
+> **chips**: [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ChipCloudChip`](ChipCloudChip.md)\>
+
+#### Defined in
+
+[src/parser/classes/ChipCloud.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloud.ts#L9)
+
+***
+
+### horizontal\_scrollable
+
+> **horizontal\_scrollable**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/ChipCloud.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloud.ts#L12)
+
+***
+
+### next\_button
+
+> **next\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/ChipCloud.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloud.ts#L10)
+
+***
+
+### previous\_button
+
+> **previous\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/ChipCloud.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloud.ts#L11)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChipCloud'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChipCloud.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloud.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChipCloud & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChipCloud & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChipCloudChip.md b/docs/api/namespaces/YTNodes/classes/ChipCloudChip.md
new file mode 100644
index 000000000..aba0182a7
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChipCloudChip.md
@@ -0,0 +1,223 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChipCloudChip
+
+# Class: ChipCloudChip
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChipCloudChip()
+
+> **new ChipCloudChip**(`data`): [`ChipCloudChip`](ChipCloudChip.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChipCloudChip`](ChipCloudChip.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChipCloudChip.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloudChip.ts#L13)
+
+## Properties
+
+### endpoint?
+
+> `optional` **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ChipCloudChip.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloudChip.ts#L10)
+
+***
+
+### is\_selected
+
+> **is\_selected**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/ChipCloudChip.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloudChip.ts#L9)
+
+***
+
+### text
+
+> **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChipCloudChip.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloudChip.ts#L11)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChipCloudChip'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChipCloudChip.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipCloudChip.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChipCloudChip & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChipCloudChip & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ChipView.md b/docs/api/namespaces/YTNodes/classes/ChipView.md
new file mode 100644
index 000000000..cbba44e41
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ChipView.md
@@ -0,0 +1,233 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ChipView
+
+# Class: ChipView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ChipView()
+
+> **new ChipView**(`data`): [`ChipView`](ChipView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ChipView`](ChipView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ChipView.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipView.ts#L13)
+
+## Properties
+
+### chip\_entity\_key
+
+> **chip\_entity\_key**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChipView.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipView.ts#L11)
+
+***
+
+### display\_type
+
+> **display\_type**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChipView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipView.ts#L9)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/ChipView.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipView.ts#L10)
+
+***
+
+### text
+
+> **text**: `string`
+
+#### Defined in
+
+[src/parser/classes/ChipView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipView.ts#L8)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ChipView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ChipView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ChipView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ChipView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ChipView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ClipAdState.md b/docs/api/namespaces/YTNodes/classes/ClipAdState.md
new file mode 100644
index 000000000..fa81a57d2
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ClipAdState.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ClipAdState
+
+# Class: ClipAdState
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ClipAdState()
+
+> **new ClipAdState**(`data`): [`ClipAdState`](ClipAdState.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ClipAdState`](ClipAdState.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ClipAdState.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipAdState.ts#L12)
+
+## Properties
+
+### body
+
+> **body**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ClipAdState.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipAdState.ts#L10)
+
+***
+
+### title
+
+> **title**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ClipAdState.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipAdState.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ClipAdState'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ClipAdState.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipAdState.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ClipAdState & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ClipAdState & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ClipCreation.md b/docs/api/namespaces/YTNodes/classes/ClipCreation.md
new file mode 100644
index 000000000..064064109
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ClipCreation.md
@@ -0,0 +1,293 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ClipCreation
+
+# Class: ClipCreation
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ClipCreation()
+
+> **new ClipCreation**(`data`): [`ClipCreation`](ClipCreation.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ClipCreation`](ClipCreation.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L27)
+
+## Properties
+
+### ad\_state\_overlay
+
+> **ad\_state\_overlay**: `null` \| [`ClipAdState`](ClipAdState.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L23)
+
+***
+
+### cancel\_button
+
+> **cancel\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:22](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L22)
+
+***
+
+### display\_name
+
+> **display\_name**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:20](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L20)
+
+***
+
+### external\_video\_id
+
+> **external\_video\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:24](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L24)
+
+***
+
+### publicity\_label
+
+> **publicity\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:21](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L21)
+
+***
+
+### publicity\_label\_icon
+
+> **publicity\_label\_icon**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:25](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L25)
+
+***
+
+### save\_button
+
+> **save\_button**: `null` \| [`Button`](Button.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:19](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L19)
+
+***
+
+### scrubber
+
+> **scrubber**: `null` \| [`ClipCreationScrubber`](ClipCreationScrubber.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:18](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L18)
+
+***
+
+### title\_input
+
+> **title\_input**: `null` \| [`ClipCreationTextInput`](ClipCreationTextInput.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L17)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### user\_avatar
+
+> **user\_avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L16)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ClipCreation'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ClipCreation.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreation.ts#L14)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ClipCreation & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ClipCreation & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ClipCreationScrubber.md b/docs/api/namespaces/YTNodes/classes/ClipCreationScrubber.md
new file mode 100644
index 000000000..d29d32d45
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ClipCreationScrubber.md
@@ -0,0 +1,273 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ClipCreationScrubber
+
+# Class: ClipCreationScrubber
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ClipCreationScrubber()
+
+> **new ClipCreationScrubber**(`data`): [`ClipCreationScrubber`](ClipCreationScrubber.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ClipCreationScrubber`](ClipCreationScrubber.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:17](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L17)
+
+## Properties
+
+### default\_length\_ms
+
+> **default\_length\_ms**: `number`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L11)
+
+***
+
+### duration\_label?
+
+> `optional` **duration\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L15)
+
+***
+
+### end\_label?
+
+> `optional` **end\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L14)
+
+***
+
+### length\_template
+
+> **length\_template**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L8)
+
+***
+
+### max\_length\_ms
+
+> **max\_length\_ms**: `number`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L9)
+
+***
+
+### min\_length\_ms
+
+> **min\_length\_ms**: `number`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L10)
+
+***
+
+### start\_label?
+
+> `optional` **start\_label**: `string`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L13)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### window\_size\_ms
+
+> **window\_size\_ms**: `number`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L12)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ClipCreationScrubber'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ClipCreationScrubber.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationScrubber.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ClipCreationScrubber & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ClipCreationScrubber & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ClipCreationTextInput.md b/docs/api/namespaces/YTNodes/classes/ClipCreationTextInput.md
new file mode 100644
index 000000000..0d1e872b2
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ClipCreationTextInput.md
@@ -0,0 +1,213 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ClipCreationTextInput
+
+# Class: ClipCreationTextInput
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ClipCreationTextInput()
+
+> **new ClipCreationTextInput**(`data`): [`ClipCreationTextInput`](ClipCreationTextInput.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ClipCreationTextInput`](ClipCreationTextInput.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ClipCreationTextInput.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationTextInput.ts#L12)
+
+## Properties
+
+### max\_character\_limit
+
+> **max\_character\_limit**: `number`
+
+#### Defined in
+
+[src/parser/classes/ClipCreationTextInput.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationTextInput.ts#L10)
+
+***
+
+### placeholder\_text
+
+> **placeholder\_text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/ClipCreationTextInput.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationTextInput.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ClipCreationTextInput'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ClipCreationTextInput.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipCreationTextInput.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ClipCreationTextInput & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ClipCreationTextInput & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/ClipSection.md b/docs/api/namespaces/YTNodes/classes/ClipSection.md
new file mode 100644
index 000000000..ea9389ba7
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/ClipSection.md
@@ -0,0 +1,203 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / ClipSection
+
+# Class: ClipSection
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new ClipSection()
+
+> **new ClipSection**(`data`): [`ClipSection`](ClipSection.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`ClipSection`](ClipSection.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/ClipSection.ts:15](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipSection.ts#L15)
+
+## Properties
+
+### contents
+
+> **contents**: `null` \| [`ObservedArray`](../../Helpers/type-aliases/ObservedArray.md)\<[`ClipCreation`](ClipCreation.md)\>
+
+#### Defined in
+
+[src/parser/classes/ClipSection.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipSection.ts#L13)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'ClipSection'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/ClipSection.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/ClipSection.ts#L11)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is ClipSection & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is ClipSection & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CollaboratorInfoCardContent.md b/docs/api/namespaces/YTNodes/classes/CollaboratorInfoCardContent.md
new file mode 100644
index 000000000..37f86c822
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CollaboratorInfoCardContent.md
@@ -0,0 +1,243 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CollaboratorInfoCardContent
+
+# Class: CollaboratorInfoCardContent
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CollaboratorInfoCardContent()
+
+> **new CollaboratorInfoCardContent**(`data`): [`CollaboratorInfoCardContent`](CollaboratorInfoCardContent.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CollaboratorInfoCardContent`](CollaboratorInfoCardContent.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:16](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L16)
+
+## Properties
+
+### channel\_avatar
+
+> **channel\_avatar**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L10)
+
+***
+
+### channel\_name
+
+> **channel\_name**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L12)
+
+***
+
+### custom\_text
+
+> **custom\_text**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L11)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L14)
+
+***
+
+### subscriber\_count
+
+> **subscriber\_count**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:13](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L13)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CollaboratorInfoCardContent'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CollaboratorInfoCardContent.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollaboratorInfoCardContent.ts#L8)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CollaboratorInfoCardContent & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CollaboratorInfoCardContent & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CollageHeroImage.md b/docs/api/namespaces/YTNodes/classes/CollageHeroImage.md
new file mode 100644
index 000000000..16e0232c1
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CollageHeroImage.md
@@ -0,0 +1,233 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CollageHeroImage
+
+# Class: CollageHeroImage
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CollageHeroImage()
+
+> **new CollageHeroImage**(`data`): [`CollageHeroImage`](CollageHeroImage.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CollageHeroImage`](CollageHeroImage.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CollageHeroImage.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollageHeroImage.ts#L14)
+
+## Properties
+
+### bottom\_right
+
+> **bottom\_right**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/CollageHeroImage.ts:11](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollageHeroImage.ts#L11)
+
+***
+
+### endpoint
+
+> **endpoint**: [`NavigationEndpoint`](NavigationEndpoint.md)
+
+#### Defined in
+
+[src/parser/classes/CollageHeroImage.ts:12](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollageHeroImage.ts#L12)
+
+***
+
+### left
+
+> **left**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/CollageHeroImage.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollageHeroImage.ts#L9)
+
+***
+
+### top\_right
+
+> **top\_right**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/CollageHeroImage.ts:10](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollageHeroImage.ts#L10)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CollageHeroImage'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CollageHeroImage.ts:7](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollageHeroImage.ts#L7)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CollageHeroImage & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CollageHeroImage & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/CollectionThumbnailView.md b/docs/api/namespaces/YTNodes/classes/CollectionThumbnailView.md
new file mode 100644
index 000000000..657a3fc33
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/CollectionThumbnailView.md
@@ -0,0 +1,221 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / CollectionThumbnailView
+
+# Class: CollectionThumbnailView
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new CollectionThumbnailView()
+
+> **new CollectionThumbnailView**(`data`): [`CollectionThumbnailView`](CollectionThumbnailView.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`CollectionThumbnailView`](CollectionThumbnailView.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/CollectionThumbnailView.ts:14](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollectionThumbnailView.ts#L14)
+
+## Properties
+
+### primary\_thumbnail
+
+> **primary\_thumbnail**: `null` \| [`ThumbnailView`](ThumbnailView.md)
+
+#### Defined in
+
+[src/parser/classes/CollectionThumbnailView.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollectionThumbnailView.ts#L8)
+
+***
+
+### stack\_color?
+
+> `optional` **stack\_color**: `object`
+
+#### dark\_theme
+
+> **dark\_theme**: `number`
+
+#### light\_theme
+
+> **light\_theme**: `number`
+
+#### Defined in
+
+[src/parser/classes/CollectionThumbnailView.ts:9](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollectionThumbnailView.ts#L9)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'CollectionThumbnailView'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/CollectionThumbnailView.ts:6](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/CollectionThumbnailView.ts#L6)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is CollectionThumbnailView & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is CollectionThumbnailView & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType`
+
+whether the node is of the given type
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`is`](../../Helpers/classes/YTNode.md#is)
+
+#### Defined in
+
+[src/parser/helpers.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L28)
+
+***
+
+### key()
+
+> **key**\<`T`, `R`\>(`key`): [`Maybe`](../../Helpers/classes/Maybe.md)
+
+Assert that the node has the given key and return it.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+[`Maybe`](../../Helpers/classes/Maybe.md)
+
+The value of the key wrapped in a Maybe
+
+#### Throws
+
+If the node does not have the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`key`](../../Helpers/classes/YTNode.md#key)
+
+#### Defined in
+
+[src/parser/helpers.ts:57](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L57)
diff --git a/docs/api/namespaces/YTNodes/classes/Comment.md b/docs/api/namespaces/YTNodes/classes/Comment.md
new file mode 100644
index 000000000..9ce4f63ef
--- /dev/null
+++ b/docs/api/namespaces/YTNodes/classes/Comment.md
@@ -0,0 +1,491 @@
+[youtubei.js](../../../README.md) / [YTNodes](../README.md) / Comment
+
+# Class: Comment
+
+## Extends
+
+- [`YTNode`](../../Helpers/classes/YTNode.md)
+
+## Constructors
+
+### new Comment()
+
+> **new Comment**(`data`): [`Comment`](Comment.md)
+
+#### Parameters
+
+β’ **data**: [`RawNode`](../../APIResponseTypes/type-aliases/RawNode.md)
+
+#### Returns
+
+[`Comment`](Comment.md)
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`constructor`](../../Helpers/classes/YTNode.md#constructors)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L47)
+
+## Properties
+
+### action\_buttons
+
+> **action\_buttons**: `null` \| [`CommentActionButtons`](CommentActionButtons.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:36](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L36)
+
+***
+
+### action\_menu
+
+> **action\_menu**: `null` \| [`Menu`](Menu.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L35)
+
+***
+
+### author
+
+> **author**: [`Author`](../../Misc/classes/Author.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:34](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L34)
+
+***
+
+### author\_badge
+
+> **author\_badge**: `null` \| [`AuthorCommentBadge`](AuthorCommentBadge.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:33](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L33)
+
+***
+
+### author\_is\_channel\_owner
+
+> **author\_is\_channel\_owner**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:29](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L29)
+
+***
+
+### comment\_id
+
+> **comment\_id**: `string`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:37](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L37)
+
+***
+
+### content
+
+> **content**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:27](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L27)
+
+***
+
+### current\_user\_reply\_thumbnail
+
+> **current\_user\_reply\_thumbnail**: [`Thumbnail`](../../Misc/classes/Thumbnail.md)[]
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:30](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L30)
+
+***
+
+### is\_disliked
+
+> **is\_disliked**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:42](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L42)
+
+***
+
+### is\_hearted
+
+> **is\_hearted**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:43](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L43)
+
+***
+
+### is\_liked
+
+> **is\_liked**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:41](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L41)
+
+***
+
+### is\_member
+
+> **is\_member**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:45](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L45)
+
+***
+
+### is\_pinned
+
+> **is\_pinned**: `boolean`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:44](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L44)
+
+***
+
+### paid\_comment\_chip
+
+> **paid\_comment\_chip**: `null` \| [`PdgCommentChip`](PdgCommentChip.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:32](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L32)
+
+***
+
+### published
+
+> **published**: [`Text`](../../Misc/classes/Text.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:28](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L28)
+
+***
+
+### reply\_count
+
+> **reply\_count**: `number`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:40](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L40)
+
+***
+
+### sponsor\_comment\_badge
+
+> **sponsor\_comment\_badge**: `null` \| [`SponsorCommentBadge`](SponsorCommentBadge.md)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:31](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L31)
+
+***
+
+### type
+
+> `readonly` **type**: `string`
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type)
+
+#### Defined in
+
+[src/parser/helpers.ts:8](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L8)
+
+***
+
+### vote\_count
+
+> **vote\_count**: `string`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:39](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L39)
+
+***
+
+### vote\_status
+
+> **vote\_status**: `string`
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:38](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L38)
+
+***
+
+### type
+
+> `static` **type**: `string` = `'Comment'`
+
+#### Overrides
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`type`](../../Helpers/classes/YTNode.md#type-1)
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:23](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L23)
+
+## Methods
+
+### as()
+
+> **as**\<`T`, `K`\>(...`types`): `InstanceType`\<`K`\[`number`\]\>
+
+Cast to one of the given types.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+#### Returns
+
+`InstanceType`\<`K`\[`number`\]\>
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`as`](../../Helpers/classes/YTNode.md#as)
+
+#### Defined in
+
+[src/parser/helpers.ts:35](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L35)
+
+***
+
+### dislike()
+
+> **dislike**(): `Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+Dislikes the comment.
+
+#### Returns
+
+`Promise`\<[`ApiResponse`](../../../interfaces/ApiResponse.md)\>
+
+#### Defined in
+
+[src/parser/classes/comments/Comment.ts:101](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/classes/comments/Comment.ts#L101)
+
+***
+
+### hasKey()
+
+> **hasKey**\<`T`, `R`\>(`key`): `this is Comment & { [k in string]: R }`
+
+Check for a key without asserting the type.
+
+#### Type Parameters
+
+β’ **T** *extends* `string`
+
+β’ **R** = `any`
+
+#### Parameters
+
+β’ **key**: `T`
+
+The key to check
+
+#### Returns
+
+`this is Comment & { [k in string]: R }`
+
+Whether the node has the key
+
+#### Inherited from
+
+[`YTNode`](../../Helpers/classes/YTNode.md).[`hasKey`](../../Helpers/classes/YTNode.md#haskey)
+
+#### Defined in
+
+[src/parser/helpers.ts:47](https://github.com/LuanRT/YouTube.js/blob/eb21af33db708f0355f4fb15881f5d4fabc7b06c/src/parser/helpers.ts#L47)
+
+***
+
+### is()
+
+> **is**\<`T`, `K`\>(...`types`): `this is InstanceType`
+
+Check if the node is of the given type.
+
+#### Type Parameters
+
+β’ **T** *extends* [`YTNode`](../../Helpers/classes/YTNode.md)
+
+β’ **K** *extends* [`YTNodeConstructor`](../../Helpers/interfaces/YTNodeConstructor.md)\<`T`\>[]
+
+#### Parameters
+
+β’ ...**types**: `K`
+
+The type to check
+
+#### Returns
+
+`this is InstanceType