curl --request POST \
--url https://api.modellix.ai/api/v1/kling/kling-v3-i2v \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
image: 'https://example.com/keyframe.jpg',
prompt: 'The subject slowly turns toward the camera while wind moves through their hair'
})
};
fetch('https://api.modellix.ai/api/v1/kling/kling-v3-i2v', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.modellix.ai/api/v1/kling/kling-v3-i2v"
payload = {
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.modellix.ai/api/v1/kling/kling-v3-i2v"
payload := strings.NewReader("{\n \"image\": \"https://example.com/keyframe.jpg\",\n \"prompt\": \"The subject slowly turns toward the camera while wind moves through their hair\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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.modellix.ai/api/v1/kling/kling-v3-i2v")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"https://example.com/keyframe.jpg\",\n \"prompt\": \"The subject slowly turns toward the camera while wind moves through their hair\"\n}")
.asString();const url = 'https://api.modellix.ai/api/v1/kling/kling-v3-i2v';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
image: 'https://example.com/keyframe.jpg',
prompt: 'The subject slowly turns toward the camera while wind moves through their hair'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.modellix.ai/api/v1/kling/kling-v3-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' => 'https://example.com/keyframe.jpg',
'prompt' => 'The subject slowly turns toward the camera while wind moves through their hair'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.modellix.ai/api/v1/kling/kling-v3-i2v")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"https://example.com/keyframe.jpg\",\n \"prompt\": \"The subject slowly turns toward the camera while wind moves through their hair\"\n}"
response = http.request(request)
puts response.read_bodyimport Foundation
let parameters = [
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.modellix.ai/api/v1/kling/kling-v3-i2v")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.modellix.ai/api/v1/kling/kling-v3-i2v' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
}'{
"code": 0,
"message": "success",
"data": {
"status": "pending",
"task_id": "task-v3-i2v-123",
"model_id": "model-123",
"get_result": {
"method": "GET",
"url": "https://api.modellix.ai/api/v1/tasks/task-v3-i2v-123"
}
}
}{
"code": 400,
"message": "Invalid parameters: parameter 'image' is required"
}{
"code": 401,
"message": "Authentication failed: invalid API key"
}{
"code": 429,
"message": "Rate limit exceeded: 100 requests per minute, retry after 60 seconds"
}{
"code": 500,
"message": "Internal server error"
}Kling V3 I2V
[Core Function] Kling V3 I2V is the next-generation image-to-video model. [Strengths] It transforms static images into video with support for 4K resolution, 15-second durations, and native audio, providing superior motion and character expressiveness. [Best For] Highly recommended for: animating concept art, bringing portraits to life in 4K, and generating long 15s scenes from a single frame. [Limitations] Do NOT use this model if you need multimodal reference elements (like character consistency across shots) or multi-shot generation; use V3 Omni instead. [Routing] Use this model by default for high-quality single-image-to-video tasks.
curl --request POST \
--url https://api.modellix.ai/api/v1/kling/kling-v3-i2v \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
image: 'https://example.com/keyframe.jpg',
prompt: 'The subject slowly turns toward the camera while wind moves through their hair'
})
};
fetch('https://api.modellix.ai/api/v1/kling/kling-v3-i2v', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.modellix.ai/api/v1/kling/kling-v3-i2v"
payload = {
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.modellix.ai/api/v1/kling/kling-v3-i2v"
payload := strings.NewReader("{\n \"image\": \"https://example.com/keyframe.jpg\",\n \"prompt\": \"The subject slowly turns toward the camera while wind moves through their hair\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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.modellix.ai/api/v1/kling/kling-v3-i2v")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"https://example.com/keyframe.jpg\",\n \"prompt\": \"The subject slowly turns toward the camera while wind moves through their hair\"\n}")
.asString();const url = 'https://api.modellix.ai/api/v1/kling/kling-v3-i2v';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
image: 'https://example.com/keyframe.jpg',
prompt: 'The subject slowly turns toward the camera while wind moves through their hair'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.modellix.ai/api/v1/kling/kling-v3-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' => 'https://example.com/keyframe.jpg',
'prompt' => 'The subject slowly turns toward the camera while wind moves through their hair'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.modellix.ai/api/v1/kling/kling-v3-i2v")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"https://example.com/keyframe.jpg\",\n \"prompt\": \"The subject slowly turns toward the camera while wind moves through their hair\"\n}"
response = http.request(request)
puts response.read_bodyimport Foundation
let parameters = [
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.modellix.ai/api/v1/kling/kling-v3-i2v")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.modellix.ai/api/v1/kling/kling-v3-i2v' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"image": "https://example.com/keyframe.jpg",
"prompt": "The subject slowly turns toward the camera while wind moves through their hair"
}'{
"code": 0,
"message": "success",
"data": {
"status": "pending",
"task_id": "task-v3-i2v-123",
"model_id": "model-123",
"get_result": {
"method": "GET",
"url": "https://api.modellix.ai/api/v1/tasks/task-v3-i2v-123"
}
}
}{
"code": 400,
"message": "Invalid parameters: parameter 'image' is required"
}{
"code": 401,
"message": "Authentication failed: invalid API key"
}{
"code": 429,
"message": "Rate limit exceeded: 100 requests per minute, retry after 60 seconds"
}{
"code": 500,
"message": "Internal server error"
}Authorizations
API Key authentication. Format: Bearer YOUR_API_KEY.
Body
Kling V3 image-to-video request aligned with official settings: audio native|off, resolution 720p|1080p|4k, multi_shot, duration. image=first_frame, image_tail=last_frame; no aspect_ratio.
Video generation prompt. May include both positive and negative descriptions in the same text (no separate negative_prompt field). For custom multi-shot storyboards, use shot n, m, words; shot n, m, words; where n is the shot index (1-6), m is shot duration in seconds (each >= 1s; sum of all shot durations must equal total duration), and words is the per-shot prompt (max 512 characters). Max length 3072 (recommended <= 2500).
1 - 3072"shot 1, 2, The subject slowly turns toward the camera; shot 2, 3, Wind moves through their hair in a close-up;"
First-frame reference image URL or Base64 string.
1"https://example.com/keyframe.jpg"
Optional last-frame reference image URL or Base64 string.
1"https://example.com/last-frame.jpg"
Whether to generate audio for the video. Official settings.audio: native | off.
native, off "off"
When true, the model automatically plans multi-shot transitions. When false, generates a single continuous shot.
true
Output video resolution. Aspect ratio follows the first frame.
720p, 1080p, 4k "1080p"
Video duration in seconds. Public API accepts integer values.
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 5