
调用 polar accesslink api 时返回 403 错误,通常并非认证失败,而是因未完成用户注册流程——即使已成功获取 access token,也必须先调用 `/v3/users` 注册用户,否则所有后续数据接口均会拒绝访问。
在 Polar AccessLink API 的设计中,OAuth 2.0 授权流程仅解决身份认证(Authentication)问题,而用户绑定与授权确认(Authorization & Registration)是独立且强制的前置步骤。这意味着:即使你已通过 /oauth/token 获取了有效的 Bearer Token,若尚未向 Polar 后端显式注册该用户(即调用 POST /v3/users),所有受保护的数据端点(如心率、活动、睡眠等)都会返回 403 Forbidden。
✅ 正确调用顺序如下:
- 完成 OAuth 授权,获取 access_token;
- 立即调用用户注册接口(需在首次访问数据前执行一次):
await axios.post(
'https://www.polaraccesslink.com/v3/users',
{
"user_id": "your-internal-user-id", // 必填:你系统内唯一标识该用户的字符串(建议 UUID)
"access_token": token // 必填:刚获取的 OAuth access_token
},
{
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}
);⚠️ 注意事项:
- user_id 必须全局唯一且不可变更;Polar 将其作为该用户在 Polar 生态中的长期绑定标识;
- 同一 user_id 重复注册会返回 200 OK(幂等),但若更换 access_token,需确保新 Token 已授权对应 Polar 账户;
- 注册成功后,响应体中会返回 user_id 和 polar_user_id(Polar 内部 ID),建议持久化存储 polar_user_id,后续多数接口(如心率查询)需使用此 ID 替代你的 user_id;
- 查询连续心率数据的正确 endpoint 应为:
GET https://www.polaraccesslink.com/v3/users/{polar_user_id}/continuous-heart-rate
(注意路径中的 {polar_user_id} 来自上一步注册响应,而非你的 user_id)
? 示例完整流程(含错误处理):
// 1. 注册用户并获取 polar_user_id
const registerRes = await axios.post(
'https://www.polaraccesslink.com/v3/users',
{ user_id: "usr_abc123", access_token: token }
);
const polarUserId = registerRes.data.polar_user_id;
// 2. 查询心率数据(使用 polar_user_id)
const hrRes = await axios.get(
`https://www.polaraccesslink.com/v3/users/${polarUserId}/continuous-heart-rate`,
{
headers: { Accept: 'application/json', Authorization: `Bearer ${token}` },
params: {
from: moment(from).format('YYYY-MM-DD'),
to: moment(to).format('YYYY-MM-DD')
}
}
);总结:Polar AccessLink 是典型的“双阶段授权”API —— OAuth 解决登录,/v3/users 解决用户归属绑定。跳过注册将导致所有数据接口静默拒绝(403),这是开发中最易忽略却最关键的一步。务必在 Token 获取后、首次数据请求前,完成用户注册并妥善管理 polar_user_id。










