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.
- 01POST
/v1/videos/generations - 02READ
task_id - 03GET
/v1/tasks/{task_id} - 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
}'{
"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.
{
"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.