Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/faraasaaay/inner/llms.txt

Use this file to discover all available pages before exploring further.

Inner’s browse and search methods return rich page objects that aggregate content into structured data classes. These page models are the primary way to access YouTube Music content. All page types live in the com.tamed.music.innertube.pages package and are data class instances, making them safe to copy, compare, and destructure.
import com.tamed.music.innertube.pages.*

ArtistPage

Returned by YouTube.artist() and PortableInnertube.artist(). Contains the artist’s identity, all visible content sections, and additional metadata from the immersive header.
artist
ArtistItem
The artist’s identity and playback endpoints. See ArtistItem for field details.
sections
List<ArtistSection>
The ordered list of content sections on the artist’s page (e.g. “Songs”, “Albums”, “Singles”, “Videos”, “Playlists”, “Related artists”). Each ArtistSection contains:
description
String?
The artist bio or description text from the immersive header. null if not available.
subscriberCountText
String?
Human-readable subscriber count (e.g. "1.2M subscribers"), sourced from the subscribe button renderer. null if not available.
monthlyListenerCount
String?
Monthly listener text (e.g. "5,432,109 monthly listeners"), sourced from the immersive header. null if not available.
val page: ArtistPage = YouTube.artist("UCxxxxxxxxxxxxxxxxxxxxxx").getOrThrow()

println(page.artist.title)
println(page.subscriberCountText)
println(page.monthlyListenerCount)

page.sections.forEach { section ->
    println("${section.title}${section.items.size} items")
    section.moreEndpoint?.let { println("  More at: ${it.browseId}") }
}

AlbumPage

Returned by YouTube.album() and PortableInnertube.album(). Contains full album metadata, a complete track listing, optional description, and alternate versions of the release.
album
AlbumItem
The album’s identity including browseId, playlistId, title, artists, year, and thumbnail.
songs
List<SongItem>
The complete ordered track listing. Each SongItem has its album field populated with the parent AlbumItem’s title and browseId. Empty when withSongs = false was passed to album().
description
String?
The album description text from the browse response, sourced from musicDescriptionShelfRenderer or the immersive header. null if not provided.
otherVersions
List<AlbumItem>
Other releases of the same album — deluxe editions, remasters, explicit versions, etc. Sourced from the secondary column’s carousel shelf. Empty list if none are present.
val page: AlbumPage = YouTube.album("MPREb_xxxxxxxxxxxx").getOrThrow()

println("${page.album.title} (${page.album.year})")
println("${page.songs.size} tracks")
page.songs.forEachIndexed { i, song ->
    println("${i + 1}. ${song.title} (${song.duration}s)")
}

if (page.otherVersions.isNotEmpty()) {
    println("Other versions:")
    page.otherVersions.forEach { println("  ${it.title}") }
}

PlaylistPage

Returned by YouTube.playlist() and PortableInnertube.playlist(). Contains the playlist header, an initial page of songs, and continuation tokens for fetching further songs.
playlist
PlaylistItem
The playlist’s identity, author, song count text, and playback endpoints. playlist.isEditable is true when the current authenticated user owns the playlist.
songs
List<SongItem>
The initial page of tracks. Each SongItem has its setVideoId field populated — this per-entry identifier is required for playlist mutation operations (e.g. removing or reordering tracks).
songsContinuation
String?
Inline continuation token from the playlist shelf’s content list. Use this to fetch the next batch of songs via YouTube.playlistContinuation().
continuation
String?
Outer section-level continuation token. May be returned alongside songsContinuation for very long playlists.
val page: PlaylistPage = YouTube.playlist("PLxxxxxxxxxxxxxx").getOrThrow()
println("${page.playlist.title} by ${page.playlist.author?.name}")
page.songs.forEach { println("  ${it.title} (setVideoId=${it.setVideoId})") }

SearchResult

Returned by YouTube.search() and PortableInnertube.search(). A flat, paginated result set of YTItem values.
items
List<YTItem>
The list of matched content items. May contain any mix of SongItem, AlbumItem, PlaylistItem, and ArtistItem depending on the query and params filter.
continuation
String?
Token for fetching the next page of results. Pass this back to search() as the continuation parameter. null when there are no more results or the current page returned an empty list.

HomePage

Returned by YouTube.home() and PortableInnertube.home(). Represents the personalised home feed with optional filter chips and carousel sections.
chips
List<HomePage.Chip>?
Filter chips shown at the top of the home feed (e.g. “For you”, “New releases”, “Hip-Hop”). null on continuation responses. Each Chip has:
sections
List<HomePage.Section>
The carousel sections visible on the page. Each Section has:
continuation
String?
Token for loading additional home sections. Pass to home(continuation = ...).

filterExplicit(enabled: Boolean): HomePage

Returns a copy of the HomePage with explicit YTItem entries removed from all sections. When enabled is false, returns this unchanged.
val feed: HomePage = YouTube.home().getOrThrow()
    .filterExplicit(enabled = userPrefs.hideExplicit)

feed.chips?.forEach { println(it.title) }
feed.sections.forEach { section ->
    println("${section.title}${section.items.size} items")
}

// Load more sections
var continuation = feed.continuation
while (continuation != null) {
    val more = YouTube.home(continuation = continuation).getOrThrow()
    more.sections.forEach { println(it.title) }
    continuation = more.continuation
}

NextResult

Returned by YouTube.next(). Represents the “Up next” / queue state for a currently playing track, including lyrics and related content endpoints.
title
String?
The queue or playlist title. null for single-track contexts.
items
List<SongItem>
The list of songs in the playback queue, parsed from PlaylistPanelVideoRenderer entries.
currentIndex
Int?
The zero-based index of the currently playing song within items. null if not determinable from the response.
lyricsEndpoint
BrowseEndpoint?
A browse endpoint for fetching lyrics for the current track. Pass the browseId to YouTube.lyrics(). null if lyrics are not available.
A browse endpoint for the “Related” tab content. null if not available.
continuation
String?
Token for fetching additional queue items when the queue has more entries than were returned in the initial response.
endpoint
WatchEndpoint
The current or continuation watch endpoint. Use this to resume or extend the playback session.

ExplorePage

Returned by YouTube.explore(). Aggregates the new-release albums and mood/genre browsing categories from the InnerTube explore surface.
newReleaseAlbums
List<AlbumItem>
A flat list of recently released albums, sourced from FEmusic_new_releases_albums.
moodAndGenres
List<MoodAndGenres.Item>
The list of mood and genre browse categories (e.g. “Energize”, “Chill”, “Party”). Each MoodAndGenres.Item has a title and a BrowseEndpoint for loading the associated playlist collection.

PlaylistContinuationPage

Returned by YouTube.playlistContinuation(). Contains a single additional page of songs for a playlist that was initially fetched via YouTube.playlist().
songs
List<SongItem>
The next batch of tracks. Each SongItem has setVideoId populated for playlist mutation operations.
continuation
String?
Token for fetching yet another page, or null when this is the final page of the playlist.

Continuation patterns

All paginated page types follow the same pattern: the initial response contains the first page of data and an optional continuation token. Passing that token back to the same method (or a dedicated continuation method) fetches the next page.
// Fetch initial playlist page
val page = YouTube.playlist("PLxxxxxxxxxxxxxx").getOrThrow()
page.songs.forEach { println(it.title) }

// Fetch subsequent pages of songs
var continuation = page.songsContinuation
while (continuation != null) {
    val more = YouTube.playlistContinuation(continuation).getOrThrow()
    more.songs.forEach { println(it.title) }
    continuation = more.continuation
}
Continuation tokens are opaque strings generated by the InnerTube API. Do not parse or store them beyond a single session — they may expire or become invalid if the underlying feed data changes.

Build docs developers (and LLMs) love