Kling 3.0 is Kuaishou's February 2026 video model. It handles text-to-video and image-to-video with an optional first and last frame, 3 to 15 seconds, in 16:9, 9:16 or 1:1. Resolution tiers are std (720p), pro (1080p) and 4K. Optional native audio covers dialogue, lip sync and ambient sound. Prompts go up to 2,500 characters. Kuaishou's multi-shot mode and @-elements are not available on Jantaris yet; instead, describe several shots in one prompt ("Shot 1: ..., Shot 2: ...").
Best for
- Transitions from a first to a last frame
- Talking characters with lip-synced dialogue
- Product shots animated from a packshot
- 4K social and ad content
Prompting tips
- Put spoken lines in quotes and say who speaks and in what voice.
- For a transition, send the first frame in
image_urland the last inend_image_url, then describe the move between them. - Audio is off by default; set
generate_audio: truefor dialogue and ambience. - With images attached, the aspect ratio follows the image.
- For several shots in one clip, list them in order: "Shot 1: ..., Shot 2: ...".
- To copy motion from your own video onto a character, use Motion Control, covered in AI motion control for dance videos.
FAQ
How much does the Kling 3.0 API cost?
Kling 3.0 costs from $0.169 per second. The estimate for your exact settings is returned before the job runs, and failed generations are not charged. Worked 5, 10 and 15 s examples are in Kling 3.0 pricing: clip examples, and Kuaishou's plans and credits in Kling without a subscription: plans and credits.
How long can a Kling 3.0 video be?
3 to 15 seconds per request, with 6 seconds as the default.
Does Kling 3.0 generate speech?
Yes. With native audio on, it produces dialogue with lip sync plus ambient sound.
How to call Kling 3.0 via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": 6
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "kling-3.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": 6
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "kling-3.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": 6
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 2500 chars | |
aspect_ratio | string | 16:9 9:16 1:1 | 16:9 |
resolution | string | 720p 1080p 4k | 1080p |
duration | integer | 3-15 | 6 |
generate_audio | boolean | false | |
image_url | string | ||
end_image_url | string | ||
image_urls | array | max 2 |
The same schema is available from GET /v1/models/kling-3.0.









