SDSeeddance API

Quickstart

Create a Seedance video task, track its status, and retrieve the finished video.

Use the Seeddance API to create videos from text, images, or reference media. Generation runs asynchronously. Use https://seeddance.io as the base URL for every request.

  1. 01POST
    /v1/videos/generations
  2. 02READ
    task_id
  3. 03GET
    /v1/tasks/{task_id}
  4. 04DONE
    completed + video_url

1. Create an API key

Create a key in Settings → API keys. You can view the full secret only once. Copy it immediately and store it in a secret manager on your server.

2. Start a generation

cURL

curl https://seeddance.io/v1/videos/generations \
  -H "Authorization: Bearer sk_sd_example" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-fast",
    "prompt": "A paper boat crossing a rain-soaked neon street, cinematic camera movement",
    "duration": 5,
    "quality": "720p",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }'
Response
{
  "task_id": "vid_01JZK7R7KCYQ3T9F33A7K0J6XB",
  "status": "pending",
  "created_at": "2026-07-22T08:30:00.000Z"
}

JavaScript

const response = await fetch('https://seeddance.io/v1/videos/generations', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer sk_sd_example',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'seedance-2.0-fast',
    prompt: 'A paper boat crossing a rain-soaked neon street',
    duration: 5,
    quality: '720p',
  }),
});

if (!response.ok) throw new Error(await response.text());
const task = await response.json();
console.log(task.task_id);

Python

import requests

response = requests.post(
    "https://seeddance.io/v1/videos/generations",
    headers={"Authorization": "Bearer sk_sd_example"},
    json={
        "model": "seedance-2.0-fast",
        "prompt": "A paper boat crossing a rain-soaked neon street",
        "duration": 5,
        "quality": "720p",
    },
    timeout=30,
)
response.raise_for_status()
task_id = response.json()["task_id"]
print(task_id)

3. Poll the task

While the status is pending or processing, poll every 5 to 10 seconds and increase the interval with exponential backoff.

curl https://seeddance.io/v1/tasks/vid_01JZK7R7KCYQ3T9F33A7K0J6XB \
  -H "Authorization: Bearer sk_sd_example"

When status changes to completed, read the video URL from output.video_url. Stop polling if the task changes to failed.

Completed task
{
  "task_id": "vid_01JZK7R7KCYQ3T9F33A7K0J6XB",
  "status": "completed",
  "model": "seedance-2.0-fast",
  "output": {
    "video_url": "https://media.seeddance.io/videos/vid_01JZK7R7KCYQ3T9F33A7K0J6XB.mp4",
    "duration": 5,
    "quality": "720p"
  },
  "credits_used": 25,
  "error": null,
  "created_at": "2026-07-22T08:30:00.000Z",
  "completed_at": "2026-07-22T08:31:12.000Z"
}

4. Check available credits

curl https://seeddance.io/v1/credits \
  -H "Authorization: Bearer sk_sd_example"

available shows how many credits a new generation can use. reserved shows the credits held for active video tasks. Seeddance deducts reserved credits only when a task completes successfully.