pip install ytmusicapi

Authenticated requests

Copy authentication headers

To run authenticated requests you need to set up you need to copy your request headers from a POST request in your browser. To do so, follow these steps:

  • Open a new tab
  • Open the developer tools (Ctrl-Shift-I) and select the “Network” tab
  • Go to and ensure you are logged in
  • Find an authenticated POST request. The simplest way is to filter by /browse using the search bar of the developer tools. If you don’t see the request, try scrolling down a bit or clicking on the library button in the top bar.
  • Verify that the request looks like this: Status 200, Method POST, Domain, File browse?...
  • Copy the request headers (right click > copy > copy request headers)
Chromium (Chrome/Edge)
  • Verify that the request looks like this: Status 200, Type xhr, Name browse?...
  • Click on the Name of any matching request. In the “Headers” tab, scroll to the section “Request headers” and copy everything starting from “accept: */*” to the end of the section

Using the headers in your project

To set up your project, open a Python console and call YTMusic.setup() with the parameter filepath=headers_auth.json and follow the instructions and paste the request headers to the terminal input:

from ytmusicapi import YTMusic

If you don’t want terminal interaction in your project, you can pass the request headers with the headers_raw parameter:

from ytmusicapi import YTMusic
YTMusic.setup(filepath="headers_auth.json", headers_raw="<headers copied above>")

The function returns a JSON string with the credentials needed for Usage. Alternatively, if you passed the filepath parameter as described above, a file called headers_auth.json will be created in the current directory, which you can pass to YTMusic() for authentication.

These credentials remain valid as long as your YTMusic browser session is valid (about 2 years unless you log out).

MacOS special pasting instructions
  • MacOS terminal application can only accept 1024 characters pasted to std input. To paste in terminal, a small utility called pbpaste must be used.
  • In terminal just prefix the command used to run the script you created above with ``pbpaste | ``
  • This will pipe the contents of the clipboard into the script just as if you had pasted it from the edit menu.

Manual file creation

Alternatively, you can paste the cookie to headers_auth.json below and create your own file:

    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
    "Accept": "*/*",
    "Accept-Language": "en-US,en;q=0.5",
    "Content-Type": "application/json",
    "X-Goog-AuthUser": "0",
    "x-origin": "",
    "Cookie" : "PASTE_COOKIE"