# Seedance 1.5 Pro Image To Video - Documentation

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown is available with `Accept: text/markdown` and `.md` URL variants.

Source: /docs/api-reference/model-apis-seedance-v1.5-pro-i2v

# Seedance 1.5 Pro Image To Video

POST

/

v3

/

async

/

seedance-v1.5-pro-i2v

Seedance 1.5 Pro Image To Video

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v \
--header 'Authorization: &#x3C;authorization>' \
--header 'Content-Type: &#x3C;content-type>' \
--data '
{
"fps": 123,
"seed": 123,
"image": "&#x3C;string>",
"ratio": "&#x3C;string>",
"prompt": "&#x3C;string>",
"duration": 123,
"watermark": true,
"last_image": "&#x3C;string>",
"resolution": "&#x3C;string>",
"camera_fixed": true,
"service_tier": "&#x3C;string>",
"generate_audio": true,
"execution_expires_after": 123
}
'
```

```
import requestsurl = "https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v"payload = { "fps": 123, "seed": 123, "image": "&#x3C;string>", "ratio": "&#x3C;string>", "prompt": "&#x3C;string>", "duration": 123, "watermark": True, "last_image": "&#x3C;string>", "resolution": "&#x3C;string>", "camera_fixed": True, "service_tier": "&#x3C;string>", "generate_audio": True, "execution_expires_after": 123}headers = { "Content-Type": "&#x3C;content-type>", "Authorization": "&#x3C;authorization>"}response = requests.post(url, json=payload, headers=headers)print(response.text)
```

```
const options = { method: 'POST', headers: {'Content-Type': '&#x3C;content-type>', Authorization: '&#x3C;authorization>'}, body: JSON.stringify({ fps: 123, seed: 123, image: '&#x3C;string>', ratio: '&#x3C;string>', prompt: '&#x3C;string>', duration: 123, watermark: true, last_image: '&#x3C;string>', resolution: '&#x3C;string>', camera_fixed: true, service_tier: '&#x3C;string>', generate_audio: true, execution_expires_after: 123 })};fetch('https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v', options) .then(res => res.json()) .then(res => console.log(res)) .catch(err => console.error(err));
```

```
&#x3C;?php$curl = curl_init();curl_setopt_array($curl, [ CURLOPT_URL => "https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode([ 'fps' => 123, 'seed' => 123, 'image' => '&#x3C;string>', 'ratio' => '&#x3C;string>', 'prompt' => '&#x3C;string>', 'duration' => 123, 'watermark' => true, 'last_image' => '&#x3C;string>', 'resolution' => '&#x3C;string>', 'camera_fixed' => true, 'service_tier' => '&#x3C;string>', 'generate_audio' => true, 'execution_expires_after' => 123 ]), CURLOPT_HTTPHEADER => [ "Authorization: &#x3C;authorization>", "Content-Type: &#x3C;content-type>" ],]);$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if ($err) { echo "cURL Error #:" . $err;} else { echo $response;}
```

```
package mainimport (	"fmt"	"strings"	"net/http"	"io")func main() {	url := "https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v"	payload := strings.NewReader("{\n \"fps\": 123,\n \"seed\": 123,\n \"image\": \"&#x3C;string>\",\n \"ratio\": \"&#x3C;string>\",\n \"prompt\": \"&#x3C;string>\",\n \"duration\": 123,\n \"watermark\": true,\n \"last_image\": \"&#x3C;string>\",\n \"resolution\": \"&#x3C;string>\",\n \"camera_fixed\": true,\n \"service_tier\": \"&#x3C;string>\",\n \"generate_audio\": true,\n \"execution_expires_after\": 123\n}")	req, _ := http.NewRequest("POST", url, payload)	req.Header.Add("Content-Type", "&#x3C;content-type>")	req.Header.Add("Authorization", "&#x3C;authorization>")	res, _ := http.DefaultClient.Do(req)	defer res.Body.Close()	body, _ := io.ReadAll(res.Body)	fmt.Println(string(body))}
```

```
HttpResponse&#x3C;String> response = Unirest.post("https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v") .header("Content-Type", "&#x3C;content-type>") .header("Authorization", "&#x3C;authorization>") .body("{\n \"fps\": 123,\n \"seed\": 123,\n \"image\": \"&#x3C;string>\",\n \"ratio\": \"&#x3C;string>\",\n \"prompt\": \"&#x3C;string>\",\n \"duration\": 123,\n \"watermark\": true,\n \"last_image\": \"&#x3C;string>\",\n \"resolution\": \"&#x3C;string>\",\n \"camera_fixed\": true,\n \"service_tier\": \"&#x3C;string>\",\n \"generate_audio\": true,\n \"execution_expires_after\": 123\n}") .asString();
```

```
require 'uri'require 'net/http'url = URI("https://api.novita.ai/v3/async/seedance-v1.5-pro-i2v")http = Net::HTTP.new(url.host, url.port)http.use_ssl = truerequest = Net::HTTP::Post.new(url)request["Content-Type"] = '&#x3C;content-type>'request["Authorization"] = '&#x3C;authorization>'request.body = "{\n \"fps\": 123,\n \"seed\": 123,\n \"image\": \"&#x3C;string>\",\n \"ratio\": \"&#x3C;string>\",\n \"prompt\": \"&#x3C;string>\",\n \"duration\": 123,\n \"watermark\": true,\n \"last_image\": \"&#x3C;string>\",\n \"resolution\": \"&#x3C;string>\",\n \"camera_fixed\": true,\n \"service_tier\": \"&#x3C;string>\",\n \"generate_audio\": true,\n \"execution_expires_after\": 123\n}"response = http.request(request)puts response.read_body
```

200

```
{
"id": "&#x3C;string>"
}
```

Seedance 1.5 pro Image to Video API.

This is an asynchronous API; only the task_id will be returned. You should use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the video generation results.

##

[​](#request-headers)

Request Headers

[​](#param-content-type)

Content-Type

string

required

Supports: `application/json`

[​](#param-authorization)

Authorization

string

required

Bearer authentication format, for example: Bearer {{API Key}}.

##

[​](#request-body)

Request Body

[​](#param-fps)

fps

integer

default:24

Frame rate (frames per second). Only 24 fps is supported.Optional values: `24`

[​](#param-seed)

seed

integer

Seed integer for controlling randomness. Range: [-1, 2^32-1]. -1 means using a random seed. The same seed with the same request produces similar (but not identical) results.Value range: [-1, 4294967295]

[​](#param-image)

image

string

required

The first frame image for image-to-video generation. Can be an image URL or Base64-encoded image. URL must be accessible. Base64 format: `data:image/<format>;base64,<encoded_data>`. Supported formats: jpeg, png, webp, bmp, tiff, gif. Aspect ratio: (0.4, 2.5), dimensions: (300, 6000) pixels, size: < 30 MB.

[​](#param-ratio)

ratio

string

default:"adaptive"

Aspect ratio of the generated video. ‘adaptive’: For text-to-video, the model intelligently selects the best ratio based on the prompt; for image-to-video, it automatically selects based on the uploaded first frame image ratio.Optional values: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive`

[​](#param-prompt)

prompt

string

required

Text prompt describing the expected video content. Supports both Chinese and English. Recommended not to exceed 500 characters. To generate audio with dialogue, place the spoken content within double quotes for better audio generation results.

[​](#param-duration)

duration

integer

default:5

Video duration in seconds. Supports specified duration within the range [4, 12]. Note: Duration affects billing.Value range: [4, 12]

[​](#param-watermark)

watermark

boolean

default:false

Whether the generated video includes a watermark. true: with watermark. false: without watermark.

[​](#param-last-image)

last_image

string

The last frame image for first-and-last-frame image-to-video generation. Can be an image URL or Base64-encoded image. Requirements are the same as the image field. When aspect ratios differ, the last frame will be automatically cropped to match the first frame.

[​](#param-resolution)

resolution

string

default:"720p"

Video resolution. Seedance 1.5 pro supports 480p, 720p, and 1080p.Optional values: `480p`, `720p`, `1080p`

[​](#param-camera-fixed)

camera_fixed

boolean

default:false

Whether to fix the camera position. true: The platform appends a fixed camera instruction to the prompt (effect not guaranteed). false: Camera is not fixed.

[​](#param-service-tier)

service_tier

string

default:"default"

Service tier for processing the request. ‘default’: Online inference mode with lower RPM and concurrency quota, suitable for time-sensitive scenarios. ‘flex’: Offline inference mode with higher TPD quota at 50% of the online mode price, suitable for latency-insensitive scenarios.Optional values: `default`, `flex`

[​](#param-generate-audio)

generate_audio

boolean

default:true

Whether the generated video includes synchronized audio. true: Video includes automatically generated speech, sound effects, and background music based on the prompt and visual content. false: Output silent video.

[​](#param-execution-expires-after)

execution_expires_after

integer

default:172800

Task timeout threshold in seconds, calculated from the created_at timestamp. Default: 172800 (48 hours). Range: [3600, 259200]. Tasks exceeding this time will be automatically terminated and marked as ‘expired’.Value range: [3600, 259200]

##

[​](#response)

Response

[​](#param-id)

id

string

Video generation task ID. Use this ID to query the task result API to check the task status and retrieve the generated video URL upon success.

Last modified on April 10, 2026
