Kling4.0
A next-generation video model for professional audiovisual creation with native 30-second generation, 4K 10-bit HDR, stereo audio, multi-keyframes, and multimodal references.
curl --request POST \
--url https://api.linkmodel.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "Kling4.0",
"first_frame_image": "<string>",
"last_frame_image": "<string>",
"images": [
"<string>"
],
"videos": [
"<string>"
],
"extends.refer_type": "feature",
"duration": 5,
"prompt": "<string>",
"resolution": "720P"
}
'import requests
url = "https://api.linkmodel.ai/v1/videos/generations"
payload = {
"model": "Kling4.0",
"first_frame_image": "<string>",
"last_frame_image": "<string>",
"images": ["<string>"],
"videos": ["<string>"],
"extends.refer_type": "feature",
"duration": 5,
"prompt": "<string>",
"resolution": "720P"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'Kling4.0',
first_frame_image: '<string>',
last_frame_image: '<string>',
images: ['<string>'],
videos: ['<string>'],
'extends.refer_type': 'feature',
duration: 5,
prompt: '<string>',
resolution: '720P'
})
};
fetch('https://api.linkmodel.ai/v1/videos/generations', 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.linkmodel.ai/v1/videos/generations",
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([
'model' => 'Kling4.0',
'first_frame_image' => '<string>',
'last_frame_image' => '<string>',
'images' => [
'<string>'
],
'videos' => [
'<string>'
],
'extends.refer_type' => 'feature',
'duration' => 5,
'prompt' => '<string>',
'resolution' => '720P'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.linkmodel.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"Kling4.0\",\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"videos\": [\n \"<string>\"\n ],\n \"extends.refer_type\": \"feature\",\n \"duration\": 5,\n \"prompt\": \"<string>\",\n \"resolution\": \"720P\"\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.linkmodel.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"Kling4.0\",\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"videos\": [\n \"<string>\"\n ],\n \"extends.refer_type\": \"feature\",\n \"duration\": 5,\n \"prompt\": \"<string>\",\n \"resolution\": \"720P\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkmodel.ai/v1/videos/generations")
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 \"model\": \"Kling4.0\",\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"videos\": [\n \"<string>\"\n ],\n \"extends.refer_type\": \"feature\",\n \"duration\": 5,\n \"prompt\": \"<string>\",\n \"resolution\": \"720P\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"data": {
"task_id": "aurora_abc123",
"order_id": "019da9cf-d1db-78e1-ac23-526774d01193",
"status": "Processing",
"price": 0.074
},
"msg": "success",
"request_id": "250b66dd-e1fb-4bb6-b5f6-c668efadc35d"
}{
"code": 400,
"msg": "task_id is required",
"request_id": "96be7a7d-3e81-4916-a6b8-19b32773a693"
}{
"code": 401,
"data": {},
"msg": "invalid api key",
"request_id": "bff4c295-c7da-4507-9708-4627cb6373ba"
}{
"code": 500,
"msg": "create task failed: billing: code=100601: insufficient balance",
"request_id": "3409f6fb-fa9a-4534-b530-195b5f6f4e32"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Kling4.0 Use reference images or first/last frames, but not both.
10Maximum 5 items.
5Must be one of: feature.
feature Must be one of: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30. Defaults to 5. Value is in s.
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 3 <= x <= 30Length must be at most 5000.
5000Must be one of: 1080P, 720P. Defaults to 720P.
1080P, 720P Choose an aspect ratio for text-to-video; image references use auto when omitted.
16x9, 1x1, 21x9, 9x16 Response
Business response. code=0 means the task was accepted; validation failures can return HTTP 200 with code=400.
Was this page helpful?
curl --request POST \
--url https://api.linkmodel.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "Kling4.0",
"first_frame_image": "<string>",
"last_frame_image": "<string>",
"images": [
"<string>"
],
"videos": [
"<string>"
],
"extends.refer_type": "feature",
"duration": 5,
"prompt": "<string>",
"resolution": "720P"
}
'import requests
url = "https://api.linkmodel.ai/v1/videos/generations"
payload = {
"model": "Kling4.0",
"first_frame_image": "<string>",
"last_frame_image": "<string>",
"images": ["<string>"],
"videos": ["<string>"],
"extends.refer_type": "feature",
"duration": 5,
"prompt": "<string>",
"resolution": "720P"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'Kling4.0',
first_frame_image: '<string>',
last_frame_image: '<string>',
images: ['<string>'],
videos: ['<string>'],
'extends.refer_type': 'feature',
duration: 5,
prompt: '<string>',
resolution: '720P'
})
};
fetch('https://api.linkmodel.ai/v1/videos/generations', 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.linkmodel.ai/v1/videos/generations",
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([
'model' => 'Kling4.0',
'first_frame_image' => '<string>',
'last_frame_image' => '<string>',
'images' => [
'<string>'
],
'videos' => [
'<string>'
],
'extends.refer_type' => 'feature',
'duration' => 5,
'prompt' => '<string>',
'resolution' => '720P'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.linkmodel.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"Kling4.0\",\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"videos\": [\n \"<string>\"\n ],\n \"extends.refer_type\": \"feature\",\n \"duration\": 5,\n \"prompt\": \"<string>\",\n \"resolution\": \"720P\"\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.linkmodel.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"Kling4.0\",\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"videos\": [\n \"<string>\"\n ],\n \"extends.refer_type\": \"feature\",\n \"duration\": 5,\n \"prompt\": \"<string>\",\n \"resolution\": \"720P\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkmodel.ai/v1/videos/generations")
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 \"model\": \"Kling4.0\",\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"videos\": [\n \"<string>\"\n ],\n \"extends.refer_type\": \"feature\",\n \"duration\": 5,\n \"prompt\": \"<string>\",\n \"resolution\": \"720P\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"data": {
"task_id": "aurora_abc123",
"order_id": "019da9cf-d1db-78e1-ac23-526774d01193",
"status": "Processing",
"price": 0.074
},
"msg": "success",
"request_id": "250b66dd-e1fb-4bb6-b5f6-c668efadc35d"
}{
"code": 400,
"msg": "task_id is required",
"request_id": "96be7a7d-3e81-4916-a6b8-19b32773a693"
}{
"code": 401,
"data": {},
"msg": "invalid api key",
"request_id": "bff4c295-c7da-4507-9708-4627cb6373ba"
}{
"code": 500,
"msg": "create task failed: billing: code=100601: insufficient balance",
"request_id": "3409f6fb-fa9a-4534-b530-195b5f6f4e32"
}