curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "seedance-2.5-image-to-video",
"prompt": "The camera slowly zooms in, the scene gradually comes to life",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"duration": 5,
"quality": "720p",
"aspect_ratio": "adaptive"
}
'{
"created": 1761313744,
"id": "task-unified-1774857405-abc123",
"model": "seedance-2.5-image-to-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 165,
"video_duration": 8
},
"type": "video",
"usage": {
"billing_rule": "per_second",
"credits_reserved": 50,
"user_group": "default"
}
}{
"error": {
"code": "invalid_parameter",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: seedance-2.5-image-to-video",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}{
"error": {
"code": "draft_unavailable",
"message": "Draft mode is not available on the selected service right now. Retry later or send the request without draft.",
"type": "invalid_request_error"
}
}Seedance 2.5 Image-to-Video
- Input 1 image for first-frame video generation, input 2 images for first-last-frame video generation, the model determines automatically
- Now supports AIGC realistic human materials
- Supports draft mode: set
draft: trueto generate a 480p draft first. If you are satisfied, use Draft-to-Video to convert it into a 1080p final video. The two requests are billed separately - Asynchronous processing mode, use the returned task ID to query status
- Generated video links are valid for 24 hours, please save them promptly
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "seedance-2.5-image-to-video",
"prompt": "The camera slowly zooms in, the scene gradually comes to life",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"duration": 5,
"quality": "720p",
"aspect_ratio": "adaptive"
}
'{
"created": 1761313744,
"id": "task-unified-1774857405-abc123",
"model": "seedance-2.5-image-to-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 165,
"video_duration": 8
},
"type": "video",
"usage": {
"billing_rule": "per_second",
"credits_reserved": 50,
"user_group": "default"
}
}{
"error": {
"code": "invalid_parameter",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: seedance-2.5-image-to-video",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}{
"error": {
"code": "draft_unavailable",
"message": "Draft mode is not available on the selected service right now. Retry later or send the request without draft.",
"type": "invalid_request_error"
}
}Authorizations
##All endpoints require Bearer Token authentication##
Get API Key:
Visit the API Key Management Page to obtain your API Key
Add to request header:
Authorization: Bearer YOUR_API_KEY
Body
Text prompt describing the desired video. Supports both Chinese and English, recommended no more than 500 characters for Chinese or 1000 words for English. Maximum prompt length: 10000 tokens
Note:
- This model does not support
video_urlsoraudio_urlsinput
"The camera slowly zooms in, the scene gradually comes to life"
Image URL array, 1–2 images
Image count and behavior:
| Image Count | Behavior | Role |
|---|---|---|
| 1 image | First-frame image-to-video | Automatically set as first_frame |
| 2 images | First-last-frame image-to-video | 1st image → first_frame, 2nd image → last_frame |
Image requirements:
- Supported formats:
.jpeg,.png,.webp - Aspect ratio (width/height):
0.4~2.5 - Width/height pixels:
300~6000px - Max size per image:
30MB - Total request body size must not exceed
64MB - When providing first and last frames, both images can be identical. If aspect ratios differ, the first frame takes priority and the last frame will be automatically cropped to fit
- Image URLs must be directly accessible by the server
1 - 2 elements["https://example.com/first-frame.jpg"]
Video resolution, defaults to 720p
Options:
480p: Lower clarity, lower cost720p: Standard clarity, this is the default1080p: Ultra HD clarity
Draft mode: When draft is true, only 480p is supported. If omitted, quality automatically defaults to 480p
480p, 720p, 1080p "720p"
Draft mode switch, defaults to false
Details:
true: Generate a 480p draft first, with faster turnaround and standard 480p billing- When enabled,
qualitymust be480por omitted. Any other resolution returns a 400 parameter error - Must be a top-level request body field. Placing it inside
model_paramsreturns a 400 parameter error
Convert to a final video:
- Once the draft is complete, querying the task returns
draft_expires_at - Before that time, pass the draft task ID to Seedance 2.5 Draft-to-Video to generate a 1080p final video with the same content
- The final video and draft are billed separately. If you are not satisfied with the draft, skip conversion and pay only for the draft
- The default validity period is 24 hours after the draft completes; the actual deadline is
draft_expires_at. Submit the conversion request early: expiration while queued also causes conversion to fail
Temporary unavailability: A 503 error may be returned when the service is temporarily unavailable. If the error code is draft_unavailable, retry later or remove draft to use normal generation mode
false
Video aspect ratio, image-to-video only supports adaptive
Options:
adaptive: Automatically selects the closest aspect ratio based on the first-frame image proportions, the only value this model accepts- Fixed ratios such as
16:9or9:16cannot be specified for this model
adaptive "adaptive"
Content filter, enabled by default true
Options:
true: Standard content safety check, this is the defaultfalse: Relaxes content restrictions, billed at +10% (1.1x). Illegal and prohibited content is always enforced regardless of this setting
Mutually exclusive with web search:
content_filter: falseandmodel_params.web_search: truecannot be used together; sending both returns a 400 parameter error- Keep
content_filter: true(the default) when web search is needed
true
Output container format, defaults to mp4
Options:
mp4: H.264 encoding with the best compatibility and standard color precision, this is the defaultmov: H.264 + yuv444p chroma sampling + PCM audio for higher color fidelity, recommended for color grading, keying and compositing workflows. Browser inline playback may not support it; download and play with VLC / mpv / ffplay. No extra charge
mp4, mov "mp4"
HTTPS callback URL for task completion
Callback timing:
- Triggered when the task is completed or failed
- Sent after billing confirmation is complete
Security restrictions:
- Only HTTPS protocol is supported
- Callbacks to private IP addresses are prohibited (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- URL length must not exceed
2048characters
Callback mechanism:
- Timeout:
10seconds - Up to
3retries after failure (at1/2/4seconds after failure respectively) - Callback response body format is consistent with the task query endpoint response format
- A 2xx status code is considered successful; other status codes trigger retries
"https://your-domain.com/webhooks/video-task-completed"
Response
Video generation task created successfully