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

# 動画生成に polling と webhooks を使う

> task ID の保存、task status の確認、callback 配信失敗への対応により、polling と webhooks で CometAPI の動画生成を追跡します。

動画生成では、すべての非同期ジョブが問い合わせ可能な task ID を返すため、polling を基本手段として使用します。選択した動画 endpoint が callback URL をサポートしている場合にのみ webhooks を追加し、callback 配信の取りこぼしや provider 固有の配信差異に対する信頼できる情報源として polling を維持してください。

## 動画タスクを作成する

次のリクエストは、最小構成の動画タスクを作成し、返された ID を保存します。duration、resolution、callback の各フィールドは、選択した model ページでそれらのフィールドが記載されている場合にのみ追加してください。

```bash theme={null}
curl https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=doubao-seedance-2-0" \
  -F "prompt=A cinematic shot of a paper airplane crossing a desk"
```

レスポンスには task ID と status が含まれます。

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

## ステータスを poll する

次のリクエストは動画タスクの status を確認します。

```bash theme={null}
curl https://api.cometapi.com/v1/videos/task_example \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

レスポンスはタスクの進行に応じて変化します。完了したレスポンスには、model adapter に結果 URL がある場合 `video_url` が含まれることがあります。それ以外の場合は、model 固有の結果フィールド、またはその model がプロキシ経由のダウンロードをサポートしている場合は `/v1/videos/{id}/content` の content ルートを使用してください。

```json theme={null}
{
  "id": "task_example",
  "object": "video",
  "model": "doubao-seedance-2-0",
  "status": "completed",
  "progress": 100,
  "completed_at": 1779872300,
  "video_url": "<generated-video-url>"
}
```

## webhook を受信する

CometAPI は、すべての動画 model に対して共通の callback payload を 1 つ定義しているわけではありません。callbacks は provider 固有の pass-through event として扱い、生の body を保存し、最終状態は polling で突き合わせてください。

次の Express handler は動画 callback を受信して event を保存します。

```javascript theme={null}
import express from "express";

const app = express();
app.use(express.json({ limit: "2mb" }));

app.post("/cometapi/video-webhook", async (request, response) => {
  const event = request.body;

  console.log("Task ID:", event.task_id || event.id);
  console.log("Status:", event.status);

  response.status(200).json({ received: true });
});

app.listen(3000);
```

callback payload には通常 task の識別情報と status フィールドが含まれますが、正確なネスト構造は選択した model または provider に依存します。

```json theme={null}
{
  "task_id": "task_example",
  "status": "completed",
  "progress": 100,
  "result": {
    "video_url": "https://example.com/result.mp4"
  }
}
```

## よくあるエラー

| Error                    | Fix                                                                                                 |
| ------------------------ | --------------------------------------------------------------------------------------------------- |
| callback の消失             | アプリが終端状態を保存するまで、task ID で poll してください。                                                              |
| callback の重複             | task ID に基づいて callback 処理を冪等にしてください。                                                                |
| callback が拒否される          | すぐに `2xx` レスポンスを返し、その後バックグラウンドでジョブを処理してください。                                                        |
| provider 固有 payload の不一致 | 生の callback payload を保存し、アプリ内で正規化してください。                                                            |
| `video_url` がない          | `video_url` は省略可能として扱い、利用可能な場合は polling と model 固有の結果フィールド、または `/v1/videos/{id}/content` を使用してください。 |

## 関連リンク

* [動画モデル](/api/video)
* [動画を作成](/api/video/sora-2/create)
* [動画を取得](/api/video/sora-2/retrieve)
* [モデルページ](/ja/overview/models)
* [モデルディレクトリ](https://www.cometapi.com/models/)
* [料金](https://www.cometapi.com/pricing/)

<script type="application/ld+json">
  {`
    {
    "@context": "https://schema.org",
    "@graph": [
      {
        "@type": "TechArticle",
        "@id": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation",
        "headline": "動画生成で webhook とポーリングを使用するには？",
        "description": "タスク ID を保存し、タスクのステータスを確認し、コールバック配信の失敗を処理することで、CometAPI の動画生成でポーリングと webhook を使用します。",
        "url": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation",
        "author": {
          "@type": "Organization",
          "name": "CometAPI"
        },
        "publisher": {
          "@type": "Organization",
          "name": "CometAPI",
          "url": "https://www.cometapi.com"
        }
      },
      {
        "@type": "BreadcrumbList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "CometAPI ドキュメント",
            "item": "https://apidoc.cometapi.com/"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "ガイド",
            "item": "https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "動画生成で webhook とポーリングを使用するには？",
            "item": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation"
          }
        ]
      }
    ]
    }
    `}
</script>
