API知识站学习、对比与使用指南
额度不足Billing / Quota / Budget

insufficient quota:余额不足、额度用完怎么解决

insufficient quota 不是代码格式问题,而是账号可用额度、预算上限、账单状态或免费层限制不足。

排查结论

先用最小请求隔离问题:只保留 API Key、Base URL、模型名和一条 ping 消息。最小请求失败,先修配置;最小请求成功,再回到业务代码排查并发、上下文和部署环境。

1. 问题现象

  • 错误信息包含 insufficient_quota、quota exceeded、balance not enough、credit exhausted 或 payment required。
  • 小号、新项目或刚创建的 Key 立刻失败,但老项目还能调用。
  • 充值后仍失败,可能是充错账号、充错项目、账单未刷新或预算上限未解除。
  • ChatGPT、Claude Pro、Gemini Advanced 能聊天,但 API 调用仍提示没额度。

2. 最可能原因

API 账户没有余额,或免费额度已经过期/用完。
平台把 Chat 订阅和 API 计费分开,订阅不提供 API 额度。
项目设置了预算上限、欠费停机或账单验证未完成。
使用了价格更高的模型,单次请求消耗超过预期。
团队/组织下有多个项目,Key 属于没有余额的项目。

3. 快速排查清单

1

登录控制台看 Billing 和 Usage

不要只看聊天产品订阅页;API 控制台的余额、用量和账单状态才是依据。

2

确认 Key 所属项目

多项目、多组织时,充值和 Key 必须在同一个项目或账号下。

3

确认免费额度是否过期

很多平台的新用户额度有有效期,不是永久余额。

4

降低模型和 max_tokens

先用便宜模型、短输出跑通,再切回高阶模型。

5

充值后等待刷新

国内支付通常很快,但仍可能需要几分钟;失败时查看支付订单和账号是否一致。

4. 对应 API 的特殊情况

OpenAI

ChatGPT Plus/Pro 与 API Billing 分开计费。开了 ChatGPT 订阅,API 仍需要单独充值或绑定账单。

Claude

Claude Pro/Max 订阅和 Anthropic Console API 也是两套计费。API 需要在 console.anthropic.com 单独开通。

Gemini

Google AI Studio 免费层、Google Cloud Billing、Vertex AI 项目额度要分开检查。

DeepSeek / 通义千问 / Kimi / 智谱

国内平台通常在控制台有余额、资源包或 Tokens 页面;充值和实名认证状态会影响可调用额度。

5. 可复制的修复示例

捕获额度不足并切到便宜模型
typescript
async function ask(client: any, messages: any[]) {
  try {
    return await client.chat.completions.create({
      model: process.env.PRIMARY_MODEL,
      messages,
      max_tokens: 800,
    });
  } catch (error: any) {
    const code = error?.code ?? error?.error?.code;
    if (code !== "insufficient_quota") throw error;

    return client.chat.completions.create({
      model: process.env.FALLBACK_MODEL,
      messages,
      max_tokens: 300,
    });
  }
}
降级只能作为临时兜底,根因仍要回控制台处理余额或账单。
给批量任务加预算保护
typescript
const DAILY_TOKEN_BUDGET = 200000;
let usedTokensToday = 0;

function assertBudget(estimatedTokens: number) {
  if (usedTokensToday + estimatedTokens > DAILY_TOKEN_BUDGET) {
    throw new Error("已达到今日 Token 预算,停止继续调用 API");
  }
  usedTokensToday += estimatedTokens;
}
先在业务侧阻止失控循环,避免额度被异常任务一次性耗尽。