Skip to main content
GET
/
v1
/
videos
/
{id}
cURL
curl https://api.cometapi.com/v1/videos/<TASK_ID> \
  -H "Authorization: Bearer <COMETAPI_KEY>"
{
  "id": "task_abc123",
  "model": "doubao-seedance-2-0-fast",
  "object": "video",
  "status": "IN_PROGRESS",
  "progress": 45,
  "created_at": 1776567610,
  "completed_at": null
}
Use this endpoint to read the state of a task created through Create a Seedance video. The id in the path is the value returned by the create call, regardless of which Seedance model produced the task.

Status machine

The task goes through one of the states below. SUBMITTED and IN_PROGRESS are non-terminal; SUCCESS, FAILED, and ERROR are terminal and the task will not move again.
StatusMeaningTerminal
SUBMITTEDAccepted and queued for rendering.no
IN_PROGRESSRendering in progress.no
SUCCESSFinished. video_url is present in the response.yes
FAILEDThe provider rejected the task.yes
ERRORAn internal error prevented completion.yes

Poll cadence

Poll every 10 to 20 seconds. Most jobs finish within 1 to 3 minutes depending on model, duration, and resolution.
import time
import requests

TASK_ID = "<TASK_ID>"
headers = {"Authorization": "Bearer <COMETAPI_KEY>"}
TERMINAL = {"SUCCESS", "FAILED", "ERROR"}

while True:
    response = requests.get(
        f"https://api.cometapi.com/v1/videos/{TASK_ID}",
        headers=headers,
        timeout=15,
    )
    response.raise_for_status()
    data = response.json()
    if data["status"] in TERMINAL:
        print(data.get("video_url"))
        break
    time.sleep(10)

Fields to watch

  • status — drives the stop condition for your polling loop.
  • progress — integer 0 to 100 that you can surface in a UI.
  • video_url — signed download URL, present only on SUCCESS. The signature is time-limited; download or re-host the file before the signature expires.
  • completed_at — Unix timestamp filled in once the task reaches a terminal status.
  • model — echoes the Seedance model id used when the task was created.

Common errors

  • HTTP 400 with message: "task_not_exist" means the id is unknown. Confirm that you captured the id from a successful POST /v1/videos response and that you use it verbatim.
  • HTTP 401 means the bearer token is missing or invalid. Check that the request header is Authorization: Bearer <COMETAPI_KEY>.

Authorizations

Authorization
string
header
required

Bearer token authentication. Use your CometAPI key.

Path Parameters

id
string
required

Task id returned by POST /v1/videos.

Response

Current task state.

id
string
required

Task id.

object
string
required

Object type, always video.

model
string
required

Model id that generated the task.

status
enum<string>
required

Task status. SUBMITTED and IN_PROGRESS are non-terminal. SUCCESS, FAILED, and ERROR are terminal.

Available options:
SUBMITTED,
IN_PROGRESS,
SUCCESS,
FAILED,
ERROR
progress
integer
required

Completion percentage.

Required range: 0 <= x <= 100
created_at
integer
required

Task creation time as a Unix timestamp in seconds.

video_url
string | null

Signed download URL for the finished video. Present only when status is SUCCESS. The signature is time-limited, so download or re-upload the file to your own storage soon after you receive it.

completed_at
integer | null

Task completion time as a Unix timestamp in seconds. null while the task is non-terminal.