Markdown を表示

Hyperouter API

バージョン v1 · 2026 年 10 月 25 日更新

このドキュメントは、AI アシスタント向けに Markdown でも提供しています。/llms.txt から始めるか、すべてのページを 1 つにまとめた /llms-full.txt を取得してください。このページの URL は /docs.md です。

Hyperouter は、多数のモデルベンダーの手前に置かれた 1 つの HTTP API です。モデルを指定したリクエストを送ると、Hyperouter がそのモデルを提供できるプロバイダーを選び、リクエストを転送して、そのプロバイダーの定価で残高から課金します。

BASEhttps://api.hyperouter.app/v1

すべてのエンドポイントは、OpenAI のリクエストとレスポンスの形式に従っています。ベース URL と API キーを変更すれば、OpenAI SDK がそのまま動作します。Hyperouter は OpenAI のボディにいくつかのフィールドを追加しており、このリファレンスでは追加分であることを明記しています。

Endpoint用途認証
GET /v1/modelsアカウントで呼び出せるモデルを一覧表示します。API キー
POST /v1/chat/completionsチャット補完。ストリーミングも指定できます。API キー
POST /v1/images/generationsテキストから画像を生成します。API キー
POST /v1/images/edits画像を編集します。API キー
POST /v1/videosプロンプトから動画を作成します。画像の指定は任意です。API キー
POST /v1/videos/edits動画を編集、またはアップスケールします。API キー
POST /v1/videos/extensions動画を延長します。API キー
POST /v1/videos/{id}/remix新しいプロンプトで動画の新バージョンを作成します。API キー
GET /v1/videos、GET /v1/videos/{id}、GET /v1/videos/{id}/content、DELETE /v1/videos/{id}動画の一覧表示、取得、ダウンロード、削除を行います。API キー
GET /v1/generations/{id}任意のリクエストの記録(ステータス、利用量、課金額)を取得します。API キー
GET /v1/credits残高、未完了のリクエストが確保している額、利用可能な残りの額(balance_usd、held_usd、available_usd。10 進数の USD 文字列)を返します。API キー

API キーを作成するには、Google または GitHub で dash.hyperouter.app にサインインしてください。GET /v1/models は、リクエスト時点で呼び出せるモデルを返します。

クイックスタート

  1. サインインして API キーを作成します。キーは sk-hr-v1- で始まり、一度だけ表示されます。
  2. 環境変数(たとえば HYPEROUTER_API_KEY)に保存します。
  3. クレジットを追加します。ダッシュボードでチャージの依頼を作成してください。お支払いの確認後、スタッフが残高に反映します。
  4. 任意の OpenAI SDK の接続先を上記のベース URL に向け、モデルを選びます。
curl https://api.hyperouter.app/v1/chat/completions \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "x-ai/grok-4.7",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

認証

すべてのリクエストで、API キーをベアラートークンとして送信します。

Authorization: Bearer sk-hr-v1-...

キーは残高へのアクセス権を持ちます。サーバー側で管理し、ブラウザーやモバイルのコードには決して含めないでください。Hyperouter が保存するのは各キーのハッシュのみのため、紛失したキーを再表示することはできません。新しいキーを作成してください。

ダッシュボードでは、キーに名前を付けたり、クレジット上限を設定したり、無効にしたりできます。無効にしたキーは直ちに使えなくなります。キーの上限を超えることになるリクエストは、402 insufficient_credits で拒否されます。

認証エラー

Statustypecode発生条件message
401authentication_errorinvalid_api_keyヘッダーがない、Bearer 形式でない、またはキーが sk-hr-v1- で始まっていません。The API key is missing or malformed. Send Authorization: Bearer sk-hr-v1-…
401authentication_errorinvalid_api_keyキーが不明、または無効です。The API key is not valid.
403permission_erroraccount_suspendedアカウントが停止されています。このチェックはリクエストのたびに行われます。This account is suspended. Open a support ticket.
429rate_limit_errortoo_many_auth_failuresお客様のアドレスから 1 分間に 30 件を超えるリクエストが、キーなし、または無効なキーを使用しました。そのアドレスからのすべての /v1 リクエストは、有効なキーを含めて 15 分間拒否されます。Retry-After に残り秒数が入ります。Too many failed API key checks from this address. Try again after the time in Retry-After.
500server_errorinternalHyperouter がキーを確認できませんでした。An internal error occurred. Try again.
curl https://api.hyperouter.app/v1/generations/0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21 \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY"
{ "error": { "message": "The API key is not valid.", "type": "authentication_error", "code": "invalid_api_key", "param": null } }

エラー

すべてのエラーは、OpenAI のエラーオブジェクトと、対応する HTTP ステータスで返されます。

{
  "error": {
    "message": "n must be an integer from 1 to 128",
    "type": "invalid_request_error",
    "code": "invalid_body",
    "param": "n"
  }
}
FieldType説明
messagestring何が問題かを説明する文です。解析しないでください。
typestringエラーの種類です。下の一覧を参照してください。
codestring原因を示す安定した識別子です。このフィールドで判定してください。
paramstring | null問題のあるリクエストのフィールド、または null です。

type とステータス

Statustype意味
400invalid_request_errorリクエストが無効です。code が原因を、param が該当のフィールドを示します。
401authentication_errorAPI キーがない、または無効です。
402insufficient_credits残高、またはキーの上限が、リクエストにかかりうる最大額をまかなえません。
403permission_errorアカウントが停止されています。
404not_foundその ID が存在しない、ID が別のアカウントのものである、または動画が expires_at を過ぎています。
409conflictオブジェクトが呼び出しを許可する状態にない(video_not_finished)、または Idempotency-Key が競合しています(リトライと冪等性を参照)。
422invalid_request_errorリクエストは有効でしたが、その結果が拒否されました(expansion_refused)。課金されません。
429rate_limit_errorモデルのすべてのプロバイダーが処理能力の上限に達している、アカウントがレート制限を超えている、またはお客様のアドレスからの API キー確認の失敗が多すぎます。Retry-After ヘッダーに示された時間の経過後に再試行してください。
500、501server_errorHyperouter の障害、またはエンドポイントが未実装です。課金されません。
503upstream_errorプロバイダーが失敗した、または時間内に応答しませんでした。code がどちらかを示します(all_venues_failed、upstream_error、timeout)。ヘッダー X-Upstream-Status には 502(失敗)または 504(タイムアウト)が入ります。

Hyperouter は 502 や 504 を返しません。これらは、エラーボディのない、エッジネットワークからの素のページとして届いてしまうためです。ゲートウェイであればこれらを返す場面では、下記のボディを持つ 503 が返り、ゲートウェイのステータスは X-Upstream-Status に入ります。

返される可能性のある code

codeStatus発生条件
unsupported_content_type400/v1/images/generations が multipart/form-data のボディを受け取りました。JSON を送信してください。param は null です。
request_too_large413multipart/form-data のアップロードが 50 MiB を超えています。大きなメディアは https URL で送信してください。
invalid_body400ボディのフィールド、またはクエリパラメーターが解析できない、型が誤っている、または許可された値の範囲外です。param が該当の項目を示します。
unknown_model400このエンドポイントにそのモデルが存在しない、または provider の指定の下で、そのモデルを処理できるプロバイダーがありません。
unsupported_parameter400他のモデルには存在するパラメーターが、このモデルでは使えません。モデル固有のパラメーターを参照してください。
invalid_combination400ベンダーがこれらのパラメーターの併用を認めていません(たとえば、参照メディアとキーフレームの併用)。
invalid_size400size が WIDTHxHEIGHT の形式でない、またはモデルで許可されていません。
too_many_images400n または入力画像の枚数が上限を超えています。
invalid_image、invalid_video400画像または動画の URL が公開ホストへの https ではありません。data: URL、http:// URL、IP アドレス、内部名などです。param が該当のフィールドを示します。
image_required400モデルに入力画像が必要ですが、送信されていません(または、編集専用のモデルに対して generations を呼び出しています)。
invalid_seconds400seconds がモデルで許可されていない、または URL で指定した動画に対して seconds がありません。
unsupported_operation400モデルがその操作(編集、延長、リミックス、または画像編集)に対応していません。
video_not_ready400元の動画がまだ完成していません。
context_length_exceeded400チャットのプロンプトと max_tokens が、モデルのコンテキストに収まりません。
content_rejected400ベンダーの安全フィルターが入力を拒否しました。
vendor_rejected400モデルがリクエストを無効として拒否しました。パラメーターと入力を確認してください。
clip_too_long400参照クリップとリクエストした seconds の合計が、モデルの上限(30 秒)を超えています。課金されません。
prompt_rejected400プロンプトが、プロンプト拡張モデルにその指示を出力させようとしています。課金されません。プロンプト拡張を参照してください。
expansion_refused422プロンプト拡張モデルの書き直しが拒否されたか、空でした。課金されません。プロンプト拡張を参照してください。
invalid_api_key401認証を参照してください。
insufficient_credits402課金と制限を参照してください。
account_suspended403アカウントが停止されています。
moderation_not_enabled403moderation: "low" がアカウントで有効になっていません。モデレーションを参照してください。
feature_not_enabled403prompt_expand に対応するモデルで、この機能がアカウントで有効になっていません。サポートチケットで有効化を申請してください。料金は確保されず、プロバイダーにも送信されません。プロンプト拡張を参照してください。
model_not_enabled403モデルを利用するには、アカウントへのアクセス許可が必要です。サポートチケットを作成して依頼してください。クレジットの確保も、プロバイダーへの送信も行われません。
not_found404そのようなオブジェクトはありません。
video_not_finished409作成中の動画を削除しようとしました。
venue_busy429チャットモデルのすべてのプロバイダーが、レートの上限に達しています。
rate_limited429アカウントが 1 分あたりのリクエスト数、または同時リクエスト数の上限を超えています。レート制限を参照してください。
too_many_auth_failures429お客様のアドレスから 1 分間に 30 件を超えるリクエストが、無効な API キーを使用しました。レート制限を参照してください。
all_venues_failed503正常なプロバイダーがない、またはすべてが失敗しました。
upstream_error503画像または動画のジョブがモデル側で失敗しました。課金されません。
internal、server_error、no_price500Hyperouter の障害です(no_price:現在そのモデルの価格を算出できません)。課金されません。
not_implemented501This endpoint is not implemented yet.
invalid_idempotency_key400Idempotency-Key ヘッダーが 255 文字を超えている、または印字可能な ASCII ではありません。リトライと冪等性を参照してください。
idempotency_key_reused409その Idempotency-Key は、別のリクエストですでに使用されています。
idempotency_key_in_use409この Idempotency-Key を持つリクエストが、まだ開始処理中です。同じキーで再試行してください。
idempotency_key_replayed409この Idempotency-Key を持つチャット補完がすでに実行されました。error.generation_id がその ID です。
timeout503同期画像が 90 秒以内に完成しませんでした。作成は継続中です。error.generation_id がポーリングに使う ID です。

リトライと冪等性

ネットワークエラーやタイムアウトからは、Hyperouter がリクエストを受信したかどうかはわかりません。再送すると、2 つ目のジョブが開始され、二重に支払うことになりかねません。Idempotency-Key を使うと、再送を安全に行えます。Hyperouter は再送を識別し、2 つ目のジョブを開始せず、2 回目のクレジット確保も行わずに、最初のリクエストの結果で応答します。

お金のかかるリクエストには、毎回キーを送信してください。新しいリクエストごとに、UUID v4 などのランダムな値を新たに生成します。その値をリクエストとともに保持し、同じリクエストを再送するときは毎回同じ値を送信します。

キーの送信

このヘッダーは、次のエンドポイントで受け付けられます。

Endpoint再送で返されるもの
POST /v1/images/generations、POST /v1/images/edits最初のリクエストの画像、または Prefer: respond-async の場合は同じ id を持つ 202
POST /v1/videos、/v1/videos/edits、/v1/videos/extensions、/v1/videos/{id}/remix最初のリクエストの Video オブジェクト(現在の状態)
POST /v1/chat/completions最初のリクエストの ID を伴う 409 idempotency_key_replayed(チャット補完を参照)

OpenAI SDK は、このヘッダーを自動では送信しません。追加ヘッダーとして渡してください。SDK は、自動リトライの際にもそのヘッダーを変更せずに再送します。

curl https://api.hyperouter.app/v1/images/generations \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -d '{"model": "x-ai/grok-imagine-image", "prompt": "A lighthouse at dusk", "n": 1}'

再送で返されるもの

送信内容Hyperouter の応答
新しいキー通常どおりリクエストを実行します。
同じキーと同じリクエスト(最初のリクエストが受理された後)上の表のとおり、最初のリクエストの結果を返します。2 つ目のジョブも、2 回目のクレジット確保も、2 回目の課金もありません。
同じキーと同じリクエスト(最初のリクエストがまだ受理処理中)最初のリクエストを待ち、上記のとおり応答します。最初のリクエストが 60 秒以内にジョブを開始しない場合は 409 idempotency_key_in_use を返します。同じキーで再試行してください。
同じキーと異なるリクエスト409 idempotency_key_reused。何も実行されません。新しいキーを使用してください。
同じキー(最初のリクエストがジョブの開始前に拒否された後。400、402、または x-should-retry: false なしで送信された 5xx)リクエストを新規として実行します。そのため、内容を修正して同じキーで再送できます。
同じキー(最初のリクエストから 30 分以上経過後)リクエストを新規として実行します。
255 文字を超える、または印字可能な ASCII でないキー400 invalid_idempotency_key。何も実行されません。

ルール

チャット補完

チャットの応答は再現されません。同じキーでの再送には、コード idempotency_key_replayed の 409 が返り、error.generation_id が最初のリクエストの ID になります。リクエストが再実行されたり、再度課金されたりすることはありません。ステータス、利用量、費用は、GET /v1/generations/{id} で最初のリクエストを照会して確認してください。最初のチャット補完が失敗し、課金されなかった場合は、そのキーは解放され、再送は新規リクエストとして実行されます。

{
  "error": {
    "message": "A request with this Idempotency-Key already ran as generation 019a1f3c-5b7e-7d21-9c4a-2e8f6b0d3a17. Chat replies are not replayed: GET /v1/generations/019a1f3c-5b7e-7d21-9c4a-2e8f6b0d3a17 for its record.",
    "type": "conflict",
    "code": "idempotency_key_replayed",
    "param": null,
    "generation_id": "019a1f3c-5b7e-7d21-9c4a-2e8f6b0d3a17"
  }
}

OpenAI SDK の自動リトライ

OpenAI SDK は、408、409、429、または 5xx の応答を、既定で 2 回再試行します。ただし、応答にレスポンスヘッダー x-should-retry: false が付いている場合は再試行しません。Hyperouter は、再試行すると 2 つ目のジョブや 2 回目の課金が発生するすべての応答に x-should-retry: false を付けて送信します。

429 と 409 idempotency_key_in_use、およびジョブが存在する前の 5xx には、このヘッダーを付けません。これらは再試行しても安全です。Idempotency-Key を付けていれば、どの再試行も安全です。

モデル

GET/v1/models

アカウントが現在呼び出せるすべてのモデルを、価格と対応機能とともに一覧表示します。有効なプロバイダーがないモデルは表示されません。一部のモデルは、アカウントへのアクセス許可が必要で、許可されると一覧に表示されます。このエンドポイントには API キーが必要で、そのキーのアカウントが呼び出せるモデルを一覧表示します。応答は、お客様のクライアント側のみで 60 秒間キャッシュできます。

パラメーター

なし。

レスポンス

{
  "data": [{
    "id": "x-ai/grok-4.7",
    "name": "Grok 4.7",
    "kind": "chat",
    "context_length": 500000,
    "architecture": { "input_modalities": ["text", "image"], "output_modalities": ["text"] },
    "pricing": {
      "prompt": "0.000002", "completion": "0.000006", "input_cache_read": "0.0000005",
      "request": "0", "image": "0", "video_second": "0"
    },
    "top_provider": { "context_length": 500000, "max_completion_tokens": 32768 },
    "response_modes": ["sync", "stream"],
    "supported_parameters": ["max_tokens", "temperature", "top_p", "stop", "stream", "tools", "tool_choice", "response_format", "seed", "frequency_penalty", "presence_penalty"],
    "extra_parameters": {}
  }]
}
FieldType説明
idstringモデル ID(<provider>/<name>)。たとえば x-ai/grok-4.7 や qwen/qwen-image-2.0 です。model として送信します。名前が変更されたモデルも、旧 ID で引き続き応答します。
response_modesstring[]モデルの応答方法です。sync(1 回の保持された応答)、async(Prefer: respond-async を送信して 202 を受け取り、ポーリングする)、stream("stream": true)があります。async のみを列挙するモデルには Prefer ヘッダーが必要で、stream は列挙されている場合にのみ使えます。動画は、ヘッダーの有無にかかわらず、Videos API では常に非同期です。
namestring表示名。
kindstringchat、image、または video。
context_lengthintegerトークン数で表したコンテキストウィンドウ。画像・動画モデルでは 0。
architectureobjectinput_modalities と output_modalities。出力は ["text"]、["image"]、または ["video"] です。
pricingobject of strings基本ティアでの、単位あたりの USD 価格(10 進数の文字列)。prompt と completion(トークンあたり)、input_cache_read(キャッシュされたトークンあたり)、request、image(画像 1 枚あたり)、video_second(動画 1 秒あたり)です。解像度で価格が決まる動画には、最も低い価格が表示されます。該当しない単位は "0" です。
top_providerobjectcontext_length と max_completion_tokens。
supported_parametersstring[]チャットでは、モデルが受け付ける OpenAI のパラメーター。画像・動画では、モデルが受け付ける共通機能(resolution、ratio、audio、seed、negative_prompt、first_frame、last_frame、reference_images、reference_videos、prompt_extend)。
operationsstring[]動画モデルのみ。モデルが対応する edit、extend、remix のそれぞれ。いずれにも対応しない場合は存在しません。
extra_parametersobjectモデル固有のトップレベルフィールドを名前ごとに示します。それぞれに type、values(許可される値。空は任意の値)、price_condition(そのフィールドが価格を変える)、description があります。モデル固有のパラメーターを参照してください。
curl https://api.hyperouter.app/v1/models \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY"

エラー

このエンドポイント固有のエラーはありません。

チャットモデル

100 万トークンあたりの価格:入力 / キャッシュされた入力 / 出力。

ModelContext価格
x-ai/grok-4.7500K$2.00 / $0.50 / $6.00
x-ai/grok-4.6500K$2.00 / $0.50 / $6.00
x-ai/grok-4.5500K$2.00 / $0.30 / $6.00
x-ai/grok-4.31M$1.25 / $0.20 / $2.50
x-ai/grok-build-0.1256K$1.00 / $0.20 / $2.00
deepseek/deepseek-v4.1-flash1M$0.15 / $0.003 / $0.60
deepseek/deepseek-v4.1-flash-10171M$0.15 / $0.003 / $0.60
openai/gpt-6-astra272K$10.00 / $1.00 / $50.00
openai/gpt-6.1-sol272K$2.00 / $0.10 / $10.00
z-ai/glm-5.31M$1.40 / $0.26 / $4.40
lumina/face-detect4K1 リクエストあたり $0.0013

x-ai/ のモデルでは、プロンプトが 200,000 トークン以上のリクエストは、全体が長コンテキスト料金で課金されます。この料金は上記の 2 倍です。deepseek/ のモデルは、プロンプトの長さにかかわらず料金が一定で、既定では回答の前に推論を行い(reasoning_effort: "none" で無効にできます)、その推論分も max_tokens に数えられ、上限は 384,000 です。z-ai/glm-5.3 は常に推論します。reasoning_effort は low、high、max のいずれかで、none は拒否されます。openai/ のモデルも推論を行い、プロンプトは最大 272,000 トークンです。

チャット補完

POST/v1/chat/completions

会話に対するモデルの応答を作成します。ボディは OpenAI の Chat Completions リクエストです。Hyperouter は models、provider、moderation を追加しています。

パラメーター

名前Type必須許可される値既定値説明
modelstringはいGET /v1/models のチャットモデル ID使用するモデル。たとえば x-ai/grok-4.7。
messagesobject[]はい空でないこと。ロールは system、user、assistant、toolこれまでの会話。モデルが画像に対応している場合は、画像(image_url パート)も受け付けます。
modelsstring[]いいえモデル ID は最大 5 件追加項目。model のすべてのプロバイダーが失敗した後に、順に試すフォールバックモデル。
providerobjectいいえ下記を参照追加項目。ルーティングの希望。
moderationstringいいえauto、lowauto追加項目。モデレーションを参照してください。
streambooleanいいえfalseサーバー送信イベントを返します。
stream_optionsobjectいいえ{"include_usage": true}include_usage を指定すると、ストリームは usage を含むチャンクで終わります。
max_tokens、max_completion_tokensintegerいいえ1 以上モデルの最大出力生成するトークン数の上限。リクエストにかかりうる最大額も決まり、Hyperouter は呼び出しの前にその額を確保します(課金を参照)。
nintegerいいえ1 〜 1281選択肢の数。
temperature、top_p、seed、frequency_penalty、presence_penalty、logit_biasnumber / integer / objectいいえOpenAI と同じサンプリングの制御。プロバイダーにそのまま渡されます。
stopstring | string[]いいえ生成を終了させる文字列。
tools、tool_choice、parallel_tool_callsobject[]、string | object、booleanいいえOpenAI の関数呼び出し形式関数呼び出し。型が function のツールのみ対応します。それ以外の型は 400 unsupported_parameter で拒否されます。
response_formatobjectいいえ{"type":"json_object"} または JSON スキーマ構造化出力。
reasoning_effort、logprobs、top_logprobs、userOpenAI と同じいいえモデルが対応している場合、プロバイダーにそのまま渡されます。

その他のフィールドは無視されます。各モデルが受け付ける内容は、GET /v1/models の各モデルの supported_parameters に正確に列挙されています。Grok 4.20 以降は logprobs と top_logprobs を無視するため、列挙されません。

provider オブジェクト

既定では、Hyperouter は各チャットリクエストを、そのモデルの価格が最も低い正常なプロバイダーに送信し、同価格の場合は直近の最初のトークンまでの時間が最も短いプロバイダーを選びます。エラーを繰り返すプロバイダーは、回復するまでスキップされます。provider オブジェクトは、OpenRouter のリクエスト形式に従っています。

名前Type必須許可される値既定値説明
sortstringいいえprice、latency、throughputpriceプロバイダーの順位付けの基準。
orderstring[]いいえプロバイダー名先に順番に試すプロバイダー。たとえば ["xai"]。プロバイダー名は、大文字小文字を問わない公開名(xAI、Qwen)、またはモデル ID の最初の部分(x-ai、qwen)です。
onlystring[]いいえプロバイダー名これらのプロバイダーのみにルーティングします。
ignorestring[]いいえプロバイダー名これらのプロバイダーには決してルーティングしません。

レスポンス

OpenAI のチャット補完です。id はリクエスト ID で、GET /v1/generations/{id} で照会できます。Hyperouter は provider(リクエストを処理したプロバイダーの公開名。たとえば xAI)と usage.cost(課金額。USD、JSON の数値)を追加します。

{
  "id": "0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21",
  "object": "chat.completion",
  "model": "x-ai/grok-4.7",
  "provider": "xAI",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "Hello! How can I help?" },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 8,
    "total_tokens": 17,
    "prompt_tokens_details": { "cached_tokens": 0 },
    "cost": 0.000066
  }
}

プロンプト書き換えモデルは、選択肢を 1 つ、トークン数 0 の usage、およびリクエストごとの固定の cost で応答します。

ストリーミング

"stream": true を指定すると、レスポンスは OpenAI のチャンク形式のサーバー送信イベントのストリームになり、data: [DONE] で終わります。stream_options.include_usage を設定すると、[DONE] の直前の最後のチャンクに、空の choices 配列と、cost を含む usage オブジェクト、および provider フィールドが含まれます。このチャンクを要求するかどうかにかかわらず、課金のために利用量は常に収集されます。

最初のトークンが届くまでの間、ストリームは接続を維持するために、コメント行 : processing を 15 秒ごとに送信します。SSE クライアントはコメントを無視します。

別のプロバイダーへのフォールバックは、最初のトークンが送信される前にのみ行われます。ストリームの途中でプロバイダーが失敗した場合、ストリームは data: {"error": {...}} に続けて data: [DONE] で終了し、すでに生成されたトークンが課金されます。

課金されるのは、読み取ったかどうかにかかわらず、プロバイダーが生成したトークンです。中断したストリームや、待つのをやめた応答は、プロバイダー側では停止されず、プロバイダーは回答の全体を生成して課金します。Hyperouter はその終わりまで(最大でさらに 5 分間)読み取り、その分を課金します。

リクエストを受け付けたプロバイダーは、それを実行中である可能性があります。その後プロバイダーが応答しなくなった場合(ストリームで 5 分間トークンがない、または max_tokens 分の応答にかかる時間を超えた場合)、または最初のトークンの前に応答が途切れた場合、リクエストは別のプロバイダーには送信されません。コード timeout または upstream_error と error.generation_id を伴う 503 が返り、確保した額が課金され、その記録には usage_estimated: true が付きます。

例

curl https://api.hyperouter.app/v1/chat/completions \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "x-ai/grok-4.7",
    "models": ["x-ai/grok-4.6"],
    "provider": { "sort": "latency" },
    "messages": [{ "role": "user", "content": "Hello" }]
  }'

エラー

Statustypecodeparam発生条件
400invalid_request_errorinvalid_body該当のフィールドボディが有効な JSON でない、または 32 MiB を超えている。model がない。models が 6 件以上ある。n が 1 〜 128 の範囲外。max_tokens が正の数でない。provider.sort が許可されていない。moderation が auto でも low でもない(moderation must be auto or low.)。messages が空。すべてのプロバイダーがリクエストを無効として拒否した場合にも返ります。
400invalid_request_errorunknown_modelmodel または modelsそのモデルがチャットモデルでない、または有効なプロバイダーがありません。
400invalid_request_errorunsupported_parametertools、response_format、messages または max_tokensモデルがツール、レスポンス形式、または画像に対応していない。ツールの型が function でない。または、モデルのどのプロバイダーも出力を制限できません。
400invalid_request_errorcontext_length_exceededmessagesプロンプトと max_tokens がモデルのコンテキストを超えています。
402insufficient_creditsinsufficient_creditsmax_tokens残高またはキーの上限が、リクエストにかかりうる最大額をまかなえません。メッセージに、まかなえるトークン数が示されます。
429rate_limit_errorvenue_busyモデルのすべてのプロバイダーが、レートの上限に達しています。
429rate_limit_errorrate_limitedアカウントが 1 分あたりのリクエスト数、または同時リクエスト数の上限を超えています(レート制限を参照)。クレジットの確保も、転送も行われません。
409conflictidempotency_key_replayed、idempotency_key_reused、idempotency_key_in_useリトライと冪等性を参照してください。
503upstream_errorall_venues_failed正常なプロバイダーがない、またはすべてが失敗しました。課金されません。
503upstream_errorupstream_errorプロバイダーがリクエストを受け付けた後、最初のトークンの前に応答が途切れました。確保した額が課金されます(ストリーミングを参照)。
503upstream_errortimeoutプロバイダーがリクエストを受け付けたものの、時間内に完了しませんでした。確保した額が課金されます(ストリーミングを参照)。
401、403、500認証を参照してください。

画像

POST/v1/images/generations
POST/v1/images/edits

どちらも OpenAI の Images API に従い、JSON のボディを受け付けます。/v1/images/edits は OpenAI の JSON 形式を受け付けます。画像は images で、1 〜 5 個の https URL です。OpenAI SDK の images.edit は画像ファイルを multipart/form-data で送信しますが、これも使えます。Hyperouter のエッジが各ファイル(PNG、JPEG、WebP。1 つあたり 20 MiB、1 リクエストあたり 50 MiB)を 3 日間保存し、プロバイダーが取得する推測不能な https://api.hyperouter.app/u/... URL にしたうえで、リクエストを JSON として実行します。動画ファイルは拒否されます(400 invalid_video)。動画は https URL で送信してください。どちらも、下記の共通機能と、モデル固有のパラメーターをトップレベルのフィールドとして受け付けます。

パラメーター

名前Type必須許可される値既定値説明
modelstringはい画像モデル ID使用するモデル。
promptstringGenerations:はい。Edits:モデルの要件による空白でないテキスト作成する内容。
imagesobject[]Edits:はい{"image_url": "https://..."} のオブジェクト 1 〜 5 個。モデルが受け付ける数まで。各 URL は公開ホストへの https で、data: URL、IP アドレス、内部名は不可です。file_id は受け付けません。編集する画像。各 URL はそのままプロバイダーに渡されるため、プロバイダーが取得できる必要があります。取得も読み取りもできない URL では、ジョブは vendor_rejected で失敗し、課金されません。決まった順序で画像を受け取るモデルについては、モデルリファレンスの備考に記載されています。
nintegerいいえ1 〜 10、かつモデルの上限以下1画像の枚数。
sizestringいいえWIDTHxHEIGHT。たとえば 1024x1024。モデルによっては、使えるサイズがより少ない場合があります1024x1024出力サイズ。
qualitystringいいえモデルが許可する値モデルにそのまま渡されます。
response_formatstringいいえurlurl画像の返され方:常に URL です。b64_json は 400 unsupported_parameter で拒否されます。
seedintegerいいえモデルが seed を列挙している場合出力を再現するためのシード。
negative_promptstringいいえモデルが列挙している場合避けたい内容。
prompt_extendbooleanいいえモデルが列挙している場合指定しない限りオフモデルにプロンプトを拡張させます。
prompt_expandbooleanいいえモデルが列挙している場合false追加項目。生成の前に Hyperouter がモデル向けにプロンプトを書き直します。プロンプト拡張を参照してください。
prompt_expand_modelstringいいえアカウントで呼び出せるチャットモデルの slugx-ai/grok-4.6追加項目。prompt_expand と併用:書き直しを行うモデル。prompt_expand: true がない場合は 400 invalid_body。プロンプト拡張を参照してください。
localestringいいえBCP 47 タグ(例:zh-CN)英語追加項目。prompt_expand と併用:モデルがその言語を話せる場合に、セリフを書く言語。
ratiostringいいえモデルが列挙している場合アスペクト比。
resolutionstringいいえ480p、720p、1080p、2K、4K(モデルが許可するもの)出力解像度。
modelsstring[]いいえ画像モデル ID追加項目。フォールバックモデル。
providerobjectいいえonly、ignore、order(プロバイダー名の配列)追加項目。ルーティングの希望。
moderationstringいいえauto、lowauto追加項目。モデレーションを参照してください。
モデル固有のフィールド宣言のとおり宣言のとおり宣言のとおりモデル固有のパラメーターを参照してください。

モデルが列挙していない共通機能(seed を持たないモデルでの seed など)は、400 unsupported_parameter で拒否されます。出力と価格が変わってしまうため、黙って無視されることはありません。

レスポンス

{
  "created": 1730000000,
  "data": [{ "url": "https://..." }],
  "usage": { "cost": 0.02 },
  "id": "0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21"
}
FieldType説明
createdintegerリクエストの Unix 時刻。
data[].urlstringresponse_format: "url" の場合:24 時間有効な署名付きリンク。GET /v1/generations/{id} を呼ぶと、新しい署名付きリンクが発行されます。
usage.costnumber課金額。USD、JSON の数値。
idstringリクエスト ID。GET /v1/generations/{id} で使用します。
expanded_promptstring | null追加項目。prompt_expand 使用時:生成に使われたプロンプト。拡張されなかった場合は null。

Hyperouter はすべての結果を 30 日間保存するため、リンクがベンダーを指すことはありません。30 日を過ぎても記録は残りますが、その outputs は空になります。

結果を待つ

例

curl https://api.hyperouter.app/v1/images/generations \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "x-ai/grok-imagine-image", "prompt": "A lighthouse at dusk", "n": 1}'
curl https://api.hyperouter.app/v1/images/edits \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "x-ai/grok-imagine-image", "prompt": "make it night",
       "images": [{"image_url": "https://example.com/photo.png"}]}'

エラー

Statuscodeparam発生条件
400unsupported_content_typeボディが multipart/form-data です:Send a JSON body; pictures and videos are https URLs.
400invalid_body該当のフィールドボディが有効な JSON でない。images が image_url を持つオブジェクトの配列でない。generations で prompt がない。n が 1 未満。response_format が url でない(response_format must be url.。b64_json は unsupported_parameter)。resolution が許可されていない。型付きフィールドの型が誤っている。moderation が auto でも low でもない。
400unknown_modelmodelその画像用のモデルが存在しない、または provider の希望に合うプロバイダーがありません。
400invalid_sizesizesize が 1024x1024 の形式でない、またはモデルで許可されていません。
400too_many_imagesn または imagesn が 10 を超えている、またはモデルの上限を超えている。画像が 6 枚以上ある。モデルが受け付ける数より画像が多い。
400image_requiredimages編集の画像がモデルの必要数より少ない、または編集専用のモデルに対して generations を呼び出しています(/v1/images/edits を使用してください)。
400unsupported_operationimagesそのモデルは画像を編集できません。
400unsupported_parameter該当のフィールドモデルがそのフィールドに対応していません。images[i].file_id。
400invalid_combination該当のフィールドベンダーがこれらのフィールドの併用を認めていません。
400async_requiredモデルは非同期でのみ応答します。Prefer: respond-async を送信してください。
400unsupported_parameterstreamresponse_modes に stream を含まないモデルで "stream": true が指定されました。
400invalid_imageimages[i].image_urlURL が公開ホストへの https ではありません。data: または http:// URL の場合のメッセージは images[i].image_url must be an https URL. です。
400content_rejectedベンダーの安全フィルターが入力を拒否しました:The request was rejected by a content safety filter.
400vendor_rejectedThe request was refused by the model. Check its parameters and inputs.
400invalid_idempotency_keyリトライと冪等性を参照してください。
402insufficient_credits残高またはキーの上限が、リクエストにかかりうる最大額をまかなえません。
409idempotency_key_reused、idempotency_key_in_useリトライと冪等性を参照してください。
429rate_limit_errorすべてのプロバイダーが処理能力の上限に達している(code なし)、またはアカウントが 1 分あたりのリクエスト数もしくは同時リクエスト数の上限を超えています(code: rate_limited。レート制限を参照)。
503upstream_errorThe model failed to produce a result. You were not charged.
503provider_busyプロバイダーが約 2 分間満杯のままで、ジョブを受け付けませんでした。後で再試行してください。課金されていません。
500server_error、no_priceHyperouter の障害、または現在そのモデルの価格を算出できません。画像の作成後の 500 には x-should-retry: false が付きます。
503timeout画像が 90 秒以内に完成しませんでした。作成は継続中です。error.generation_id がポーリングに使う ID です。x-should-retry: false が付きます。

失敗したジョブの message の末尾には、プロバイダーが理由を返した場合、Provider: の後にその理由が付きます。これにより、プロンプトの拒否、プロバイダーの混雑、障害を区別できます。理由に含まれる URL は <url> に置き換えられます。

画像モデル

Model内容価格
x-ai/grok-imagine-image生成と編集。最大 10 枚の画像を生成、最大 5 枚の画像を入力。1 枚あたり $0.02
x-ai/grok-imagine-image-2.0生成と編集(上記と同じ)。1 枚あたり $0.04 から
qwen/qwen-image-2.0生成と編集(入力画像 1 〜 3 枚)。n は 1 〜 6。1 枚あたり $0.035
bytedance/seedream-5.0-flash生成と編集(入力画像 1 〜 10 枚)。1 リクエストにつき 2K 画像 1 枚、透かしなし。1 枚あたり $0.018
bytedance/seedream-5.0-lite生成と編集(上記と同じ)。1 枚あたり $0.035

一部のモデルは、アカウントへのアクセス許可が必要です。ダッシュボードのモデルリファレンスには、アカウントが呼び出せるすべてのモデルが、パラメーター、価格、備考とともに掲載されています。

動画

動画は OpenAI の Videos API に従っています。動画はジョブです。作成、編集、延長、リミックスの呼び出しは、ステータス queued の Video オブジェクトとともに、すぐに 200 で応答します。ステータスが completed になるまで GET /v1/videos/{id} をポーリングするか、Webhook を受け取ります。Prefer はここでは何も変えません。動画は常に非同期です。

Endpoint内容
POST /v1/videosプロンプトから動画を作成します。input_reference は任意です。
POST /v1/videos/edits完成した動画を編集、またはアップスケールします。operations に edit を列挙するモデルのみ。
POST /v1/videos/extensions完成した動画を延長します。extend を列挙するモデルのみ。
POST /v1/videos/{id}/remix完成した動画に新しいプロンプトを適用します。モデルは同じです。remix を列挙するモデルのみ。
GET /v1/videos動画を一覧表示します。
GET /v1/videos/{id}Video オブジェクト。
GET /v1/videos/{id}/contentMP4 またはサムネイル。
DELETE /v1/videos/{id}動画を削除します。

動画を作成する

POST/v1/videos

ボディはすべての動画エンドポイントで JSON です。OpenAI SDK の videos.create が input_reference の画像ファイルを付けて送る形式も受け付け、ファイルは画像の編集と同じ扱いになります。画像と動画はすべて公開ホストへの https URL で、そのままプロバイダーに渡されます。プロバイダーが取得できる必要があり、取得も読み取りもできない URL では、動画は vendor_rejected で失敗し、課金されません。data: URL、http:// URL、IP アドレス、内部名は 400 invalid_image または 400 invalid_video で拒否されます。multipart/form-data のボディは 400 unsupported_content_type で拒否されます。

名前Type必須許可される値既定値説明
modelstringはい動画モデル ID使用するモデル。
promptstringはい空白でないテキスト作成する内容。
secondsstring | integerいいえモデルが許可する値モデルが最初に許可する値。なければ 4 秒(モデルの最大値がそれより小さい場合はその最大値)動画の長さ。"8" と 8 は同じです。
sizestringいいえWIDTHxHEIGHTresolution を送信しない限り、高さによって解像度が決まります。480 以下は 480p、720 以下は 720p、1080 以下は 1080p、1440 以下は 2K、それを超えると 4K です。モデルがその解像度を許可している必要があります。
input_referenceobjectモデルが画像を必要とする場合{"image_url": "https://..."}。https URL動画の最初の画像。file_id は受け付けません。
resolutionstringいいえ480p、720p、1080p、2K、4K(モデルが許可するもの)モデルが最初に許可する解像度出力解像度。価格が変わります。
ratiostringいいえモデルが列挙している場合アスペクト比。
audiobooleanいいえモデルが音声を生成する場合false音声を生成します。
seedintegerいいえモデルが列挙している場合出力を再現するためのシード。
negative_promptstringいいえモデルが列挙している場合避けたい内容。
prompt_extendbooleanいいえモデルが列挙している場合指定しない限りオフモデルにプロンプトを拡張させます。
prompt_expand_modelstringいいえ画像と同じx-ai/grok-4.6追加項目。prompt_expand と併用:書き直しを行うモデル。プロンプト拡張を参照してください。
prompt_expand、localeboolean、stringいいえ画像と同じfalse追加項目。プロンプト拡張を参照してください。
first_frame、last_framestringいいえ画像の https URLキーフレーム。
reference_images、reference_videosstring[]いいえhttps URL参照メディア。ベンダーの仕様により、キーフレームとは併用できません。
models、providerstring[]、objectいいえ画像と同じ追加項目。フォールバックモデルとルーティングの希望。
moderationstringいいえauto、lowauto追加項目。モデレーションを参照してください。
モデル固有のフィールド宣言のとおり宣言のとおり宣言のとおりモデル固有のパラメーターを参照してください。

編集、延長、リミックス

Endpointボディ(JSON)
POST /v1/videos/editsmodel、video(必須)、prompt、resolution、および共通機能。video は {"id": "<your video id>"}(お客様の完成済みの動画)または {"url": "https://..."} です。ID を送信した場合、model の既定値は元の動画のモデルです。
POST /v1/videos/extensionsmodel、video(必須)、prompt、seconds。追加する秒数は、作成の場合と同じルールに従います。
POST /v1/videos/{id}/remixprompt(必須)。モデルは元の動画のものです。

元の動画は完成している必要があります。URL で指定した動画は https URL であり、画像と同様にそのままプロバイダーに渡されます。動画を URL で指定する場合、固定の最大値を持たないモデルでは seconds が必要です。

一覧表示、取得、ダウンロード、削除

Endpointパラメーター応答
GET /v1/videosクエリ:after(動画 ID)、limit(1 〜 100、既定値 20)、order(desc が既定、または asc){"object":"list","data":[Video],"first_id","last_id","has_more"}。expires_at を過ぎた動画は含まれません。
GET /v1/videos/{id}Video オブジェクト。
GET /v1/videos/{id}/contentクエリ:variant(video が既定、または thumbnail)バイト列(video/mp4、またはサムネイルの型)への署名付きリンクへの 302 Found。リンクの有効期間は 15 分です。HTTP クライアントと OpenAI SDK はこれに従います。完成前、またはサムネイルがない場合は 404 not_found。
DELETE /v1/videos/{id}{"id","object":"video.deleted","deleted":true}。ジョブの実行中は 409 video_not_finished を返します。削除済みの動画には 404 を返します。

Video オブジェクト

{
  "id": "0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21",
  "object": "video",
  "model": "x-ai/grok-imagine-video",
  "status": "completed",
  "progress": 100,
  "prompt": null,
  "seconds": "8",
  "size": "",
  "created_at": 1730000000,
  "completed_at": 1730000137,
  "expires_at": 1732592000,
  "error": null,
  "remixed_from_video_id": null,
  "usage": { "cost": 0.4, "seconds": 8 }
}
FieldType説明
statusstringqueued、in_progress、completed、または failed。
progressinteger0 〜 100。
promptstring | nullプロンプトが返されるのは、ジョブの実行中のみです。完了したオブジェクトでは null が返ります。
secondsstring動画の長さ。OpenAI と同様に文字列です。
sizestring送信した size(指定した場合)。
expires_atintegerUnix 時刻:created_at の 30 日後。この時刻を過ぎると、GET /v1/videos/{id} と /content は 404 not_found を返し、動画は一覧から除外されます。保存しておきたいものは、それまでにダウンロードしてください。
errorobject | nullジョブが失敗した場合:{"code", "message"}。たとえば content_rejected。
remixed_from_video_idstring | null編集、延長、リミックスの元の動画。
usageobject | nullジョブが精算された時点で設定されます:cost(USD、JSON の数値)と seconds(整数)。
expanded_promptstring | null追加項目。prompt_expand 使用時:ジョブ送信後、生成に使われたプロンプト。30 日間保持され、その後は null。

動画は、リクエストした秒数に基づいて課金されます。金額は事前に確保され、ジョブが失敗した場合は全額が解放されます。

例:x-ai/grok-imagine-video

モデル x-ai/grok-imagine-video は、プロンプトから動画を作成します。開始画像は任意です。seconds は 1 〜 15 です。価格:1 秒あたり $0.050。

curl https://api.hyperouter.app/v1/videos \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "x-ai/grok-imagine-video",
    "prompt": "She turns to the camera and smiles",
    "input_reference": { "image_url": "https://example.com/portrait.png" },
    "seconds": 8
  }'
{
  "id": "0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21",
  "object": "video",
  "model": "x-ai/grok-imagine-video",
  "status": "queued",
  "progress": 0,
  "prompt": "She turns to the camera and smiles",
  "seconds": "8",
  "size": "",
  "created_at": 1730000000,
  "completed_at": null,
  "expires_at": 1732592000,
  "error": null,
  "remixed_from_video_id": null,
  "usage": null
}

このジョブの課金額は 8 × $0.050 = $0.40 なので、精算後のオブジェクトには "usage": {"cost": 0.4, "seconds": 8} と表示されます。

エラー

Statuscodeparam発生条件
400unsupported_content_typeボディが multipart/form-data です:Send a JSON body; pictures and videos are https URLs.
400invalid_body該当のフィールドボディが有効な JSON でない。prompt が空白。video が id または url を持つオブジェクトでない。input_reference が image_url を持つオブジェクトでない。limit、after、variant が有効でない。型付きフィールドの型が誤っている。resolution が許可されていない。moderation が auto でも low でもない。
400unknown_modelmodel動画用のモデルが存在しません。
400invalid_secondssecondsseconds がモデルで許可されていない(メッセージに許可される値が列挙されます)、または URL で指定した動画に必要です。
400invalid_sizesizesize が 1280x720 の形式ではありません。
400unsupported_parameter該当のフィールドモデルがそのフィールドに対応していない。その解像度が利用できない(resolution または size)。音声に対応しないモデルでの audio。input_reference.file_id。
400unsupported_operationmodelモデルがその操作(編集、延長、リミックス)を列挙していません。
400invalid_combination該当のフィールドベンダーの仕様により、参照メディアとキーフレームの併用はできません。
400image_requiredinput_referenceThis model needs an input_reference picture.
400video_not_readyvideo元の動画が完成していません。
400invalid_image、invalid_video該当のフィールド画像の URL(invalid_image)または動画の URL(invalid_video:reference_videos[i]、video.url)が公開ホストへの https ではありません。たとえば data: や http:// の URL で、メッセージは <field> must be an https URL. です。param は該当のフィールドで、たとえば input_reference.image_url、first_frame、reference_images[1] です。URL はそのままプロバイダーに渡されます。プロバイダーが取得も読み取りもできない URL では、動画は vendor_rejected で失敗し、課金されません。
400clip_too_long参照クリップとリクエストした seconds の合計が、モデルの上限を超えています:The reference clip plus the requested seconds run past the model's limit of 30 s. Send a shorter clip or fewer seconds. You were not charged. Video オブジェクトの error.code に表示されます。
400content_rejected、vendor_rejectedジョブがベンダー側で失敗しました。Video オブジェクトの error.code に表示されます。
402insufficient_credits残高またはキーの上限が、確保する額をまかなえません。
404not_foundそのような動画がない、お客様のものではない、削除された、expires_at を過ぎている、またはコンテンツの準備ができていません。
409video_not_finished作成中の動画を削除しようとしました。
409idempotency_key_reused、idempotency_key_in_useリトライと冪等性を参照してください。
429、503、500画像と同じです。動画の作成後の 500 には x-should-retry: false が付きます。

動画モデル

Model動画 1 秒あたりの価格備考
x-ai/grok-imagine-video$0.050 からテキスト、画像、動画を入力。最大 15 秒。edit に対応。
x-ai/grok-imagine-video-1.5$0.080 からテキスト、画像、参照を入力。最大 15 秒。
x-ai/grok-imagine-video-1.5-lite$0.020 から上記と同じで、より小型で低価格。
bytedance/seedance-2.0$0.0431892 からテキスト、最初と最後のフレーム、参照画像を入力。音声は任意。4 〜 15 秒。480p、720p、1080p、4K。表示価格は 480p のものです。
bytedance/seedance-2.0-fast$0.0331452 からテキスト、最初と最後のフレーム、参照画像を入力。音声は任意。4 〜 15 秒。480p、720p。表示価格は 480p のものです。
bytedance/seedance-2.0-mini$0.0210924 からテキスト、最初と最後のフレーム、参照画像を入力。音声は任意。4 〜 15 秒。480p、720p。表示価格は 480p のものです。
bytedance/seedance-2.5$0.0642816 からテキスト、最初と最後のフレーム、参照画像を入力。音声は任意。4 〜 15 秒。480p、720p、1080p。表示価格は 480p のものです。
lumina/berry-1.0$0.050 からテキスト、画像、参照を入力。音声は任意。最大 30 秒。480p、720p、1080p。表示価格は 480p のものです。
minimax/minimax-h3$0.080 からテキスト、最初と最後のフレーム、参照画像を入力。音声なし。4 〜 15 秒、768p または 2K。
alibaba/wan3.0$0.050 からテキスト、画像、参照を入力。音声は任意。最大 30 秒。480p、720p、1080p。表示価格は 480p のものです。

ダッシュボードのモデルリファレンスには、アカウントが呼び出せるすべての動画モデルが掲載されています。

生成履歴

GET/v1/generations/{id}

お客様のリクエスト(種類を問いません)の記録を返します。ステータス、利用量、課金額、所要時間、そして画像と動画では出力への署名付きリンクが含まれます。Prefer: respond-async を付けて送信した画像リクエストのポーリングや、利用額の突き合わせに使用します。プロンプトと生成テキストは記録に含まれません。Hyperouter は、法的義務を果たすためにのみそれらを暗号化して 180 日間保管しており、API もダッシュボードのページもそれらを返しません(プライバシーポリシー)。

パラメーター

名前場所Type必須説明
idpathstring (UUID)はいチャット補完、画像の応答、または Video オブジェクトの id。

レスポンス

{
  "data": {
    "id": "0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21",
    "kind": "chat",
    "model": "x-ai/grok-4.7",
    "provider_name": "xAI",
    "status": "done",
    "created_at": "2026-10-24T08:12:00Z",
    "finished_at": "2026-10-24T08:12:02Z",
    "usage": {
      "input_tokens": 120, "output_tokens": 300, "cache_read_tokens": 0,
      "image": 0, "video_seconds": 0, "cost": 0.00204
    },
    "usage_estimated": false,
    "ttft_ms": 320,
    "latency_ms": 2100,
    "error": null,
    "outputs": []
  }
}
FieldType説明
kindstringchat、image、または video。
provider_namestring | null完了したチャットリクエストを処理したプロバイダー。画像と動画では null。
statusstringqueued、submitting、running、done、または failed。
created_at、finished_atstring | nullRFC 3339 の UTC。finished_at は、リクエストが終了するまで null です。
usageobjectinput_tokens、output_tokens、cache_read_tokens、image、video_seconds、cost。cost は課金額(USD、JSON の数値)です。数値は、リクエストが完了するまで 0 です。
usage_estimatedbooleanプロバイダーがトークン数を送ってこなかったため、Hyperouter が数えた場合は true。
ttft_ms、latency_msinteger | null最初のトークンまでの時間と合計時間(ミリ秒)。
errorobject | nullリクエストが失敗した場合は {"code", "message"}。
outputsobject[]画像と動画の場合:[{"url", "expires_at"}]。24 時間有効な署名付きリンク。リクエストから 30 日間利用でき、その後は outputs が空になりますが、記録は残ります。チャットでは常に空です。
expanded_promptstring | nullprompt_expand 付きで送信された画像と動画の場合:生成に使われたプロンプト。リクエストから 30 日間保持され、その後は null。
curl https://api.hyperouter.app/v1/generations/0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21 \
  -H "Authorization: Bearer $HYPEROUTER_API_KEY"

エラー

Statustypecodeparam発生条件
404not_foundnot_foundidNo generation with that id. ID が UUID でない、存在しない、別のアカウントのものである、または削除されています。
500server_errorserver_errorHyperouter が記録を読み取れない、または署名できませんでした。
401、403認証を参照してください。

モデル固有のパラメーター

モデルによっては、他のモデルにはないフィールドを持つものがあります。これらは追加パラメーターです。他のフィールドと同様に、リクエストボディのトップレベルのフィールドとして送信します。どの OpenAI SDK でも送信できます(Python では extra_body、JavaScript では追加のプロパティ)。

GET /v1/models は、各モデルの追加パラメーターを extra_parameters に列挙します。各エントリーには次の項目があります。

FieldType説明
typestringstring、integer、number、boolean、array、object のいずれか。
valuesarray許可される値。空の場合は、その型の任意の値を意味します。
price_conditionbooleanそのフィールドが価格を変える場合は true。
descriptionstringそのフィールドの働き。

ダッシュボードのモデルリファレンスには、アカウントが呼び出せる各モデルの追加パラメーターが記載されています。

ルール

共通機能

これらのフィールドは、対応するすべてのモデルで同じ名前です。モデルが受け付けるものは supported_parameters に列挙されます。

Field意味
resolution480p、720p、1080p、2K、4K(モデルが許可するもの)。
ratio、seed、negative_prompt、prompt_extend、audio名前のとおりです。audio と prompt_extend は、指定しない限りオフです。
first_frame、last_frame動画のキーフレーム。
reference_images、reference_videos動画と画像編集の参照メディア。

プロンプト拡張

"prompt_expand": true を指定すると、生成の前に Hyperouter がモデル向けにプロンプトを書き直します。画像ではより詳しい描写に、動画では秒ごとの台本になります。既定ではオフで、プロンプトは書いたとおりに送られます。受け付けるのは supported_parameters に prompt_expand を含むモデルだけで、画像または動画の作成にのみ使えます。それ以外のモデルや、動画の編集・延長・リミックスでは 400 unsupported_parameter で拒否されます。また、prompt_extend: true とは併用できません(400 invalid_body)。

プロンプト拡張は、Hyperouter がアカウントで有効にした後に使えます。サポートチケットで申請してください。それまでは GET /v1/models がどのモデルにも prompt_expand を表示せず、対応するモデルに prompt_expand: true を送ると 403 permission_error、code feature_not_enabled、param prompt_expand が返ります。料金は確保されず、プロバイダーにも送信されません。

書き直しをチャットモデルとして呼び出す

プロンプト拡張が有効なアカウントでは、生成は行わずに書き直しの結果を返すチャットモデルも使えます。モデル名はお使いのモデルリファレンスに記載されています。POST /v1/chat/completions で、user メッセージを 1 つだけ送って呼び出します。そのテキストがプロンプトで、image_url パート(https URL、最大 5 個)が画像です。data: や http:// の URL は 400 invalid_image で、param は messages です。target_model は必須で、prompt_expand を列挙しているモデルを指定します。seconds、locale、negative_prompt は省略できます。画像付きの動画ターゲットは、その画像を最初のフレームとして書かれます。ストリーミングには対応しておらず(stream: true は 400 unsupported_parameter)、それ以外のメッセージは system メッセージも含めて 400 invalid_body になります。

このチャットモデルは常に x-ai/grok-4.6 を使い、prompt_expand_model は受け付けません。choices[0].message.content は JSON 文字列で、{"prompt": "...", "negative_prompt": "..."} に加え、動画ターゲットでは "beats"(1 秒につき 1 行)を含みます。料金は x-ai/grok-4.6 のトークン価格で、usage に表示されます。モデルの指示を出力させようとするプロンプトは 400 prompt_rejected、書き直しが拒否されたか空だった場合は 422 expansion_refused、失敗した場合は 503 upstream_error を返します。いずれも課金されません。

モデレーション

moderation フィールドは OpenAI のものです。/v1/chat/completions、/v1/images/generations、/v1/images/edits、および /v1/videos とその編集、延長、リミックスの呼び出しで使えます。

値意味
auto(既定値)ベンダー独自のスクリーニングが適用されます。Hyperouter は何も追加で送信しません。
lowプロバイダーがスクリーニングのオプトアウトを備えているモデルでは、Hyperouter がそのオプトアウトを送信します。それ以外のモデルでは、OpenAI と同様に、low はエラーなく無視されます。各モデルにオプトアウトがあるかどうかは、モデルリファレンスの各モデルの項目に記載しています。moderation はリクエストボディで送信してください。プロバイダー独自のスクリーニング用ヘッダーやフィールドは、これらのエンドポイントでは転送されません。

それ以外の値は拒否されます。400 invalid_request_error、コード invalid_body、param は moderation、メッセージは moderation must be auto or low. です。

low は、Hyperouter が有効にした後にアカウントで利用できます。依頼するには、サポートチケットを作成してください。有効になるまでは、low を指定したリクエストには 403 permission_error、コード moderation_not_enabled、param は moderation が返り、プロバイダーには送信されません。

{
  "model": "qwen/qwen-image-2.0",
  "prompt": "...",
  "moderation": "low"
}

オプトアウトが使用されたかどうかは、レスポンスには示されません。利用規約のポリシーは引き続き適用されます。ベンダーのフィルターが拒否したリクエストは 400 content_rejected で失敗し、課金されません。

Webhook

ポーリングの代わりに、ジョブが終了したときに、お客様のエンドポイントがリクエストを受け取れます。エンドポイントはダッシュボードで追加します。形式は OpenAI の Webhook と同じで、Standard Webhooks 方式で署名されるため、OpenAI SDK で検証できます。

イベント送信されるタイミング
video.completed、video.failed動画のジョブが終了したとき。
image.completed、image.failedPrefer: respond-async を付けて送信した画像のジョブが終了したとき。
raw.completed、raw.failedraw 呼び出しのタスクが終了したとき(raw 呼び出しが有効なアカウント):課金された、または確保が解除された。結果をその場で返す raw 呼び出しは送信しません。

ペイロードに含まれるのは ID のみで、結果、プロンプト、課金額は含まれません。オブジェクトは API キーで取得してください。data.id は、GET /v1/videos/{id} と GET /v1/generations/{id} が受け付ける ID です。raw タスクの場合は、作成時に返された X-Generation-Id です。

{
  "id": "evt_0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21",
  "object": "event",
  "type": "video.completed",
  "created_at": 1761300000,
  "data": { "id": "0194f2c4-7a1e-7b3c-9d02-5f6a1c0e8b21" }
}

ヘッダーと検証

各配信は、content-type: application/json と次のヘッダーを持つ POST です。

署名用のシークレットは whsec_ で始まります。エンドポイントを作成したとき、およびローテーションしたときに、一度だけ表示されます。解析する前の、生のリクエストボディを検証してください。

// Node, with the OpenAI SDK
const event = client.webhooks.unwrap(rawBody, req.headers, process.env.HYPEROUTER_WEBHOOK_SECRET);
if (event.type === "video.completed") {
  const video = await client.videos.retrieve(event.data.id);
}

署名の検証に失敗すると、unwrap は例外を投げます。そのようなリクエストには、エラーのステータスで応答してください。後続の呼び出しでは、この API の他の部分と同じベース URL を使用します。

エンドポイント、リトライ、制限

MCP サーバー

POSThttps://api.hyperouter.app/mcp

AI アシスタントは、Model Context Protocol(MCP)を通じて、お客様の Hyperouter アカウントを操作できます。このサーバーが管理するのはダッシュボードの機能で、API キー、アクティビティ、クレジット、チケット、Webhook、モデル一覧です。モデルは実行しません。モデルの呼び出しは、引き続き API キーを使って /v1 に送信します。

サーバーは Streamable HTTP と JSON-RPC 2.0 に対応しています。対応する MCP のリビジョンは 2025-11-25 と 2025-06-18 です。サーバーはステートレスで、セッションはなく、GET /mcp には 405 を返します。

アクセストークン

MCP クライアントは、API キーではなく、ダッシュボードのアクセストークンで認証します。

スコープトークンが呼び出せるツール
readデータの読み取りのみを行うツール。
writeユーザーが使用する権限を持つすべてのツール。

トークンはベアラートークンとして送信します。

Authorization: Bearer hr_dt_...

プロトコル

メソッド応答
initializeプロトコルのバージョン(クライアントのバージョン。対応していない場合は 2025-11-25)、tools ケイパビリティ、サーバー情報。
ping空の結果。
tools/listトークンのユーザーとスコープが許可するツール。
tools/call1 つのツールの結果。

通知、またはサーバーへのレスポンスには、ボディなしの 202 を返します。JSON-RPC のバッチはエラー -32600 で拒否されます。メッセージは 1 MiB を超えてはなりません。不明な MCP-Protocol-Version ヘッダーには 400 を返します。ブラウザーからのリクエストは https://dash.hyperouter.app からのものである必要があります。Origin ヘッダーを送信しないクライアントは影響を受けません。

curl https://api.hyperouter.app/mcp \
  -H "Authorization: Bearer $HYPEROUTER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

ツール

tools/list は現在のツールセットを返します。各ツールは 1 つのダッシュボードのルートに対応し、引数用の JSON Schema を持ちます。ツールが対象とするのは次のとおりです。

ツールは、ルートの JSON ボディを格納した 1 つのテキストコンテンツアイテムで応答します。ルートが失敗した場合、結果には isError: true と、<message> (<code>, HTTP <status>) というテキストが入ります。不明なツール、またはお客様のトークンから見えないツールは、JSON-RPC エラー -32602 になります。

承認

アカウントへのクレジット付与のような機密性の高い書き込みは、その場では実行されません。ツールはそれを実行せず、status を approval_required にし、ダッシュボード上の approval_url を添えて応答します。ユーザーはそのリンクを開き、第 2 要素で確認して、操作を承認します。承認は 24 時間で失効します。ユーザーは拒否することもできます。

課金と制限

レート制限

各アカウントには、1 分あたりのリクエスト数と、同時に処理中のリクエスト数の上限があります。どちらもアカウントのすべての API キーを合算してカウントされ、処理を開始するすべてのリクエストに適用されます。チャット補完、画像と動画の作成、raw の作成が対象です。結果の読み取り(GET /v1/generations/{id}、GET /v1/videos…、raw のタスクのポーリング)はカウントされません。raw のポーリングはプロバイダーごとに別にカウントされ、上限は 1 分あたりのリクエスト数と同じです。

ティアは、チャージ手数料を差し引く前の累計チャージ額に応じて決まります。

ティア累計チャージ額1 分あたりのリクエスト数同時リクエスト数
1$10 未満6010
2$10 以上30030
3$100 以上1,200100
4$1,000 以上6,000300

現在の上限は Credits ページで確認できます。これらは既定値で、スタッフはプラットフォーム全体または 1 つのアカウントについて変更でき、変更は 1 分以内に反映されます。

いずれかの上限を超えると、クレジットの確保も転送も行われる前にリクエストが拒否され、429、type: rate_limit_error、code: rate_limited、および秒数を示す Retry-After ヘッダーが返ります。メッセージには、到達した上限が示されます。拒否されたリクエストも、その 1 分間にカウントされます。ストリームを含め、処理中のリクエストは、終了するまでカウントされます。

キーの推測に対する防御として、Hyperouter は失敗した API キーの確認をクライアントのアドレスごとに数えます。1 分間に 30 回を超えると、そのアドレスからのすべての /v1 ルートが 15 分間ブロックされ、Retry-After を伴う 429、rate_limit_error、too_many_auth_failures が返ります。有効なキーを使っても、ブロックは解除されません。

サポート

課金、チャージ、API に関するご質問は、ダッシュボードでチケットを作成してください。スタッフが同じスレッドで返信します。[email protected] 宛てにご連絡いただくこともできます。特定のリクエストについて報告する際は、レスポンスの id を添えてください。