Kling-o1 Image to Video
curl --request POST \
--url https://api.novita.ai/v3/async/kling-o1-i2v \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"image": "<string>",
"prompt": "<string>",
"duration": 123,
"last_image": "<string>",
"aspect_ratio": "<string>"
}
'import requests
url = "https://api.novita.ai/v3/async/kling-o1-i2v"
payload = {
"image": "<string>",
"prompt": "<string>",
"duration": 123,
"last_image": "<string>",
"aspect_ratio": "<string>"
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "<authorization>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: '<authorization>'},
body: JSON.stringify({
image: '<string>',
prompt: '<string>',
duration: 123,
last_image: '<string>',
aspect_ratio: '<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));<?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' => '<string>',
'prompt' => '<string>',
'duration' => 123,
'last_image' => '<string>',
'aspect_ratio' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.novita.ai/v3/async/kling-o1-i2v"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"last_image\": \"<string>\",\n \"aspect_ratio\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.novita.ai/v3/async/kling-o1-i2v")
.header("Content-Type", "<content-type>")
.header("Authorization", "<authorization>")
.body("{\n \"image\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"last_image\": \"<string>\",\n \"aspect_ratio\": \"<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 = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = '<authorization>'
request.body = "{\n \"image\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"last_image\": \"<string>\",\n \"aspect_ratio\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>"
}Video Generator
Kling-o1 Image to Video
POST
/
v3
/
async
/
kling-o1-i2v
Kling-o1 Image to Video
curl --request POST \
--url https://api.novita.ai/v3/async/kling-o1-i2v \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"image": "<string>",
"prompt": "<string>",
"duration": 123,
"last_image": "<string>",
"aspect_ratio": "<string>"
}
'import requests
url = "https://api.novita.ai/v3/async/kling-o1-i2v"
payload = {
"image": "<string>",
"prompt": "<string>",
"duration": 123,
"last_image": "<string>",
"aspect_ratio": "<string>"
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "<authorization>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: '<authorization>'},
body: JSON.stringify({
image: '<string>',
prompt: '<string>',
duration: 123,
last_image: '<string>',
aspect_ratio: '<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));<?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' => '<string>',
'prompt' => '<string>',
'duration' => 123,
'last_image' => '<string>',
'aspect_ratio' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.novita.ai/v3/async/kling-o1-i2v"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"last_image\": \"<string>\",\n \"aspect_ratio\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.novita.ai/v3/async/kling-o1-i2v")
.header("Content-Type", "<content-type>")
.header("Authorization", "<authorization>")
.body("{\n \"image\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"last_image\": \"<string>\",\n \"aspect_ratio\": \"<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 = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = '<authorization>'
request.body = "{\n \"image\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"last_image\": \"<string>\",\n \"aspect_ratio\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<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 to retrieve the video generation results.
Request Headers
Supports:
application/jsonBearer authentication format, for example: Bearer {{API Key}}.
Request Body
first_frame is the first frame
The positive prompt for the generation.
The duration of the generated media in seconds.Optional values:
5, 10last_frame is the last frame.
The aspect ratio of the generated video.Optional values:
16:9, 9:16, 1:1Response
Use the task_id to request the Task Result API to retrieve the generated outputs.
Last modified on December 5, 2025
Was this page helpful?
⌘I