HiAPI
ブログ

使用ガイド

HiAPI の OpenAI 互換インターフェースにおける「Model Not Found」(model_not_found)エラーの修正

Oct 22, 2026
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 のみを扱います。

よくある原因

実際に発生する確率が高い順に並べています:

  1. model id のスペル / 大文字小文字の誤り、またはウェブページのアドレスバーにある slug をそのままコピーしてしまった。 model id は大文字小文字を区別し、ドット・ハイフン・スラッシュを含むことがよくあります(例:seedream-5.0-lite は seedream-5-0-lite ではありません)。ブラウザのアドレスバーからモデルページの slug をコピーして id として使うのが、このエラーの最もよくある原因です——モデルページの URL にある短い slug は、実際の API id と必ずしも一致しません。

  2. そのモデルがそもそも対話モデルではなく、別のインターフェースを使う。 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 フィールドが付いており、これこそが「そのモデルがどのインターフェースを使うべきか」の唯一の根拠です(後述)。

  3. モデルが提供終了または名前変更された。 id のスペルは完全に正しいものの、現在の /v1/models 一覧にもう存在しない——古いメモやキャッシュにある旧 id は期限切れになっている可能性があります。

  4. key / 権限の問題を model の問題と誤認している。 アカウントのキーが無効な場合は permission_denied(401)が返り、model_not_found(400)ではありません。まずエラーコードでどちらの種類かを見分けてから、適切に対処してください。

修正手順

  1. まず最新の一覧と正確な id を取得する:key を付けて GET https://api.hiapi.ai/v1/models を呼び出します。これはリアルタイムのカタログであり、エラーメッセージが確認を促している場所でもあります——コードやメモにハードコードされたどの id よりも権威があります。

  2. 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 を使います。
  3. 一覧にある一字一句違わない id でリクエストを再送する。マルチタスクモデルは一覧上でタスク種別のサフィックス(例:/text-to-image、/image-to-video)が付きます。一覧に書かれた完全な id を使ってください。モデルページの URL にある裸の slug だけを使わないでください。

  4. インターフェースを正しく選ぶ:task 型なら /v1/tasks に、openai-response 型なら /v1/responses に切り替えます。インターフェースを変えるほうが、chat/completions で id を何度も試すよりも一度で解決できます。

  5. エラーコードが実は 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" }

関連リンク

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"} に入れて返します。両方のインターフェースのエラー処理を書く際、一つの実装で共通化できると仮定しないでください。

永続的なAIアーティファクトで開発を始める

APIキーを取得して、タスクベースの1つのAPIで画像・動画・音声モデルを呼び出せます。

APIドキュメントを読む