OpenAI APIの使いすぎを防ぐ|月の上限と通知、止まった時の見分け方

OpenAI APIの使いすぎを防ぐには、通知(Spend alert)と上限(hard spend limit)を分けて設定します。通知は金額に達してもAPIは止まらず、上限を「Enforce a hard limit」で有効にした時だけ、達した後のリクエストが429エラーで止まります。この記事では、公式ドキュメントで設定の場所と止まり方を確認し、30日分の実測トークン数から上限の金額を計算します。

(確認:OpenAI「Spend limits」「Rate limits」「Pricing」のドキュメント。確認日:2026年10月29日。画面の表記は公式ドキュメントの英語の表記のまま書いています)

通知と上限の違い

設定 金額に達した時 向く使い方
Spend alert(通知) 通知が届く。APIは止まらない 止めずに気づきたい
Hard spend limit(上限) 対象のリクエストが429エラーになる 月の支出に上限をかけたい

公式ドキュメントでは、通知は上限を設定しても有効なままで、上限で止まる前に知らせる使い方ができるとされています。また、止まるのは即時ではなく、記録上の支出が設定額を少し超えることがあると書かれています。

上限を設定する場所

組織(Organization)全体にも、プロジェクト(Project)ごとにも設定できます。公式ドキュメントの手順は次のとおりです。

  • 組織:「Organization limits」の画面 → 「Spend」で「Edit spend limit」 → 「Monthly spend limit」に金額を入れる → 止めたい場合は「Enforce a hard limit」をオン → 「Save」
  • プロジェクト:「Project settings」 → 「Limits」 → 同じく「Edit spend limit」から設定

設定には、その組織やプロジェクトの設定を変える権限が必要です。記事の自動生成だけを1つのプロジェクトに分けておくと、そのプロジェクトだけに上限をかけられます。

通知の画面での設定手順は、確認した公式ドキュメント(Spend limits)には書かれていませんでした。Terraform で設定する公式の手順には、月の金額をセント単位で指定し、メールで通知する例(20000=200ドル)が載っています。

止まった時のエラーの見分け方

error.code 原因 戻し方(公式ドキュメント)
project_spend_limit_exceeded プロジェクトの上限に達した 上限を上げるか外す。そのままなら翌月の区切りで戻る
organization_spend_limit_exceeded 組織の上限に達した 同上
organization_usage_limit_exceeded OpenAIが決めた月の利用上限に達した(HTTPのステータスは資料に記載なし) 上限の引き上げを申請する
credit_balance_exhausted 前払いのクレジットが無くなった(HTTPのステータスは資料に記載なし) クレジットを追加する

公式ドキュメントで429と書かれているのは、上の2つ(project_spend_limit_exceeded・organization_spend_limit_exceeded)です。レート制限でも429が返るため、ステータスだけでは区別できません。自動生成のログにはerror.codeまで残しておくと、「使いすぎで止まった」のか「回数の制限(レート制限)」なのかが分かります。

なお、自分で決める上限とは別に、OpenAIは組織ごとに利用段階(usage tier)に応じた月の利用上限を決めています。公式の表では、クレジットの購入額の合計が5ドルで「Build」(月500ドル)、100ドルで「Launch」(月5,000ドル)などとされています。

コード:実測のトークン数から上限の金額を決める

当サイト運営者の環境の30日分の実測(4,634回、1回あたり入力1,937・出力1,195トークン。AI記事の生成コストは何で決まるか)に、公式の料金表(Standard・キャッシュなし)の単価を掛けて月の費用を見積もり、上限と通知の金額の案を出します。モデルは例として2つを選んでいます。実測の環境で使ったモデルとは限りません。

# 30日間の実測トークン数から、モデルごとの月の費用を見積もり、通知と上限の金額を決める
# 使用量:当サイト運営者の環境の30日分の実測(記事「AI記事の生成コストは何で決まるか」)
# 単価:OpenAI 公式の Pricing(Standard・100万トークンあたり・キャッシュなし。2026年10月29日に確認)
CALLS = 4634
IN_AVG, OUT_AVG = 1937, 1195            # 1回あたりの入力・出力トークン(平均)
PRICES = {'gpt-5-mini': (0.25, 2.00), 'gpt-5-nano': (0.05, 0.40)}   # (入力, 出力) ドル / 100万トークン

tin, tout = CALLS * IN_AVG, CALLS * OUT_AVG
print(f'入力 {tin:,} トークン / 出力 {tout:,} トークン / 合計 {tin + tout:,}')
print()
for model, (pin, pout) in PRICES.items():
    cost = tin / 1e6 * pin + tout / 1e6 * pout
    limit = cost * 1.5                      # 上限は見積もりの1.5倍(余裕の幅は自分で決める)
    print(f'{model:<11} 見積もり ${cost:6.2f}/月  上限の案 ${limit:6.2f}  通知 50%=${limit * 0.5:5.2f}  80%=${limit * 0.8:5.2f}')

計算の結果(Python 3)

入力 8,976,058 トークン / 出力 5,537,630 トークン / 合計 14,513,688

gpt-5-mini  見積もり $ 13.32/月  上限の案 $ 19.98  通知 50%=$ 9.99  80%=$15.98
gpt-5-nano  見積もり $  2.66/月  上限の案 $  4.00  通知 50%=$ 2.00  80%=$ 3.20
  • 同じ使用量でも、モデルの単価で月の費用は約5倍違う(13.32ドルと2.66ドル)
  • 費用の8割以上は出力のトークンから来ている。出力の単価が入力より高いため、記事の文字数の設定がそのまま費用に効く(AI記事が指定文字数の4倍になった原因)
  • 上限を見積もりちょうどにすると、月の途中で止まりやすい。余裕の幅(ここでは1.5倍)は、記事の本数の増減に合わせて自分で決める

自動生成で上限を使う時の考え方(筆者の考え)

  • 記事の自動生成のように止まっても困らない処理は、プロジェクトの上限で止める。止まって困る処理とはプロジェクトを分ける
  • 通知は上限の50%と80%に置くと、月の途中で使い方を見直す時間が取れる
  • 止まった時に、処理が途中の記事をどう扱うか(下書きのまま残すか)を決めておく

当サイトが開発・販売しているAmazon Auto Posts(¥9,800・買い切り)は、OpenAIで記事を生成し、管理画面の「トークン使用量」で呼び出し回数・入力と出力のトークン数を確認できます。上の実測もその画面から集計したものです。自社製品なので割り引いて読んでいただいて構いません。OpenAIの利用料は購入代金に含まれず、使うには Creators API の利用資格(過去30日間に10件以上の適格売上)も要ります。

この記事で確かめていないこと

  • 上限に達してから実際に止まるまでに、どれだけ超えるか(公式は「少し超えることがある」とだけ記載)
  • 日本語の画面での表記(本記事は公式ドキュメントの英語の表記で書いている)
  • 通知のメールが届くまでの時間

まとめ

  • 通知(Spend alert)は止めない。止めたいなら上限で「Enforce a hard limit」をオンにする
  • 自分で決めた上限で止まると429。error.codeで、上限・利用段階の上限・クレジット切れを見分ける
  • 上限の金額は、実測のトークン数×単価に余裕の幅を足して決める

本記事は2026年10月29日時点のOpenAI公式ドキュメントにもとづく整理です。料金と画面は変わる可能性があるため、設定の前に公式の記載を確認してください。