AIFreeAPI Logo

Codexの429で再試行が終了したとき:制限の持ち主を特定する

A
9 min readOpenAI Codex

この表示で分かるのは、自動再試行のたびに429が返り、Codexが処理を終了したことだけです。実際の制限元を確認してから復旧策を選びます。

Codexの429をChatGPT利用枠、OpenAI API project、管理workspace、第三者gatewayに分けて証拠と復旧条件を確認する図

exceeded retry limit, last status: 429 Too Many Requests が出た直後に、同じ長いタスクを別セッションから何度も送らないでください。Codexはすでに複数回の自動再試行を行い、最後まで429が返ったため処理を止めています。ここで手動の同時再送を増やすと、短時間の制限を長引かせる可能性があります。

まず変更済みファイルを保全し、新しいsubagentやバックグラウンドタスクを止めます。そのうえで、エラー全文、発生時刻とタイムゾーン、表示されていればrequest IDを記録します。復旧に必要なのは「何分待つか」という推測ではなく、「今回のリクエストを所有していたのはどの利用枠か」という確認です。

429とretry limitは同じ制限ではない

retry limit はCodexクライアント側の自動再試行回数です。アカウントに「再試行用の別枠」があるという意味ではありません。last status: 429 は最後にサーバーまたはgatewayが返したHTTP statusです。ただし、429だけでは原因を1つに決められません。

OpenAIの現在のAPI error codesでは、request rate、prepaid credit不足、organization/projectのspend limit、organization usage limitが別の429として扱われます。APIを直接利用している場合、billing系では広いerror.typeよりresponse bodyのerror.codeが具体的で、必要な対応も変わります。

さらに、カスタムbase_url、企業gateway、model router、外部providerを利用していれば、429を返したのはOpenAIではない場合があります。ChatGPT側の残量があっても、そのproviderの同時実行枠や残高は証明できません。

最初の1分で変数を固定する

原因を知る前にlogout、model変更、network変更、key交換、provider切り替えを同時に行うと、復旧しても何が効いたのか分かりません。現在の状態を次のどれかに分類します。

実行経路確認する所有者残すべき情報
ChatGPTでサインインしたCodex個人accountまたはworkspaceのCodex Usage5時間・週間枠、reset、credits、CLIの/status
OpenAI API keyで直結API organization/projecterror.codeRetry-After、Limits、Billing
Business、Enterprise、Edu管理workspaceseat、共有/購入credits、管理者ポリシー
第三者provider/gatewayそのproviderの契約base URL、headers、request ID、残高、model pool、status

OpenAIの現在のCodex usage説明は、accountの現在のlimitをUsage Dashboardで確認し、Codex CLIでは/statusで残量を確認できると案内しています。表示項目はclient、version、認証、plan、rolloutによって変わるため、見えない項目を「制限なし」と解釈しないでください。

Account AからBへ切り替えたのに同じ枠が見える場合は、アカウント・workspace・APIメーターの確認へ進みます。古いlogin、同じworkspace、同じAPI organizationを除外する作業であり、429の連打では確認できません。

「まだ残量がある」を具体的な名前に変える

残っているように見える値が、週間percentage、5時間枠、ChatGPT credits、API prepaid credit、project spend limit、外部provider残高のどれかを書き出してください。これらは同じ財布ではありません。

OpenAIのtokensとcreditsの説明では、credit消費はmodel、context、reasoning、toolsで変わり、対象planではincluded limits到達後も利用可能なcreditsで継続できます。同じページは、ChatGPT planのlocal messagesとcloud chatsが5時間windowを共有し、追加の週間limitが適用される場合もあると説明しています。したがって、メッセージ数だけでは消費量を比較できず、週間枠に残りがあることだけで短いwindowや別providerの制限も否定できません。

設定を触る前の記録は、次の項目で十分です。

  • Codexの利用面とclient version
  • ChatGPT login、API key、または外部provider
  • 秘密情報を伏せたaccount/workspace、APIならorganization/project
  • model、reasoning、Fast、subagentの有無
  • 表示されたusage、reset、credits、provider balance
  • local、cloud、scheduled、delegated、backgroundの実行中タスク
  • エラー全文、timestamp、timezone、request ID
ChatGPT、OpenAI API、管理workspace、第三者providerごとに429の原因、確認場所、復旧条件、避ける操作と小テスト手順を整理した早見表
ChatGPT、OpenAI API、管理workspace、第三者providerごとに429の原因、確認場所、復旧条件、避ける操作と小テスト手順を整理した早見表

API key、access token、OTP、完全なemail、credential file、private code、課金画面全体は問い合わせ資料に含めません。

制限元ごとに復旧条件を変える

短時間のrequest-rate制限

OpenAI APIのrequest-rate 429では、公式ガイドはrequestを減速し、Retry-Afterがあれば少なくともその時間を待つよう案内しています。custom HTTP clientでheaderがない場合はjitter付きexponential backoffを使い、試行回数と総retry時間の両方を制限します。OpenAI公式SDKは対象のrate-limit errorを自動再試行し、存在するRetry-Afterも扱うため、別のretry層を追加する前にその試行を数えてください。失敗したrequestも分間limitに算入される場合があります。

Codexがterminal errorを表示した時点では、クライアント自身の試行は終了済みです。並列sessionとsubagentを止め、画面に出たresetまたはproviderの指示を待ちます。再開時は小さく終了条件の明確な操作を1つだけ実行し、成功後に徐々に負荷を戻します。

ChatGPT/Codexの利用枠

ChatGPT認証なら、同じaccountまたはworkspaceのUsageを確認します。5時間枠と週間枠を分け、表示されたreset、利用可能なcredits、重複して動いているagentic taskを記録します。

支配しているwindowが明確に尽きていれば、そのresetを待つか、accountが提供していて支払いを受け入れられる場合に正規のcreditsを利用します。軽いmodel、短いcontext、少ないtoolsは復旧後の消費を抑えられますが、閉じたwindowを開く操作ではありません。

APIのcredit・spend・usage limit

OpenAI APIへ直結している場合はerror.codeを読みます。credit_balance_exhaustedorganization_spend_limit_exceededproject_spend_limit_exceededorganization_usage_limit_exceededでは、対応する所有者と復旧条件が異なります。

OpenAIは、credit、spend、quota系errorは再試行してもアクセスが回復しないと明記しています。実際のresetを待つか、権限を持つorganization/project ownerが該当balanceまたはlimitを変更する必要があります。同じproject内でAPI keyだけを交換しても、新しいquotaにはなりません。

外部gatewayの429

OpenAI以外のbase URLなら、providerのrate-limit headers、残高、並列数、model pool、request ID、statusを確認します。gatewayがupstream errorを独自の429へ変換することもあります。元responseが見えないなら、確定できるのは「このrouteが429を返した」までです。

同じ認証とmodelを保ち、providerが示した時間を待つか並列数だけを下げて、小さいrequestを1回試します。ChatGPT Usageのpercentageで外部契約を説明しないでください。

サービス障害の可能性

OpenAI Statusで、製品、時刻、地域が重なる公開incidentを確認します。該当incidentがあれば公式の更新に従い、必要に応じてrequest IDを保管します。公開incidentがないことは、個別account、地域、外部gatewayまで正常だと証明するものではありません。

再開テストは「直ったか」ではなく1つの仮説を検証する

429を返した経路の特定からownerの証拠収集、error subtype、正しい復旧条件、小さなテストへ進む判断フロー
429を返した経路の特定からownerの証拠収集、error subtype、正しい復旧条件、小さなテストへ進む判断フロー

reset、limit変更、provider復旧の後に、古いprocessやcloud taskが残っていないことを確認します。account、route、model、reasoning、Fastを固定し、数分で終わる小さな作業を選びます。開始前後で同じmeterまたはprovider stateを保存してください。

小さな作業は成功し、大きな作業だけ再び429になるなら、負荷、並列数、context、短いwindowが候補として強くなります。最小作業も即座に同じ429を返すなら、大きな再送は情報を増やしません。quota、provider、statusの証拠へ戻ります。

この前後記録は、週間残量が想定より速く減る問題にも使えます。完全なtask別請求書にはなりませんが、見えている作業に対応する変化、別surfaceの活動、説明できない変化を分けられます。

復旧条件を満たしても再現する場合は、client/version、認証経路、provider、model/mode、エラー全文、timestampとtimezone、request ID、見えているusage/reset、並行task、最小再現手順をまとめます。APIなら秘密情報を除いたerror.codeとrate-limit headersを追加し、Authorization headerやprivate request bodyは渡しません。

最短の復旧手順は、連打を止める、requestの所有者を確定する、利用可能なsubtypeを読む、壊れた条件だけを変える、小さなテストを1回行う、の順です。待機・課金・管理者対応・providerへの問い合わせを、この順序なら根拠のある次の行動として選べます。