非同期タスク

すべての Seedance 2.0 動画生成リクエストは 非同期 です。送信するとすぐにタスク ID が返り、実際の生成はバックグラウンドで進行します。次のいずれかの方法で結果を取得できます。

  1. ポーリング — このページのエンドポイントを定期的に呼び出して進捗を確認します
  2. Webhook — リクエスト送信時に callback_url を渡すと、システムが結果をその URL へプッシュします。Webhook を参照してください。

タスクステータスの取得

GET https://api.evolink.ai/v1/tasks/{task_id}

パスパラメータ

パラメータ必須説明
task_idstringはい生成エンドポイントから返されたタスク ID

cURL の例

curl https://api.evolink.ai/v1/tasks/task-unified-1774857405-abc123 \
  -H "Authorization: Bearer YOUR_API_KEY"

タスクライフサイクル

pending  →  processing  →  completed
                      ↘    failed
                      ↘    cancelled
ステータス意味
pendingタスクが作成されキューに入った状態。まだ開始されていない
processing生成中。progress が継続的に更新される
completed生成完了。results 配列に動画 URL が含まれる
failed生成失敗。課金されない
cancelledリクエストによりタスクがキャンセルされた

レスポンス例

Pending(送信直後)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "pending",
    "progress": 0,
    "type": "video",
    "task_info": {
        "can_cancel": true,
        "estimated_time": 165,
        "video_duration": 5
    },
    "usage": {
        "billing_rule": "per_second",
        "credits_reserved": 50,
        "user_group": "default"
    }
}

Processing(生成中)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "processing",
    "progress": 65,
    "type": "video",
    "task_info": {
        "can_cancel": true
    }
}

Completed(完了)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "completed",
    "progress": 100,
    "results": [
        "https://cdn.example.com/videos/task-unified-1774857405-abc123.mp4"
    ],
    "type": "video",
    "task_info": {
        "can_cancel": false
    }
}

動画 URL は 24 時間有効です。 期限が切れる前に自前のオブジェクトストレージ(OSS / S3 / R2)へダウンロードしてください。

Failed(失敗)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "failed",
    "progress": 0,
    "type": "video",
    "task_info": {
        "can_cancel": false
    }
}

失敗したタスクは 課金されません

レスポンスフィールド

フィールド説明
idstringタスク ID
objectstring常に video.generation.task
createdintegerタスク作成の Unix タイムスタンプ
modelstring実際に使用されたモデル ID(送信時と一致)
statusstring現在のステータス — ライフサイクル表を参照
progressinteger0〜100 のパーセンテージ
resultsarray<string>completed 状態のみ存在し、動画 URL を含む
typestring出力タイプ、常に video
task_info.can_cancelbooleanキャンセルエンドポイントを呼び出せるか
task_info.estimated_timeinteger残り時間の推定秒数
task_info.video_durationinteger要求された動画の長さ(秒)
usage.billing_rulestring常に per_second
usage.credits_reservednumber予約クレジット
usage.user_groupstringユーザーグループ

ポーリングのベストプラクティス

  • 5 秒間隔 がポーリング頻度と応答レイテンシーのバランスとしておすすめ
  • 短い動画(4〜6 秒)は通常 1〜3 分で完了します。長い動画や複雑なマルチモーダルタスクはそれ以上かかります
  • 本番パイプラインではポーリングよりも Webhook を推奨callback_url はリクエスト数とコストを最小化します
  • progress を正確な ETA として扱わないでください — 進捗インジケーターであり、モデルはステージごとに異なる速度で進行します

完全な Python の例

import os
import time
import requests

API_KEY = os.environ["EVOLINK_API_KEY"]
headers = {"Authorization": f"Bearer {API_KEY}"}

# タスクを送信
response = requests.post(
    "https://api.evolink.ai/v1/videos/generations",
    headers={**headers, "Content-Type": "application/json"},
    json={
        "model": "seedance-2.0-text-to-video",
        "prompt": "Rainy streets of Tokyo at night, neon reflections on wet asphalt",
        "duration": 6,
        "quality": "720p"
    }
)
task_id = response.json()["id"]

# ステータスをポーリング
while True:
    result = requests.get(
        f"https://api.evolink.ai/v1/tasks/{task_id}",
        headers=headers
    ).json()

    status = result["status"]
    print(f"[{status}] progress={result.get('progress', 0)}%")

    if status == "completed":
        print(f"Video URL: {result['results'][0]}")
        break
    if status in ("failed", "cancelled"):
        print(f"Task ended with status: {status}")
        break

    time.sleep(5)

関連