Quickstart
Your first quote, generation and download.
1. Set credentials
Create a new key in account settings. Save it in a server secret manager; it is shown only once.
export SEEDANCE_BASE_URL="https://seedance2-5.com/api/v1"
export SEEDANCE_API_KEY="YOUR_API_KEY"2. Prepare and quote a request
cat > video.json <<'JSON'
{
"model": "seedance-2.5-lite",
"mode": "text-to-video",
"prompt": "A cat walking through a sunny garden, cinematic camera movement",
"parameters": {
"duration_seconds": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
},
"max_cost_credits": 80
}
JSONcurl --fail-with-body "$SEEDANCE_BASE_URL/quotes" \
-H "Authorization: Bearer $SEEDANCE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @video.jsonThe quote returns cost_credits and does not generate or charge. This 8-second Seedance 2.5 Lite request currently costs 80 credits. max_cost_credits rejects a higher price before generation.
3. Create a generation
curl --fail-with-body "$SEEDANCE_BASE_URL/videos" \
-H "Authorization: Bearer $SEEDANCE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: video-order-0001" \
--data-binary @video.jsonUse a distinct idempotency key for each intended generation. After a timeout, retry with the same API key, idempotency key and body. Save the id from the 202 response.
{
"id": "api_0000000000000000000000000000000000000000000000000000000000000000",
"model": "seedance-2.5-lite",
"status": "processing",
"created_at": "2026-10-03T12:00:00.000Z",
"credits": {
"cost": 80
},
"outputs": [],
"error": null
}4. Poll and download
curl --fail-with-body "$SEEDANCE_BASE_URL/generations/GENERATION_ID" \
-H "Authorization: Bearer $SEEDANCE_API_KEY"Replace GENERATION_ID with the returned id. Wait at least 10 seconds between polls of an active task. When status is success, download outputs[].url before expires_at. Links last at most 15 minutes; media is retained for 14 days.
For images, use POST /images with an image model and text-to-image. For reference images, follow Image inputs.