使用ガイド
HiAPI の OpenAI 互換インターフェースにおける「Model Not Found」(model_not_found)エラーの修正
問題の症状
HiAPI の OpenAI 互換インターフェース(POST /v1/chat/completions)を呼び出す際、渡した model id を HiAPI が認識できない、またはルーティングできない場合、インターフェースは HTTP 400 を返し、レスポンスボディに model_not_found エラーコードが含まれます。次のような形です:
{
"error": {
"message": "The requested model does not exist or is not available. Check the exact model ID with GET /v1/models and try again. If the issue persists, contact support with request ID: ...",
"type": "hiapi_error",
"code": "model_not_found",
"request_id": "..."
}
}
これは「キーの問題」とは別物です。API key 自体が無効または期限切れの場合、HiAPI が返すのは HTTP 401 + permission_denied であり、model_not_found ではありません:
{
"error": {
"code": "permission_denied",
"message": "This API key is invalid. Check that it is correct or use another API key and try again. If the issue persists, contact support with request ID: ...",
"type": "hiapi_error",
"request_id": "..."
}
}
permission_denied が表示されたらまず key を修正してください。model id は気にしなくて構いません。以下では model_not_found のみを扱います。
よくある原因
実際に発生する確率が高い順に並べています:
model id のスペル / 大文字小文字の誤り、またはウェブページのアドレスバーにある slug をそのままコピーしてしまった。 model id は大文字小文字を区別し、ドット・ハイフン・スラッシュを含むことがよくあります(例:
seedream-5.0-liteはseedream-5-0-liteではありません)。ブラウザのアドレスバーからモデルページの slug をコピーして id として使うのが、このエラーの最もよくある原因です——モデルページの URL にある短い slug は、実際の API id と必ずしも一致しません。そのモデルがそもそも対話モデルではなく、別のインターフェースを使う。 HiAPI 上の画像 / 動画 / 音声モデルのほとんどは非同期タスクインターフェース
POST /v1/tasksのみをサポートします。一方gpt-5.6/gpt-6といった推論モデルはPOST /v1/responsesのみをサポートします。これらを/v1/chat/completionsに送ると、インターフェースはinvalid_request(HTTP 400)で拒否します:{ "error": { "message": "The request is incomplete or incorrectly formatted. Please check it and try again...", "type": "hiapi_error", "param": "", "code": "invalid_request", "request_id": "..." } }GET /v1/modelsが返す各モデルにはsupported_endpoint_typesフィールドが付いており、これこそが「そのモデルがどのインターフェースを使うべきか」の唯一の根拠です(後述)。モデルが提供終了または名前変更された。 id のスペルは完全に正しいものの、現在の
/v1/models一覧にもう存在しない——古いメモやキャッシュにある旧 id は期限切れになっている可能性があります。key / 権限の問題を model の問題と誤認している。 アカウントのキーが無効な場合は
permission_denied(401)が返り、model_not_found(400)ではありません。まずエラーコードでどちらの種類かを見分けてから、適切に対処してください。
修正手順
まず最新の一覧と正確な id を取得する:key を付けて
GET https://api.hiapi.ai/v1/modelsを呼び出します。これはリアルタイムのカタログであり、エラーメッセージが確認を促している場所でもあります——コードやメモにハードコードされたどの id よりも権威があります。supported_endpoint_typesを見てインターフェースを判断する。各モデルエントリは次のようになっています:{ "id": "gpt-image-2/text-to-image", "object": "model", "owned_by": "custom", "supported_endpoint_types": ["task"] }task→ 非同期のPOST /v1/tasksを使い、chat/completions は使えません;openai→POST /v1/chat/completionsを使います(本記事が扱うのはこの系統です);openai-response→POST /v1/responsesを使います。
一覧にある一字一句違わない id でリクエストを再送する。マルチタスクモデルは一覧上でタスク種別のサフィックス(例:
/text-to-image、/image-to-video)が付きます。一覧に書かれた完全な id を使ってください。モデルページの URL にある裸の slug だけを使わないでください。インターフェースを正しく選ぶ:
task型なら/v1/tasksに、openai-response型なら/v1/responsesに切り替えます。インターフェースを変えるほうが、chat/completions で id を何度も試すよりも一度で解決できます。エラーコードが実は
permission_denied(401)の場合、問題は model id ではなく key にあります——別途 API key をリセットまたは交換してください。
最小検証例
このエラーを調査する際、最初のコマンドは常に GET /v1/models です——コストゼロ、副作用なしで、key が通るか、その id が存在するか、どのインターフェースを使うべきかを一度に検証できます。
curl -s https://api.hiapi.ai/v1/models \
-H "Authorization: Bearer $HIAPI_API_KEY"
200+ モデル一覧を返す → key は正常。次に一覧で id とそのsupported_endpoint_typesを確認します;401+permission_deniedを返す → key の問題です。まず key を修正してください。
あるモデルが task 型であることを確認したら、正しい呼び出し方法は統一タスクインターフェースです(model は裸の id で問題なく、タスク種別サフィックスなしでもルーティングできます):
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"input": { "prompt": "a red apple on a white table" }
}'
/v1/tasks はリクエストを受け取るとすぐに実際に課金タスクを作成し taskId を返すため、これは「修正後の正式な呼び出し」であり、気軽な疎通確認に使うものではありません——純粋な疎通確認には上記の GET /v1/models を使ってください。id が利用不可の場合、/v1/tasks のエラーは別のフラット構造になります(chat/completions とは異なります):
{ "code": 400, "data": null, "error_code": "MODEL_UNAVAILABLE", "message": "model not available via /v1/tasks" }
関連リンク
- Chat Completions API ドキュメント —— OpenAI 互換インターフェースの完全なリクエスト / レスポンスとエラー動作のリファレンス。
- モデル概要ドキュメント —— モデルカタログと正確な id の調べ方について。
- タスク作成 API ドキュメント ——
/v1/tasksのmodel、input、callbackフィールドのリファレンス。 - モデルマーケット —— 利用可能なすべてのモデルを閲覧。
- 料金ページ —— 各モデルの利用可否とリアルタイム価格を確認。
FAQ
Q:モデルページの URL から直接 id をコピーしたのですが、なぜ使えないのですか?
A:モデルページの URL にあるのは多くの場合短い slug であり、実際の API id(特にマルチタスクモデル)にはタスク種別のサフィックスが付きます(例:gpt-image-2/text-to-image)。GET /v1/models が返す id を基準にし、ブラウザのアドレスバーを基準にしないでください。
Q:GET /v1/models/{id} が存在しない id に対して HTTP 200 を返すのはバグですか?
A:いいえ。単一モデル照会インターフェースは id が存在しなくても 200 を返しますが、レスポンスボディは invalid_request_error / model_not_found 構造であり、404/400 ステータスコードではありません。このインターフェースでは HTTP ステータスコードだけでなく body を見てください。一覧インターフェース GET /v1/models と /v1/chat/completions の動作は上述のとおりです。
Q:OpenAI の SDK を HiAPI に向けて使うと model_not_found が発生します。これは OpenAI 側の問題ですか?
A:いいえ。OpenAI 互換 SDK の base_url を HiAPI に向けた時点で、モデル解決は完全に HiAPI が担当します。model_not_found は HiAPI が渡された id を登録済みモデルにマッチできなかったことを意味するため、上記の手順で修正してください。
Q:あるモデルがどのインターフェースを使うべきか素早く判断するには?
A:GET /v1/models の該当モデルの supported_endpoint_types を見てください:task を含むなら POST /v1/tasks、openai を含むなら POST /v1/chat/completions、openai-response を含むなら POST /v1/responses を使います。
Q:/v1/tasks と /v1/chat/completions のエラーコードは同じですか?
A:異なります。/v1/chat/completions は小文字の code(例:model_not_found、invalid_request)を {"error": {...}} に包んで返します;/v1/tasks は大文字の error_code(例:MODEL_UNAVAILABLE)をフラットな {"code","message","data","error_code"} に入れて返します。両方のインターフェースのエラー処理を書く際、一つの実装で共通化できると仮定しないでください。