Seedance 2.0 API Documentation
Integrate Seedance 2.0 and 2.0 Fast via API v2: text-to-video and image-to-video with 5s, 10s, or 15s durations.
Quick Start
| 1 | curl -X POST 'https://seedanceapi.org/v2/generate' \ |
| 2 | -H 'Authorization: Bearer YOUR_API_KEY' \ |
| 3 | -H 'Content-Type: application/json' \ |
| 4 | -d '{ |
| 5 | "prompt": "A cinematic aerial shot over coastline at golden hour", |
| 6 | "aspect_ratio": "16:9", |
| 7 | "duration": 10, |
| 8 | "model": "seedance-2.0" |
| 9 | }' |
Authentication
All API requests require a Bearer token in the Authorization header.
Important: Get your API key from the API Keys page in your dashboard. → Get Your API Key
| 1 | Authorization: Bearer YOUR_API_KEY |
Pricing (credits)
Credits are deducted per generation based on duration and model. See the tables below.
Seedance 2.0 (standard)
Higher quality; more credits per second than Fast.
| Duration | Credits |
|---|---|
| 5s | 240 credits |
| 10s | 480 credits |
| 15s | 720 credits |
Seedance 2.0 Fast
Faster turnaround and lower credit use than standard.
| Duration | Credits |
|---|---|
| 5s | 160 credits |
| 10s | 320 credits |
| 15s | 480 credits |
API Endpoints
/v2/generateStart a Seedance 2.0 or 2.0 Fast job. Text-to-video uses prompt + aspect_ratio; image-to-video uses prompt + images.
Request Body
Text prompt (required, max 2000 characters)
Seconds: 5, 10, or 15 Defaults to 5.
For text-to-video: 16:9, 9:16, 4:3, or 3:4 Defaults to 16:9 (text-to-video only).
For image-to-video: 1–4 image URLs (http/https)
Optional: seedance-2.0 (default) or seedance-2.0-fast Defaults to seedance-2.0.
Optional webhook for async notifications (public URL; no localhost)
Optional: mark task visibility for gallery features when supported
Text to video
| 1 | { |
| 2 | "prompt": "A slow dolly shot through a neon-lit street in the rain", |
| 3 | "aspect_ratio": "16:9", |
| 4 | "duration": 10, |
| 5 | "model": "seedance-2.0" |
| 6 | } |
Image to video
| 1 | { |
| 2 | "prompt": "The subject walks forward and looks at the camera", |
| 3 | "images": [ |
| 4 | "https://example.com/reference.jpg" |
| 5 | ], |
| 6 | "duration": 5, |
| 7 | "model": "seedance-2.0" |
| 8 | } |
Fast variant
| 1 | { |
| 2 | "prompt": "Sunrise over misty mountains with birds crossing the frame", |
| 3 | "aspect_ratio": "9:16", |
| 4 | "duration": 15, |
| 5 | "model": "seedance-2.0-fast" |
| 6 | } |
Responses
Task created
| 1 | { |
| 2 | "code": 200, |
| 3 | "message": "success", |
| 4 | "data": { |
| 5 | "task_id": "n90a1b2c3d4e5f6sd20", |
| 6 | "status": "IN_PROGRESS", |
| 7 | "consumed_credits": 480 |
| 8 | } |
| 9 | } |
/v2/statusPoll by task_id until status is SUCCESS or FAILED; video URL is in response.
Query Parameters
Task id returned by POST /v2/generate
Example Request
| 1 | curl -X GET 'https://seedanceapi.org/v2/status?task_id=n90a1b2c3d4e5f6sd20' \ |
| 2 | -H 'Authorization: Bearer YOUR_API_KEY' |
Tip: When status is SUCCESS, data.response is an array of video URLs; use data.response[0] for the first URL.
| 1 | const videoUrl = data.response[0]; |
Responses
| 1 | { |
| 2 | "code": 200, |
| 3 | "message": "success", |
| 4 | "data": { |
| 5 | "task_id": "n90a1b2c3d4e5f6sd20", |
| 6 | "status": "SUCCESS", |
| 7 | "consumed_credits": 480, |
| 8 | "created_at": "2026-04-03T10:30:00Z", |
| 9 | "request": { |
| 10 | "prompt": "A slow dolly shot…", |
| 11 | "aspect_ratio": "16:9", |
| 12 | "duration": 10 |
| 13 | }, |
| 14 | "response": [ |
| 15 | "https://cdn.example.com/videos/n90a1b2c3d4e5f6sd20.mp4" |
| 16 | ], |
| 17 | "error_message": null |
| 18 | } |
| 19 | } |
API Playground
Try the API in the browser. Replace YOUR_API_KEY with your real key.
Error Codes
| Status | Code | Description |
|---|---|---|
| 400 Bad Request | INVALID_PROMPT | Prompt missing or invalid |
| 400 Bad Request | INVALID_ASPECT_RATIO | Unsupported aspect_ratio for T2V |
| 400 Bad Request | INVALID_DURATION | duration must be 5, 10, or 15 |
| 400 Bad Request | TOO_MANY_IMAGES | Too many images (max 4) |
| 401 Unauthorized | INVALID_API_KEY | API key missing or invalid |
| 402 | INSUFFICIENT_CREDITS | Not enough credits |
| 404 Not Found | TASK_NOT_FOUND | Task not found |
| 500 Internal Server Error | INTERNAL_ERROR | Server error |