为何有效Facebook长期用户令牌调用指定API时返回OAuthException 200?
针对你遇到的长期用户令牌调用/me/adaccounts和/insights接口返回API access blocked(错误码200)的问题,常见原因及解决办法如下:
长期令牌已失效
长期令牌并非永久有效,通常有效期为60天,到期后会自动失效。用Facebook官方的令牌调试工具检查当前令牌状态,确认是否过期。若已过期,重新生成长期令牌即可,生成时需确保用户处于登录状态,且关联的权限未发生变动。应用或令牌权限被限制/撤销
即便用户在Business Manager拥有完全权限,也可能因以下情况被拦截:- 应用违反Marketing API使用规则,比如请求过于频繁、存在数据滥用行为
- 令牌对应的权限被管理员在Business Manager或应用设置中手动撤销
检查应用的App Review状态,确认ads_read、manage_adaccounts等必要权限仍存在;同时查看开发者后台通知,确认是否有政策违规警告。
API版本过于陈旧
你使用的v23.0版本可能已被Facebook淘汰,过期版本的请求会被直接拦截。切换到当前支持的稳定API版本(比如v19.0及以上,以Facebook最新版本列表为准),更新请求URL中的版本号后重试。请求IP被封禁
若服务器IP被Facebook安全系统标记为异常(比如批量请求过于频繁、来自高风险区域),会触发访问拦截。检查应用设置中是否有IP白名单限制,确认当前IP在名单内;或更换测试IP,验证是否能正常发起请求。关联用户状态异常
若用户被移除出Business Manager、账号被临时限制,或Facebook账号本身存在异常(比如登录验证未通过),即便为管理员,令牌也会失效。确认用户在Business Manager中的状态,确保仍拥有目标广告账户的完全权限;让用户重新登录Facebook,验证账号状态正常。
另外,调用/insights接口时,time_range参数无需手动用json.dumps处理,直接传入字符串格式的JSON或字典即可,requests会自动完成序列化,避免格式错误:
params = { "access_token": access_token, "time_range": '{"since":"2025-01-01","until":"2025-09-01"}', "level": "ad", "fields": "date_start,date_stop,spend,impressions,frequency,cpc,ctr", "breakdowns": "country", "time_increment": 1 }
内容的提问来源于stack exchange,提问作者Nazar Ponomarenko




