Video REST API

Video APIは、RESTfulエンドポイントでURLを生成することをサポートしており、長時間実行される処理プロセスの処理を改善し、プロンプトベースの入力に対してより高い文字数制限を提供します。

認証

Imgix REST APIへのすべての呼び出しには、任意の権限(請求、アセットマネージャー読み取りなど)を持つAPIキーが必要です。キーを作成するには、ダッシュボードのAPIキービューに移動してください。

動画生成操作

エンドポイントメソッド説明
/v1/generations/videoPOST画像URLとプロンプトから新しい動画生成ジョブを作成します。
/v1/generations/video/:job_idGET動画生成ジョブのステータスと詳細を取得します。

動画生成ジョブの作成

動画生成ジョブを作成するには、以下のパラメータを使用して/v1/generations/videoPOSTリクエストを行います:

リクエストパラメータ

パラメータ必須説明
urlStringYes動画生成に使用するソース画像のURL。
promptStringYes動画生成をガイドするテキスト説明。
modelStringYes使用するAIモデル。使用可能な値: klingai, veo2, veo3
durationIntegerYes生成される動画の長さ(秒単位)。
POST /v1/generations/video
 
{
  "url": "https://assets-secured.imgix.net/docs/examples/building-01.jpg",
  "prompt": "walking towards building POV",
  "model": "veo3",
  "duration": 8
}

動画生成ジョブのステータス取得

動画生成ジョブのステータスを確認するには、/v1/generations/video/:job_idGETリクエストを行います。

レスポンス属性

属性説明
statusStringジョブの現在のステータス。可能な値:preparingreadyerrored
created_atIntegerジョブが作成された時刻のUnixタイムスタンプ。
updated_atIntegerジョブが最後に更新された時刻のUnixタイムスタンプ。ステータスが ready または errored の場合に存在します。
result.urlObjectステータスが ready の場合に存在します。生成されたビデオの url を含みます。
error.codeIntegerステータスが errored の場合に存在します。エラーコードを含みます。
error.messageStringステータスが errored の場合に存在します。説明的なエラーメッセージを含みます。
# Request
GET /v1/generations/video/3f98a9b2c4d5e6f7a8b9c0d1
{
  "data": {
    "type": "job",
    "id": "3f98a9b2c4d5e6f7a8b9c0d1",
    "attributes": {
      "status": "preparing",
      "created_at": 1760074634
    }
  }
}

ステータスコード

ステータスコード説明
200OK - ジョブが正常に作成されたか、ジョブのステータスが正常に取得されました。
400不正なリクエスト - 無効なリクエストパラメータまたはソースURL(例: プロンプトの欠落)。
401未認証 - 無効なAPIキーまたはアカウントの不一致。
403禁止 - このソースに対して画像から動画への機能が有効になっていません。
500内部サーバーエラー - ジョブ作成中のサーバーエラー。

ジョブのステータス値

動画生成ジョブはいくつかの状態を経過します:

ステータス説明
pendingジョブが作成され、処理待ちキューに入っています。
processing動画生成が進行中です。
completed動画生成が正常に完了しました。result_urlが利用可能になります。
failed動画生成が失敗しました。レスポンスのエラーメッセージを確認してください。

結果のポーリング

動画生成は非同期であるため、GETエンドポイントをポーリングしてジョブのステータスを確認することをお勧めします。

async function pollJobStatus(jobId) {
  const maxAttempts = 60;
  const pollInterval = 5000; // 5 seconds
  for (let i = 0; i < maxAttempts; i++) {
    const response = await fetch(
      `https://api.imgix.com/v1/generations/video/${jobId}`,
      {
        headers: {
          Authorization: "Bearer YOUR_API_KEY",
        },
      },
    );
    const data = await response.json();
    const status = data.data.attributes.status;
    if (status === "ready") {
      return data.data.attributes.result.url;
    } else if (status === "errored") {
      throw new Error(data.data.attributes.error.message);
    }
    // Wait before next poll
    await new Promise((resolve) => setTimeout(resolve, pollInterval));
  }
  throw new Error("Job timed out");
}