Authorization 请求头中携带
凭证:
X-API-Key: <token> 作为替代请求头。
凭证类型
- JWT 会话(有登录的用户)
- API 密钥(服务器到服务器)
通过 企业账户可以拥有多个具有不同角色的成员 —— 见下文
企业成员。
POST /v1/auth/register 或 POST /v1/auth/login 获取,有效期
24 小时。适用于用户需要登录的应用。除 access_token 外,您还会收到
一个刷新令牌(refresh token),无需再次输入密码即可续期会话 ——
见会话续期。如果账户策略要求登录时进行 OTP 验证,响应会返回
otp_required: true 及一个 pending_token(而非会话):第二步在
POST /v1/auth/login/otp 使用通过 SMS/WhatsApp 收到的验证码完成。
完整流程见安全与双因素认证。您还可以提供使用 Google、Apple、Microsoft 或 Facebook 注册和登录
(免密码)—— 见社交登录。
会话续期(刷新令牌)
access_token 有效期为 24 小时;refresh_token(rt_…)可让您在
无需重新登录的情况下换取新的令牌对,有效期 30 天,每次使用自动
续期,自最初登录起最长 90 天。它是一次性的:每次兑换都会返回新的
refresh_token,旧的立即失效(轮换)。
- 严格轮换:兑换时,该设备之前的 access token 立即被吊销(每条链 只有一个存活的 access token)。请始终用响应中的令牌替换两个令牌。
- 重复使用 = 被盗:如果已兑换过的刷新令牌再次被提交,该设备的整条
链(令牌和会话)将被吊销,并在
GET /v1/me/security/events中记录refresh_token_reuse事件。用户必须重新登录。 - 随会话失效:退出登录(
DELETE /v1/me/sessions/{id})、POST /v1/me/sessions/revoke-all或修改/重置密码也会使关联的刷新 令牌失效。 - 任何拒绝都返回
401 invalid_refresh_token—— 收到该错误时请引导用户 重新登录。 - 请将刷新令牌保存在安全存储中(移动端使用 Keychain/Keystore;Web 端
建议内存 + 重新登录,或由您的后端使用 httpOnly Cookie)。
pk_API 密钥不使用刷新机制:它们永不过期。
应该多久刷新一次?
应该多久刷新一次?
在 access token 即将过期时(参考
expires_at),或在正常调用收到
401 时刷新。避免多处并行刷新:同一令牌的两次兑换同时到达时,一次
成功、另一次收到 401 且不受惩罚 —— 但兑换一个已被轮换的令牌会
吊销整条链。90 天后会发生什么?
90 天后会发生什么?
链的绝对上限是自最初登录起 90 天:即使每天刷新,到达上限后刷新会返回
401,用户必须重新认证(密码、通行密钥或社交登录)。刷新对 API 密钥适用吗?
刷新对 API 密钥适用吗?
不适用:
pk_ API 密钥永不过期且没有会话。刷新仅用于人类用户的 JWT
会话。访问级别
您的凭证(会话 JWT 或 API 密钥)操作的是您自己的账户:余额、 付款、收款、转账、加密资产、KYC/KYB 以及您自己的 webhook。如果某个 端点返回403 account_required 或 403 org_admin_required,说明该
操作属于其他凭证级别 —— 请联系 CBPay 团队。
您的账户资料
PATCH /v1/me 接受 display_name、tax_id、phone 和 country
(只需发送有变更的字段)。email、status 和 kyc_status 不可
自行管理:由管理员处理。
企业成员
企业账户可以拥有多个各自登录、权限级别不同的用户:POST /v1/members 会返回 403 company_only。
最佳实践
- 将 API 密钥保存在密钥管理器中;切勿写入代码或暴露在浏览器中。
- 每个环境/服务使用一个密钥(配上有意义的
label),以便在不中断 服务的情况下轮换。
1
零停机轮换
通过
POST /v1/api-keys 签发新密钥(使用新的 label)。2
部署
更新您的服务以使用新密钥。
3
停用旧密钥
流量迁移完成后,请联系 CBPay 团队吊销旧密钥。
- JWT 会话面向前端;自动化流程应始终使用 API 密钥。