Skip to content

Feature Request: 为 New API 和 subAPI 中转站增加订阅额度与预付费余额查询 #1426

Description

@Kinda2419

背景

Claude Code Hub 的供应商管理目前主要用于配置模型调用。对于通过第三方中转站使用服务的用户,账户状态往往需要另外登录各自后台查看,管理成本较高。

这类中转站常见有两种彼此独立的计费信息:

  1. 订阅套餐额度:套餐名称、周期总额度、已用量、剩余量、重置时间或到期时间等;
  2. 充值/预付费可用额度:账户可用余额,以及上游返回的原始币种或计价单位。

两者不能混为一个“余额”:订阅额度未必等于现金或预付费额度,而预付费余额也不能推导订阅套餐的剩余量。

希望 Claude Code Hub 参考 CC Switch 的思路,在供应商管理中增加统一的、只读的账户状态查询入口,让用户集中查看已配置中转站的订阅额度和充值/预付费可用额度。

目标与支持范围

第一版 MVP 基本支持 New APIsubAPI 两类中转站的账户状态查询,并分别查询、展示:

  • 订阅套餐额度;
  • 充值/预付费可用额度。

“基本支持”指已完成适配、接口可用且查询信息配置正确的具体部署可以使用该能力。New API 和 subAPI 的不同部署、版本、分叉版本或定制实现可能具有不同的接口路径、鉴权方式、字段语义和返回格式,因此不承诺所有部署均完全兼容。

对于未适配、接口未提供、缺少配置或无法可靠识别返回数据的部署,页面应明确说明真实状态,不猜测、不推算,也不得把未知状态显示为余额为零或额度耗尽。

建议方案

在供应商管理中的供应商卡片或详情页增加“账户状态”区域和“手动刷新”入口。账户状态查询应通过独立的供应商适配层实现:页面展示统一结果,但 New API、subAPI 及未来其他中转站的查询协议、字段转换和认证差异由各自适配逻辑负责。

查询结果仅用于展示,不影响现有模型调用链路。

状态设计

页面应把以下三个维度分开表达:

维度 可见状态示例
能力/适配状态 已适配、部分适配、未适配、未知
查询配置状态 已配置、未配置、配置不完整
本次查询状态 尚未查询、查询中、成功、失败

例如:

  • 已适配但未配置:显示“尚未配置账户查询”;
  • 已配置但接口不支持余额:显示“已支持订阅额度查询,预付费余额接口未提供”;
  • 已配置且已适配但请求失败:显示“本次查询失败”,并保留上一次成功结果及其时间(如有);
  • 从未查询:显示“尚未查询”,不填默认数值。

MVP 范围

第一版只提供“可查看、可手动刷新、不会误导”的能力:

  • 在已添加的 New API、subAPI 中转站中展示账户状态入口;
  • 支持用户手动发起只读查询;
  • 分别展示订阅套餐额度和充值/预付费可用额度;
  • 展示能力/适配状态、查询配置状态、本次查询状态和最近一次成功查询时间;
  • 对未适配、未配置、无权限、超时、接口异常或解析失败给出可理解的提示;
  • 只展示上游实际返回的数据和单位;上游未返回的字段不补默认值;
  • 查询失败时不得把失败结果覆盖成零值;若有历史成功结果,应同时标明历史结果时间和本次失败状态;
  • 查询结果只用于供应商管理页面展示。

建议展示字段

基础信息

  • 中转站名称;
  • 中转站类型:New API 或 subAPI;
  • 能力/适配状态;
  • 查询配置状态;
  • 最近一次查询状态;
  • 最近一次成功查询时间;
  • 查询失败时的简要原因或可操作提示;
  • 账户标识(如展示,必须脱敏)。

订阅套餐额度

仅在接口实际提供时展示:

  • 套餐名称或额度名称;
  • 额度周期;
  • 总额度、已用量、剩余量或剩余比例;
  • 原始计价单位;
  • 重置时间、下次刷新时间或到期时间;
  • 数据字段说明(当上游语义存在差异时)。

充值/预付费可用额度

仅在接口实际提供时展示:

  • 当前可用额度;
  • 原始币种或计价单位;
  • 余额类型或账户类型;
  • 余额更新时间;
  • 多个余额账户或余额类型(如果上游实际返回)。

如果上游返回的是积分、代币、赠金、冻结额度或其他非现金单位,应按原名称显示,不能将其写成现金余额,也不能与订阅额度相加或换算。

用户流程

  1. 用户在供应商管理中添加或选择一个 New API 或 subAPI 中转站;
  2. 页面展示其能力/适配状态和查询配置状态;
  3. 用户点击“查询账户信息”或“刷新”;
  4. 系统发起一次只读查询;
  5. 系统分别更新订阅套餐额度、充值/预付费可用额度、本次查询状态和最近查询时间;
  6. 如果失败、未适配或未配置,系统展示真实原因,不用零值代替未知状态;
  7. 查询结果不改变模型调用、路由或中转站调度行为。

验收标准

数据与展示

  • 对已适配且配置正确的 New API 部署,可分别查询并展示订阅套餐额度和充值/预付费可用额度。
  • 对已适配且配置正确的 subAPI 部署,可分别查询并展示订阅套餐额度和充值/预付费可用额度。
  • 两类数据在界面中分区展示,不共用单一“余额”字段,也不相互推导或合计。
  • 上游返回订阅信息时,展示实际返回的套餐、用量/剩余信息、单位和重置/到期信息;缺失字段显示“未返回”或隐藏,不补造数据。
  • 上游返回预付费信息时,展示实际返回的可用额度、原始币种或单位和更新时间。
  • 用户可以手动刷新,页面会更新本次查询状态并记录最近一次成功查询时间。

状态准确性

  • 能力/适配状态、查询配置状态与本次查询状态可以独立表达,不互相覆盖。
  • 未适配、未配置、配置不完整、无权限、查询失败、超时、解析失败和未查询均不会显示为余额或额度为零。
  • 仅当上游接口明确返回零值时,才显示真实的 0
  • 如果仅支持其中一类查询,另一类明确显示“未提供”或“无法查询”,不得拿另一类结果替代。
  • 如保留历史成功结果,页面能清楚区分“历史结果”与“本次查询失败”。

兼容性与安全边界

  • 验收记录应写明实际验证的 New API/subAPI 部署类型、接口形态及支持字段;某一部署可用不代表所有同类部署可用。
  • 接口版本、认证方式或字段格式不同的部署由对应适配逻辑处理;无法适配时明确提示限制。
  • 页面、日志和错误提示不得暴露 API Key、OAuth Token、Authorization 头或原始敏感响应。
  • 账户状态查询为只读操作,不执行充值、扣款、退款、修改套餐或修改账户信息。

与调用链路隔离

  • 查询结果不参与模型路由、节点健康检查、熔断、调度、自动切换、请求重试、中转站权重或优先级计算。
  • 查询失败不会自动禁用、降权或切换中转站。
  • 查询到余额为零或订阅额度耗尽也不会自动改变既有请求行为。

非目标

第一版不包含:

  • 对所有 New API、subAPI 版本、分叉版本、私有改版或定制部署作全面兼容承诺;
  • 网页抓取、模拟登录或根据消费历史估算余额;
  • 自动刷新、后台轮询、余额提醒、告警或通知;
  • 充值、购买套餐、退款、自动续费或任何写操作;
  • 合计不同中转站的余额/额度、币种换算、单位换算或成本统计;
  • 消费流水、账单明细、发票或充值记录管理;
  • 基于余额、额度或查询结果进行模型路由、健康检查、熔断、调度或自动切换;
  • 对未知接口、私有扩展接口或未知返回格式作猜测性兼容。

待讨论问题

  1. New API 和 subAPI 的首批兼容范围,应按项目版本、接口能力声明还是已验证部署清单定义?
  2. 账户查询是否复用现有调用凭据,还是允许单独填写只读查询凭据?
  3. 一个供应商配置有多个账户、渠道或 API Key 时,页面应让用户选择单个账户查询,还是提供明确规则的聚合展示?
  4. “部分适配”应如何表示,例如只支持订阅额度、只支持预付费余额,或只支持部分账户类型?
  5. 查询失败时是否保留上一次成功结果;如保留,历史数据多久后应标记为过期?
  6. 后续是否需要增加定时刷新、余额提醒或聚合视图?这些能力应在 MVP 稳定后单独讨论,且继续与调用链路隔离。

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions