OpenRouterでKimi K3が429を返す?2分でフェイルオーバーする方法(2026年版)
OpenRouterがKimi K3に「頻繁な429」の容量警告を表示。対処法はバックオフしてからGLM-5.2かDeepSeek V4へフェイルオーバー。単一エンドポイントで完結、コード付き。
TL;DR。 OpenRouter経由のKimi K3への呼び出しが 429 を返し続けるなら、それはあなたのコードでもクォータでもありません。リリース時点でMoonshotの上流側のK3容量が制限されており、OpenRouterもモデルページ自体でそう明言しています。曰く “Upstream capacity is currently limited. This model may return frequent 429 errors.”(上流の容量が現在制限されています。このモデルは頻繁に429エラーを返す可能性があります)。そこでのK3は単一プロバイダーのルートなので、フェイルオーバーできるプロバイダーが存在しません。対処は2層です。最初の数回はバックオフし、次に同等モデル(GLM-5.2かDeepSeek V4)へ、単一のエンドポイントと単一のキーでフェイルオーバーします。ofoxを含め、どのゲートウェイも上流の429を消すことはできません。ゲートウェイができるのは、バックアップへの乗り換えを書き換えではなく設定1行にすることだけです。
K3の429は、あなたのアカウントが「使いすぎ」と言っているのではなく、上流が「空きがない」と言っている状態です。同じルートに強くリトライをかければ、まったく同じことをしている全員の後ろに並ぶだけ。効く一手は、別のモデルに切り替えることだけです。
K3か、OpenRouterか、それとも自分か? 30秒の切り分け
順番に3つ確認します。最初の2つで原因が上流だと確定したら、自分のログを読むのはやめて対処へ飛んでください。
| ステップ | 確認すること | 上流の429と判断できる条件 |
|---|---|---|
| 1 | エラー本文 | ステータスが 429 で、認証エラーやリクエスト形式のエラーではなく、rate limited upstream や provider returned error のようなメッセージ |
| 2 | OpenRouterのKimi K3ページ | ”Upstream capacity is currently limited. This model may return frequent 429 errors.” というバナーが表示されている |
| 3 | 自分のリクエストログ | 自分側で何もデプロイしていないのにK3の429率が急増し、同じキーの他モデルは正常に応答している |
ステップ1と2が該当するなら、これはMoonshotの容量問題であって、あなたのアプリのバグではありません。個人開発者の@levelsio氏もまさにこれに遭遇し、OpenRouterが「即座に『rate limited upstream』と返した」ため、Moonshotに$19払って直接キーを取得し先に進みました。あなたは必ずしもそうする必要はありません。ただしフォールバックは必要です。
なぜK3の429はOpenRouterで特に起きるのか
事実が2つ重なっています。
第一に、K3は新しく、Moonshotが容量を配給制にしています。これはあらゆる再販業者が引き継ぐ上流側の現実で、OpenRouterもofoxもMoonshotの直接キーも、同じ日の午後に一斉に429を返しうる理由です。
第二に、そしてこれがOpenRouter固有の部分ですが、K3のリスティングは1つのプロバイダーによって提供されています。OpenRouterのページにもはっきり書かれています。曰く「This model is hosted by one provider. OpenRouter forwards every request to it directly — no routing decisions to make.(このモデルは1つのプロバイダーによってホストされています。OpenRouterはすべてのリクエストを直接そこへ転送します。ルーティングの判断はありません)」。OpenRouterの本来の強みはプロバイダールーティングです。モデルに複数のホストがあれば、健全なホストへトラフィックを振り分けます。単一プロバイダーのモデルでは、振り分ける先がありません。プロバイダーが1つしかないルートを、プロバイダールーティングは救えないのです。
それでもOpenRouter上で、自分でモデルをまたぐフォールバック配列を追加することはできますし、そうすべきです。ポイントは、K3ではそれが自動ではないこと、そしてフォールバックリストを書き始めた時点で、あなたは統合ゲートウェイが1か所でやってくれるのと同じ作業をしているということです。本記事が扱う判断は、まさにここに尽きます。
対処法、正直な2層構成
第1層 — 短くバックオフする
容量由来の429は一過性のことが多いです。最初の2〜3回はジッター付きの指数バックオフでリトライし、そこで打ち切ります。ジッターが重要です。これがないと、同じ瞬間に429を受けた全クライアントが同じ瞬間にリトライし、殺到(スタンピード)を再現してしまいます。
import time, random, httpx
def backoff_sleep(attempt: int) -> None:
base = 2 ** attempt # 1s, 2s, 4s
time.sleep(base + random.uniform(0, base * 0.3)) # +0–30% jitter
3回試したら諦めます。容量制限中の単一プロバイダールートに4回目のリトライをかけても、最初の3回で見つからなかった容量が見つかるわけではありません。キューに積み増すだけです。
第2層 — 別のモデルへフェイルオーバーする
リクエストを実際に回復させるのはこの層です。K3に空きがないとき、答えに最速で辿り着く道は、空きのある同等モデルです。ofoxでは、K3とそのバックアップ群が1つのOpenAI互換エンドポイントと1つのキーの背後に揃っているので、フォールバックチェーンは3つの統合ではなく短いループで済みます。
import os, httpx, time, random
OFOX = "https://api.ofox.ai/v1/chat/completions"
OFOX_API_KEY = os.environ["OFOX_API_KEY"]
HEADERS = {"Authorization": f"Bearer {OFOX_API_KEY}", "Content-Type": "application/json"}
# Primary first, then same-tier backups on separate upstreams.
CHAIN = ["moonshotai/kimi-k3", "z-ai/glm-5.2", "deepseek/deepseek-v4-pro"]
def complete(messages, chain=CHAIN):
for model in chain:
for attempt in range(3):
r = httpx.post(OFOX, headers=HEADERS,
json={"model": model, "messages": messages}, timeout=60)
if r.status_code == 429:
if attempt == 2:
break # third 429 -> fail over now, don't sleep
base = 2 ** attempt
time.sleep(base + random.uniform(0, base * 0.3))
continue # retry same model, up to 3x
r.raise_for_status()
return model, r.json()
# three 429s on this model -> drop to the next model in the chain
raise RuntimeError("all models in the fallback chain are capacity-limited")
同じ形はNodeでも、あるいはOpenAI SDKで base_url を https://api.ofox.ai/v1 に向けて model 文字列を差し替えるだけでも動きます。プロンプトやメッセージ形式は何も変わりません。
正直な部分を、社内で誤った主張を出す人が出ないよう、もう一度だけ言っておきます。K3の429はMoonshotの上流から来るので、どのゲートウェイもそれを防げません。ofoxも例外ではありません。 ofoxは同じソースからK3を提供しており、Moonshotが満杯のときは429を返します。変わるのは回復時間です。上のフェイルオーバーは、ハードエラーを、ユーザーには見えないGLM-5.2への乗り換えに変えます。
K3に本当に見合うバックアップを選ぶ
仕事をこなせないモデルへフェイルオーバーしてはいけません。K3の典型的なコーディング・エージェント用途に対して、ofox上でモデルIDごとに挙げる同一ティアの代替はこちらです。
| バックアップ | モデルID | なぜ合うか |
|---|---|---|
| GLM-5.2 | z-ai/glm-5.2 | オープンウェイト、1Mコンテキスト、コーディングとツール利用に強い。総合的にK3に最も近い代替 |
| DeepSeek V4 Pro | deepseek/deepseek-v4-pro | 深い推論と長コンテキストのコーディング向け。下書き用にはより安く速いV4 Flash(deepseek/deepseek-v4-flash)がある |
| Kimi K2.7 Code | moonshotai/kimi-k2.7-code | K3と同じMoonshotの系譜を持つ。軽量でコード特化、コーディングタスクの自然な縮退先 |
パイプラインに組み込む前に、各モデルのページで現在のトークン単価を確認してください。ティアやレートは変動し、3か月前に価格で選んだバックアップが今日も最安とは限りません。単一モデルではなくゲートウェイを選ぶ場合は、OpenRouterの代替候補比較や料金内訳、稼働率の実態といった観点も検討材料になります。
そもそも今、K3が必要か?
429と格闘する前に、手早い判断フレームを1つ。
- どうしてもK3の能力が必要な場合。 プライマリのまま維持し、5〜7秒のリトライ枠を確保して、使い切ったらフェイルオーバーします。一発目の成功率をログに残しておけば、容量警告がいつ解除されたか分かります。
- タスクが一般的なコーディングやエージェント作業の場合。 GLM-5.2やDeepSeek V4 Proのようなバックアップなら、今日でも429なしで十分に使えるかもしれません。それをプライマリに昇格させ、容量が空いたとき用にK3を選択肢として残しておきましょう。
- 厳格なレイテンシSLOがある場合。 K3は迷わずバックアップ枠に降格させます。「頻繁な429」の警告が常時出ているモデルは、リトライを吸収できない経路のデフォルトとしては安全ではありません。
ここでのより一般的なパターン——スパイク検知、上限付きのリトライ予算、そしてモデルをまたぐフェイルオーバー——は、どのプロバイダーの過負荷にも通用する同じ型です。Anthropic側のエラー529への対処や、AI APIのエラーハンドリング全般についても、同じ考え方がそのまま当てはまります。
K3とそのバックアップを1つのキーで
ゲートウェイがここで役立つ理由は、狭くて具体的です。429を消すからではなく、「K3+3つのバックアップ」を1つのエンドポイント、1つのキー、1つのフォールバックリストにまとめてくれるからです。ofoxでは、K3(moonshotai/kimi-k3)もGLM-5.2、DeepSeek V4、Kimi K2.7 Codeも、すべて同じOpenAI互換APIで応答し、クレジット購入手数料も参加待ちのウェイトリストもありません。Moonshotの容量警告が解除されても、あなたは何も変えなくていい。再び逼迫しても、フォールバックがすでに受け止めています。
よくある質問
- なぜKimi K3はOpenRouterで429を返すのですか?
- リリース直後でMoonshotの上流側のK3向け容量が逼迫しており、しかもOpenRouterのK3ルートは単一プロバイダー提供でフェイルオーバー先がないためです。OpenRouterのモデルページ自体に「Upstream capacity is currently limited. This model may return frequent 429 errors.(上流の容量が現在制限されています。このモデルは頻繁に429エラーを返す可能性があります)」という注意書きが出ています。ここでの429は、使いすぎでアカウントがスロットルされているのではなく、上流が「今は空きがない」と言っている状態です。同じルートに強くリトライをかけても、同じことをしている全員の後ろに並ぶだけです。
- OpenRouterのKimi K3の429は自分のせい?それとも向こうのせい?
- 通常の意味ではどちらでもありません。原因は上流側で、Moonshotがリリース時点でK3の容量を制限しているからです。あなたのコードのバグでもなければ、課金でどうにかなるアカウント単位のレート制限でもありません。あなた側でできる唯一のことは対処です。リトライ予算を設けたうえで、別のモデルへのフォールバックを用意すること。OpenRouterではK3は単一プロバイダーのモデルなので、プロバイダーレベルのルーティングでは救えません。自分で別モデルへフォールバックする必要があります。
- ofoxに乗り換えればKimi K3の429は消えますか?
- 消えません。そう主張するベンダーがいたら、それはミスリードです。ofoxも同じMoonshotの上流からK3を提供しているので、同じ容量逼迫を引き継ぎます。429はゲートウェイではなくMoonshotから来るからです。ゲートウェイが買えるのは、高速でワンコンフィグなフォールバックです。1つのキーと1つのエンドポイントで kimi-k3 → glm-5.2 → deepseek-v4-pro と一度書いておけば、K3の429が失敗リクエストではなく同等モデルへの縮退で済みます。価値はK3の容量が魔法で増えることではなく、graceful failover(優雅なフェイルオーバー)です。
- Kimi K3のバックアップに向いたモデルは?
- コーディングやエージェント用途なら、GLM-5.2(z-ai/glm-5.2、オープンウェイト、1Mコンテキスト)とDeepSeek V4 Pro(deepseek/deepseek-v4-pro)が最も近い同一ティアの代替です。さらに軽量な選択肢として、K3と同じ系譜を持つKimi K2.7 Code(moonshotai/kimi-k2.7-code)があります。適切なバックアップはワークロード次第です。コンテキスト長とタスクの種類で合わせたうえで、パイプラインに組み込む前にモデルページで最新の料金を確認してください。
- 429はリトライすべき?それとも即フェイルオーバーすべき?
- 最初の2〜3回はジッター付きの指数バックオフ(1秒、2秒、4秒+ランダムなオフセット)でリトライします。容量由来の429は数秒で解消することがあります。3回目でもまだ429なら、K3に4回目のリトライをかけるのではなくバックアップモデルへフェイルオーバーしてください。その先は、すでに空きのないルートに負荷を足しているだけです。
- 容量制限中でもKimi K3を本番で使い続けられますか?
- 使えます。ただし「保証されたプライマリ」ではなく、きちんとしたフォールバックを備えた「ベストエフォートのプライマリ」として扱う場合に限ります。短いリトライ予算(おおむね5〜7秒)を設定し、使い切ったらフェイルオーバーし、K3が一発目で応答した頻度をログに残しておけば、容量警告がいつ解除されたか分かります。厳格なレイテンシSLOが必要なチームは、上流の容量が安定するまでK3をバックアップ枠に降格させるべきです。


