Guía Definitiva: Cómo Conectar y Controlar Spotify por API en 2026 (Saltando el Error 403 Forbidden)
Por Rox DJ (y la IA de Brave) - Marzo 2026
Si estás leyendo esto, probablemente intentaste crear una playlist o añadir canciones a tu cuenta de Spotify usando código en 2025/2026 y te chocaste contra un muro de concreto llamado 403 Forbidden (o Error -1 Forbidden).
No te preocupes. No eres tú, no es tu código, no es tu token. Es Spotify. A finales de 2024 y principios de 2025, Spotify cerró y modificó silenciosamente sus endpoints clásicos por motivos de “seguridad”. Las librerías famosas como spotipy se rompieron porque seguían apuntando a los enlaces muertos.
Aquí tienes la guía paso a paso para hackear legalmente tu propia cuenta y organizar tu música con Python usando la NUEVA API de 2026.
Paso 1: El Papeleo de Desarrollador (Sacar las Llaves)
- Entra a developer.spotify.com/dashboard e inicia sesión con tu cuenta normal de Spotify.
- Haz clic en Create app (Crear aplicación).
- Llena el nombre y descripción (“Mi Bot Musical”, etc.).
- CRÍTICO: En Redirect URIs, pon exactamente:
http://127.0.0.1:8888/callback. - Guarda la app y ve a la sección de Settings (Configuración) para copiar dos códigos vitales:
Client IDClient Secret
- EL PASO QUE TODOS OLVIDAN: En la página principal de tu App, ve a User Management (Manejo de Usuarios) y añade tu propio correo electrónico de Spotify a la lista blanca. Si no haces esto, Spotify te bloqueará cualquier intento de escritura por estar en “Modo Desarrollo”.
Paso 2: Generar el Token de Acceso con Permisos Correctos
Necesitas un token de OAuth 2.0 que tenga los “scopes” (permisos) de escritura. Los obligatorios son: playlist-modify-public playlist-modify-private playlist-read-private user-library-read.
Entra a este enlace desde tu navegador (reemplaza TU_CLIENT_ID por tu código):
https://accounts.spotify.com/authorize?client_id=TU_CLIENT_ID&response_type=code&redirect_uri=http%3A%2F%2F127.0.0.1%3A8888%2Fcallback&scope=playlist-modify-public+playlist-modify-private+playlist-read-private+user-library-read- Dale a “Aceptar”.
- La página se quedará en blanco o dará error de conexión (
127.0.0.1). Es normal. - Copia la URL de arriba. Se verá así:
http://127.0.0.1:8888/callback?code=AQA... - Guarda ese código súper largo que va después del
code=. Es tu llave temporal.
Paso 3: El Código Python (La Nueva API 2026)
Olvídate de las funciones mágicas de spotipy (sp.user_playlist_create()), porque apuntan al viejo endpoint /users/{user_id}/playlists que ahora devuelve 403.
En 2026, el endpoint correcto para crear listas es: POST /me/playlists
Y para añadir canciones: POST /playlists/{playlist_id}/items (antes era /tracks).
Aquí tienes el script en crudo usando la librería requests de Python, que no falla nunca:
import requestsimport base64import sys
client_id = "TU_CLIENT_ID"client_secret = "TU_CLIENT_SECRET"code = "EL_CODIGO_LARGO_DEL_PASO_2"redirect_uri = "http://127.0.0.1:8888/callback"
# 1. Intercambiar el código por un Token de Acceso realauth_string = f"{client_id}:{client_secret}"auth_base64 = base64.b64encode(auth_string.encode('ascii')).decode('ascii')
res_token = requests.post( "https://accounts.spotify.com/api/token", headers={ "Authorization": f"Basic {auth_base64}", "Content-Type": "application/x-www-form-urlencoded" }, data={ "grant_type": "authorization_code", "code": code, "redirect_uri": redirect_uri })
if res_token.status_code != 200: print("Error obteniendo token:", res_token.text) sys.exit(1)
access_token = res_token.json()["access_token"]headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json"}
# 2. NUEVO ENDPOINT 2026: Crear la Playlist (/me/playlists)print("Creando nueva playlist...")res_create = requests.post( "https://api.spotify.com/v1/me/playlists", headers=headers, json={ "name": "Mi Nueva Playlist 2026 🚀", "public": False, # Debe ser False para cuentas de desarrollo sin aprobar "description": "Creada saltándose el error 403 con la API 2026." })
playlist_id = res_create.json().get("id")print(f"Playlist creada con ID: {playlist_id}")
# 3. Obtener tus canciones favoritas (Ejemplo)print("Buscando tus canciones favoritas (Liked Songs)...")res_saved = requests.get("https://api.spotify.com/v1/me/tracks?limit=20", headers=headers)track_uris = [item['track']['uri'] for item in res_saved.json().get('items', [])]
# 4. NUEVO ENDPOINT 2026: Añadir canciones (/playlists/{id}/items)print("Añadiendo canciones a la lista...")res_add = requests.post( f"https://api.spotify.com/v1/playlists/{playlist_id}/items", headers=headers, json={"uris": track_uris})
if res_add.status_code in (200, 201): print("¡ÉXITO TOTAL! Revisa tu Spotify.")else: print("Error añadiendo canciones:", res_add.text)Resumen de Cambios Clave 2026:
- No uses
/users/{id}/playlists❌ -> Usa/me/playlists✅ - No uses
/playlists/{id}/tracks❌ -> Usa/playlists/{id}/items✅ - Las librerías de terceros (como
spotipy) tardan en actualizarse. Si algo falla, ataca la API directamente con peticiones HTTP/REST (como en este script).
¡Fin del tutorial! A disfrutar de la música sin que los servidores te escupan en la cara. 🎵😈