Appearance
Image To Video Generation
Image-to-Video API generates desired videos via images and keywords, leveraging the latest models to produce tailored visual outputs effectively.
API documentation
Interface for removing background from the submitted video:
- Request URL: https://www.cutout.pro/api/v2/imageToVideo/generate
- Request method: POST
- Return type: json data
- Input parameters:
(1)Request parameters (Header)
| Parameter | Parameter Type | Description |
|---|---|---|
| APIKEY | string | Your API Key |
(2) Payload
| Parameter | Parameter Type | Description |
|---|---|---|
| imageUrl | string | Image URL, width and height restrictions: minimum 300 pixels, maximum no more than 6000 pixels, and image size cannot exceed 10MB. |
| prompt | string | Keywords (optional). Filling in keywords can make the video closer to the effect you want. |
(3) Response data
{
"code":0, // 0 indicates success, and the other values are the corresponding error codes
"data": 700842286474565,
"msg":null, // if code is not 0, the error msg of the error
"time": 1615368038661, // the unix timestamp of server
"requestId": "6880539bcc69f3e9bd67a5a6fb35d0fc"
}Sample Code
bash
curl -X POST "https://www.cutout.pro/api/v2/imageToVideo/generate" \
-H "APIKEY: The API key of the account" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "image url",
"prompt": "prompt"
}'python
import requests
import json
url = "https://www.cutout.pro/api/v2/imageToVideo/generate"
headers = {
"APIKEY": "The API key of the account",
"Content-Type": "application/json"
}
data = {
"imageUrl": "image url",
"prompt": "prompt"
}
response = requests.post(url, headers=headers, json=data)
print(response.text)php
<?php
$url = 'https://www.cutout.pro/api/v2/imageToVideo/generate';
$data = array(
'imageUrl' => 'image url',
'prompt' => 'prompt'
);
$options = array(
'http' => array(
'method' => 'POST',
'header' => "APIKEY: The API key of the account\r\n" .
"Content-Type: application/json\r\n",
'content' => json_encode($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;
?>java
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
public class RequestExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String url = "https://www.cutout.pro/api/v2/imageToVideo/generate";
// setting header
HttpHeaders headers = new HttpHeaders();
headers.set("APIKEY", "The API key of the account");
headers.setContentType(MediaType.APPLICATION_JSON);
// request body json
String jsonBody = "{\"imageUrl\":\"image url\",\"prompt\":\"prompt\"}";
HttpEntity<String> request = new HttpEntity<>(jsonBody, headers);
// send post request
String response = restTemplate.postForObject(url, request, String.class);
System.out.println(response);
}
}nodejs
const https = require('https');
const postData = JSON.stringify({
"imageUrl": "https://example.com/your-image.jpg",
"prompt": "prompt"
});
const options = {
hostname: 'www.cutout.pro',
path: '/api/v2/imageToVideo/generate',
method: 'POST',
headers: {
'APIKEY': 'your_api_key_here',
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
let responseData = '';
res.on('data', (chunk) => {
responseData += chunk;
});
res.on('end', () => {
console.log('request success:');
console.log(JSON.parse(responseData));
});
});
req.on('error', (e) => {
console.error('request error:', e.message);
});
req.write(postData);
req.end();Query generation results:
- Request URL: https://www.cutout.pro/api/v2/imageToVideo/getResult
- Request method: GET
- Input parameters:
(1) Request parameters (Header)
| Parameter | Parameter Type | Description |
|---|---|---|
| APIKEY | string | Your API key |
(2) Query String
| Parameter | Parameter Type | Description |
|---|---|---|
| taskId | long | The task ID returned by the submission endpoint. |
(3) Response data
{
"code": 0,
"data": {
"id": 700842286474565,
"userId": 528874,
"imageUrl": "https://example.com/your-image.jpg",
"originalPrompt": "Request keywords",
"resultUrl": "The resulting video URL",
"cover": "The video cover URL of the generated result",
"width": 1024,
"height": 1024,
"status": 1, //0 = process | 1 = success | 2 = failed
"percentage": 100,
"waitNumber": 0,
"createdAt": 1753240476000
},
"msg": "",
"time": 1753241547143,
"requestId": "688057cb0234b17e58a64906f583ae12"
}Return result parameter:
| id | The task id returned when generating. |
|---|---|
| userId | The id used by the current APIKEY. |
| imageUrl | The image URL requested when generating. |
| originalPrompt | Keywords requested when generating. |
| resultUrl | Generate the resulting URL for the video. |
| cover | Generate video cover. |
| width | Generate the width of the video, calculated based on the video cover |
| height | The height of the generated video is calculated based on the video cover |
| status | The status of the generated video, 0 = generating, 1 = generating successfully, 2 = generating failed |
| percentage | The progress of processing the video. When the progress is 100, the video generation is complete. |
| waitNumber | The number of requests currently waiting in queue |
| createdAt | Time when the video was created |
(4) Error Reponse
{
"code": 9011,
"data": null,
"msg": "Image contains inappropriate content, cannot be processed.",
"time": 1753241547143,
"requestId": "688057cb0234b17e58a64906f583ae12"
}Error Code:
| Code | Msg |
|---|---|
| 9011 | Image contains inappropriate content, cannot be processed. |
| 1001 | The server is abnormal. Please contact us. |
| 4002 | No results were found for the current task ID. Please check whether taskId is correct. |
Sample Code
bash
curl -H 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
'https://www.cutout.pro/api/v2/imageToVideo/getResult?taskId=1111'python
import requests
api_key = "your_api_key_here"
task_id = "your_task_id_here"
url = f"https://www.cutout.pro/api/v2/imageToVideo/getResult?taskId={task_id}"
headers = {
"APIKEY": api_key
}
response = requests.get(url, headers=headers)
print(response.text)php
<?php
$apiKey = "your_api_key_here";
$taskId = "your_task_id_here";
$url = "https://www.cutout.pro/api/v2/imageToVideo/getResult?taskId=$taskId";
$headers = array(
'APIKEY: ' . $apiKey
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>java
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
public class Main {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String apiKey = "your_api_key_here";
String taskId = "your_task_id_here";
String url = "https://www.cutout.pro/api/v2/imageToVideo/getResult?taskId=" + taskId;
HttpHeaders headers = new HttpHeaders();
headers.set("APIKEY", apiKey);
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(
url,
HttpMethod.GET,
entity,
String.class
);
System.out.println(response.getBody());
}
}nodejs
const https = require('https');
const apiKey = "your_api_key_here";
const taskId = "your_task_id_here";
const options = {
hostname: 'www.cutout.pro',
path: `/api/v2/imageToVideo/getResult?taskId=${taskId}`,
method: 'GET',
headers: {
'APIKEY': apiKey
}
};
const req = https.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log(data);
});
}).on('error', (error) => {
console.error(error);
});
req.end();The cost incurred by the request
Each request will consume 5 video credits.
Seedance 2.0 and Seedance 2.5 Video Generation
The Seedance API supports text-to-video, first-frame, first-and-last-frame, multimodal reference, video editing, and reference-video continuation requests.
Calling sequence
Seedance generation is an asynchronous workflow. Call the APIs in the following order:
- Call
/seedance2/uploadByUrlonce for every image, video, or audio URL used by the task. - Keep the
mediaType,assetId, andurlreturned for each asset. - Put the returned asset objects into the appropriate fields and call
/seedance/generate. - Save the task ID returned by the generation API.
- Poll
/seedance/getResultwith the task ID untilstatusbecomes2or3.
Important
All three APIs must be called with the same APIKEY. Assets and generated tasks belong to the API user that created them. Seedance API access is currently available only to authorized API users.
1. Import a Seedance asset by URL
This API downloads a publicly accessible image, video, or audio URL, copies the file to private storage, and creates a Seedance asset.
- Request URL:
https://www.cutout.pro/api/v2/imageToVideo/seedance2/uploadByUrl - Request method:
POST - Content type:
application/x-www-form-urlencoded - Return type: JSON
Request parameters
Header
| Parameter | Type | Required | Description |
|---|---|---|---|
| APIKEY | string | Yes | Your API key. The API user must be authorized to use Seedance asset upload. |
Form parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | A public HTTP or HTTPS URL that the server can download directly. |
| mediaType | string | Yes | Asset type: image, video, or audio. It must match the actual file content. |
cURL examples
Import an image:
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance2/uploadByUrl' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'url=https://example.com/reference-image.jpg' \
--data-urlencode 'mediaType=image'Import a video:
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance2/uploadByUrl' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'url=https://example.com/reference-video.mp4' \
--data-urlencode 'mediaType=video'Import an audio file:
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance2/uploadByUrl' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'url=https://example.com/reference-audio.mp3' \
--data-urlencode 'mediaType=audio'Successful response example
json
{
"code": 0,
"data": {
"taskFlag": null,
"mediaType": "image",
"url": "https://example-storage.com/upload/reference-image.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null,
"assetId": "asset-20260831123000-abcd1"
},
"msg": "",
"time": 1788141000000,
"requestId": "example-request-id"
}Response fields
| Field | Type | Description |
|---|---|---|
| taskFlag | string or null | Not used by URL import and normally returned as null. |
| mediaType | string | The verified asset type: image, video, or audio. |
| url | string | The private signed URL created by the service. Pass this value to the generation API without modifying it. |
| firstFrameUrl | string or null | URL import does not extract a video first frame, so this field is normally null. It is not required by the generation API. |
| assetId | string | The Seedance asset ID created for this file. |
Asset requirements
| Type | Supported formats | Maximum size | Additional requirements |
|---|---|---|---|
| Image | JPG, JPEG, PNG, WEBP | 20 MB | The URL content must be a valid image. |
| Video | MP4, MOV | 50 MB | Duration: 2–15 seconds; width and height: 300–6000 px; total pixels: 409600–927408; aspect ratio: 0.4–2.5; frame rate: 24–60 fps. |
| Audio | MP3, WAV | 15 MB | Duration: 2–15 seconds. |
Asset object used by the next API
For the following examples, replace the placeholder values with the complete values returned by this API:
json
{
"mediaType": "image",
"assetId": "asset-20260831123000-abcd1",
"url": "https://example-storage.com/upload/reference-image.jpg?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
}2. Submit a Seedance generation task
- Request URL:
https://www.cutout.pro/api/v2/imageToVideo/seedance/generate - Request method:
POST - Content type:
application/json - Return type: JSON
Request parameters
Header
| Parameter | Type | Required | Description |
|---|---|---|---|
| APIKEY | string | Yes | The same API key used to import the assets. |
JSON payload
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | The generation or editing instruction. In reference mode, @image1, @video1, and @audio1 refer to assets by their array order. |
| model | string | Yes | seedance_2_pro, seedance_2_pro_fast, seedance_2_0_mini, or seedance_2_5. |
| resolution | string | Yes | Output resolution. See the model table below. |
| ratio | string | Yes | Output aspect ratio. Use adaptive when the model should infer the ratio from the input. |
| duration | integer | Yes | Requested duration in seconds. For Seedance 2.5 editing, use -1. |
| generateAudio | boolean | No | Whether the model should generate audio. Defaults to false when omitted. |
| scene | string | No | Business scene identifier. The recommended value is ai-video-seedance2. |
| firstFrameAsset | object | No | The image asset used as the first frame. |
| lastFrameAsset | object | No | The image asset used as the last frame. It cannot be supplied without firstFrameAsset. |
| referenceImageAssets | array | No | Reference image asset objects. |
| videoAssets | array | No | Reference or source video asset objects. |
| audioAssets | array | No | Reference audio asset objects. |
Each asset object accepts these fields:
| Field | Type | Description |
|---|---|---|
| mediaType | string | image, video, or audio. |
| assetId | string | The assetId returned by /seedance2/uploadByUrl. |
| url | string | The complete signed url returned by /seedance2/uploadByUrl. |
| firstFrameUrl | string or null | Optional. It may be left as null for assets imported by URL. |
Supported models
| Model | Supported resolution | Duration |
|---|---|---|
| seedance_2_pro | 480p, 720p, 1080p | A positive duration supported by the model. |
| seedance_2_pro_fast | 480p, 720p | A positive duration supported by the model. |
| seedance_2_0_mini | 480p, 720p | A positive duration supported by the model. |
| seedance_2_5 | 480p, 720p, 1080p | 4–30 seconds; use -1 only for video editing. |
Seedance pricing
Seedance is billed per generated second. The price depends on the selected model and resolution.
The service uses image credits first. If the account does not have enough image credits, it uses video credits at the conversion rate of 2 image credits = 1 video credit.
| Model | Resolution | Image credits per second | Video credits per second |
|---|---|---|---|
| seedance_2_pro | 480p | 3 | 1.5 |
| seedance_2_pro | 720p | 5 | 2.5 |
| seedance_2_pro | 1080p | 10 | 5 |
| seedance_2_pro_fast | 480p | 2 | 1 |
| seedance_2_pro_fast | 720p | 4 | 2 |
| seedance_2_0_mini | 480p | 2 | 1 |
| seedance_2_0_mini | 720p | 4 | 2 |
| seedance_2_5 | 480p | 10 | 5 |
| seedance_2_5 | 720p | 16 | 8 |
| seedance_2_5 | 1080p | 60 | 30 |
For normal generation, calculate the estimated cost as follows:
text
Image-credit cost = image credits per second × requested duration
Video-credit cost = video credits per second × requested durationExamples:
seedance_2_pro, 720p, 5 seconds:5 × 5 = 25image credits, or2.5 × 5 = 12.5video credits.seedance_2_5, 720p, 10 seconds:16 × 10 = 160image credits, or8 × 10 = 80video credits.
Seedance 2.5 editing billing
When seedance_2_5 video editing uses duration: -1, the service initially reserves the cost of 30 seconds. After successful completion, it uses the actual output duration reported by the model and refunds the unused portion.
For example, a 720p editing request initially reserves 16 × 30 = 480 image credits, or 8 × 30 = 240 video credits. If the actual output is 8 seconds, the final cost is 16 × 8 = 128 image credits, or 8 × 8 = 64 video credits, and the unused amount is returned.
Billing notes
- Reference images, reference videos, reference audio, first/last frames, and
generateAudiodo not independently change the price. Billing is determined by model, resolution, and billable duration. - A failed generation task returns the credits charged for that task according to the service's failure-refund processing.
- Billing and refund details are intentionally not included in
/seedance/getResult; that endpoint only returns task progress and output information.
Generation mode examples
The examples below use placeholder asset values. Import every source file first and replace both assetId and url with the corresponding upload response.
A. Multimodal reference mode
Reference images, videos, and audio can be combined in one request. Array numbering starts at 1, so the first entries correspond to @image1, @video1, and @audio1 in the prompt.
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance/generate' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
"scene": "ai-video-seedance2",
"model": "seedance_2_pro",
"prompt": "Let the person in @image1 enter the scene in @video1 and move to the rhythm of @audio1.",
"referenceImageAssets": [
{
"mediaType": "image",
"assetId": "asset-image-001",
"url": "https://example-storage.com/reference-image.jpg?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
}
],
"videoAssets": [
{
"mediaType": "video",
"assetId": "asset-video-001",
"url": "https://example-storage.com/reference-video.mp4?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
}
],
"audioAssets": [
{
"mediaType": "audio",
"assetId": "asset-audio-001",
"url": "https://example-storage.com/reference-audio.mp3?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
}
],
"firstFrameAsset": null,
"lastFrameAsset": null,
"resolution": "720p",
"ratio": "adaptive",
"duration": 5,
"generateAudio": true
}'If a media type is not needed, omit its array or send an empty array. Do not put an image asset into videoAssets or an audio asset into referenceImageAssets.
B. First-and-last-frame mode
Use two image assets to define the beginning and end of the generated video.
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance/generate' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
"scene": "ai-video-seedance2",
"model": "seedance_2_5",
"prompt": "Create a natural transition from the first frame to the last frame while preserving the character identity and visual style.",
"firstFrameAsset": {
"mediaType": "image",
"assetId": "asset-first-frame-001",
"url": "https://example-storage.com/first-frame.jpg?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
},
"lastFrameAsset": {
"mediaType": "image",
"assetId": "asset-last-frame-001",
"url": "https://example-storage.com/last-frame.jpg?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
},
"referenceImageAssets": [],
"videoAssets": [],
"audioAssets": [],
"resolution": "720p",
"ratio": "adaptive",
"duration": 5,
"generateAudio": true
}'For first-frame-only generation, keep firstFrameAsset and set lastFrameAsset to null. Supplying a last frame without a first frame is rejected.
C. Video editing mode
Video editing is available with seedance_2_5. Set duration to -1 and provide at least one source video in videoAssets. The completed response reports the actual output duration.
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance/generate' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
"scene": "ai-video-seedance2",
"model": "seedance_2_5",
"prompt": "Replace the sky with a warm sunset while preserving the original subject, camera movement, and composition.",
"videoAssets": [
{
"mediaType": "video",
"assetId": "asset-edit-video-001",
"url": "https://example-storage.com/source-video.mp4?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
}
],
"referenceImageAssets": [],
"audioAssets": [],
"firstFrameAsset": null,
"lastFrameAsset": null,
"resolution": "720p",
"ratio": "adaptive",
"duration": -1,
"generateAudio": true
}'D. Reference-video continuation mode
To request a continuation, provide a reference video, use a positive output duration, and explicitly describe the continuation in the prompt.
bash
curl --request POST \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance/generate' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
"scene": "ai-video-seedance2",
"model": "seedance_2_5",
"prompt": "Continue naturally from the final frame of the source video. The character keeps running forward with consistent appearance, lighting, scene style, and camera motion.",
"videoAssets": [
{
"mediaType": "video",
"assetId": "asset-continuation-video-001",
"url": "https://example-storage.com/source-video.mp4?X-Amz-Signature=SIGNED_VALUE",
"firstFrameUrl": null
}
],
"referenceImageAssets": [],
"audioAssets": [],
"firstFrameAsset": null,
"lastFrameAsset": null,
"resolution": "720p",
"ratio": "adaptive",
"duration": 10,
"generateAudio": true
}'Continuation behavior
The current request contract does not expose a separate extend flag. A positive-duration request containing only a reference video is submitted as reference-video generation. Clearly describe the continuation in the prompt. Frame-perfect continuation depends on the selected model's current capability and is not guaranteed by a separate API mode switch.
Successful generation response
json
{
"code": 0,
"data": 701234567890123,
"msg": "",
"time": 1788141300000,
"requestId": "example-request-id"
}The numeric value in data is the task ID. Generation is asynchronous; this response means that the task was accepted, not that the video has finished.
3. Query the Seedance task result
- Request URL:
https://www.cutout.pro/api/v2/imageToVideo/seedance/getResult - Request method:
GET - Return type: JSON
Request parameters
Header
| Parameter | Type | Required | Description |
|---|---|---|---|
| APIKEY | string | Yes | The same API key that submitted the generation task. |
Query string
| Parameter | Type | Required | Description |
|---|---|---|---|
| taskId | long | Yes | The task ID returned in data by /seedance/generate. |
cURL example
bash
curl --request GET \
--url 'https://www.cutout.pro/api/v2/imageToVideo/seedance/getResult?taskId=701234567890123' \
--header 'APIKEY: INSERT_YOUR_API_KEY_HERE'Processing response example
json
{
"code": 0,
"data": {
"id": 701234567890123,
"status": 1,
"percentage": 46,
"resultUrl": null,
"duration": 5,
"width": null,
"height": null,
"failReason": null,
"runningTime": null,
"totalTime": null,
"createdAt": 1788141300000
},
"msg": "",
"time": 1788141330000,
"requestId": "example-request-id"
}Successful response example
json
{
"code": 0,
"data": {
"id": 701234567890123,
"status": 2,
"percentage": 100,
"resultUrl": "https://example-storage.com/result/video.mov?X-Amz-Signature=SIGNED_VALUE",
"duration": 5,
"width": 1280,
"height": 720,
"failReason": null,
"runningTime": 82340,
"totalTime": 90125,
"createdAt": 1788141300000
},
"msg": "",
"time": 1788141391000,
"requestId": "example-request-id"
}Failed response example
json
{
"code": 0,
"data": {
"id": 701234567890123,
"status": 3,
"percentage": 38,
"resultUrl": null,
"duration": 5,
"width": null,
"height": null,
"failReason": "generate video failed",
"runningTime": 30120,
"totalTime": 35640,
"createdAt": 1788141300000
},
"msg": "",
"time": 1788141336000,
"requestId": "example-request-id"
}Result fields
| Field | Type | Description |
|---|---|---|
| id | long | Task ID. |
| status | integer | 0: pending; 1: processing; 2: succeeded; 3: failed. Stop polling when the value is 2 or 3. |
| percentage | integer | Generation progress from 0 to 100. Use status, rather than progress alone, to determine the final state. |
| resultUrl | string or null | Signed output video URL. Available when the task succeeds. |
| duration | integer | Video duration in seconds. For completed Seedance 2.5 editing tasks, this is updated to the actual output duration when provided by the model. |
| width | integer or null | Output video width, available after successful generation. |
| height | integer or null | Output video height, available after successful generation. |
| failReason | string or null | User-facing failure reason when status is 3. |
| runningTime | long or null | Model processing time in milliseconds. |
| totalTime | long or null | Total backend processing time in milliseconds. |
| createdAt | long | Task creation time as a Unix timestamp in milliseconds. |
Important notes
- Import every source URL with
/seedance2/uploadByUrlbefore generating. Do not use an asset created by a different API user. - Preserve the complete signed asset URL, including its query string. Do not decode, shorten, or remove signature parameters.
- Pass both
assetIdandurlfrom the upload response. This keeps the request compatible with the supported Seedance 2.0 and 2.5 models. - Use
firstFrameAsset,lastFrameAsset,referenceImageAssets,videoAssets, andaudioAssetsaccording to the actual media type. Do not put the same upload response into an unrelated field. - If an asset array is present and non-empty, it takes priority over its legacy raw-URL field. Avoid mixing
referenceImageAssetswithreferenceImages,videoAssetswithreferenceVideos, oraudioAssetswithreferenceAudiosin the same request. lastFrameAssetrequiresfirstFrameAsset.- Seedance 2.5 edit mode requires
duration: -1and at least one video asset. Other generation modes must use a positive duration. generateAudioisfalsewhen omitted. Set it explicitly when audio generation is required.- Poll every few seconds rather than sending continuous requests. Stop polling on
status: 2orstatus: 3. - The result response intentionally does not expose credits, refund details, prompts, reference assets, or internal generation parameters.
resultUrlis a signed URL. Download or copy the result promptly, and query the result API again if a refreshed URL is needed.
