# Kling-o1 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-kling-o1-i2v

# Kling-o1 Image to Video

POST

/

v3

/

async

/

kling-o1-i2v

Kling-o1 Image to Video

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/async/kling-o1-i2v \
--header 'Authorization: &#x3C;authorization>' \
--header 'Content-Type: &#x3C;content-type>' \
--data '
{
"image": "&#x3C;string>",
"prompt": "&#x3C;string>",
"duration": 123,
"last_image": "&#x3C;string>",
"aspect_ratio": "&#x3C;string>"
}
'
```

```
import requestsurl = "https://api.novita.ai/v3/async/kling-o1-i2v"payload = { "image": "&#x3C;string>", "prompt": "&#x3C;string>", "duration": 123, "last_image": "&#x3C;string>", "aspect_ratio": "&#x3C;string>"}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({ image: '&#x3C;string>', prompt: '&#x3C;string>', duration: 123, last_image: '&#x3C;string>', aspect_ratio: '&#x3C;string>' })};fetch('https://api.novita.ai/v3/async/kling-o1-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/kling-o1-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([ 'image' => '&#x3C;string>', 'prompt' => '&#x3C;string>', 'duration' => 123, 'last_image' => '&#x3C;string>', 'aspect_ratio' => '&#x3C;string>' ]), 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/kling-o1-i2v"	payload := strings.NewReader("{\n \"image\": \"&#x3C;string>\",\n \"prompt\": \"&#x3C;string>\",\n \"duration\": 123,\n \"last_image\": \"&#x3C;string>\",\n \"aspect_ratio\": \"&#x3C;string>\"\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/kling-o1-i2v") .header("Content-Type", "&#x3C;content-type>") .header("Authorization", "&#x3C;authorization>") .body("{\n \"image\": \"&#x3C;string>\",\n \"prompt\": \"&#x3C;string>\",\n \"duration\": 123,\n \"last_image\": \"&#x3C;string>\",\n \"aspect_ratio\": \"&#x3C;string>\"\n}") .asString();
```

```
require 'uri'require 'net/http'url = URI("https://api.novita.ai/v3/async/kling-o1-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 \"image\": \"&#x3C;string>\",\n \"prompt\": \"&#x3C;string>\",\n \"duration\": 123,\n \"last_image\": \"&#x3C;string>\",\n \"aspect_ratio\": \"&#x3C;string>\"\n}"response = http.request(request)puts response.read_body
```

200

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

Kling Omni Video O1 image-to-video tool leverages MVL (Multimodal Vision Language) technology to convert static images into dynamic cinematic videos. It maintains subject consistency while adding natural motion, physical simulation, and smooth scene dynamics.

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-image)

image

string

required

first_frame is the first frame

[​](#param-prompt)

prompt

string

required

The positive prompt for the generation.

[​](#param-duration)

duration

integer

default:5

The duration of the generated media in seconds.Optional values: `5`, `10`

[​](#param-last-image)

last_image

string

last_frame is the last frame.

[​](#param-aspect-ratio)

aspect_ratio

string

default:"16:9"

The aspect ratio of the generated video.Optional values: `16:9`, `9:16`, `1:1`

##

[​](#response)

Response

[​](#param-task-id)

task_id

string

required

Use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the generated outputs.

Last modified on December 5, 2025
