Seedance Video Generation API Reference
Walkthrough using bytedance/seedance-2.0 (Seedance 2.0): submit, poll, and download.
Note: Seedance 2.0 supports multiple durations and 480p / 720p / 1080p. Flow: submit → poll job_id → download via download_url from the status response.
Example model
Examples below use bytedance/seedance-2.0 (Seedance 2.0). Replace model and adjust size, quality, etc. per console docs when switching models.
Submit video generation job
POST
https://token.easyapi.com/v1/videosSubmit an async video generation job. On success, returns 202 with a job_id for polling. Prefer Idempotency-Key to avoid duplicate jobs.
Request parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Authorization | header | string | Yes | EasyAPI API Key. Format: Bearer `API_KEY` |
Content-Type | header | string | Yes | Request body format |
Idempotency-Key | header | string | No | Idempotency key; duplicate submits with the same key return the first job without creating a new one |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Model ID; currently bytedance/seedance-2.0 |
prompt | string | Yes | Video prompt: subject, motion, scene, camera, and style. Limits vary by model (Sora 500 chars, Hailuo 2000, Wan T2V 1500 / I2V 800). EasyAPI does not enforce a hard limit; upstream may reject with 502 / 503 when exceeded. |
duration | integer | No | Video duration in seconds; supported range depends on the model |
resolution | string | No | Output resolution: 480p, 720p, or 1080p |
aspect_ratio | string | No | Aspect ratio: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, or adaptive |
generate_audio | boolean | No | Whether to generate audio |
seed | integer | No | Random seed, -1 to 4294967295; same seed does not guarantee identical output |
size | string | No | Exact output size, e.g. 1280x720 |
input_references | array | No | Optional reference assets for image-to-video, first/last frame control, style transfer, or audio-driven generation |
input_references[].type | string | Yes | Reference type: image, video, or audio; must match role |
input_references[].url | string | Yes | HTTPS URL of the reference asset |
input_references[].role | string | Yes | Reference role: first_frame, last_frame, reference (appearance guide only), reference_video, or reference_audio |
metadata | object | No | Opaque metadata for audit or source tagging |
webhook_url | string | No | Callback URL on completion or failure |
Example
{
"model": "bytedance/seedance-2.0",
"prompt": "A golden retriever running on a sunny beach, cinematic camera movement",
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": false,
"seed": -1,
"input_references": [
{
"type": "image",
"url": "https://cdn.example.com/portrait.jpg",
"role": "first_frame"
}
],
"metadata": {
"source": "playground"
},
"webhook_url": "https://example.com/webhooks/easyapi-video"
}Response fields
| Name | Type | Description |
|---|---|---|
job_id | string | Unique job ID |
status | string | Job status: pending / in_progress / completed / failed |
model | string | Model used for the job |
status_url | string | Full URL for polling job status |
message | string | Server message |
current_balance | string | Current account balance (USD) |
estimated_cost | string | Estimated cost |
pre_deduct_amount | string | Displayed pre-deduct amount |
balance_after_estimate | string | Balance after estimated cost |
currency | string | Currency code; currently USD |
billing_notice | string | Billing notice |
Response example
{
"code": 200,
"msg": "",
"data": {
"job_id": "video_abc123",
"status": "in_progress",
"model": "bytedance/seedance-2.0",
"status_url": "https://token.easyapi.com/v1/videos/video_abc123",
"message": "视频任务已提交,请调用 status_url 查询生成进度。",
"current_balance": "100.0000000000",
"estimated_cost": "1.0800000000",
"pre_deduct_amount": "1.0800000000",
"balance_after_estimate": "98.9200000000",
"currency": "USDT",
"billing_notice": "视频生成完成后按实际任务结果扣款,提交后请保持余额充足。"
}
}Status codes
| Status code | Meaning | Description | Data model |
|---|---|---|---|
202 | Accepted | Job accepted and queued; response includes job_id for polling. | VideoSubmitResponse |
400 | Bad Request | Invalid parameters | ErrorResponse |
401 | Unauthorized | Not authenticated or token invalid | ErrorResponse |
402 | Payment Required | Insufficient balance; response includes estimated cost and current balance. | ErrorResponse |
429 | Too Many Requests | Rate limited; slow down requests. | ErrorResponse |
500 | Internal Server Error | Internal server error | ErrorResponse |
Query job status
GET
https://token.easyapi.com/v1/videos/{job_id}Example request: https://token.easyapi.com/v1/videos/video_abc123
Poll job status, progress, and billing. When completed, the response includes download_url.
Request parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | Yes | Video job ID |
Authorization | header | string | Yes | EasyAPI API Key. Format: Bearer `API_KEY` |
Response fields
| Name | Type | Description |
|---|---|---|
job_id | string | Unique job ID |
status | string | Job status: pending / in_progress / completed / failed |
model | string | Model used for the job |
status_url | string | Full URL for polling job status |
download_url | string | Video download URL (present when status is completed) |
duration | integer | Video duration in seconds |
resolution | string | Output resolution |
aspect_ratio | string | Aspect ratio |
generate_audio | boolean | Whether audio is included |
estimated_cost | string | Estimated cost |
billed_cost | string | Actual billed amount |
billing_status | string | Billing status: pre_deducted or settled |
expires_at | string(ISO 8601) | Video file expiration time |
created_at | string(ISO 8601) | Job creation time |
completed_at | string(ISO 8601) | Job completion time |
Response example
{
"code": 200,
"msg": "",
"data": {
"job_id": "video_abc123",
"status": "completed",
"model": "bytedance/seedance-2.0",
"status_url": "https://token.easyapi.com/v1/videos/video_abc123",
"download_url": "https://cdn.example.com/videos/video_abc123.mp4",
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": false,
"estimated_cost": "1.0800000000",
"billed_cost": "1.0800000000",
"billing_status": "settled",
"expires_at": "2026-06-26T05:00:00Z",
"created_at": "2026-05-27T05:00:00Z",
"completed_at": "2026-05-27T05:03:00Z"
}
}Status codes
| Status code | Meaning | Description | Data model |
|---|---|---|---|
200 | OK | Success | VideoStatusResponse |
401 | Unauthorized | Not authenticated or token invalid | ErrorResponse |
404 | Not Found | Job not found, or it does not belong to the current API Key. | ErrorResponse |
500 | Internal Server Error | Internal server error | ErrorResponse |