https://api.comfy.org
以下のすべてのエンドポイントは認証が必要です。X-API-Key: <api-key> または Authorization: Bearer <jwt> を送信してください。
Comfy API キーは Bearer トークンとして送信することもできます。両方の認証ヘッダーが指定された場合、X-API-Key が優先されます。キーと JWT の違いについては認証ヘッダーを、アクセス要件についてはクイックスタートを参照してください。
エンドポイント
GET /v2/models
Comfy Router が実行できるモデルを一覧表示します。
利用可能なモデル ID と課金情報を一覧表示します。has_more が true の間は next_cursor を使用します。
パラメータ
RouterPageCursor
不透明なページネーションカーソル。Type:
RouterPageCursor — next_cursor として返される不透明なカーソル、1〜512 文字integer
1 ページで返すモデル数。最大 100、デフォルト: 20
string
呼び出し元が以前の
200 から保持している ETag。RouterModelListResponse
OK - モデルカタログの 1 ページ。Body:
RouterModelListResponse — ヘッダー: X-Comfy-Request-Id、ETag、Cache-Controlno body
Not Modified - 呼び出し元が
If-None-Match で送信した ETag 以降、ページは変更されていません。ヘッダー: X-Comfy-Request-Id、ETag、Cache-ControlRouterErrorResponse
無効なリクエストです。エラータイプとリクエストボディを確認してください。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
認証情報が不足しているか、無効です。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルに対して、このリクエストは許可されていません。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフして再試行してください。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdGET /v2/models/{provider}/{model}
正規のモデル ID でパートナーモデル1件のカタログエントリを取得します。
カタログ全体を一覧表示せずに、1つのモデルの詳細を読み取ります。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID のプロバイダー部分。型: RouterProviderSegment。英数字のスラッグ(例: anthropic)、最大64文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID のモデル部分。型: RouterModelSegment。英数字のスラッグ(例: claude-opus-4-6)、最大128文字string
呼び出し元が以前の
200 から保持している ETag。RouterModelDetail
OK: モデルのカタログエントリ。ボディ:
RouterModelDetail。ヘッダー: X-Comfy-Request-Id、ETag、Cache-Controlno body
Not Modified: 呼び出し元が
If-None-Match で送信した ETag 以降、エントリは変更されていません。ヘッダー: X-Comfy-Request-Id、ETag、Cache-ControlRouterErrorResponse
認証情報が不足しているか無効です。ボディ:
RouterErrorResponse。ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルでは、このリクエストは許可されていません。ボディ:
RouterErrorResponse。ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。ボディ:
RouterErrorResponse。ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフして再試行してください。ボディ:
RouterErrorResponse。ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdPOST /v2/models/{provider}/{model}
正規のモデル ID でパートナーモデルを同期的に実行します。
モデルを実行し、完了した結果を同じレスポンスで受け取ります。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID のプロバイダー部分。型: RouterProviderSegment、英数字のスラッグ(例: anthropic)、最大 64 文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID のモデル部分。型: RouterModelSegment、英数字のスラッグ(例: claude-opus-4-6)、最大 128 文字string
1 つの論理的な呼び出しの再試行を安全にする、呼び出し側が生成するキー。1〜255 文字
string
このモデルを現在のデフォルトの代わりに配信する代替プロバイダーを選択します。代替プロバイダーは
fal、wavespeed、runware、higgsfield で、GET /v2/models/{provider}/{model} は、あるモデルがそれらのどれをサポートしているかを報告します。拒否は固定の順序で判定され、先の判定は、後の判定に該当するかどうかに関係なく応答します。認識されない値(登録されたプロバイダーでさえないもの)は 400 で拒否されます。次に、ボディがマルチパート操作(編集)を選択しているリクエストでの代替プロバイダーは、detail が “this request’s image selects the edit operation” で始まる 409 で拒否されますが、それはそのプロバイダーのこのモデル用のトランスレーターがその操作を提供できない場合に限られます。トランスレーターがメディアを扱えるレッグは通常どおり処理されます。次に、bring-your-own-key 認証情報が解決されたリクエストでは、代替プロバイダーはどれでも detail が this request resolved a BYOK credential で始まる 409 で拒否されます(そのレスポンスを参照)。そのプロバイダーがこのモデルを提供するかどうかは関係ありません。次に、指定されたプロバイダー自身のゲートがあり、そのプロバイダーがあなたに対して有効になっていない場合は error_type: not_enabled を伴う 403 で、ゲートを評価できない場合は error_type: service_unavailable を伴う 503 で拒否します。そしてこれら 4 つすべてを通過した後にのみ、このモデル用のレッグを持たない実在のプロバイダーが error_type: invalid_input を伴う 400 で拒否されます。これは認識されない値と同じ応答です。fallback_provider は、bring-your-own-key リクエスト、ボディがマルチパート操作を選択しているリクエスト、および strict_mode=true の下では、拒否されるのではなく何の効果も持ちません。boolean
model_provider と併用した場合にのみ意味を持ちます。デフォルト: Falsestring
最初の試行が Router または試行したプロバイダーに起因する理由で失敗したときに、Router がこの呼び出しをモデルの他の登録済みプロバイダーに対して再試行するかどうかを制御します。省略した場合、または
false 以外の値はフォールバックを有効のままにします。false は無効にします。フォールバックが成功したレスポンスには X-Comfy-Router-Fallback-Provider が付与されます。bring-your-own-key 認証情報が解決されたリクエストでは、このパラメータの値に関係なくフォールバックは利用できません。試行は単に行われず、最初の失敗がそのまま返ります。これは拒否ではなく不作用であり、ここから 409 が発生することはありません。同じ理由で、ボディがマルチパート操作を選択しているリクエストおよび strict_mode=true の下でも同様です。それぞれが呼び出しを 1 つのプロバイダーに結び付けるため、別のプロバイダーに対して忠実に再現することはできず、フォールバックは拒否されるのではなく単にスキップされます。その 409 で拒否されるのは明示的な model_provider だけであり、この無条件のスキップとは異なり、そのマルチパートの 409 はトランスレーターがその操作を提供できないレッグにのみ適用されます。boolean
このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを、受け入れるのではなく拒否するようにオプトインします。ネストされたフィールドはチェックされず、宣言されていないフィールドを許可するスキーマを持つモデルや、作成済みスキーマを持たないモデルの場合は何も拒否されません。また、
strict_mode=true で送信されたキュー中の送信でも拒否されません。デフォルト: Falseapplication/json — RouterModelInput(必須)
パートナーモデルのネイティブ JSON 入力です。model_provider がない場合、リクエストはモデルのデフォルトプロバイダーでネイティブディスパッチを実行し、このボディはモデル自身のネイティブスキーマであって、変更されずに転送されます(そこでは strict_mode は意味を持たず、何も変わりません)。model_provider が代替プロバイダーを選択し、strict_mode=false(デフォルト)の場合、ボディは送信前にそのプロバイダーの実際のスキーマに変換されます。正確に表現できないネイティブフィールドは削除され、レスポンスの X-Comfy-Router-Dropped-Params ヘッダーで開示されます。暗黙に削除されることはありません。model_provider が代替プロバイダーを選択し、strict_mode=true の場合、変換は実行されません。ボディはすでにその代替プロバイダー自身の実際のスキーマである必要があり(このモデルのネイティブスキーマではありません。strict_mode を参照)、変更されずに転送されます。ボディ自体のフィールドも、複数の操作をサポートするモデルで Router が実行する操作を選択します。編集可能な画像モデルの場合、入力画像を含めると、テキストから画像への操作から画像から画像へ(編集)の操作に切り替わり、それは独自のレートで課金される場合があります。Seedance ビデオモデルの場合、content[].role が操作を選択します(最初のフレームの画像は画像から動画へ、参照画像またはクリップは参照から動画を選択します)。ネイティブディスパッチでは、Seedance の課金は役割ではなく content 内のメディア種別に従います。ビデオ入力が少しでもあるリクエストは動画から動画へとして課金され、そうでなければ画像があるものは画像から動画へとして、それもなければテキストから動画へとして課金されます。ただし、draft_task 項目からの最終レンダーは、それがレンダリングする Draft の操作として課金されます。テキストから動画へと画像から動画へで同じレートを請求するモデルもあります。model_provider が代替プロバイダーを選択している場合、条件付きの各操作はそのプロバイダー独自のレートで課金される場合があります。
レスポンス
RouterModelOutput
OK。
model_provider を指定しない場合、または model_provider を指定して strict_mode=false(デフォルト。可能な場合はこのモデルのネイティブな契約に変換して返し、変換に失敗した場合は代替プロバイダー自身の生のレスポンスにフォールバックします。ログに記録され、暗黙に処理されることはありません)の場合、形状はこのモデル自身のネイティブな出力です。strict_mode=true の場合は、代替プロバイダーのレスポンスがそのまま返されます。パートナーが生成結果をバイト列として直接返すモデルでは、ボディは application/json ではなくパートナー自身の Content-Type を持つそのバイト列になります。レスポンスの Content-Type で分岐し、JSON ドキュメントであると仮定しないでください。Body: RouterModelOutput または生のバイト列(*/*) — Headers: X-Comfy-Request-Id, X-Content-Type-Options, X-Comfy-Router-Fallback-Provider, X-Comfy-Router-Provider, X-Comfy-Router-Dropped-Params, X-Comfy-Credits-Used, Idempotent-Replayed, X-Committed-Spend-Limit, X-Committed-Spend-Current, X-Committed-Spend-RemainingRouterErrorResponse
無効なリクエストです。エラータイプとリクエストボディを確認してください。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, X-Comfy-Upstream-Status, X-Comfy-Upstream-Detail, X-Comfy-Refusal-Subject, Idempotent-ReplayedRouterErrorResponse
認証情報が不足しているか、無効です。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-IdRouterErrorResponse
Router のリクエストレベルの失敗です。リクエストはモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルに対して、リクエストは許可されていません。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-IdRouterErrorResponse
X-Comfy-Error-Type を確認してください。concurrency_limit_exceeded はオリジナルの呼び出しがまだ実行中であることを意味するため、Retry-After を待って同じキーを再利用します。invalid_input の場合は新しいキーが必要です。このルートにおける 2 つの invalid_input 競合はキーとはまったく無関係で、新しいキーでもどちらも解消されません。1 つは、リクエストボディがマルチパート操作(編集)を選択しているのに model_provider が代替プロバイダーを指定しており、そのプロバイダーのこのモデル用トランスレーターが対応できない場合で、detail は “this request’s image selects the edit operation” で始まります。もう 1 つはその後チェックされるもので、リクエストがすでにパス内のプロバイダーに対する BYOK 認証情報を解決済みの場合で、detail は this request resolved a BYOK credential で始まります。model_provider を外すか、BYOK 認証情報なしで(マルチパートの場合は編集もなしで)リクエストを送信してください。Body: RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, Retry-After(concurrency_limit_exceeded の場合)RouterErrorResponse
リクエストボディが大きすぎます。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-IdRouterValidationErrorResponse
リクエストの内容がモデルのスキーマに照らして拒否されました。Body:
RouterValidationErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, Idempotent-ReplayedRouterErrorResponse
X-Comfy-Error-Type を確認してください。concurrency_limit_exceeded は実行中の呼び出しを減らすことを意味し、rate_limited は許可ウィンドウを待つことを意味します。Body: RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, X-Committed-Spend-Limit, X-Committed-Spend-Current, X-Committed-Spend-Remaining, X-Model-Concurrency-Limit, X-Model-Concurrency-Current, X-Model-Concurrency-RemainingRouterErrorResponse
プロバイダー自身のレスポンスを結果に変換できませんでした(
provider_error)。Body: RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, X-Comfy-Upstream-StatusRouterErrorResponse
Router は一時的に利用できません。バックオフしながらリトライしてください。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, Retry-After(容量拒否時のみ)RouterErrorResponse
リクエストがデッドラインを超過しました。リトライする前にエラータイプを確認してください。Body:
RouterErrorResponse — Headers: X-Comfy-Error-Type, X-Comfy-Request-Id, X-Comfy-Upstream-Status, Retry-AfterPOST /v2/models/{provider}/{model}/estimate
モデル呼び出しを実行する前に、実行せずに価格を見積もります。
このボディをこのモデルで実行した場合のコストを、米ドルで事前に見積もって返します。価格は、実行時の請求に使われるのと同じレートカードから算出されます。これは見積もりであり、最終的な請求額ではありません。実際に支払うのは、ワークスペースの使用状況および請求記録に確定した請求額です。ボディはまずモデルの入力スキーマに対して検証されます。これはデフォルトの実行(strict_mode なし、reject_unknown_fields なし)が検証するのと同じ方法です。そのため、モデルのスキーマに適合しないボディは、実行時と同じ 422 になります。プロバイダーには何も送信されず、課金も発生しません。この回答は価格の固定ではありません。pricing_as_of の時点で有効なレートで算出され、実行は評価時点で有効なレートで請求されます。機能のロールアウト中は、このルートは 403 を返し、error_type: not_enabled となります。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。型: RouterProviderSegment:英数字スラッグ(例: anthropic)、最大 64 文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。型: RouterModelSegment:英数字スラッグ(例: claude-opus-4-6)、最大 128 文字string
このモデルを提供する代替プロバイダーを、現在のデフォルトの代わりに選択します。
application/json:RouterModelInput(必須)
パートナーモデルのネイティブ JSON 入力で、このモデルに対して同期ルートが受け付けるボディと同一です。デフォルトの実行が検証するのと同じく、モデル自身の入力スキーマに対して検証され(このルートは strict_mode も reject_unknown_fields も受け付けません)、その独自のフィールド(出力数、入力画像が選択する操作)が、何の価格を算出するかを決めます。
レスポンス
RouterCostEstimate
見積もりです。ボディ:
RouterCostEstimate、ヘッダー: X-Comfy-Request-IdRouterErrorResponse
無効なリクエストです。エラータイプとリクエストボディを確認してください。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
認証情報が不足しているか、無効です。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルに対して、リクエストは許可されていません。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
リクエストボディが大きすぎます。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterValidationErrorResponse
見積もりのボディがモデルのスキーマに対して拒否されたか、パスとは異なるモデルが指定されました。ボディ:
RouterValidationErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフを伴って再試行してください。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-Id、Retry-After(容量不足による拒否のみ)GET /v2/models/{provider}/{model}/openapi.json
1つのパートナーモデルの入力スキーマと出力スキーマを OpenAPI ドキュメントとして読み取ります。
1つのモデルの入力スキーマと出力スキーマを、単体の OpenAPI ドキュメントとして読み取ります。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID のうちプロバイダー部分。Type: RouterProviderSegment — 英数字のスラッグ(例: anthropic)、最大 64 文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID のうちモデル部分。Type: RouterModelSegment — 英数字のスラッグ(例: claude-opus-4-6)、最大 128 文字string
呼び出し元が以前の
200 から保持している ETag。RouterModelInputSchemaDocument
OK - モデルの入力スキーマと出力スキーマを、単体の OpenAPI ドキュメントとして返します。Body:
RouterModelInputSchemaDocument — ヘッダー: X-Comfy-Request-Id、ETag、Cache-Controlno body
Not Modified - 呼び出し元が
If-None-Match で送信した ETag 以降、ドキュメントは変更されていません。ヘッダー: X-Comfy-Request-Id、ETag、Cache-ControlRouterErrorResponse
認証情報が不足しているか無効です。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルに対して、このリクエストは許可されていません。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router がリクエストを完了できませんでした。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフして再試行してください。Body:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdPOST /v2/models/{provider}/{model}/requests
パートナーモデルの実行をキューに送信し、すぐに戻ります。
Comfy Routerのキュー配信モードです。リクエストボディは、POST /v2/models/{provider}/{model} がこのモデルに対して受け付けるものと同じパートナー固有のJSON入力です(ボディの形状は1つ、モデルごとのスキーマは1つ、配信モードは2つ)。ただし、このルートは結果のために接続を保持しません。実行を受け付けてハンドル付きで 201 を返し、呼び出し元は後で以下の3つの読み取りを通じて結果を取得します。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデルIDの小文字のプロバイダーセグメント。実行するモデルを持つパートナーです。型: RouterProviderSegment — 英数字スラッグ、例: anthropic、最大64文字RouterModelSegment
必須
正規の
{provider}/{model} モデルIDの小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。型: RouterModelSegment — 英数字スラッグ、例: claude-opus-4-6、最大128文字string
現在のデフォルトの代わりに、このモデルを提供する代替プロバイダーを選択します。
boolean
model_provider と併用した場合にのみ意味があります。デフォルト: Falsestring
呼び出し元が生成するキーで、1つの論理的な呼び出しの再試行を安全にします。1~255文字
boolean
このモデルの入力スキーマが宣言していないトップレベルのリクエストボディフィールドを、受け入れるのではなく拒否することを選択します。ネストされたフィールドはチェックされません。スキーマが未宣言のフィールドを許可しているモデル、または作成済みスキーマを持たないモデルでは何も拒否されません。また、
strict_mode=true で送信されたキューへの送信でも何も拒否されません。デフォルト: Falseapplication/json — RouterModelInput(必須)
パートナーモデル固有のJSON入力で、同期ルートがこのモデルに対して受け付けるボディと同一です。また、実行する操作を選択し、同じ方法で課金されます。ボディ自身のフィールドが、複数の操作をサポートするモデルでRouterが実行する操作を選択します(入力画像は編集可能な画像モデルを画像から画像へに切り替え、それには独自のレートで課金される場合があります。Seedanceの最初のフレーム画像は画像から動画へを選択し、参照画像またはクリップは参照から動画を選択します)。ネイティブディスパッチでは、Seedanceリクエストはロールではなく content 内のメディア種別で課金されます。つまり、ビデオ入力があれば動画から動画へとして課金され、そうでなければ画像があれば画像から動画へ、それもなければテキストから動画へとして課金されます。ただし、draft_task アイテムからの最終レンダーは、それがレンダーするDraftの操作として課金されます。一部のモデルはテキストから動画へと画像から動画へに同じレートを課金します。model_provider で代替プロバイダーを選択している場合、条件付きの各操作はそのプロバイダー独自のレートで課金される場合があります。同じプロバイダー選択の契約がディスパッチ時にも適用されます。model_provider がない場合、または model_provider があり strict_mode=false(デフォルト)の場合、ボディはモデル固有のドキュメントであり、実行が受け付けられる前にモデル自身の入力スキーマに対して検証されます。そのため、モデルが拒否するボディはここで 422 となり、数分後に失敗するキュー中のリクエストにはなりません。非strictの代替プロバイダーのボディはさらに、ディスパッチ時にそのプロバイダーの実際のスキーマへ変換されます。strict_mode=true の場合、ボディはすでに代替プロバイダー自身のスキーマである必要があり、変更されずに転送されます。ネイティブスキーマの検証はスキップされます。これは同期ルートとまったく同じです(model_provider と strict_mode を参照)。
レスポンス
RouterQueueSubmitResponse
Created - 実行がキューに受け付けられました。ボディ:
RouterQueueSubmitResponse — ヘッダー: X-Comfy-Request-Id、Idempotent-ReplayedRouterErrorResponse
認証情報が不足しているか無効です。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
無効なリクエストです。エラータイプとリクエストボディを確認してください。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
リクエストボディが大きすぎます。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Routerのリクエストレベルの失敗です。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルではリクエストが許可されていません。パートナーが生成結果を直接バイトとして返すモデルはまだキューに投入できず、
not_enabled で拒否されます。代わりに同期ルートで実行してください。ボディ: RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデルIDが見つかりませんでした。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
X-Comfy-Error-Type を確認してください: concurrency_limit_exceeded はオリジナルの呼び出しがまだ実行中であることを意味するため、Retry-After を待って同じキーを再利用してください。invalid_input の場合は新しいキーが必要です。このルート上の 2 つの invalid_input 競合はキーとはまったく関係がなく、新しいキーでもどちらも解消されません: 別のプロバイダーを指定する model_provider は、リクエスト本文が、そのプロバイダーのこのモデル用トランスレーターが対応できないマルチパート操作(編集)を選択している場合に拒否され、その detail は “this request’s image selects the edit operation” で始まります。さらに、その後チェックされる条件として、リクエストがパス内のプロバイダーに対して BYOK 認証情報をすでに解決している場合があり、その detail は this request resolved a BYOK credential で始まります。model_provider を削除するか、BYOK 認証情報なしで、かつ(マルチパートの場合)編集なしでリクエストを送信してください。本文: RouterErrorResponse — ヘッダー: X-Comfy-Error-Type, X-Comfy-Request-Id, Retry-After(concurrency_limit_exceeded の場合)RouterValidationErrorResponse
リクエストの内容はモデルのスキーマに照らして拒否されました。本文:
RouterValidationErrorResponse — ヘッダー: X-Comfy-Error-Type, X-Comfy-Request-Id, Idempotent-ReplayedRouterErrorResponse
X-Comfy-Error-Type を確認してください。queue_backlog_full は、保持できる未完了のキュー済みリクエスト数がすでに上限に達していることを意味するため、いずれかが完了してから再送信してください。rate_limited は、許容量のウィンドウを待つことを意味します。本文: RouterErrorResponse — ヘッダー: X-Comfy-Error-Type, X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフを伴って再試行してください。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type, X-Comfy-Request-Id, Retry-After(容量拒否の場合のみ)GET /v2/models/{provider}/{model}/requests/{request_id}
送信済みの 1 件のリクエストの結果を取得します。
結果取得エンドポイントです。正常に完了したリクエストに対しては、パートナーモデル自身のネイティブ出力を返します。これは、同じモデルと同じ入力に対して同期ルートの 200 が返す内容とバイト単位で同一です。つまり 2 つの配信モードは同じ結果形状を生成するため、呼び出し側は別のパーサーを用意することなく両者を切り替えられます。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID のうち小文字のプロバイダーセグメント。モデルを実行するパートナーです。型: RouterProviderSegment — 英数字のスラッグ(例: anthropic)、最大 64 文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID のうち小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。型: RouterModelSegment — 英数字のスラッグ(例: claude-opus-4-6)、最大 128 文字RouterQueueRequestId
必須
対象とするキュー中のリクエスト。送信時にレスポンス本文で返された
request_id です。型: RouterQueueRequestId — pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$、uuid、最大 36 文字RouterModelOutput
OK — 結果を生成したリクエスト(正常に完了したリクエスト、または課金の記録と保存済みの結果の両方を持つターミナル状態のリクエスト)に対して保存された結果を、パートナー自身のメディアタイプでそのまま返します。同期ルートの
200 が返す場合とまったく同じであり、送信時に受け入れたのと同じプロバイダー選択の契約に従います。model_provider を指定しない場合、または model_provider と strict_mode=false(デフォルト。可能な場合はこのモデルのネイティブな契約に変換し、変換に失敗した場合は代替プロバイダー自身の生のレスポンスにフォールバックします。この処理はログに記録され、決して黙って行われることはありません)を指定した場合、形状はこのモデル自身のネイティブ出力です。strict_mode=true の場合は、代替プロバイダーのレスポンスがそのまま返されます。パートナーが生成結果をバイト列として直接返すモデルでは、本文は application/json ではなくパートナー自身の Content-Type を持つそのバイト列です。レスポンスの Content-Type で分岐し、JSON ドキュメントであると仮定しないでください。本文: RouterModelOutput または生のバイト列 (*/*) — ヘッダー: X-Comfy-Request-Id、X-Content-Type-Options、X-Comfy-Credits-UsedRouterQueueStatusResponse
受理済み — リクエストはまだ完了していません。本文:
RouterQueueStatusResponse — ヘッダー: X-Comfy-Request-Id、Retry-AfterRouterErrorResponse
認証情報が不足しているか無効です。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルに対して、リクエストは許可されていません。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフを伴って再試行してください。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
リクエストが操作と競合する状態にあります。エラータイプを確認してください。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
リクエストが期限を超過しました。再試行する前にエラータイプを確認してください。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自身が報告しなかった理由で失敗しました。本文:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdPUT /v2/models/{provider}/{model}/requests/{request_id}/cancel
送信済みの1件のリクエストのキャンセルを要求します。
まだ完了していないリクエストの停止を Comfy に要求します。これは要求であり保証ではなく、202 はまさにそのことを示します。CANCELLATION_REQUESTED は要求が受け付けられたことを意味し、実行が停止したことを意味するものではありません。パートナー側で既に処理中の実行はそのまま完了する可能性があり(パートナーでの生成は、誰が結果を受け取ったかに関わらず、完了すれば課金されます)、そのため実際に何が起きたかを知る必要がある呼び出し元は、後でステータスエンドポイントを読み取ります。そこでは、有効になったキャンセルは、他のすべてのターミナルな結果と同様に error_type を持つ COMPLETED として示されます。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID の小文字のプロバイダーセグメント。実行対象のモデルを持つパートナーです。型: RouterProviderSegment:英数字のスラッグ(例: anthropic)、最大 64 文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID の小文字のモデルセグメント。そのプロバイダー内で実行するモデルです。型: RouterModelSegment:英数字のスラッグ(例: claude-opus-4-6)、最大 128 文字RouterQueueRequestId
必須
対象となるキュー中のリクエスト。送信時にレスポンスボディで返された
request_id です。型: RouterQueueRequestId:pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$、uuid、最大 36 文字RouterQueueCancelResponse
受理済み。
CANCELLATION_REQUESTED。ボディ: RouterQueueCancelResponse、ヘッダー: X-Comfy-Request-IdRouterQueueCancelResponse
競合。
ALREADY_COMPLETED。ボディ: RouterQueueCancelResponse、ヘッダー: X-Comfy-Request-IdRouterErrorResponse
無効なリクエストです。エラータイプとリクエストボディを確認してください。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
認証情報が不足しているか無効です。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルでは、このリクエストは許可されていません。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router は一時的に利用できません。バックオフを伴って再試行してください。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。ボディ:
RouterErrorResponse、ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdGET /v2/models/{provider}/{model}/requests/{request_id}/status
送信済みリクエスト1件のキュー状態を読み取ります。
ポーリングエンドポイントです。リクエストの現在の状態を返し、結果は決して返しません。そのためクライアントは、ポーリングのたびに出力を転送することなく、長時間の生成を監視できます。結果は、この応答が COMPLETED を示したときに、以下の読み取りから一度だけ取得します。
パラメータ
RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID の小文字プロバイダーセグメント。実行対象のモデルを持つパートナーです。型: RouterProviderSegment — 英数字スラッグ(例: anthropic)、最大64文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID の小文字モデルセグメント。そのプロバイダー内で実行するモデルです。型: RouterModelSegment — 英数字スラッグ(例: claude-opus-4-6)、最大128文字RouterQueueRequestId
必須
対象とするキュー中のリクエスト。送信時にレスポンスボディで返された
request_id です。型: RouterQueueRequestId — pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$、uuid、最大36文字RouterQueueStatusResponse
OK - リクエストの現在のキュー状態です。ボディ:
RouterQueueStatusResponse — ヘッダー: X-Comfy-Request-Id、Retry-After、X-Comfy-Estimated-Duration-Seconds、X-Comfy-Estimated-Duration-P90-Seconds、X-Comfy-Estimate-SourceRouterErrorResponse
認証情報が不足しているか無効です。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
この呼び出し元またはモデルに対して、そのリクエストは許可されていません。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
モデル ID が見つかりませんでした。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router が一時的に利用できません。バックオフを伴って再試行してください。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-IdRouterErrorResponse
Router のリクエストレベルの失敗。リクエストがモデルに到達しなかったか、モデル自体が報告しなかった理由で失敗しました。ボディ:
RouterErrorResponse — ヘッダー: X-Comfy-Error-Type、X-Comfy-Request-Idエラーバケット
Router の機械可読なエラーカテゴリで、X-Comfy-Error-Type ヘッダーでも送信されます。
リクエストレベルバケット
Router が受け付けたものの、完了できなかったリクエストに対して発生します。トランスポートレベルバケット
モデルへの呼び出しの前またはその周辺で、Router 自身によって発生します。レスポンスヘッダー
string
カタログページまたはカタログエントリの鮮度ディレクティブ。送信時:
200, 304string
提供されるスキーマドキュメントの鮮度ディレクティブ。送信時:
200, 304string
提供されるボディのバイト列に対する強力なエンティティタグ。
GET /v2/models と GET /v2/models/{provider}/{model} 用です。送信時: 200, 304string
提供されるドキュメントのバイト列に対する強力なエンティティタグ。
GET /v2/models/{provider}/{model}/openapi.json 用です。送信時: 200, 304boolean
このレスポンスがモデルを再度実行した結果ではなく、
Idempotency-Key の記録から提供された場合に存在し、true になります。integer
同じリクエストを変更せずに再送する前に待機する秒数。送信時:
503integer
このキュー中のリクエストを再度ポーリングする前に待機する秒数。送信時:
200, 202integer
同じ
Idempotency-Key で同じリクエストを再試行する前に待機する秒数。送信時: 409, 504string
この実行にかかったコストを Comfy クレジットで示したもので、課金自体と同じ料金カードから算出されます。したがって呼び出し元は独自の価格表を持つ必要がありません。また、複数の課金対象呼び出しを経てプロバイダーに到達した実行では、最後の呼び出しの値ではなくそれらの合計になります。
RouterErrorType
障害を表す大まかで機械可読な分類で、Router がすべてのエラーレスポンスに設定します。型:
RouterErrorTypestring
status が IN_PROGRESS のステータス読み取り時のみ、X-Comfy-Estimated-Duration-Seconds の隣に送信されます。その生成時間の見積もりがどこから来たのか(コスト見積もりの source とは別)を示し、historical(最近の実行で実測)または default(メディア種別ごとのフォールバックで、記録された最近の実行が少なすぎる間に使われます)のいずれかです。integer
status が IN_PROGRESS のステータス読み取り時のみ、X-Comfy-Estimated-Duration-Seconds の隣に送信されます。その生成時間の見積もりの 90 パーセンタイルを整数秒で示します。integer
status が IN_PROGRESS のステータス読み取り時のみ送信されます。プロバイダーが受け付けた後、生成の実行全体にかかる時間についての Router の見積もりを整数秒で示します(残り時間ではなく、IN_QUEUE で過ごした時間は決して含みません)。string
コンテンツポリシーによる拒否がどの入力または出力に関するものかを、Router レベルの閉じた語彙として示します:
input, output, input_text, input_image, input_video, input_audio, output_text, output_image, output_video, output_audio。string
この呼び出しに対してサーバーが生成する識別子で、成功、4xx、5xx を問わず、すべての Router レスポンスに存在します。エラーレスポンスこそ、ユーザーがサポートリクエストで引用する ID を必要とするまさにその瞬間だからです。
string
文字列の配列を保持する、JSON エンコードされた 1 つの文字列です。カンマで分割するのではなく JSON パーサーでデコードしてください。これはワイヤー上では単一の文字列であり、カンマ区切りの OpenAPI 配列ではないためです。また、各エントリはそれ自体にカンマを含む文です。このヘッダーは、ある変換がこの呼び出しのリクエストボディを生成し、1 つ以上のネイティブフィールドを、それを処理したプロバイダー上で正確に表現できなかった場合に常に存在し、削除された各フィールドとその理由を示します。呼び出し元が
model_provider でその変換を要求した場合(strict_mode=false、これがデフォルト)でも、自動の fallback_provider 再試行がそれを実行した場合でも同様です。string
fallback_provider が実際にこの呼び出しを 2 つ目のプロバイダーに対して再試行し、その再試行が成功した場合にのみ存在し、プロバイダー名を示します。最終的にこの呼び出しを処理したプロバイダーであり、試行されて同様に失敗したプロバイダーではありません。string
この呼び出しを処理した Router のレグのプロバイダーで、成功したすべての実行レスポンスに存在します。ネイティブ実行ではモデル自身のプロバイダー、
model_provider が指定した代替プロバイダー、または fallback_provider の再試行がたどり着いたプロバイダー(その場合に限り X-Comfy-Router-Fallback-Provider も同じ名前を示します)です。これは Router がディスパッチしたレグであり、必ずしも出力を生成したベンダーとは限りません。ネイティブレグ内のプロキシレベルのカスケード(たとえば vertexai の Gemini 画像チェーン)は、どのヘッダーにも名前が現れない別のベンダーに呼び出しを渡すことがあるためです。string
モデルプロバイダーがリクエストを拒否した理由を、範囲を限定してサニタイズしたもの。
integer
この呼び出しに対するモデルプロバイダー自身の HTTP ステータス。
integer
呼び出し元が現在、まだ実行中の呼び出しに対してコミットしている金額(米ドルのセント単位)。
integer
呼び出し元がまだ実行中の呼び出しにコミットできるパートナー支出の上限(米ドルのセント単位)。この金額は呼び出しが受け付けられた時点で確保され、その呼び出しが完了した時点で解放されます。
integer
上限までに残りの余裕(米ドルのセント単位)。下限は 0 です。
string
Router モデルのすべての成功した実行において、常に
nosniff です。integer
呼び出し元が高コストに分類されたモデルに対して行っている同時呼び出し数で、この呼び出しを拒否したゲートが数えたものです。
integer
呼び出し元が同時に保持できる、高コストに分類されたモデルへの同時呼び出しの最大数。同時呼び出し上限の 4 分の 1 で、パートナーノードの呼び出しと共有されます。
integer
呼び出し元がまだ開始できる高コストモデルへの呼び出し数。
429 では 0 です。事前のコスト見積もり
POST /v2/models/{provider}/{model}/estimate は、リクエストボディを実行せずにその価格を見積もります。また、キュー中の送信 (POST /v2/models/{provider}/{model}/requests) は、その 201 で estimate と同じ RouterCostEstimate を返します。どちらも、Comfy がその実行の請求に用いるレートカードから価格が決まります。どちらが返す数値も見積もりであり、最終的な請求額ではありません。ワークスペースの利用状況および請求記録にある確定額が最終です。自分のプロバイダーキーでの実行は Comfy から課金されません(後述)。見積もりの展開中は、このルートは error_type: not_enabled を伴う 403 を返し、送信レスポンスは estimate を省略します。カタログには依然として価格が含まれていません。
金額を確認する前に source を読んでください。数値が不足していても、決して無料という意味ではありません。
unknown の見積もりの reason は次のいずれかです。
not_quotable: Router はこの呼び出しが実行される前に価格を算出できません。プロバイダーが後から報告する数量で課金され、ボディがその範囲を定めていないか、送信されたままの内容では価格を算出できないためです。認識できないreasonはすべてnot_quotableとして扱ってください。unpriced_model: レートカードがこのリクエストの価格を定めていません。byok(キュー中の送信のみ): 実行が自分のプロバイダーキーを使用するため、Comfy はその実行に対して何も課金しません。pricing_unavailable(キュー中の送信のみ): リクエストを受け付けた時点でレートカードを読み取れませんでした。送信はそれでも受け入れられ、実行は通常どおり課金されます。
unknown を返すことがあるため、すべての見積もりで source を読んでください。
見積もりがフェイルクローズするのは、次の場合です。
- 数値を出すためにレートカードが必要で、カードが読み込まれていないか古い場合、
/estimateは推測ではなく503を返します。キュー中の送信が見積もりを理由に拒否されることはありません。代わりにreason: pricing_unavailableを伴うsource: unknownを返します。実行前にまったく価格を算出できない呼び出し(not_quotable)、または自分のプロバイダーキーでのキュー中の送信(byok)は、カードを読まずに応答されるため、その200はカードが新しいかどうかについて何も示しません。 /estimateは、デフォルトの実行と同様に、モデル自身の入力スキーマに対してボディを検証します。そのため、モデルのスキーマに適合しないボディには、実行が返すのと同じ422が、同じdetail[]の形状で返ります。価格の算出もディスパッチも行われません。- キュー中の送信の冪等な再生(
Idempotent-Replayed: true)はestimateを省略します。元の見積もりは保存されないためです。
200 の数値は、その実行が受け入れられることや、まさにその額が課金されることを約束するものではありません。
/estimateはstrict_modeやreject_unknown_fieldsを受け取らないため、モデルのネイティブな契約のみを検証します。strict_mode=trueの実行が代替プロバイダー自身のスキーマで受け入れるボディも、ここでは422になることがあります。また、reject_unknown_fields=trueの実行なら拒否するであろう、宣言されていないトップレベルフィールドも、ここでは価格が算出されます。pricing_as_ofは、レートカードを取得した時刻です(カードを読まなかった場合は、見積もりに応答した時刻)。これは価格の固定ではありません。実行は、評価された時点で有効なレートで課金されます。/estimateが見積もるのは、model_providerが指定するレグ、またはネイティブのプロバイダーです。fallback_providerやstrict_modeパラメータは受け取りません。フォールバックの再試行が別のプロバイダーに到達した同期実行は、そのプロバイダーのレートで課金され、見積もりはそのレートを示していません。実行のレスポンスにあるX-Comfy-Router-Fallback-Providerが、それが発生したことを示します。キュー中の送信にはフォールバックがないため、そのestimateは実行されるレグを見積もります。/estimateとキュー中の送信のestimateは、model_providerのレグにおける同じボディ、または兄弟オペレーションで実行されるボディに対して、わずかに異なるドキュメントの価格を算出することがあります。送信のestimateは、その実行が送るドキュメントに基づいて価格が算出されます。/estimateは常にプラットフォームの請求額を見積もります。自分のプロバイダーキーでの実行は Comfy から課金されませんが、/estimateはそれを検出せず、依然として数値を返します。reason: byokを返すのはキュー中の送信だけです。- ドルは丸めていないセントから、最大 8 桁の小数で表示され、課金対象となる 1 セント未満の
amountが0と表示されることはありません。creditsはround(amount × 211, 2)で、X-Comfy-Credits-Usedが請求額に適用するのと同じ換算です。そのため、非常に小さな非ゼロの価格ではcreditsが0にラウンドされることがあります。それが問題になる場合はcreditsではなくamountまたはamount_centsで予算を立ててください。このヘッダーは実行後の数値のままであり、残高は Comfy プラットフォーム上にあります。
結果アセット
モデルは、アセット URL、インラインバイト、またはその両方を返すことができます。以下のプロバイダーは、選択済みのアセットを Comfy ストレージにコピーし、その URL を置き換えます。この動作はモデルによって異なります。これを選択するリクエストヘッダーはありません。
これらの有効期間は、URL を開いたときではなく、URL が署名されたときに開始されます。キャッシュされた URL や再利用された URL は残り時間が短い場合があります。再利用しても有効期間は更新されません。アセットは速やかにダウンロードしてください。コピーされるのは各行に記載されたアセットのみです。
byteplus/seedream-* と byteplus/seededit-* の画像は BytePlus ビデオの行には含まれません。
コピーを実行するのは、モデルのネイティブプロバイダーのみです。代替プロバイダーによって処理された実行、つまり model_provider が代替プロバイダーを指定している場合、またはネイティブ実行のフォールバック再試行が代替プロバイダーに到達した場合(X-Comfy-Router-Fallback-Provider で開示されます)は、そのプロバイダー自身の URL を返します。これらの URL はプロバイダーの有効期限に従い、コピーされません。model_provider の値 default、comfy、comfyui は代替プロバイダーを指定しないため、それらの実行はネイティブであり、上記と同様にコピーされます。フォールバック再試行がネイティブプロバイダーに戻った model_provider の実行も同様です。
Veo (veo/*) には別のストレージパスがあります。 response.videos[] では、存在する方のメンバーを読み取ってください。bytesBase64Encoded はクリップをインラインで含み、gcsUri は、プロバイダーから Comfy ストレージへの直接書き込みが環境で構成されている場合に、Comfy が署名した HTTPS リンクを含みます。そのリンクはレスポンスから 24 時間有効です。後者の場合はアセットをコピーするのではなく直接書き込むため、Veo は再ホスティングの表には含まれていません。
その他のモデルは、プロバイダーのアセット参照またはインラインバイトを返します。プロバイダーの URL はプロバイダーの有効期限に従います。これは上記の有効期間よりはるかに短い場合があり、Router の契約では規定されていません。
コピーはアセットごとのベストエフォートです。1 つのコピーが失敗した場合、そのエントリはプロバイダーの参照を保持します。レスポンスには Comfy とプロバイダーの両方の URL が含まれる可能性があり、アセットごとの明示的なコピーステータスフィールドはありません。生成は引き続き成功し、課金されます。1 つの正常に再ホストされたアセットから、すべての URL の有効期間を推測しないでください。
結果が Comfy ホストかどうかは、完了した呼び出しが後でその Idempotency-Key レコードから再生できるかどうかも決定します。上記の Idempotency-Key パラメーターは、再生できない場合に再試行が何で応答されるかを説明しています。
モデルごとの入力および出力スキーマ
各モデルのフィールドはGET /v2/models/{provider}/{model}/openapi.json から読み取ります。この呼び出しには APIキーが必要です。スキーマが作成されているすべてのモデルについて、同じドキュメントが APIキーなしでこのサイトの /router-schemas/{provider}/{model}.json にも公開されています。このコピーは最後のドキュメント更新時に取得されたスナップショットであるため、両者が異なる場合はエンドポイントの内容が正式です。オペレーションの requestBody は入力の検証を記述しており、その 200 レスポンスは、スキーマが作成されている場合に出力の形状とメディアタイプを記述しています。x-comfy-input-schema-authored が false の場合、Router はモデル固有の事前検証なしで任意の JSON オブジェクトを受け入れます。プロバイダーの要件は引き続き適用されます。出力スキーマは結果を記述するものであり、Router は返されたプロバイダーのペイロードをそれらに対して検証しません。スキーマが作成されていない出力では、application/json ではなく */* が使用される場合があります。デコードする前にレスポンスのコンテンツタイプを確認してください。
スキーマ
RouterChargesOnPolicyRejection
このモデルでコンテンツポリシーによる拒否が課金されるかどうか。不明な値は課金される可能性があるものとして扱ってください。 型:string
RouterCostEstimate
この呼び出しにかかる費用を、ディスパッチ前に、実行の課金に用いられるのと同じレートカードから米ドルで見積もった事前見積もりです。最終的な請求額ではありません。実際に支払うのは、ワークスペースの使用量および請求記録にある確定した請求額です。実行後に報告されるX-Comfy-Credits-Used は事後に丸められた数値であり、領収書ではありません。source はその数値をどこまで信頼できるかを示します。exact は amount を持ち、estimated は min_amount と max_amount を持ち amount は持ちません。unknown はどちらも持たず reason を持ちます。amount が存在しないことを無料と読み取らないでください。価格の固定ではありません。pricing_as_of を参照してください。
フィールド
string
必須
exact | estimated | unknown。それ以外の値は unknown として読み取ります。exact と estimated はいずれも見積もりを表すもので、どちらも最終的な請求額ではありません。unknown は数値を持ちません。string
必須
常に
USD です。string
小数文字列としてのドル額。例: “0.04”。最大 8 桁の小数で、指数表記はありません。課金対象となる 1 セント未満の価格が “0” として表示されることはありません。
source が exact の場合のみ存在します。最終的な請求額ではありません。最終的なのは、ワークスペースの使用量および請求記録にある確定した請求額です。string
小数文字列としてのドル額の下限。
source が estimated の場合のみ存在します。string
小数文字列としてのドル額の上限。
source が estimated の場合のみ存在します。number
計算用の、端数処理を行っていない米セント単位の同じ数値。
amount とともに存在します。doublenumber
端数処理を行っていない米セント単位の
min_amount。min_amount とともに存在します。doublenumber
米セント単位の
max_amount。max_amount とともに存在します。doublenumber
プラットフォームの換算($1 = 211 credits)を用いた Comfy クレジット単位の
amount。小数第 2 位に丸められます。exact な見積もりで X-Comfy-Credits-Used が保持すると想定される値です。このヘッダーは事後に丸められた数値であり、領収書ではありません。ワークスペースの使用量および請求記録にある確定した請求額が最終的な金額です。doublestring
必須
この見積もりが対象とするプロバイダーのレッグ。キュー中の送信では、実行されるレッグになります。
RouterModelId
必須
正規の Comfy Router モデル ID で、
{provider}/{model} の形式です。POST /v2/models/{provider}/{model} でモデルを指定する値とまったく同じもので、呼び出し元は何からも再導出することなくそのパスに埋め込めます。その pattern は RouterProviderSegment と RouterModelSegment を単一の / で連結したもので、maxLength はそれらの合計にその区切り文字を加えたものです。型: RouterModelId。モデル ID(例: anthropic/claude-opus-4-6)、最大 193 文字string
必須
この見積もりの価格算出に使用したレートカードを取得した日時。実行は、評価された時点で有効な料率で課金され、この瞬間の料率で課金されるわけではありません。レートカードが読まれなかった場合(
reason: pricing_unavailable、byok、またはどのカードからも価格を算出できない not_quotable の呼び出し)は、見積もりが返された日時を示します。date-timestring
source が unknown の場合のみ存在します。not_quotable(Router は実行前にこの呼び出しの価格を算出できません。価格がプロバイダーから返される内容に依存するか、リクエストボディが課金対象の数量を定めていないためです)、unpriced_model(レートカードにこのリクエストの価格がない)、byok(キュー中の送信のみ: 実行は自身のプロバイダーキーを使用するため、Comfy は何も請求しません)、または pricing_unavailable(キュー中の送信のみ: リクエストの受け入れ時にレートカードを読めませんでした。これは一時的なもので、実行は通常どおり課金されます)。それ以外の値は not_quotable として読み取ります。RouterErrorResponse
認証、アクセス、モデル検索、クォータ、プロバイダーの転送に関する失敗のエラーボディです。 フィールドstring
必須
失敗を人間が読める形で説明したもので、エンドユーザーに提示しても安全です。機械的にパースされることはありません。代わりに
error_type で分岐してください。退役したモデルに対する model_not_found の場合、後継モデルが記録されていて呼び出し元から参照できるときは detail に <id> was retired on <YYYY-MM-DD>; use <successor> が入り、そうでないときは通常の候補リストではなく <id> was retired on <YYYY-MM-DD> だけが入ります。ここで示される後継モデルは常に、呼び出しの向き先を変更できる有効なカタログ ID です。提供終了日がまだ未来であるモデルは退役していません。その日付までは GET /v2/models に一覧表示され、実行可能なままです。detail の他の部分と同様に、この退役に関する文言は表示用であり、互換性の保証はありません。機械的にパースされないというルールには、文書化された 2 つの例外があります。POST /v2/models/{provider}/{model} では、409 が invalid_input バケットを共有する 3 つの無関係な条件に対して返され、それらを区別するのは detail だけです。detail が「this request’s image selects the edit operation」で始まる場合は multipart の model_provider 拒否であり、detail が this request resolved a BYOK credential で始まる場合は BYOK の model_provider 拒否です。どちらも新しい Idempotency-Key では解消しません。そのルートにおける他の invalid_input の 409 はキーの競合です。どちらのプレフィックスも安定した契約用語であり、マッチングしてもかまいません。これ以外の箇所では、detail で分岐することに互換性の保証はありません。RouterErrorType
必須
Router の失敗を表す粗い機械可読なバケットで、
X-Comfy-Error-Type レスポンスヘッダーにも反映されるため、呼び出し元はボディをパースせずに分岐できます。この集合は 19 個の値で閉じています。6 つのリクエストレベルのバケット invalid_input、content_policy_violation、provider_error、provider_timeout、insufficient_credits、model_not_found に加えて、トランスポートレベルの unauthorized、forbidden、concurrency_limit_exceeded、client_disconnected、internal_error、deadline_exceeded、not_enabled、service_unavailable、rate_limited、cancelled、queue_timeout、request_not_found、queue_backlog_full です。「閉じている」とは今日文書化されている集合を指すのであり、永久に保たれる上限ではありません。集合は増えることが想定されているため、これは意図的に enum ではなくプレーンな文字列になっています。したがってクライアントは、上記のリストを網羅的に switch して次の追加のたびに壊れるのではなく、認識できない値を internal_error として扱わなければなりません。型: RouterErrorTypestring
モデルプロバイダーがリクエストを拒否した理由を、範囲を限定してサニタイズしたものです。
error_type が invalid_input で、X-Comfy-Upstream-Status がプロバイダーの 4xx または 2xx の場合にのみ存在します。つまり、プロバイダーがリクエストを不正な形式として拒否し、その理由を述べた場合です。通常このステータスは 4xx です。成功のエンベロープ内で拒否された生成を報告するプロバイダーでは 2xx になります(BytePlus の失敗タスクのポーリングは HTTP 200 で、理由はボディに含まれます)。それ以外のすべての失敗では存在しません。プロバイダーの 5xx、トランスポートの失敗、コンテンツポリシーによる拒否、および Router が自身について発生させた拒否が含まれます。X-Comfy-Upstream-Detail ヘッダーに反映されます。string
コンテンツポリシーによる拒否がどの入力または出力に関するものかを、Router レベルの閉じた語彙として示します。
input、output、input_text、input_image、input_video、input_audio、output_text、output_image、output_video、output_audio です。プロバイダーがモダリティを特定しなかった場合、単なる input / output の値がどちら側かを示します。error_type が content_policy_violation で、プロバイダーが拒否された対象を機械可読なコードで示した場合にのみ存在し、それ以外では存在しません。プロバイダーのテキストが入ることはありません。現在は BytePlus、Runway、BFL、Gemini、Veo、Vertex、xAI、Wan の拒否に対して、また MiniMax Router の Nano Banana レッグにおける Gemini の拒否に対しても付与されます。拒否がどちら側に関するものかを示さないプロバイダーでは存在しません。X-Comfy-Refusal-Subject ヘッダーに反映されます。RouterErrorType
機械可読な Router エラーカテゴリ。X-Comfy-Error-Type ヘッダーでも送信されます。
型: string
RouterModelBilling
モデルを呼び出す前に確認すべき課金動作。価格や使用量は含みません。 フィールドRouterChargesOnPolicyRejection
必須
コンテンツポリシーを理由にこのモデルが拒否した呼び出しでも、呼び出し元に課金されるかどうか。プロバイダーによって異なり、その違いは呼び出し時には見えず、同じ呼び出しでエラーと課金の両方を見たユーザーには知りようがありません。そのため、プロバイダーごとの伝聞に任せるのではなく、モデルごとに、呼び出しの前に明示されます。型:
RouterChargesOnPolicyRejectionRouterModelDetail
1つの Comfy Router モデルに関するモデルごとの詳細: カタログ一覧がそのモデルについて報告するすべての情報に加え、単一モデルのルートだけが持つモデル単位のフィールドです。RouterModelListEntry、RouterModelDetailFields を構成します。
型: object
RouterModelDetailFields
モデル詳細エンドポイントが返すオプションのフィールドです。 フィールドstring
このモデルの OpenAPI ドキュメントの URL。入力スキーマと出力スキーマを含みます。HTTPS URL(例:
https://api.comfy.org/v2/models/bfl/flux-2-pro/openapi.json)、最大 2048 文字RouterModelId
POST /v2/models/{provider}/{model} で使用されるモデルIDです。
型: string。モデルID(例: anthropic/claude-opus-4-6)、最大193文字
RouterModelInput
モデルの入力オブジェクトです。フィールドと検証については、選択済みモデルのOpenAPIドキュメントを参照してください。 型:object
RouterModelInputSchemaDocument
1つのモデルの入力と出力を記述した、独立した OpenAPI ドキュメント。 型:object
RouterModelListEntry
モデルの ID と課金情報です。 フィールドRouterModelId
必須
正規の Comfy Router モデル ID、
{provider}/{model} です。これは POST /v2/models/{provider}/{model} でモデルを指定する値そのものなので、呼び出し側は他の何かから再導出することなくこのパスに埋め込むことができます。pattern は RouterProviderSegment と RouterModelSegment を単一の / で連結したもので、maxLength はそれらの合計にこの区切り文字を加えた長さです。型: RouterModelId — モデル ID、例: anthropic/claude-opus-4-6、最大 193 文字RouterProviderSegment
必須
正規の
{provider}/{model} モデル ID の小文字の provider セグメントで、どのパートナーのモデルを扱うかを示します。呼び出しルートの provider パスパラメータとカタログエントリの provider フィールドはどちらもこの 1 つのスキーマを参照しており、これによって一覧に載る ID と受け付ける ID が食い違わないようになっています。型: RouterProviderSegment — 英数字スラッグ、例: anthropic、最大 64 文字RouterModelSegment
必須
正規の
{provider}/{model} モデル ID の小文字の model セグメントで、そのプロバイダー内で実行するモデルを指します。呼び出しルートの model パスパラメータとカタログエントリの model フィールドで共有されており、RouterProviderSegment と同じく食い違いを防ぐためです。型: RouterModelSegment — 英数字スラッグ、例: claude-opus-4-6、最大 128 文字RouterModelBilling
必須
呼び出しの前に呼び出し側が必要とするモデルごとの課金情報です。価格ではありません。使用量やコストの数値はここには現れません。型:
RouterModelBillingstring
このモデルの
GET /v2/models/{provider}/{model}/openapi.json ドキュメントの現在の強力な ETag です。スキーマが変わっていない間に 304 を得るには、その読み取りで If-None-Match としてこれを送信します。また、前回確認した値と比較すれば、すべてのドキュメントを取得することなく、どのモデルのスキーマが変わったかを知ることができます。この呼び出し元に対してその読み取りが現時点で 200 を返さない場合、この値は存在しません。スキーマサービスが利用不可である、モデルのドキュメントをレンダリングできない、またはレスポンスの構築中にモデルがこの呼び出し元にとって利用不可になった、といった場合です。タグが存在しないことはスキーマの変更ではありません。モデルのドキュメントを再読み取りして、現在のタグを確認してください。RouterModelListResponse
Router モデルカタログの 1 ページです。 フィールドarray of RouterModelListEntry
必須
このページのモデルで、最大
limit 件です。型: RouterModelListEntry の配列boolean
必須
このページより先に別のページが存在するかどうか。これが true である間は辿り続けてください。短い、または空の
data からカタログの終端を推測しないでください。RouterPageCursor
Router リストへの不透明なカーソルです。これはサーバーによって生成され、そのまま往復させるだけのものです。オフセットではなく、モデル ID でもなく、順序付けもされておらず、カタログの再構築をまたいで安定もしません。したがって、カーソルを解析したり、インクリメントしたり、それが得られた走査を超えて永続化したりすることは、いずれも契約の範囲外です。オフセットではなくカーソルを用いるのは、カタログが変化し続けるリストだからです。走査の途中でエントリが追加または削除されると、オフセットによる走査は気付かないうちにエントリをスキップしたり繰り返したりしますが、呼び出し側はそれが起きたことを判別できません。型:
RouterPageCursor: next_cursor として返される不透明なカーソル、1〜512 文字integer
必須
実際に提供されたページサイズです。最大値を超える
limit を要求した場合、拒否されるのではなく最大値に切り下げられます。そのため、これは要求した値より小さくなることがあります。送信した値ではなく、この数値でページネーションしてください。さもないと、実際には受け取っていない行が存在すると想定してしまいます。1〜100RouterModelOutput
モデルの結果オブジェクト。正確な形状については、選択済みモデルの出力スキーマを参照してください。 型:object
RouterModelSegment
{provider}/{model} 形式のモデル ID におけるモデル部分。
型: string — 英数字のスラッグ(例: claude-opus-4-6)、最大 128 文字
RouterPageCursor
カタログの不透明なカーソル。cursor として変更せずにそのまま渡し直してください。
型: string — next_cursor として返される不透明なカーソル。1〜512文字
RouterProviderSegment
{provider}/{model} というモデル ID のうち、プロバイダー部分。
型: string。英数字のスラッグ(例: anthropic)、最大 64 文字
RouterQueueCancelResponse
このルートが解決したリクエストを記述する 2 つのステータス、202 と 409 に対するキャンセル要求への応答です。成功エンベロープとエラーエンベロープに分けるのではなく、両方で 1 つのボディ形状を共有します。どちらも同じ表明、つまりキャンセルが何を見つけたかを示すものであり、ステータスコードごとに異なる型をパースしなければならないクライアントにとって、分割には何の利点もないからです。
フィールド
RouterQueueRequestId
必須
キュー中の Router リクエスト 1 つを識別するもの。呼び出し元がポーリング、キャンセル、結果の収集に使うハンドルです。型:
RouterQueueRequestId — pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$、uuid、最大 36 文字RouterQueueCancelStatus
必須
このルートが実際に解決したリクエストを記述する 2 つの結果について、キャンセル要求が何を見つけたか。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。型:
RouterQueueCancelStatusRouterQueueCancelStatus
このルートが実際に解決したリクエストを表す2つの結果について、キャンセル要求が何を検出したかを示します。どちらも HTTP ステータスに反映されるため、クライアントはどちらで分岐してもかまいません。 型:string
RouterQueuePosition
応答が構成された時点で、キュー内でこのリクエストより前に並んでいるリクエストの数。0 はこのリクエストが先頭であることを意味します。 型:integer — 0 以上
RouterQueueRequestId
キュー中の Router リクエスト1件の識別子。呼び出し元がポーリング、キャンセル、結果の取得に使用するハンドルです。 型:string — pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$, uuid, 最大36文字
RouterQueueStatus
キュー中の Router リクエストの状態です。取り得る値はちょうど 3 つで、RouterErrorType とは異なり、こちらは閉じた enum です。これは 2 つのスキーマが意図的に逆方向へ閉じているためです。RouterErrorType は失敗を分類するもので、その集合は今後増えていくことが想定されています。そのため、認識できないバケットを厳格に拒否する生成済みクライアントは、何かがすでに問題を起こしているまさにそのときに、最も激しく失敗することになります。一方、こちらはライフサイクルです。後で 4 つ目の状態が追加されたライフサイクルは、enum として宣言されているかどうかにかかわらず、それに対して書かれたすべてのポーリングループにとって破壊的変更になります。そこでこれは enum として宣言され、その制約はクライアントから見える場所に明記されています。
型: string
RouterQueueStatusFields
RouterQueueStatusResponse のうち URL ブロックではない半分: キュー中の 1 つのリクエストの識別情報、その現在の状態、そしてその状態がターミナルで実行が成功しなかった場合には、その理由を示す大まかな分類です。
Fields
RouterQueueRequestId
必須
キュー中の Router リクエストを識別するもの。呼び出し元がポーリング、キャンセル、結果の収集に使用するハンドルです。型:
RouterQueueRequestId — pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$, uuid, 最大 36 文字RouterQueueStatus
必須
キュー中の Router リクエストの状態です。これはちょうど 3 つの値を持ち、
RouterErrorType とは異なり閉じた enum です。これは、2 つのスキーマが意図的に逆方向に閉じているためです。RouterErrorType は失敗を分類し、その集合は拡張されることが想定されているため、認識されない分類を厳密に拒否する生成済みのクライアントは、何かが既にうまくいかなくなったまさにその時に最も大きな失敗をすることになります。こちらはライフサイクルであり、後で第 4 の状態が追加されたライフサイクルは、enum として宣言されているかどうかに関係なく、それに対して書かれたすべてのポーリングループにとって破壊的変更となります。そのため enum として宣言されており、制約はクライアントが確認できる場所に記載されています。型: RouterQueueStatusRouterQueuePosition
応答が構成された時点で、キュー内でこのリクエストの前に何件のリクエストがあるかを示します。0 はこのリクエストが先頭にあることを意味します。型:
RouterQueuePosition — 0 以上RouterErrorType
成功しなかった
COMPLETED リクエストにのみ存在し、結果の読み取りがその失敗を返すときに X-Comfy-Error-Type に付けるのと同じ大まかな分類を持ちます。これは成功したターミナルリクエストと、失敗またはキャンセルされたリクエストを区別するものです。どちらにも別個のターミナルステータスはありません。また、成功時には null ではなく存在しないため、その存在の有無で分岐してください。型: RouterErrorTypeRouterQueueStatusResponse
キュー中の1件のリクエストの現在の状態を、送信時に返されたものと同じ3つのURLと組み合わせて構成したものです。RouterQueueUrls、RouterQueueStatusFieldsを組み合わせます。
型: object
RouterQueueSubmitFields
RouterQueueSubmitResponse のうち、URL ブロックではない半分です。新しいリクエストの識別情報と、それが受け付けられた時点の状態を表します。
フィールド
RouterQueueRequestId
必須
キュー中の Router リクエスト 1 件の識別子です。呼び出し側がポーリングし、キャンセルし、結果を取得するときのハンドルになります。型:
RouterQueueRequestId — pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$、uuid、最大 36 文字RouterQueueStatus
必須
キュー中の Router リクエストの状態です。値はちょうど 3 つあり、
RouterErrorType とは異なりこちらは閉じた enum です。これは 2 つのスキーマが意図的に逆方向に閉じているためです。RouterErrorType は失敗を分類するもので、その集合は今後増えていくことが想定されています。そのため、認識できない区分を厳格に拒否する生成済みのクライアントは、まさに何かがすでに失敗したときに最も激しく失敗することになります。一方こちらはライフサイクルであり、後で 4 つ目の状態が追加されるライフサイクルは、enum として宣言されているかどうかにかかわらず、それに対して書かれたすべてのポーリングループにとって破壊的変更になります。そこで enum として宣言し、その制約はクライアントから見える場所に明記しています。型: RouterQueueStatusRouterQueuePosition
レスポンスが構成された時点で、キューのうちこのリクエストより前に何件のリクエストがあるかを示します。0 はこのリクエストが先頭にあることを意味します。型:
RouterQueuePosition — 0 以上RouterCostEstimate
このリクエストの事前コスト見積もりです。呼び出し側に対してコスト見積もりが有効になっている場合、新規受け付け時に含まれます。このリクエストがピン留めされたプロバイダーのレッグを見積もります(キューにはフォールバックループがないため、
fallback_provider が実行されるレッグを変えることはありません)。数値を提示できない場合でも、source: unknown を伴って常に存在します。見積もりのせいで送信が失敗することはありません。冪等なリプレイ(Idempotent-Replayed: true)では省略されます。オリジナルの見積もりは保存されないためです。これは見積もりであり、最終的な請求額ではなく、価格の固定でもありません。実行はレーティングが行われる時点で有効な料金で課金され、ワークスペースの使用量および請求記録に確定した請求額が最終となります。型: RouterCostEstimateRouterQueueSubmitResponse
実行がキューに受け入れられたときに返されるハンドルです。リクエストの識別情報と状態を、そのライフタイムの残りの部分に対応する 3 つの URL と組み合わせたものです。RouterQueueUrls、RouterQueueSubmitFields を合成します。
型: object
RouterQueueUrls
キュー中の 1 件のリクエストのライフタイムの残りに対応する 3 つの URL です。有効なハンドルを含むすべてのレスポンスで返されるため、クライアントがキュー URL を自分で組み立てることはありません。 フィールドstring
必須
このリクエストのステータス読み取りの絶対 URL。URI
string
必須
このリクエストの結果を取得する絶対 URL。URI
string
必須
キャンセルを要求する絶対 URL。URI
RouterValidationErrorContext
失敗した検証ルールについて、プロバイダーから提供される詳細情報。 型:object
RouterValidationErrorDetail
単一のフィールドレベルの検証失敗。 フィールドarray of any
必須
問題のあるフィールドへのパス。最も外側のセグメントが先頭になります。たとえば
["body", "image_url"]、または ["body", "images", 0] のように、整数は配列へのインデックスを表します。string
必須
この 1 件の失敗を人間が読める形で説明したもの。
string
必須
この失敗の具体的で機械可読な理由。プロバイダーからそのまま渡されます。これは型付き SDK の例外階層が分岐に使う値であり、レスポンスヘッダーの
error_type はその粗い区分にすぎません。RouterValidationErrorContext
1 つの
RouterValidationErrorDetail で違反した境界値。プロバイダーからそのまま引き継がれます。たとえば greater_than に対応する {"limit_value": 8}、image_too_small に対応する {"min_width": 512}、file_too_large に対応する {"max_size_bytes": 10485760} などです。キー集合はプロバイダーとエラータイプに固有であるため、これは意図的にオープンなオブジェクトとしています。固定のフィールドリストに狭めたり、msg 文字列に畳み込んだりすることこそが、移植された統合がコンパイルは通るものの、境界値を読んでいた分岐を黙って失う原因そのものです。エラータイプが境界値を持たない場合は存在しません。型: RouterValidationErrorContextRouterValidationErrorInput
問題のある入力値。呼び出し元が
loc から再導出することなく何が拒否されたかを確認できるよう、そのまま返されます。文字列、数値、ブール、配列、オブジェクト、null など任意の JSON 型を取りうるため、このスキーマはオブジェクトに狭めず、意図的に型なしのままにしています。プロバイダーが入力をそのまま返さない場合は存在しません。型: RouterValidationErrorInputRouterValidationErrorInput
拒否された入力値です。プロバイダーがこれを含める場合に含まれます。RouterValidationErrorResponse
422 検証エラーのレスポンスボディです。カテゴリの確認には X-Comfy-Error-Type を参照してください。
フィールド
array of RouterValidationErrorDetail
必須
リクエストで検出されたすべての検証失敗です。問題のあるフィールドごとに 1 件のエントリが含まれます。型:
RouterValidationErrorDetail の配列