Skip to content

[Bug] 额度展示类型设为 CNY 后,/api/status 仍返回 quota_display_type: "USD",前台价格币种不跟随配置 #8217

Open

Description

@duohub520-lgtm

提交前必读

  • 文档:https://docs.newapi.ai/
  • 使用问题先看或先问:https://deepwiki.com/QuantumNous/new-api
  • 开启透传请勿反馈问题;透传会直接发送内容,不会经过 new-api 的逻辑处理。
  • 请以简练语言陈述事实与证据。Issue 正文及后续评论均不得直接粘贴未经人工过滤的大段 AI 文本。
  • 转发类问题必须先确认问题发生在 new-api 这一层:请使用等价的脱敏请求分别直连上游和经过 new-api,对比响应状态、错误体与服务端日志。未经对比、仅展示上游报错的反馈不接受 issue。
  • 不接受 Coding Plan、逆向渠道、第三方封装接口,以及将 Codex 接口反代为通用 API 后产生的兼容性问题;Codex API 自身特有的协议或行为也不应被当作标准 OpenAI API 行为,相关问题请先向渠道或接口提供方确认。
  • 本项目不提供官方托管服务,也不为第三方托管站、中转站或 API 服务提供技术支持;此类问题请联系对应运营方。
  • 警告:删除本模板、删除小节标题或随意清空内容的 issue,可能会被直接关闭;多次提交未经人工过滤的大段 AI 文本,或重复恶意提交者,可能会被 block。

部署来源

本仓库 Release / 官方镜像(自行部署)

您当前的 newapi 版本

v1.0.0-rc.48

提交确认

  • 非重复 issue: 我已搜索现有 Issues,确认目前没有类似 issue。
  • 提交前必读: 我已完整阅读上方“提交前必读”,并已查看文档 https://docs.newapi.ai/、项目 README 且向 AI 提问,确认这不是使用、配置或接入类问题。
  • 受支持版本: 我已提供准确的版本号、commit 或镜像标签(不是 latest 或 unknown),并确认问题可在本仓库未修改的受支持版本中复现。
  • 非第三方服务: 我确认这不是第三方托管站、中转站、API 服务或未经本仓库原版验证的 fork 所独有的问题;第三方实例问题应联系其运营方。
  • 非透传: 我确认相关渠道未开启透传。开启透传会直接发送内容,不会经过 new-api 的逻辑处理,此类问题不接受 issue。
  • 问题归属: 我已提供足以区分客户端、new-api 和上游的证据;转发问题已使用等价的脱敏请求对比直连上游与经过 new-api 的结果,确认错误由 new-api 引入或改变,而非仅原样转发上游报错。
  • 渠道与协议边界: 我确认问题不是由 Coding Plan、逆向渠道、第三方封装接口、Codex 反代接口,或 Codex API 自身特有行为导致;若问题最初出现于此类接口,我已在本仓库支持的标准 API 协议上复现。
  • 维护成本: 我理解项目维护者精力有限。Issue 正文及后续评论均不得直接粘贴未经人工过滤的大段 AI 文本,须先提炼可复核的要点;不遵循模板要求或缺少要点、无法复核的内容可能会被无视或直接关闭。多次提交此类内容可能会被 block。

问题描述

在后台把「额度展示类型」(general_setting.quota_display_type)设置为 CNY 并保存后:

  • GET /api/option/ 能正确读出 "general_setting.quota_display_type": "CNY"
  • 但 GET /api/status 返回的 quota_display_type 恒为 "USD",不随配置变化
  • 由于前端读取的是 status.quota_display_type,模型广场(/pricing)的价格全部按美元符号渲染

该字段看起来没有接上配置,疑似回归。

复现步骤

  1. 部署 calciumion/new-api:latest(v1.0.0-rc.48),SQLite 存储
  2. 后台设置 → 通用设置 → 额度展示类型,选择 人民币(CNY),保存
  3. 确认配置已写入:
curl -s http://127.0.0.1:3000/api/option/ -H "Authorization: Bearer <admin_token>" \
  | jq -r '.data[] | select(.key=="general_setting.quota_display_type") | .value'
# 输出:CNY
  1. 但查询 status:
curl -s http://127.0.0.1:3000/api/status \
  | jq -r '.data.quota_display_type'
# 输出:USD      ← 期望 CNY
  1. 打开前台模型广场 /pricing,价格全部显示 $,而非 ¥

已验证无效的排查

预期结果

GET /api/status 的 quota_display_type 应返回配置值 CNY,前台模型广场据此显示 ¥。

实际行为

恒返回 USD,前台始终按美元展示。

临时绕过

在反向代理层对 /api/status 做字符串替换(仅绕过显示,非根治):

location = /api/status {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Accept-Encoding "";   # 必须关闭压缩,否则 sub_filter 不生效
    sub_filter '"quota_display_type":"USD"' '"quota_display_type":"CNY"';
    sub_filter_types application/json;
    sub_filter_once off;
}

补充说明

部署中同时开启了 DisplayInCurrencyEnabled,底层额度计算(倍率、扣费)均按美元基准换算,计费本身是正确的,问题只出在 /api/status 的这个展示字段。

如果这是刻意设计(例如该字段另有来源),也希望能说明 quota_display_type 正确的配置入口,避免使用者误以为改 general_setting.quota_display_type 即可生效。

相关截图

No response

Activity

  1. new-api-reviewer-bot commented on Nov 5, 2026

    @new-api-reviewer-bot

    [Bot Review]

    感谢提交!您的 Issue 格式完整,符合模板规范。后续将由维护人员进一步查看。

  2. tyza66 commented on Nov 12, 2026

    @tyza66
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions