> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 動画生成 API

> Seedance、HappyHorse、Sora 2、Veo 3、Wan、xAI、Vidu、Omni、Kling、Runway のワークフロー向けに CometAPI の動画ルートを選択します。

CometAPI の動画モデルドキュメントでは、ジョブの種類に合ったプロバイダーのワークフローを選択してください。ほとんどの動画エンドポイントは非同期タスクを作成するため、タスク ID を保存し、polling を使用して結果を取得します。コールバックは、モデル固有のページでコールバック対応が記載されている場合にのみ追加してください。

## 動画 API を選ぶ

<CardGroup cols={2}>
  <Card title="Seedance 動画を作成" icon="sparkles" href="/api/video/seedance/create">
    Seedance の動画タスクを作成します。
  </Card>

  <Card title="HappyHorse 動画を作成" icon="sparkles" href="/api/video/happyhorse/create">
    HappyHorse のテキストから動画へのジョブを作成します。
  </Card>

  <Card title="Sora 2 動画を作成" icon="film" href="/api/video/sora-2/create">
    Sora 2 の動画ジョブを作成します。
  </Card>

  <Card title="Sora 2 動画を取得" icon="refresh" href="/api/video/sora-2/retrieve">
    Sora の動画ジョブを照会します。
  </Card>

  <Card title="Veo 3 動画を作成" icon="film" href="/api/video/veo3/create">
    Veo の動画ジョブを作成します。
  </Card>

  <Card title="Wan 動画を作成" icon="sparkles" href="/api/video/wan/create">
    Wan のテキストから動画へのジョブを作成します。
  </Card>

  <Card title="xAI 動画を作成" icon="film" href="/api/video/xai/video-generation">
    xAI の動画ジョブを生成します。
  </Card>

  <Card title="Vidu 動画を作成" icon="sparkles" href="/api/video/vidu/create">
    Vidu のテキストから動画へのジョブを作成します。
  </Card>

  <Card title="Omni 動画を作成（ベータ）" icon="sparkles" href="/api/video/omni/create">
    ベータ版の Omni 動画ジョブを作成します。
  </Card>

  <Card title="Kling のテキストから動画タスクを作成" icon="film" href="/api/video/kling/text-to-video">
    テキストプロンプトから Kling 動画を生成します。
  </Card>

  <Card title="Runway の画像から動画タスクを作成" icon="film" href="/api/video/runway/official-format/runway-images-raw-video">
    画像から Runway 動画を生成します。
  </Card>
</CardGroup>

## 動画タスクを作成してポーリングする

[Models page](/ja/overview/models) または [model directory](https://www.cometapi.com/models/) から、動画対応の model ID を使用します。以下の例では、まず `POST /v1/videos` で動画タスクを作成し、その後タスクが終了状態に到達するまで返されたタスク ID をポーリングします。

<Note>
  これらの例では、プレースホルダー `your-video-model-id` を使用しています。リクエストを実行する前に、[Models page](/ja/overview/models) または [model directory](https://www.cometapi.com/models/) で利用可能な動画 model ID に置き換えてください。
</Note>

<Tip>
  API プレイグラウンドとエンドポイントスキーマを利用するには、[Seedance 動画を作成する](/api/video/seedance/create) と [Seedance 動画を取得する](/api/video/seedance/query) を開いてください。
</Tip>

<CodeGroup>
  ```python Python theme={null}
  import os
  import time
  import requests

  headers = {"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]}

  create_response = requests.post(
      "https://api.cometapi.com/v1/videos",
      headers=headers,
      data={
          "model": "your-video-model-id",
          "prompt": "A calm camera move across a desk with a paper airplane",
      },
      timeout=30,
  )
  create_response.raise_for_status()
  task = create_response.json()
  task_id = task["id"]

  terminal_statuses = {"completed", "failed", "error"}

  while True:
      poll_response = requests.get(
          f"https://api.cometapi.com/v1/videos/{task_id}",
          headers=headers,
          timeout=30,
      )
      poll_response.raise_for_status()
      result = poll_response.json()
      print(result["status"], result.get("progress"))

      if result["status"] in terminal_statuses:
          print(result.get("video_url"))
          break

      time.sleep(10)
  ```

  ```javascript Node.js theme={null}
  const form = new FormData();
  form.append("model", "your-video-model-id");
  form.append("prompt", "A calm camera move across a desk with a paper airplane");

  const createResponse = await fetch("https://api.cometapi.com/v1/videos", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
    },
    body: form,
  });

  if (!createResponse.ok) {
    throw new Error(await createResponse.text());
  }

  const task = await createResponse.json();
  const terminalStatuses = new Set(["completed", "failed", "error"]);

  while (true) {
    const pollResponse = await fetch(
      `https://api.cometapi.com/v1/videos/${task.id}`,
      {
        headers: {
          Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
        },
      },
    );

    if (!pollResponse.ok) {
      throw new Error(await pollResponse.text());
    }

    const result = await pollResponse.json();
    console.log(result.status, result.progress);

    if (terminalStatuses.has(result.status)) {
      console.log(result.video_url);
      break;
    }

    await new Promise((resolve) => setTimeout(resolve, 10_000));
  }
  ```

  ```bash cURL theme={null}
  curl https://api.cometapi.com/v1/videos \
    -H "Authorization: Bearer $COMETAPI_KEY" \
    -F "model=your-video-model-id" \
    -F "prompt=A calm camera move across a desk with a paper airplane"

  curl https://api.cometapi.com/v1/videos/task_example \
    -H "Authorization: Bearer $COMETAPI_KEY"
  ```
</CodeGroup>

## レスポンス例

作成リクエストが成功した場合のレスポンスは、次のようになります。ポーリングを始める前にタスク ID を保存してください。

```json theme={null}
{
  "id": "task_example",
  "task_id": "task_example",
  "object": "video",
  "model": "your-video-model-id",
  "status": "queued",
  "progress": 0,
  "created_at": 1779872000
}
```

ポーリングが成功した場合のレスポンスは、次のようになります。完了レスポンスには `video_url` が含まれる場合があります。また、一部のプロバイダ形式では、モデル固有の結果フィールド、またはそのルートがドキュメント化されている場合は動画コンテンツルートが使用されます。

```json theme={null}
{
  "id": "task_example",
  "object": "video",
  "model": "your-video-model-id",
  "status": "completed",
  "progress": 100,
  "completed_at": 1779872300,
  "video_url": "https://example.com/generated-video.mp4"
}
```

## モデルレコードの例

<Info>
  このモデルカタログレスポンスの例は、`/api/models` のエンベロープと、1 つの動画モデルレコードの形状を示しています。完全なモデル一覧ではありません。
</Info>

```bash cURL theme={null}
curl https://api.cometapi.com/api/models
```

```json theme={null}
{
  "success": true,
  "page": 1,
  "page_size": 20,
  "total": 302,
  "data": [
    {
      "created": 1767529753,
      "id": "your-video-model-id",
      "code": "your-video-model-id",
      "provider": "ExampleProvider",
      "provider_code": "example",
      "name": "Example video model",
      "model_type": "video",
      "features": [
        "text-to-video"
      ],
      "endpoints": "{\n  \"seedance\": {\n    \"path\": \"/v1/videos\",\n    \"method\": \"POST\"\n  }\n}",
      "pricing": {
        "currency": "USD / M Tokens",
        "input": null,
        "output": null,
        "per_request": null,
        "per_second": 0.024
      }
    }
  ]
}
```

## 一般的なエラー

<AccordionGroup>
  <Accordion title="タスク ID がありません">
    ジョブハンドラーから返す前に、create レスポンスの ID を保存してください。
  </Accordion>

  <Accordion title="ポーリングが速すぎます">
    ステータス確認の間に遅延とバックオフを追加してください。
  </Accordion>

  <Accordion title="サポートされていない duration または size">
    選択した動画 endpoint に対してドキュメント化されている duration フィールドと resolution フィールドを使用してください。
  </Accordion>

  <Accordion title="video_url がありません">
    `video_url` はオプションとして扱い、利用可能な場合はモデル固有の結果フィールドまたは content ルートにフォールバックしてください。
  </Accordion>

  <Accordion title="コールバックを受信していません">
    polling を信頼できる情報源として使用し、コールバック URL が POST リクエストを受け付けることを確認してください。
  </Accordion>
</AccordionGroup>

## エラーコードと再試行戦略

<AccordionGroup>
  <Accordion title="400">
    プロンプト（Prompt）、ファイル、duration、または size フィールドが修正されるまで再試行しないでください。
  </Accordion>

  <Accordion title="401">
    API キーが存在し、有効になるまで再試行しないでください。
  </Accordion>

  <Accordion title="404">
    再試行する前に、タスク ID、base URL、path、model ID を確認してください。
  </Accordion>

  <Accordion title="413">
    再試行する前にアップロードサイズを減らしてください。
  </Accordion>

  <Accordion title="429">
    指数バックオフで再試行し、create または polling の同時実行数を減らしてください。
  </Accordion>

  <Accordion title="500 or 503">
    バックオフを使ってタスク作成を再試行してください。タスクが終了エラーに達しない限り、既存タスクの polling は継続してください。
  </Accordion>
</AccordionGroup>

<Tip>
  実装パターンについては、[エラーコードと再試行戦略](/ja/guides/error-codes-and-retry-strategy)、[レート制限と同時実行](/ja/guides/rate-limits-and-concurrency)、および [動画生成のための Webhook と polling](/ja/guides/webhook-and-polling-for-video-generation) を参照してください。
</Tip>

## 料金とモデルディレクトリ

<CardGroup cols={3}>
  <Card title="モデルページ" icon="list" href="/overview/models">
    CometAPI がドキュメント内で model ID をどのように公開しているかを確認してください。
  </Card>

  <Card title="モデルディレクトリ" icon="puzzle-piece" href="https://www.cometapi.com/models/">
    利用可能なモデルとその機能を確認してください。
  </Card>

  <Card title="料金" icon="tag" href="https://www.cometapi.com/pricing/">
    モデルを呼び出す前に料金を確認してください。
  </Card>
</CardGroup>
