<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Cannot delete tracks from a playlist using the API. Receiving 401 error. in Spotify for Developers</title>
    <link>https://community.spotify.com/t5/Spotify-for-Developers/Cannot-delete-tracks-from-a-playlist-using-the-API-Receiving-401/m-p/5492922#M7732</link>
    <description>&lt;P&gt;&lt;STRONG&gt;Plan&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Free/Premium&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Country&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Canada&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;My Question or Issue&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I've been trying and failing to delete tracks from a playlist using the API. Every method I attempt results in a 401 error from spotify.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is a JavaScript Web App and I'm performing both Oauth and delete requests from a Node.js backend.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a valid Oauth2 flow and can create/add tracks to playlists on an authorized account.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am using the passport.js Spotify Strategy to secure an access token and I have defined scopes of&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;user-read-email&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;user-read-private&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;playlist-modify-public&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;playlist-modify-private&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Here is the code for my route handler in Node/express:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;app.get('/api/playlist/update', requireLogin, async (req, res) =&amp;gt; {
    // * ----- CONFIG ----- (Spotify access token)
    const config = {
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${req.user.accessToken}`,
        'Content-Type': 'application/json',
      },
    };

    // * ----- GET SNAPSHOT ID OF PLAYLIST -----
    const url = `https://api.spotify.com/v1/playlists/${keys.URI_TOP10}`;

    const response = await axios.get(url, config);
    const snapshot_id = response.data.snapshot_id;

    // console.log(snapshot_id);

    // * get tracks
    const responseTracks = await axios.get(
      `https://api.spotify.com/v1/playlists/${keys.URI_TOP10}/tracks`,
      config
    );
    const tracks = responseTracks.data.items;
    const trackURIs = tracks.map((track) =&amp;gt; {
      return { uri: track.track.uri };
    });

    // console.log(trackURIs);

    // * ----- FORMATE FETCH REQ BODY -----
    const body = JSON.stringify({
      snapshot_id: snapshot_id,
      tracks: trackURIs,
    });

    // console.log(body);

    // * ----- DELETE PLAYLIST TRACKS -----
    fetch(`https://api.spotify.com/v1/playlists/${keys.URI_TOP10}/tracks`, {
      method: 'DELETE',
      headers: config,
      body: body,
    })
      .then((response) =&amp;gt; {
        if (response.ok) {
          console.log(
            `Tracks successfully deleted from playlist with ID ${keys.URI_TOP10}`
          );
        } else {
          console.log(response);
          throw new Error('Error deleting tracks from playlist');
        }
      })
      .catch((error) =&amp;gt; {
        console.log(error);
      });
  });&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 23 Jan 2023 21:07:13 GMT</pubDate>
    <dc:creator>kcrb</dc:creator>
    <dc:date>2023-01-23T21:07:13Z</dc:date>
    <item>
      <title>Cannot delete tracks from a playlist using the API. Receiving 401 error.</title>
      <link>https://community.spotify.com/t5/Spotify-for-Developers/Cannot-delete-tracks-from-a-playlist-using-the-API-Receiving-401/m-p/5492922#M7732</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Plan&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Free/Premium&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Country&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Canada&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;My Question or Issue&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I've been trying and failing to delete tracks from a playlist using the API. Every method I attempt results in a 401 error from spotify.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is a JavaScript Web App and I'm performing both Oauth and delete requests from a Node.js backend.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a valid Oauth2 flow and can create/add tracks to playlists on an authorized account.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am using the passport.js Spotify Strategy to secure an access token and I have defined scopes of&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;user-read-email&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;user-read-private&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;playlist-modify-public&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;playlist-modify-private&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Here is the code for my route handler in Node/express:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;app.get('/api/playlist/update', requireLogin, async (req, res) =&amp;gt; {
    // * ----- CONFIG ----- (Spotify access token)
    const config = {
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${req.user.accessToken}`,
        'Content-Type': 'application/json',
      },
    };

    // * ----- GET SNAPSHOT ID OF PLAYLIST -----
    const url = `https://api.spotify.com/v1/playlists/${keys.URI_TOP10}`;

    const response = await axios.get(url, config);
    const snapshot_id = response.data.snapshot_id;

    // console.log(snapshot_id);

    // * get tracks
    const responseTracks = await axios.get(
      `https://api.spotify.com/v1/playlists/${keys.URI_TOP10}/tracks`,
      config
    );
    const tracks = responseTracks.data.items;
    const trackURIs = tracks.map((track) =&amp;gt; {
      return { uri: track.track.uri };
    });

    // console.log(trackURIs);

    // * ----- FORMATE FETCH REQ BODY -----
    const body = JSON.stringify({
      snapshot_id: snapshot_id,
      tracks: trackURIs,
    });

    // console.log(body);

    // * ----- DELETE PLAYLIST TRACKS -----
    fetch(`https://api.spotify.com/v1/playlists/${keys.URI_TOP10}/tracks`, {
      method: 'DELETE',
      headers: config,
      body: body,
    })
      .then((response) =&amp;gt; {
        if (response.ok) {
          console.log(
            `Tracks successfully deleted from playlist with ID ${keys.URI_TOP10}`
          );
        } else {
          console.log(response);
          throw new Error('Error deleting tracks from playlist');
        }
      })
      .catch((error) =&amp;gt; {
        console.log(error);
      });
  });&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Jan 2023 21:07:13 GMT</pubDate>
      <guid>https://community.spotify.com/t5/Spotify-for-Developers/Cannot-delete-tracks-from-a-playlist-using-the-API-Receiving-401/m-p/5492922#M7732</guid>
      <dc:creator>kcrb</dc:creator>
      <dc:date>2023-01-23T21:07:13Z</dc:date>
    </item>
    <item>
      <title>Re: Cannot delete tracks from a playlist using the API. Receiving 401 error.</title>
      <link>https://community.spotify.com/t5/Spotify-for-Developers/Cannot-delete-tracks-from-a-playlist-using-the-API-Receiving-401/m-p/5493223#M7735</link>
      <description>&lt;P&gt;Error 401 means: Bad or expired token.&lt;/P&gt;</description>
      <pubDate>Tue, 24 Jan 2023 06:19:47 GMT</pubDate>
      <guid>https://community.spotify.com/t5/Spotify-for-Developers/Cannot-delete-tracks-from-a-playlist-using-the-API-Receiving-401/m-p/5493223#M7735</guid>
      <dc:creator>Ximzend</dc:creator>
      <dc:date>2023-01-24T06:19:47Z</dc:date>
    </item>
  </channel>
</rss>

