先把当时的情况摆出来。OpenRouter 调 anthropic/claude-3.5-sonnet 返回 402 Insufficient credits,账户页显示还有 12 美元额度,充值 10 美元后等了一小时仍然一样。
这类报错背后常见的原因有几处,逐个排除就行。这把 key 设了单独的额度上限,账户余额和 key 额度是两套数。少数情况下是支付到账但 credits 还在 pending,未计入可用余额。
还有一种情况,请求走 BYOK 的上游 provider,需要自备对应厂商的 key。另外,账户被风控标记,余额可用但调用被单独拦截。
先查账户 credits 和这把 key 的限额
curl -s https://openrouter.ai/api/v1/credits -H "Authorization: Bearer $OPENROUTER_KEY" | jq
单独看 key 的 limit 与 usage
curl -s https://openrouter.ai/api/v1/key -H "Authorization: Bearer $OPENROUTER_KEY" | jq '.data'
然后用最便宜的模型发一次最小请求
curl https://openrouter.ai/api/v1/chat/completions -H "Authorization: Bearer $OPENROUTER_KEY" -H "Content-Type: application/json" -d '{"model":"openai/gpt-4o-mini","messages":[{"role":"user","content":"hi"}],"max_tokens":1}'
剩下的就是在 key 设置里把 limit 调到高于余额
curl -X PATCH https://openrouter.ai/api/v1/key -H "Authorization: Bearer $OPENROUTER_KEY" -H "Content-Type: application/json" -d '{"limit":20}'
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
别只看报错消失,验证要多做一步。最小请求返回 200 并带 usage,换回 claude 模型也能出结果,账户 credits 与 key usage 之差和账单一致。
补一句。402 说的是额度不是限流,先分清是账户余额、key 上限还是 BYOK 缺 key,这三处报错文案几乎一样。这类问题最好一次改到位,反复小改反而容易把原因搅混。
