コンテンツにスキップ

OpenAI 動画形式

POST /v1/videos と GET /v1/videos/{task_id} は、動画生成タスクの作成と動画生成タスクの取得で説明した同じ非同期タスク API の OpenAI 動画方言です。送信本文は同じフィールドを使い、違いはレスポンスです。送信レスポンスも GET も、タスクレコードではなく OpenAI video オブジェクトを返します。Sora モデルはこの形式を使い、OpenAI SDK の動画クライアントもこの形式を期待します。

メソッドパス用途
POST/v1/videos生成タスクを送信する
GET/v1/videos/{task_id}タスクを OpenAI video オブジェクトとして読む
GET/v1/videos/{task_id}/content完成した動画のバイト列をダウンロードする
POST/v1/videos/{video_id}/remix既存の動画から派生したタスクを作成する
Terminal window
curl https://api.routeapi.ai/v1/videos \
-H "Authorization: Bearer $ROUTEAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "A calico cat playing a piano on stage",
"size": "1280x720",
"seconds": "4"
}'

リクエストフィールドは動画生成タスクの作成に記載のものです。model、prompt、seconds / duration、size、input_reference、images、metadata。input_reference は参照画像に対応したモデルが読みます。multipart/form-data も受け付けるため、ファイルを直接アップロードできます:

Terminal window
curl https://api.routeapi.ai/v1/videos \
-H "Authorization: Bearer $ROUTEAPI_KEY" \
-F "model=sora-2" \
-F "prompt=A calico cat playing a piano on stage" \
-F "size=1280x720" \
-F "seconds=4" \
-F "input_reference=@cat.jpg"
{
"id": "task_G2RdWGt4t1nck5fYqTjwREKJo8Ze4RAV",
"task_id": "task_G2RdWGt4t1nck5fYqTjwREKJo8Ze4RAV",
"object": "video",
"model": "sora-2",
"status": "queued",
"progress": 0,
"created_at": 1792048458
}

id が RouteAPI のタスク ID です。task_id は互換用のエイリアスで、将来のレスポンスでは省略される可能性があるため id を読んでください。以降のポーリングとダウンロードには必ずこの id を使ってください。保存された上流ペイロード内に現れる ID は、ポーリングやダウンロードに使う値ではありません。

送信レスポンスには、適用された課金倍率を含む X-New-Api-Other-Ratios ヘッダーも付きます。例えば Sora リクエストでは {"seconds":5,"size":1} です。

GET /v1/videos/{task_id}
Terminal window
curl https://api.routeapi.ai/v1/videos/task_G2RdWGt4t1nck5fYqTjwREKJo8Ze4RAV \
-H "Authorization: Bearer $ROUTEAPI_KEY"
{
"id": "task_G2RdWGt4t1nck5fYqTjwREKJo8Ze4RAV",
"task_id": "task_G2RdWGt4t1nck5fYqTjwREKJo8Ze4RAV",
"object": "video",
"model": "seedance-2.0",
"status": "completed",
"progress": 100,
"created_at": 1792048458,
"completed_at": 1792048569,
"metadata": { "url": "https://...mp4" }
}
フィールド説明
idRouteAPI のタスク ID
object常に "video"
modelタスクを実行したモデル
statusqueued、in_progress、completed、failed のいずれか
progress0〜100 の整数
created_at / completed_atUnix 秒。アダプタによっては completed_at をその行の最終更新時刻で埋めるため、完了判定は status で行い、このフィールドに依存しないでください
expires_at、size、seconds、remixed_from_video_idプロバイダが返した場合のみ現れます
metadata.urlvideo オブジェクトで URL を報告するプロバイダ向けの動画 URL。プロバイダに関係なくバイト列が必要な場合は /v1/videos/{task_id}/content を使用してください
error.code / error.messageタスクが失敗したときに設定されます。例:Seedance では expired や cancelled

上流ペイロード自体のフィールド(expires_at や size など)は、プロバイダが返した場合にのみ現れます。上のセットが RouteAPI がマッピングを保証するものです。Gemini と Vertex のチャネルでは、このオブジェクトを構築する前にタスクのステータスがプロバイダから更新されます。

タスクは API Key のユーザーにスコープされます。別のアカウントに属する id は、タスクレコードのエンドポイントと同様に task_not_exist として報告されます。

コンテンツをダウンロードする

Section titled “コンテンツをダウンロードする”
GET /v1/videos/{task_id}/content

動画のバイト列を RouteAPI 経由で返します。レスポンスには Cache-Control: public, max-age=86400 と上流の Content-Type が付きます。このルートは API Key またはコンソールセッションを受け付け、呼び出し元が所有するタスクのみを提供します。エラーコードと curl の例は動画をダウンロードするを参照してください。

POST /v1/videos/{video_id}/remix

既存の動画から新しいタスクを作成します。RouteAPI は あなたの タスクの中から video_id を探し、そこからモデルを導出し、結果の互換性を保つために元の動画を生成したチャネルにリクエストを固定します。

Terminal window
curl https://api.routeapi.ai/v1/videos/task_G2RdWGt4t1nck5fYqTjwREKJo8Ze4RAV/remix \
-H "Authorization: Bearer $ROUTEAPI_KEY" \
-H "Content-Type: application/json" \
-d '{ "prompt": "The same cat, now wearing a tiny hat" }'

リミックスは Sora ファミリー(sora-2、sora-2-pro)で意味を持ちます。リクエストは上流自身のリミックスエンドポイントに転送され、prompt が必須です。他のプラットフォームでもリクエストは受け付けられ、モデルとチャネルは元のタスクから解決され、そのモデルのアダプタによってタスクが構築されます。ただし上流がリミックス指示を受け取ることはないため、新しいタスクは通常の生成であり、video_id の派生ではありません。

アダプタが元タスクの課金倍率を記録している場合、リミックスはそれを引き継ぐため、新しいタスクは既定値ではなく元タスクと同じ価格で計算されます。

Sora モデルはこのエンドポイント群を直接使います。重要なパラメータは size と seconds です。

モデル使用できるサイズ
sora-2720x1280、1280x720
sora-2-pro720x1280、1280x720、1792x1024、1024x1792
  • 未対応のサイズは、何も予約される前に 400 とコード invalid_size を返します。
  • 既定値は 720x1280 と 4 秒です。
  • seconds(または duration)は他の動画モデルと同じように検証されます。負の値と 3600 を超える値は 400 invalid_seconds で拒否されます。
  • input_reference は参照画像として転送されます。JSON でも multipart でも送信できます。
  • 課金は seconds と size から計算されます。1792x1024 または 1024x1792 の出力は、秒単位の料金に加えてサイズ倍率(1.666667)が掛かります。適用された倍率は X-New-Api-Other-Ratios で返されます。
  • このファミリーは Remix に対応しています。

可用性と価格はアカウントごとに異なります。モデルが GET /v1/models に現れることを確認し、モデル詳細ページを確認してください。

ルーティング後はタスクのエラー形式が適用されます:

ステータスコード意味
400invalid_requestprompt の欠落・空白、本文の形式誤り、またはフィールドの型誤り
400invalid_secondsduration / seconds が負、または 3600 を超える
400invalid_sizeモデルが受け付けないサイズ(例:未対応の Sora サイズ)
400task_not_existremix の video_id が不明、または別アカウントのもの
400task_source_unavailable元タスクのチャネルが削除・無効、またはアダプタが見つからない
400asset_remix_conflictアセットを使わないタスクの remix で asset:// 素材を参照しようとした
429—上流のキャパシティが枯渇。メッセージは一般的な再試行案内に置き換えられます
500build_request_failed、do_request_failedタスクを変換できない、または上流への接続に失敗した
500convert_to_openai_video_failed保存されたタスクデータを video オブジェクトに変換できなかった
501not_implementedOpenAI 動画変換を持たないアダプタのプラットフォームで GET /v1/videos/{task_id} を呼び出した
任意fail_to_fetch_task上流が送信に対して非 200 を返した。HTTP ステータスは上流のものです

ルーティング前に拒否されたリクエストは、代わりに標準の {"error": {"message": ..., "type": "error", "code": ...}} 本文を使用します。