Text to Video
curl --request POST \
--url https://api.modelhunter.ai/api/v1/kling/text-to-video \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"negative_prompt": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"mode": "<string>",
"sound": "<string>",
"multi_shot": "<string>",
"multi_prompt": [
{}
],
"element_list": [
{}
],
"voice_list": [
{}
]
},
"webhookUrl": "<string>",
"metadata": {}
}
'import requests
url = "https://api.modelhunter.ai/api/v1/kling/text-to-video"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"negative_prompt": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"mode": "<string>",
"sound": "<string>",
"multi_shot": "<string>",
"multi_prompt": [{}],
"element_list": [{}],
"voice_list": [{}]
},
"webhookUrl": "<string>",
"metadata": {}
}
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: '<string>',
input: {
prompt: '<string>',
negative_prompt: '<string>',
duration: 123,
aspect_ratio: '<string>',
mode: '<string>',
sound: '<string>',
multi_shot: '<string>',
multi_prompt: [{}],
element_list: [{}],
voice_list: [{}]
},
webhookUrl: '<string>',
metadata: {}
})
};
fetch('https://api.modelhunter.ai/api/v1/kling/text-to-video', 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.modelhunter.ai/api/v1/kling/text-to-video",
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' => '<string>',
'input' => [
'prompt' => '<string>',
'negative_prompt' => '<string>',
'duration' => 123,
'aspect_ratio' => '<string>',
'mode' => '<string>',
'sound' => '<string>',
'multi_shot' => '<string>',
'multi_prompt' => [
[
]
],
'element_list' => [
[
]
],
'voice_list' => [
[
]
]
],
'webhookUrl' => '<string>',
'metadata' => [
]
]),
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.modelhunter.ai/api/v1/kling/text-to-video"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"negative_prompt\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"mode\": \"<string>\",\n \"sound\": \"<string>\",\n \"multi_shot\": \"<string>\",\n \"multi_prompt\": [\n {}\n ],\n \"element_list\": [\n {}\n ],\n \"voice_list\": [\n {}\n ]\n },\n \"webhookUrl\": \"<string>\",\n \"metadata\": {}\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.modelhunter.ai/api/v1/kling/text-to-video")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"negative_prompt\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"mode\": \"<string>\",\n \"sound\": \"<string>\",\n \"multi_shot\": \"<string>\",\n \"multi_prompt\": [\n {}\n ],\n \"element_list\": [\n {}\n ],\n \"voice_list\": [\n {}\n ]\n },\n \"webhookUrl\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.modelhunter.ai/api/v1/kling/text-to-video")
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\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"negative_prompt\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"mode\": \"<string>\",\n \"sound\": \"<string>\",\n \"multi_shot\": \"<string>\",\n \"multi_prompt\": [\n {}\n ],\n \"element_list\": [\n {}\n ],\n \"voice_list\": [\n {}\n ]\n },\n \"webhookUrl\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "task_ghi789",
"status": "pending",
"type": "text-to-video",
"provider": "kling",
"model": "kling-v3",
"created_at": "2026-02-27T10:00:00Z",
"estimated_seconds": 60
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters"
}
}
Kling
Text to Video
Generate a video from text using Kling.
POST
/
api
/
v1
/
kling
/
text-to-video
Text to Video
curl --request POST \
--url https://api.modelhunter.ai/api/v1/kling/text-to-video \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"negative_prompt": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"mode": "<string>",
"sound": "<string>",
"multi_shot": "<string>",
"multi_prompt": [
{}
],
"element_list": [
{}
],
"voice_list": [
{}
]
},
"webhookUrl": "<string>",
"metadata": {}
}
'import requests
url = "https://api.modelhunter.ai/api/v1/kling/text-to-video"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"negative_prompt": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"mode": "<string>",
"sound": "<string>",
"multi_shot": "<string>",
"multi_prompt": [{}],
"element_list": [{}],
"voice_list": [{}]
},
"webhookUrl": "<string>",
"metadata": {}
}
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: '<string>',
input: {
prompt: '<string>',
negative_prompt: '<string>',
duration: 123,
aspect_ratio: '<string>',
mode: '<string>',
sound: '<string>',
multi_shot: '<string>',
multi_prompt: [{}],
element_list: [{}],
voice_list: [{}]
},
webhookUrl: '<string>',
metadata: {}
})
};
fetch('https://api.modelhunter.ai/api/v1/kling/text-to-video', 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.modelhunter.ai/api/v1/kling/text-to-video",
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' => '<string>',
'input' => [
'prompt' => '<string>',
'negative_prompt' => '<string>',
'duration' => 123,
'aspect_ratio' => '<string>',
'mode' => '<string>',
'sound' => '<string>',
'multi_shot' => '<string>',
'multi_prompt' => [
[
]
],
'element_list' => [
[
]
],
'voice_list' => [
[
]
]
],
'webhookUrl' => '<string>',
'metadata' => [
]
]),
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.modelhunter.ai/api/v1/kling/text-to-video"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"negative_prompt\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"mode\": \"<string>\",\n \"sound\": \"<string>\",\n \"multi_shot\": \"<string>\",\n \"multi_prompt\": [\n {}\n ],\n \"element_list\": [\n {}\n ],\n \"voice_list\": [\n {}\n ]\n },\n \"webhookUrl\": \"<string>\",\n \"metadata\": {}\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.modelhunter.ai/api/v1/kling/text-to-video")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"negative_prompt\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"mode\": \"<string>\",\n \"sound\": \"<string>\",\n \"multi_shot\": \"<string>\",\n \"multi_prompt\": [\n {}\n ],\n \"element_list\": [\n {}\n ],\n \"voice_list\": [\n {}\n ]\n },\n \"webhookUrl\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.modelhunter.ai/api/v1/kling/text-to-video")
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\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"negative_prompt\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"mode\": \"<string>\",\n \"sound\": \"<string>\",\n \"multi_shot\": \"<string>\",\n \"multi_prompt\": [\n {}\n ],\n \"element_list\": [\n {}\n ],\n \"voice_list\": [\n {}\n ]\n },\n \"webhookUrl\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "task_ghi789",
"status": "pending",
"type": "text-to-video",
"provider": "kling",
"model": "kling-v3",
"created_at": "2026-02-27T10:00:00Z",
"estimated_seconds": 60
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters"
}
}
Body Parameters
string
required
Kling model. Options:
kling-v3— Per-second billing, multi-shot, element control (3–15s), $0.084–$0.168/seckling-v2-6— Fixed pricing, std/pro modes (5s or 10s), $0.21–$1.40 per video
object
required
Input parameters for the generation.
Show properties
Show properties
string
required
Text description of the video to generate.
string
Describe what you do not want to see in the output.
number
Video length in seconds.
- V3: Integer from
3to15 - V2.6:
5or10
string
default:"16:9"
Output aspect ratio. Options:
16:9, 9:16, 1:1string
default:"std"
Generation quality mode. Options:
std (standard), pro (professional)string
default:"off"
Enable audio generation with the video. Options:
on, off.Pricing impact (V3):- std + no audio: $0.084/sec
- std + audio: $0.126/sec
- pro + no audio: $0.112/sec
- pro + audio: $0.168/sec
string
V3 only. Enable multi-shot mode. Options:
true— Enable multi-shot with manualmulti_promptsegmentsintelligence— AI-powered automatic scene splitting
object[]
V3 only. Multi-shot segment prompts. Requires
multi_shot to be enabled. Maximum 6 segments.Each segment object:index(number, required) — Shot number, starting from 1, must be consecutiveprompt(string, required) — Description for this shotduration(number) — Duration of this segment in seconds
object[]
V3 only. Element control list. Maximum 4 elements. Each element object:
element_id(number, required) — Positive integer referencing a pre-created element
object[]
Voice list for audio generation. Requires
sound: "on". Each voice object:voice_id(string) — Voice identifiertext(string) — Text to speak
string
URL to receive a webhook when the task completes.
object
Custom key-value metadata to attach to the task.
{
"success": true,
"data": {
"id": "task_ghi789",
"status": "pending",
"type": "text-to-video",
"provider": "kling",
"model": "kling-v3",
"created_at": "2026-02-27T10:00:00Z",
"estimated_seconds": 60
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters"
}
}
⌘I