Skip to main content
What is Seedance 2.0? AI video generation API supporting text-to-video and first & last frame image-to-video. 4-15 second duration, pay-as-you-go pricing.

Try It Instantly

Use the demo API key to explore the API without signing up. This key can only query existing sample tasks — it cannot create new videos.
export SEEDANCE_API_KEY="zimg_demo_readonly_d2cb4bea56fcc21a9eb106e0"
Sample task IDs you can query:
Task IDStatusDescription
demo_task_t2v_successsuccessCompleted text-to-video
demo_task_i2v_successsuccessCompleted image-to-video
demo_task_fail_text_moderationfailPrompt flagged by content moderation
demo_task_fail_face_detectedfailFace detected in uploaded image
demo_task_fail_server_errorfailServer error (safe to retry)
Try it now:
curl -s "https://kinovi.ai/api/v1/jobs/recordInfo?taskId=demo_task_t2v_success" \
  -H "Authorization: Bearer zimg_demo_readonly_d2cb4bea56fcc21a9eb106e0"
The demo key has 0 credits and cannot create tasks. To generate videos, sign up and get your own API key.

Before You Start

To generate videos, you’ll need:
export SEEDANCE_API_KEY="your_api_key_here"

Generate Your First Video

Copy and run — this creates a task, polls until done, and handles errors:
# 1. Create task
TASK_ID=$(curl -s -X POST "https://kinovi.ai/api/v1/jobs/createTask" \
  -H "Authorization: Bearer $SEEDANCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-20",
    "inputs": {
      "prompt": "A serene Japanese garden with cherry blossoms swaying in the wind",
      "resolution": "1280x720",
      "duration": "5s"
    }
  }' | python3 -c "import sys,json; print(json.load(sys.stdin)['taskId'])")

echo "Task created: $TASK_ID"

# 2. Poll until complete
while true; do
  RESULT=$(curl -s "https://kinovi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
    -H "Authorization: Bearer $SEEDANCE_API_KEY")

  STATUS=$(echo "$RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])")

  if [ "$STATUS" = "success" ]; then
    echo "$RESULT" | python3 -c "import sys,json; print('Video URL:', json.load(sys.stdin)['output'][0]['url'])"
    break
  elif [ "$STATUS" = "fail" ]; then
    echo "$RESULT" | python3 -c "import sys,json; print('Failed:', json.load(sys.stdin)['error'])"
    break
  fi

  echo "Status: $STATUS — waiting..."
  sleep 5
done

Response Format

Create task returns a task ID:
{ "taskId": "task_clxxxxxx" }
A 200 response means the task was created, not completed. Poll the status endpoint to get the result.
Poll result — success:
{
  "taskId": "task_clxxxxxx",
  "model": "seedance-20",
  "status": "success",
  "creditsUsed": 200,
  "output": [{ "url": "https://..../video.mp4", "width": 1280, "height": 720 }],
  "error": null,
  "createTime": 1735599634000,
  "completeTime": 1735599754000
}
Poll result — failure:
{
  "taskId": "task_clxxxxxx",
  "model": "seedance-20",
  "status": "fail",
  "creditsUsed": 0,
  "output": null,
  "error": "Your input text violates platform rules. Please modify and try again.",
  "createTime": 1735599634000,
  "completeTime": null
}
Common task errors:
ErrorMeaning
Your input text violates platform rules...Prompt flagged — revise your prompt
Your uploaded image violates platform rules...Image flagged — use a different image
Face detected in uploaded media...Human face in image — remove faces
The generated video did not pass review...Output flagged — adjust prompt and retry
Video generation failed. Please try again.Server error — safe to retry
See Task Error Messages for the full reference.

FAQ

How long does generation take? Typically 1-5 minutes depending on duration and server load. What if I get ‘Insufficient credits’? Add credits in your Account. A 5-second video costs 200 credits ($1.00).

Next Steps

Text to Video

Full text-to-video API documentation

Image to Video

First & last frame video generation

Error Handling

Error codes and retry logic