ytmusicapi package
Subpackages
- ytmusicapi.auth package
- ytmusicapi.mixins package
- Submodules
- ytmusicapi.mixins.browsing module
BrowsingMixin
BrowsingMixin.ArtistOrderType
BrowsingMixin.get_album()
BrowsingMixin.get_album_browse_id()
BrowsingMixin.get_artist()
BrowsingMixin.get_artist_albums()
BrowsingMixin.get_basejs_url()
BrowsingMixin.get_home()
BrowsingMixin.get_lyrics()
BrowsingMixin.get_signatureTimestamp()
BrowsingMixin.get_song()
BrowsingMixin.get_song_related()
BrowsingMixin.get_tasteprofile()
BrowsingMixin.get_user()
BrowsingMixin.get_user_playlists()
BrowsingMixin.get_user_videos()
BrowsingMixin.set_tasteprofile()
- ytmusicapi.mixins.explore module
- ytmusicapi.mixins.library module
LibraryMixin
LibraryMixin.add_history_item()
LibraryMixin.edit_song_library_status()
LibraryMixin.get_account_info()
LibraryMixin.get_history()
LibraryMixin.get_library_albums()
LibraryMixin.get_library_artists()
LibraryMixin.get_library_channels()
LibraryMixin.get_library_playlists()
LibraryMixin.get_library_podcasts()
LibraryMixin.get_library_songs()
LibraryMixin.get_library_subscriptions()
LibraryMixin.rate_playlist()
LibraryMixin.rate_song()
LibraryMixin.remove_history_items()
LibraryMixin.subscribe_artists()
LibraryMixin.unsubscribe_artists()
- ytmusicapi.mixins.playlists module
- ytmusicapi.mixins.podcasts module
- ytmusicapi.mixins.search module
- ytmusicapi.mixins.uploads module
- ytmusicapi.mixins.watch module
- Module contents
- ytmusicapi.models package
- ytmusicapi.parsers package
- Submodules
- ytmusicapi.parsers.albums module
- ytmusicapi.parsers.browsing module
- ytmusicapi.parsers.explore module
- ytmusicapi.parsers.i18n module
- ytmusicapi.parsers.library module
- ytmusicapi.parsers.playlists module
- ytmusicapi.parsers.podcasts module
- ytmusicapi.parsers.search module
- ytmusicapi.parsers.songs module
- ytmusicapi.parsers.uploads module
- ytmusicapi.parsers.watch module
- Module contents
Submodules
ytmusicapi.constants module
ytmusicapi.continuations module
- ytmusicapi.continuations.get_continuation_contents(continuation, parse_func)
- ytmusicapi.continuations.get_continuation_params(results, ctoken_path='')
- ytmusicapi.continuations.get_continuation_string(ctoken)
- ytmusicapi.continuations.get_continuation_token(results: list[dict[str, Any]]) str | None
- Return type:
Optional
[str
]
- ytmusicapi.continuations.get_continuations(results, continuation_type, limit, request_func, parse_func, ctoken_path='', reloadable=False)
- ytmusicapi.continuations.get_continuations_2025(results, limit, request_func, parse_func)
- ytmusicapi.continuations.get_parsed_continuation_items(response, parse_func, continuation_type)
- ytmusicapi.continuations.get_reloadable_continuation_params(results)
- ytmusicapi.continuations.get_validated_continuations(results, continuation_type, limit, per_page, request_func, parse_func, ctoken_path='')
- ytmusicapi.continuations.resend_request_until_parsed_response_is_valid(request_func, request_additional_params, parse_func, validate_func, max_retries)
- ytmusicapi.continuations.validate_response(response, per_page, limit, current_count)
ytmusicapi.enums module
ytmusicapi.exceptions module
custom exception classes for ytmusicapi
- exception ytmusicapi.exceptions.YTMusicError
Bases:
Exception
base error class
shall only be raised if none of the subclasses below are fitting
- exception ytmusicapi.exceptions.YTMusicServerError
Bases:
YTMusicError
error caused by the YouTube Music backend
- exception ytmusicapi.exceptions.YTMusicUserError
Bases:
YTMusicError
error caused by invalid usage of ytmusicapi
ytmusicapi.helpers module
- ytmusicapi.helpers.get_authorization(auth)
- ytmusicapi.helpers.get_visitor_id(request_func)
- ytmusicapi.helpers.initialize_context()
- ytmusicapi.helpers.initialize_headers()
- ytmusicapi.helpers.sapisid_from_cookie(raw_cookie)
- ytmusicapi.helpers.sum_total_duration(item)
- ytmusicapi.helpers.to_int(string)
ytmusicapi.setup module
- ytmusicapi.setup.main() ytmusicapi.auth.oauth.token.RefreshingToken | str
- Return type:
Union
[RefreshingToken
,str
]
- ytmusicapi.setup.parse_args(args)
- ytmusicapi.setup.setup(filepath: str | None = None, headers_raw: str | None = None) str
Requests browser headers from the user via command line and returns a string that can be passed to YTMusic()
- Parameters:
filepath (
Optional
[str
]) – Optional filepath to store headers to.headers_raw (
Optional
[str
]) – Optional request headers copied from browser. Otherwise requested from terminal
- Return type:
str
- Returns:
configuration headers string
- ytmusicapi.setup.setup_oauth(client_id: str, client_secret: str, filepath: str | None = None, session: requests.sessions.Session | None = None, proxies: dict | None = None, open_browser: bool = False) ytmusicapi.auth.oauth.token.RefreshingToken
Starts oauth flow from the terminal and returns a string that can be passed to YTMusic()
- Parameters:
client_id (
str
) – Optional. Used to specify the client_id oauth should use for authentication flow. If provided, client_secret MUST also be passed or both will be ignored.client_secret (
str
) – Optional. Same as client_id but for the oauth client secret.session (
Optional
[Session
]) – Session to use for authenticationproxies (
Optional
[dict
]) – Proxies to use for authenticationfilepath (
Optional
[str
]) – Optional filepath to store headers to.open_browser (
bool
) – If True, open the default browser with the setup link
- Return type:
- Returns:
configuration headers string
ytmusicapi.ytmusic module
- class ytmusicapi.ytmusic.YTMusic(auth: str | dict | None = None, user: str | None = None, requests_session: requests.sessions.Session | None = None, proxies: dict[str, str] | None = None, language: str = 'en', location: str = '', oauth_credentials: ytmusicapi.auth.oauth.credentials.OAuthCredentials | None = None)
Bases:
YTMusicBase
,BrowsingMixin
,SearchMixin
,WatchMixin
,ExploreMixin
,LibraryMixin
,PlaylistsMixin
,PodcastsMixin
,UploadsMixin
Allows automated interactions with YouTube Music by emulating the YouTube web client’s requests. Permits both authenticated and non-authenticated requests. Authentication header data must be provided on initialization.
- class ytmusicapi.ytmusic.YTMusicBase(auth: str | dict | None = None, user: str | None = None, requests_session: requests.sessions.Session | None = None, proxies: dict[str, str] | None = None, language: str = 'en', location: str = '', oauth_credentials: ytmusicapi.auth.oauth.credentials.OAuthCredentials | None = None)
Bases:
object
- as_mobile() collections.abc.Iterator[None]
- Return type:
Iterator
[None
]
Not thread-safe!
Temporarily changes the context to enable different results from the API, meant for the Android mobile-app. All calls inside the with-statement with emulate mobile behavior.
This context-manager has no enter_result, as it operates in-place and only temporarily alters the underlying YTMusic-object.
Example:
with yt.as_mobile(): yt._send_request(...) # results as mobile-app yt._send_request(...) # back to normal, like web-app
- property base_headers: CaseInsensitiveDict
- property headers: CaseInsensitiveDict
-
proxies:
Optional
[dict
[str
,str
]] params for session modification
Module contents
- class ytmusicapi.OAuthCredentials(client_id: str, client_secret: str, session: requests.sessions.Session | None = None, proxies: dict | None = None)
Bases:
Credentials
Class for handling OAuth credential retrieval and refreshing.
-
client_id:
str
-
client_secret:
str
- get_code() ytmusicapi.auth.oauth.models.AuthCodeDict
Method for obtaining a new user auth code. First step of token creation.
- Return type:
- refresh_token(refresh_token: str) ytmusicapi.auth.oauth.models.BaseTokenDict
Method for requesting a new access token for a given
refresh_token
. Token must have been created by the same OAuth client.- Parameters:
refresh_token (
str
) – Correspondingrefresh_token
for a matchingaccess_token
. Obtained via- Return type:
- token_from_code(device_code: str) ytmusicapi.auth.oauth.models.RefreshableTokenDict
Method for verifying user auth code and conversion into a FullTokenDict.
- Return type:
-
client_id:
- class ytmusicapi.YTMusic(auth: str | dict | None = None, user: str | None = None, requests_session: requests.sessions.Session | None = None, proxies: dict[str, str] | None = None, language: str = 'en', location: str = '', oauth_credentials: ytmusicapi.auth.oauth.credentials.OAuthCredentials | None = None)
Bases:
YTMusicBase
,BrowsingMixin
,SearchMixin
,WatchMixin
,ExploreMixin
,LibraryMixin
,PlaylistsMixin
,PodcastsMixin
,UploadsMixin
Allows automated interactions with YouTube Music by emulating the YouTube web client’s requests. Permits both authenticated and non-authenticated requests. Authentication header data must be provided on initialization.
- ytmusicapi.setup(filepath: str | None = None, headers_raw: str | None = None) str
Requests browser headers from the user via command line and returns a string that can be passed to YTMusic()
- Parameters:
filepath (
Optional
[str
]) – Optional filepath to store headers to.headers_raw (
Optional
[str
]) – Optional request headers copied from browser. Otherwise requested from terminal
- Return type:
str
- Returns:
configuration headers string
- ytmusicapi.setup_oauth(client_id: str, client_secret: str, filepath: str | None = None, session: requests.sessions.Session | None = None, proxies: dict | None = None, open_browser: bool = False) ytmusicapi.auth.oauth.token.RefreshingToken
Starts oauth flow from the terminal and returns a string that can be passed to YTMusic()
- Parameters:
client_id (
str
) – Optional. Used to specify the client_id oauth should use for authentication flow. If provided, client_secret MUST also be passed or both will be ignored.client_secret (
str
) – Optional. Same as client_id but for the oauth client secret.session (
Optional
[Session
]) – Session to use for authenticationproxies (
Optional
[dict
]) – Proxies to use for authenticationfilepath (
Optional
[str
]) – Optional filepath to store headers to.open_browser (
bool
) – If True, open the default browser with the setup link
- Return type:
- Returns:
configuration headers string