调用Zendesk API传入正确Token仍报invalid_token错误如何解决
问题根因
这个invalid_token报错和你代码里的Bearer拼接逻辑没有关系,核心是你混淆了Zendesk两条完全独立的API体系:你参考的文档属于**Zendesk Sell(原Sales CRM/Base CRM)**的v3接口,和常用的Zendesk Support工单系统API不共享域名、不共享鉴权凭证,你踩了三个明确的坑:
- 域名配置错误:Zendesk Sell的API专属域名是
https://api.getbase.com,你写的https://mydomain.zendesk.com是Zendesk Support的接口域名,请求打到Support的鉴权服务上,自然识别不了对应凭证,反过来传Support的凭证调用Sell接口也会报无效。 - 凭证类型不匹配:接口要求的
Bearer $TOKEN是Sell体系下的OAuth访问令牌/个人访问令牌(PAT),不是Zendesk Support后台生成的全局API Token,后者仅能用于Support的v2接口,完全不兼容Sell接口。 - 路径冗余:Sell的v3接口不需要在路径末尾加
.json后缀,多余后缀可能触发路由层的异常鉴权校验。
修复方案
按以下步骤调整即可:
- 替换请求地址:将域名改为Sell官方API域名,去掉路径末尾的
.json,正确接口地址为https://api.getbase.com/v3/deals/custom_fields - 准备合法凭证:登录你的Zendesk Sell账号,进入「设置 > OAuth > 个人访问令牌」页面,生成拥有Deals读权限的个人访问令牌,这个值才是Authorization头里需要传的token。
- 简化请求逻辑:GET请求不需要传空payload,多余的
Content-Type头也可以移除,避免不必要的请求校验。
修复后的可运行代码:
import requests # 替换为你自己在Sell后台生成的个人访问令牌 API_TOKEN = "替换为你的合法访问令牌" url = "https://api.getbase.com/v3/deals/custom_fields" headers = { "Accept": "application/json", "Authorization": f"Bearer {API_TOKEN}" } resp = requests.get(url, headers=headers) print(resp.status_code) print(resp.json())
额外排查点
如果调整后仍报错,优先检查:
- 生成个人访问令牌时,是否勾选了Deals模块的读取权限
- 令牌是否设置了过期时间,且当前已超出有效期
- 不要把Zendesk Support的API Token、账号登录密码误当成Sell的访问令牌传入
内容的提问来源于stack exchange,提问作者Shu Rahman
相关产品推荐
相关产品推荐

