You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spotify Web API添加曲目到播放列表时遭遇403 Forbidden错误求助

Spotify Web API 添加曲目到播放列表返回403 Forbidden 问题排查与解决

核心问题描述

使用Spotify Web API向播放列表添加曲目时持续返回403 Forbidden错误,已确认Token包含playlist-modify-private、playlist-modify-public等必要权限,且Token未过期、请求格式符合文档要求。

关键信息

应用配置

  • Spotify Client ID:我的客户端ID
  • Spotify Client Secret:客户端密钥
  • Redirect URI:http://127.0.0.1:8000/callback

Access Token详情

{
  "access_token": "my access token",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "my refresh token",
  "scope": "playlist-modify-private playlist-modify-public playlist-read-private playlist-read-collaborative",
  "expires_at": 1725396428
}

错误日志

INFO 2024-09-03 20:16:02,097 cron Distributing 1 playlists to job scheduled at 2024-09-03 20:47:02.097874 for Order ID 28.
INFO 2024-09-03 20:16:02,100 cron Adding track 0TT2Tzi8mEETCqYZ1ffiHh to playlist 4CeTjVTCZOFzTBdO8yaLvG
ERROR 2024-09-03 20:16:02,557 cron Spotify API error: https://api.spotify.com/v1/playlists/4CeTjVTCZOFzTBdO8yaLvG/tracks:
 Check settings on developer.spotify.com/dashboard, the user may not be registered.
ERROR 2024-09-03 20:16:02,558 cron Check if the user 31rizduwj674dch67g22bjqy7sue is correctly registered and has permissions to modify the playlist.

已尝试的排查步骤

  • 验证Token权限范围,确认包含必要权限
  • 检查Token有效性,尝试刷新Token
  • 确认播放列表归属,确保用户拥有或被授权修改
  • 重新完成应用授权流程
  • 验证API端点与请求格式符合文档要求
  • 确认用户具备播放列表修改权限

针对性解决建议

1. 检查Spotify开发者控制台配置

  • 应用状态验证:确保控制台中的应用不是「草稿」状态,草稿应用仅对开发者自身账户开放,其他用户授权后无法正常调用API,需发布应用(无需审核,仅需填写基本信息)。
  • 重定向URI完全匹配:确认控制台中配置的Redirect URI和代码中使用的完全一致,包括协议(http/https)、域名、端口、路径,哪怕多一个末尾斜杠都会导致权限验证失败。
  • 应用类型配置:确认应用类型设置为「Web API」,虽然Spotipy兼容多类型,但错误的类型配置可能导致权限范围受限。

2. 排查播放列表与用户账户的权限关联

  • 播放列表协作权限:如果是协作播放列表,确认用户被授予「可编辑」权限(而非仅查看权限);私有播放列表即使是协作成员,也需要Token的playlist-modify-private权限生效。
  • 用户账户限制:检查用户是否为受限账户(如家庭计划子账户、试用账户),部分受限账户无法修改非自身创建的播放列表。
  • 归属关系验证:调用GET /me接口获取Token对应的用户ID,再调用GET /playlists/{playlist_id}接口,确认owner.id与用户ID一致,或collaborative为true且用户在协作成员列表中。

3. 额外排查步骤

  • 清理冗余请求参数:你的curl请求同时在URL参数和请求体中传递了uris,这会导致API解析冲突,需去掉其中一个(推荐用请求体传递参数),简化请求如下:
    curl --request POST \
      --url 'https://api.spotify.com/v1/playlists/4CeTjVTCZOFzTBdO8yaLvG/tracks' \
      --header 'Authorization: Bearer 你的access_token' \
      --header 'Content-Type: application/json' \
      --data '{
        "uris": [
            "spotify:track:0TT2Tzi8mEETCqYZ1ffiHh"
        ]
    }'
    
  • 验证Token用户归属:调用GET /me接口,确认返回的用户ID与错误日志中的31rizduwj674dch67g22bjqy7sue完全一致,避免使用了错误用户的Token。
  • 检查速率限制:查看API响应头中的X-RateLimit-Remaining字段,确认是否触发速率限制(虽然通常返回429,但部分场景可能返回403)。
  • 简化请求测试:去掉请求体中的position字段,仅保留uris,排除参数格式导致的错误。
  • Spotipy配置校验:确认授权时Spotipy的scope参数与Token返回的权限完全一致,避免代码中授权请求的权限不足。

内容的提问来源于stack exchange,提问作者Linear Data Structure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:40:25