アカウント
トラブルシューティング
HTTP ステータスと error の code から原因を調べるトラブルシューティングです。401、402、403、404、429 の各エラー、ベース URL の誤り、タイムアウト、ストリーミングの切断、CORS、SDK の版の問題を扱います。
ほとんどの問題は、HTTP ステータスとエラーボディの code として現れます。以下でコードを探してください。完全な一覧はエラーにあります。失敗したリクエスト(4xx または 5xx)には課金されません。
{ "error": { "message": "...", "type": "authentication_error", "code": "invalid_api_key" } }
401 invalid_api_key
キーがない、形式が正しくない、または失効しています。
Authorization: Bearer sk-api14-...として送信します。OpenAI SDK はapiKey/api_keyからこれを行います。curl の場合は、実行しているシェルで$API14_API_KEYが実際に設定されているか確認してください(echo ${API14_API_KEY:0:9}がsk-api14-を出力するはずです)。.envファイルからキーを読み込む場合は、余分な引用符や改行に注意してください。- 環境に残っている
OPENAI_API_KEYが、使うつもりのキーを上書きすることがあります。キーを明示的に渡して原因を切り分けてください。 - 失効したキーは即座に失敗します。キーは 1 回だけ表示されるため、紛失した場合は API キーで新しいキーを作成し、古いキーを失効させてください。
認証を参照してください。
402 insufficient_balance
USD 残高が $0、または(動画では)ジョブの見積もり料金を下回っています。残高を追加するまでリクエストはブロックされ、再試行しても解決しません。
GET /creditsまたは請求で残高を確認します。残高とキー情報を参照してください。- 残高を追加するか、自動チャージを有効にします。プランは毎月、含まれる利用量を同じ残高に追加します。料金と請求を参照してください。
- 長時間実行されるジョブでは、このコードを致命的なものとして扱って停止し、SDK の再試行が空回りしないようにします。
403 model_not_allowed または plan_required
model_not_allowed: キーのモデル許可リストに、このモデル ID が含まれていません。API キーでキーの許可リストを編集するか、許可リストのないキーを使ってください。バリアントのサフィックスも対象です。送信している ID そのものが許可されているか確認してください。plan_required: プランにこのモデルカテゴリが含まれていません。標準プランはすべてのカテゴリをカバーします。料金ページでプランを確認してください。
404 model_not_found または not_found
model_not_found: モデル ID が不明、無効化、または削除されています。ID にはプロバイダーのプレフィックスが含まれます。gpt-5-miniではなくopenai/gpt-5-miniです。正確な ID はGET /modelsまたはGET /models/{id}で調べます(キーは不要です)。モデル ID とバリアントを参照してください。not_found: パスが存在しないか、動画ジョブまたは生成 ID が自分のものではありません。多くの場合、ベース URL の誤りが原因です(下記参照)。リクエストの直後の生成情報の取得も、レコードが表示されるまでの数秒間は404を返すことがあります。
ベース URL の誤り
ベース URL は次のとおりです。
https://api14.com/api/v1
よくある間違いは次のとおりです。
| 設定したもの | 結果 |
|---|---|
https://api14.com/v1 または https://api14.com | リクエストが API ではなくウェブサイトに届きます。HTML のレスポンス、404、またはブラウザーでの CORS エラーになります。 |
ベースとして https://api14.com/api/v1/chat/completions | SDK がパスをもう一度追加します。ベースのみを設定してください。 |
https://api.openai.com/v1(デフォルト) | api14 のキーが OpenAI に拒否されます。コード内、または OPENAI_BASE_URL でベース URL を設定してください。 |
ライブラリの癖: ruby-openai は自分で v1 を追加するため、uri_base は https://api14.com/api になります(Ruby)。openai-go は末尾のスラッシュを期待するため、https://api14.com/api/v1/ になります(Go)。
429 rate_limited
キーまたはプランの毎分リクエスト数の上限(Free 5、Pro 100、Team 3,000、Enterprise 3,000+)を超えました。レスポンスには Retry-After: 60 が含まれます。
Retry-Afterを待ち、指数バックオフとジッターを加えて再試行します。公式の OpenAI SDK はすでにこれを行っています(デフォルトは 2 回の再試行。maxRetries/max_retriesを引き上げられます)。- 大量の処理では、リクエストを一度にすべて送らずペース配分し、1 つのリクエストに複数の項目を入れてください。ガイド: バッチ処理を参照してください。
- 429 は上流のプロバイダーから返ることもあります。特に
:freeバリアントで多く発生します。モデルのフォールバックまたはプロバイダールーティングで負荷を分散してください。
429 daily_limit_reached
キーが 1 日の USD 利用上限に達しました。次の UTC 日になるまで、再試行しても解決しません。想定内のトラフィックである場合は、API キーで上限を引き上げるか、削除してください。再試行のロジックがこのコードと rate_limited を区別していることを確認してください。そうしないと、ジョブが無意味に再試行され続けます。レート制限を参照してください。
タイムアウト
大規模なモデル、推論モデル、長い出力には、数分かかることがあります。
- クライアントのタイムアウトを確認してください。Node と Python の SDK はデフォルトで 10 分です。ほかの HTTP クライアントは、より短いデフォルトを使うことが多くあります。
- 長い生成はストリーミングします。トークンは数秒以内に届き始め、プロキシやロードバランサーのアイドル接続タイムアウトも問題になりません。ストリーミングを参照してください。
max_tokensを設定し、推論モデルでは推論の effort を下げてください。- 自分のサーバーを経由してリクエストを中継する場合は、そのプロキシのタイムアウト(たとえば nginx の
proxy_read_timeout。デフォルトは 60 秒)も適用されます。 - 自分側のタイムアウトは上流の生成をキャンセルしないため、課金される可能性があります。リクエスト ID を使った生成情報の取得で確認してください。
ストリーミングが切断される、または途中で止まる
- 最後のチャンクの
finish_reasonを確認してください。"length"はmax_tokensに達したことを、"error"はプロバイダーがストリームの途中で失敗し、チャンクにerrorオブジェクトが含まれることを意味します。再試行するか、フォールバックを追加してください。 - プロキシやサーバーレスプラットフォームは、SSE のレスポンスをバッファリングしたり切断したりすることがあります。バッファリングを無効にし(nginx なら
X-Accel-Buffering: no)、プラットフォームの最大レスポンス時間を確認してください。 - ストリームを自分で解析する場合は、
:で始まるコメント行(keep-alive)を無視し、data: [DONE]で停止してください。 - 接続を早く閉じても課金は取り消されません。プロバイダーが生成を完了することがあるためです。
CORS エラーとブラウザーアプリ
ブラウザーやモバイルのコードに API キーを入れないでください。 ページから誰でも読み取れ、残高を使われてしまいます。api14 は自分のバックエンドから呼び出し、ブラウザーには自分のエンドポイントだけを公開してください。
// server.js (Node / Express)
app.post("/api/chat", async (req, res) => {
const stream = await client.chat.completions.create({
model: "openai/gpt-5-mini",
messages: req.body.messages, // validate and limit this input
stream: true,
});
for await (const chunk of stream) res.write(chunk.choices[0]?.delta?.content ?? "");
res.end();
});
開発中のブラウザーでの CORS エラーは、多くの場合、ベース URL の誤り(リクエストが API ではなくウェブサイトに届いた)か、API のプリフライトが許可しないカスタムリクエストヘッダーが原因です。呼び出しを自分のサーバーに移すと、どちらも解決します。
SDK のバージョンの問題
- 1.0 未満の Python
openaiは、openai.ChatCompletion.createとopenai.api_baseを使います。pip install -U openaiでアップグレードし、OpenAI(base_url=..., api_key=...)クライアントを使ってください。 chat.completions.parseがない場合: 古い 1.x / 4.x のリリースにはclient.beta.chat.completions.parseしかありません。パッケージをアップグレードしてください。- ゲートウェイのフィールド(
provider、models、reasoning、plugins)に対する SDK の不明なパラメーターエラー: Python ではextra_bodyで、ほかの SDK では同等の extra-body オプションで渡してください。OpenAI SDK 互換性を参照してください。 - プロバイダーのメッセージ付きの上流
400: そのモデルまたはプロバイダーがパラメーターに対応していません。モデルでモデルのsupported_parametersを確認するか、provider: { "require_parameters": true }を追加してください。