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 摘要。