朝、いつも通りターミナルで claude と打ち込んだら、プロンプトが出る前に赤い文字でこう返ってきました——「Credit balance is too low to access the API. Please go to Plans & Billing to upgrade or purchase credits.」。昨日まで普通に動いていたのに、です。私自身、2014年から個人でアプリ開発を続けながら Dolice Labs として4サイトを運営しているのですが、その自動投稿パイプラインを夜中に走らせていて、ある朝この一文でジョブが全部こけているのを見つけたことがあります。
このエラーは「お金が足りない」と言っているように見えて、実際にはどの認証経路で課金を見に行っているかのズレが原因であることがほとんどです。落ち着いて切り分ければ数分で復旧できます。順番に見ていきましょう。
まず確認すべきこと — あなたは今どちらの経路で課金されているか
Claude Code には、課金の経路が大きく2つあります。ここを取り違えているケースが圧倒的に多いです。
ひとつは Claude のサブスクリプション(Pro / Max)でのログイン認証。/login でブラウザ認証を済ませると、サブスクの枠内で Claude Code が動きます。月額の枠を使う方式で、API クレジットの残高とは無関係です。
もうひとつは API キー(ANTHROPIC_API_KEY)による従量課金。Anthropic Console で発行したキーを環境変数に置くと、Claude Code はそのキーに紐づくクレジット残高を消費します。残高がゼロになると、冒頭のエラーが出ます。
問題は、ANTHROPIC_API_KEY が環境にセットされていると、サブスクにログイン済みでも API キー側が優先される点です。.zshrc に昔書いたキーが残っていたり、CI 用に設定した変数がローカルにも効いていたりすると、本人はサブスクのつもりなのに API のクレジットを見に行き、残高ゼロで止まります。これが「加入しているのに残高不足と言われる」現象の正体です。
まずは今どちらで動いているかを確認します。
# API キーが環境にセットされていないか
echo "$ANTHROPIC_API_KEY"
# Claude Code 内でも認証状態を確認できる
# 対話セッションで /status を実行すると、現在の認証方式が表示されるecho で文字列が出てきたら、その API キー経由で課金されています。空なら、サブスクのログイン認証で動いているはずです。
対処1:サブスクで使いたいなら API キーを外す
Pro / Max に加入していて、その枠で Claude Code を使いたい場合は、環境変数の API キーを取り除くのが最短です。
# 一時的に外して試す(このシェルのみ)
unset ANTHROPIC_API_KEY
claude
# 恒久的に外す場合は設定ファイルから該当行を削除
# ~/.zshrc / ~/.bashrc / ~/.config/fish/config.fish などを確認
grep -rn "ANTHROPIC_API_KEY" ~/.zshrc ~/.bashrc ~/.profile 2>/dev/null該当行を消したら、新しいターミナルを開き直してから claude を起動し、/login でサブスクのアカウントに認証します。これで API クレジットの残高を見に行かなくなります。
ここで一点だけ補足です。unset はそのシェルセッションでしか効きません。新しいタブを開くと .zshrc が再読み込みされて API キーが復活します。「さっき直したのにまた出た」という時は、たいていこのパターンです。設定ファイル本体から消すまでが対処だと考えてください。
対処2:API 従量課金で使いたいなら残高を補充する
自動化パイプラインや CI など、サブスクではなく API キーで動かしたい場面もあります。私の場合、対話的な開発はサブスク、無人で回す自動投稿は API キーという形で意図的に分けています。この場合はクレジットを補充します。
Anthropic Console(console.anthropic.com)にログインし、Plans & Billing → Credits から残高を購入します。支払い方法が未登録だと購入できないので、先にクレジットカードを登録しておきます。チャージが反映されれば、同じ API キーでそのまま動き出します。
無人運用でいちばん効くのは Auto-reload(自動チャージ)の設定です。残高がしきい値を下回ったら自動的に指定額を補充する仕組みで、これを入れておくと「夜中に残高ゼロでパイプライン全停止」が起きなくなります。アプリ収益化で AdMob を長く運用してきた身として「夜中に呼ばれない仕組み」を優先する癖があり、私が冒頭のジョブ全滅を経験して以降、自動化用のワークスペースでは必ず有効にしています。
対処3:組織アカウントなら支出上限とワークスペースを疑う
チームや組織の Console アカウントを使っている場合、原因が**ワークスペース単位の支出上限(spend limit)**であることがあります。組織全体のクレジットは残っているのに、特定のワークスペースに割り当てた月次上限に達していると、そのキーだけが残高不足になります。
この場合は Console の Settings → Limits(または該当ワークスペースの設定)で上限を確認・調整します。自分が管理者でなければ、上限を持っている管理者に引き上げを依頼することになります。個人開発から法人案件に移ったときに、ここで一度はまる人が多い印象です。
同じことを繰り返さないために
このエラーは一度仕組みを理解すると、再発時の切り分けが一瞬で済むようになります。私が普段から気をつけているのは次の点です。
認証経路を用途で固定すること。対話開発はサブスクのログイン、無人自動化は専用の API キー、と決めておくと、どちらの残高を見ればいいか迷いません。ローカルの .zshrc に自動化用のキーを置きっぱなしにすると経路が混ざるので、自動化用のキーはそのジョブのスクリプト内だけで export する運用にしています。
そして API キー運用では Auto-reload を入れておくこと。残高監視を人力でやろうとすると、忘れた頃にゼロになります。仕組みで止まらないようにしておくのが、結局いちばん静かに済みます。
エラーメッセージの「purchase credits」という文言につられて反射的にクレジットを買う前に、まず echo "$ANTHROPIC_API_KEY" で経路を一度確認してみてください。サブスクで足りるはずなのに従量課金を見に行っていた、というケースはとても多いです。
同じ場面でつまずいた方の、最初の一手の助けになれば幸いです。