> ## 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.

# Veo 3 API クイックスタート: CometAPI で動画を生成する

> CometAPI で Veo の動画タスクを作成し、タスクのステータスをポーリングして、完了した動画出力を curl、Python、または Node.js で保存します。

## 作成するもの

multipart form data を使って 1 つの Veo 動画タスクを作成し、返された task ID を保存し、retrieve エンドポイントをポーリングして、最終的な asset URL またはファイルを自分のシステムに保存します。

## 前提条件

* `COMETAPI_KEY` に保存された CometAPI API キー
* `requests` を使用する Python 3.10+、または Node.js 18+
* ポーリング用のサーバーサイドジョブランナー

## API キー、ベース URL、認証

Veo タスクの作成先:

```text theme={null}
POST https://api.cometapi.com/v1/videos
```

Veo タスクのステータスのポーリング先:

```text theme={null}
GET https://api.cometapi.com/v1/videos/<task_id>
```

Bearer トークンで認証します:

```text theme={null}
Authorization: Bearer $COMETAPI_KEY
```

## コード例

以下のタブで、cURL、Python、Node.js のコピー可能な例を確認できます。

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.cometapi.com/v1/videos \
    -H "Authorization: Bearer $COMETAPI_KEY" \
    -F model=veo3.1-fast \
    -F "prompt=A paper kite floats above a field." \
    -F seconds=4 \
    -F size=1280x720

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

  ```python Python theme={null}
  import os
  import time

  import requests

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

  create_response = requests.post(
      "https://api.cometapi.com/v1/videos",
      headers=headers,
      files={
          "model": (None, "veo3.1-fast"),
          "prompt": (None, "A paper kite floats above a field."),
          "seconds": (None, "4"),
          "size": (None, "1280x720"),
      },
      timeout=60,
  )
  create_response.raise_for_status()
  task_id = create_response.json()["id"]

  for _ in range(60):
      retrieve_response = requests.get(
          f"https://api.cometapi.com/v1/videos/{task_id}",
          headers=headers,
          timeout=30,
      )
      retrieve_response.raise_for_status()
      task = retrieve_response.json()
      if task["status"] in {"completed", "failed", "error"}:
          print(task)
          break
      time.sleep(5)
  else:
      raise TimeoutError("Veo task did not finish in time")
  ```

  ```javascript Node.js theme={null}
  const form = new FormData();
  form.append("model", "veo3.1-fast");
  form.append("prompt", "A paper kite floats above a field.");
  form.append("seconds", "4");
  form.append("size", "1280x720");

  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 { id } = await createResponse.json();

  for (let attempt = 0; attempt < 60; attempt += 1) {
    const retrieveResponse = await fetch(`https://api.cometapi.com/v1/videos/${id}`, {
      headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
    });

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

    const task = await retrieveResponse.json();
    if (["completed", "failed", "error"].includes(task.status)) {
      console.log(task);
      break;
    }
    await new Promise((resolve) => setTimeout(resolve, 5000));
  }
  ```
</CodeGroup>

## フローの説明

Veo の動画生成は非同期です。create エンドポイントは multipart form data を受け取り、すぐに task ID を返します。タスクが終了ステータスに達するまで retrieve エンドポイントをポーリングし、その後、完了レスポンスから最終的な動画 URL またはファイルの詳細を永続化します。

最初のテストでは、短い長さと必要最小限の size を使用してください。アプリケーションで保持が必要な場合は、完了した asset を自分のストレージに移動してください。

## 共通パラメータ

| Parameter         | 用途                                                    |
| ----------------- | ----------------------------------------------------- |
| `model`           | Veo の model ID。API リファレンスの例では `veo3.1-fast` を使用しています。 |
| `prompt`          | 動画ジョブ用のテキストプロンプト（Prompt）。                             |
| `seconds`         | 長さを指定するフォームフィールドです。リファレンスでは `4`、`6`、`8` が記載されています。    |
| `size`            | `1280x720` のような正確な `WxH` サイズ。                         |
| `input_reference` | image-to-video 用の任意の先頭フレーム画像ファイル。                     |

## トラブルシューティング / FAQ

<AccordionGroup>
  <Accordion title="リクエストが content type の問題で失敗する">
    multipart form data を送信してください。Veo の作成リクエストを JSON として送信しないでください。
  </Accordion>

  <Accordion title="ポーリングに予想以上の時間がかかる">
    上限付きのポーリングループを使用し、task ID を保存し、Web リクエストをブロックするのではなく、アプリケーションで保留中の状態を表示してください。
  </Accordion>

  <Accordion title="コストはどのように管理すべきですか">
    短い長さ、1 つのタスク、そして許容できる最小サイズから始めてください。タスク数を増やす前に、アカウントのクォータとコスト見積もりを活用してください。
  </Accordion>
</AccordionGroup>

## 次のステップ

* [Veo 3 動画を作成する API リファレンス](/api/video/veo3/create) を読む。
* [Veo 3 動画を取得する](/api/video/veo3/retrieve) でポーリングする。
* [Models](/ja/overview/models) で Veo 動画モデルを探す。
* [動画生成にポーリングと webhook を使用する](/ja/guides/webhook-and-polling-for-video-generation) を確認する。
* [モデルを呼び出す前にリクエストコストを見積もる](/ja/guides/how-to-estimate-cost-before-calling-a-model) でタスクコストを見積もる。
