Billing API reports a healthy account while every request 400s with insufficient credits

未关闭
#1,081 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
42/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
cli
领域
api, backend

调研方向

Start by reading the /alpha/billing/credits handler and the request path that returns the insufficient credits error; the payload names no source files or tests. Compare how each path derives credit availability, then check the usage limits documentation and related issue #904. Done when the billing response gives clients a reliable signal that matches whether requests can be served, with the documented behavior aligned.

由索引模型根据 Issue 内容生成。

描述

Summary

/alpha/billing/credits reports a healthy account (belowThreshold=false, both rolling windows at 0% used) while every completion request is rejected with insufficient credits. A client that automates fallback across providers therefore has no way to tell "this account can't serve requests" — it has to send a real request to find out.

Expected Behavior

If requests are refused, one of the documented fields should reflect it:

  • credits.belowThreshold = true, or
  • a new explicit flag (canRequest / insufficientCredits), or
  • windowLimits.exceeded / fiveHour.exceeded set.

Also, https://commandcode.ai/docs/resources/usage-limits ("What happens when I run out of credits?") says requests stop once your included credits reach zero, which suggests monthlyCredits would be 0 at that point. Here they stop at 0.084.

Actual Behavior

GET https://api.commandcode.ai/alpha/billing/credits → 200:

{
  "credits": { "belowThreshold": false, "creditThreshold": 0,
               "monthlyCredits": 0.0840296077, "purchasedCredits": 0, "freeCredits": 0 },
  "windowLimits": { "limited": true, "exceeded": null,
                    "fiveHour": { "used": 0, "cap": 14, "exceeded": false, "resetAt": 0 },
                    "weekly":   { "used": 0, "cap": 35, "exceeded": false, "resetAt": 0 } }
}

GET https://api.commandcode.ai/alpha/billing/subscriptions → 200: status: "active", planId: "individual-goat", currentPeriodEnd: "2026-11-04T14:00:31.000Z".

Any request fails, including a one-token one:

POST /provider/v1/chat/completions
{"model":"deepseek/deepseek-v4.1-flash","messages":[{"role":"user","content":"hi"}],"max_tokens":1}

HTTP 400
{"message":"You have insufficient credits to make this request. Please purchase more credits to continue using the service.",
 "type":"invalid_request_error","code":"BAD_REQUEST"}
x-trace-id: ab67b7089a5a839861c5a497f5d9fe96

So belowThreshold is unusable as a signal: with creditThreshold = 0 it can only trip exactly at zero. windowLimits.limited = true is not a signal either — it is true with both windows at 0% used, and windowLimits.exceeded is null, not false.

Steps to reproduce the issue
  1. Use an account whose included monthly credits are almost gone (0.084 here) with no purchased credits.
  2. curl -s -H "Authorization: Bearer $KEY" https://api.commandcode.ai/alpha/billing/credits → belowThreshold: false, monthlyCredits: 0.084, windows 0/14 and 0/35.
  3. curl -s -X POST https://api.commandcode.ai/provider/v1/chat/completions -H "Authorization: Bearer $KEY" -H "content-type: application/json" -d '{"model":"deepseek/deepseek-v4.1-flash","messages":[{"role":"user","content":"hi"}],"max_tokens":1}' → 400 insufficient credits.
Command Code Version

1.88.1 (provider-API behaviour; reproduced with plain curl, no CLI involved)

Operating System

Windows

Suggested fixes
  1. Add an explicit canRequest / insufficientCredits boolean to /alpha/billing/credits, or make belowThreshold honour a real minimum balance instead of creditThreshold = 0.
  2. Return the required amount / remaining balance in the 400 body, and a documented error code distinct from BAD_REQUEST.
  3. Document windowLimits.limited and windowLimits.exceeded (null vs false) — clients can only guess today.
  4. Align the "requests stop once your included credits reach zero" FAQ sentence with actual behaviour.

Related: #904 (non-interactive quota readout) is also helped by making these fields trustworthy.

主要语言
没有语言数据
星标
4.2k
派生
377
平均合并
1 天 3 小时
30 天内合并 PR
6

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

CommandCodeAI/command-code 的其他 Issue

查看 CommandCodeAI/command-code 的全部 Issue

相似的 Issue

更多 Backend & API Design Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。