Video
Kling 3.0
Generate 3–15 second Kling 3.0 clips from text or from a first and last frame, with optional native sound, multi-shot prompts and reusable elements, delivered as a task.
Kling 3.0 is Kuaishou's video generation model. One request makes a 3–15 second clip from a prompt, or from a first frame and an optional last frame, at three quality modes (std, pro, 4K), with native sound when you ask for it. A clip can also be a sequence of up to five shots, each with its own prompt and length. Send the request, keep the returned task ID, and read the finished video from the task. Images go in as URLs.
Model IDs
| Model ID | Inputs | Modes | Length |
|---|---|---|---|
kling-3-0 | text, first and last frame, elements | std, pro, 4K | 3–15 seconds |
See the model page for current prices.
Quick example
curl https://api.seedrouter.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3-0",
"prompt": "A red paper boat drifting on a calm pond at sunrise, soft mist on the water, slow push-in, no text, no logos.",
"mode": "pro",
"duration": 5,
"aspect_ratio": "16:9"
}'Endpoint
POST https://api.seedrouter.ai/v1/videos/generations| Header | Value |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
The response is a task ({"id": "task_...", "status": "processing"}), not the finished video. Poll GET /v1/tasks/{task_id} for the result. Keep API keys in server-side code.
Parameters
| Field | Type | Default | Notes |
|---|---|---|---|
model | string | required | kling-3-0 |
prompt | string | required for a single shot | Up to 2,500 characters. Optional in multi-shot mode. |
image_urls | array of URLs | none | Up to 2 images: the first is the first frame, the second the last frame. Without images the clip is text to video. |
mode | enum | pro | std, pro or 4K (uppercase K). |
duration | integer | 5 | 3–15 seconds. |
aspect_ratio | enum | 16:9 | 16:9, 9:16 or 1:1. |
sound | boolean | false | Generate native sound with the video. |
multi_shots | boolean | false | Make the clip from the shots in multi_prompt. |
multi_prompt | array | none | Up to 5 shots, each {"prompt", "duration"}: a prompt of up to 500 characters and a whole number of seconds from 1 to 12. Required when multi_shots is true. |
kling_elements | array | none | Up to 3 elements, each {"name", "description", "element_input_urls"} with 2–4 image URLs. |
The schema is strict: unknown fields are rejected rather than ignored. callback_url is not available; poll the task instead.
Multi-shot clips
Set multi_shots to true and describe each shot in multi_prompt. The shot durations must add up to 3–15 seconds; that sum is the clip length, and duration is not used. prompt can be left out or used for what every shot shares.
{
"model": "kling-3-0",
"mode": "pro",
"multi_shots": true,
"multi_prompt": [
{"prompt": "A red paper boat on a calm pond at sunrise, wide shot", "duration": 3},
{"prompt": "The boat drifts under a small wooden bridge, low angle", "duration": 3}
]
}Elements
An element is a subject the model keeps consistent across the clip: a person, a product or a character. Give it a name, a short description and 2–4 images of it, then mention it by name in the prompt (for example @hero).
{
"model": "kling-3-0",
"prompt": "@hero slowly turns toward the camera in soft window light",
"kling_elements": [
{
"name": "hero",
"description": "a young woman with short black hair and a yellow raincoat",
"element_input_urls": ["https://example.com/hero-front.png", "https://example.com/hero-side.png"]
}
]
}Media inputs
Every image is a public HTTP(S) URL. Base64 data URIs are not accepted: upload the file to your own storage and pass its URL. Use JPG or PNG images of 10 MB or less.
Pricing dimensions
Check the model pricing section for current rates. Kling 3.0 is billed per second of video, at a rate set by the mode and by whether sound is on:
billed seconds = duration (single shot)
billed seconds = Σ multi_prompt[].duration (multi_shots: true)
cost = billed seconds × rate per secondThe billed seconds are known when the request is accepted, so the amount reserved is the amount charged. View final charges in your account usage history. Failed tasks are not charged.
Output schema
Submission returns the task:
{"id": "task_...", "model": "kling-3-0", "status": "processing", "created_at": 1789689600}Get the task
GET https://api.seedrouter.ai/v1/tasks/{task_id}Poll every 10–20 seconds until status is completed or failed. A network timeout while polling does not mean generation failed: keep the task ID and resume checking it. Do not create another task to check progress.
Completed task
{
"id": "task_...",
"model": "kling-3-0",
"status": "completed",
"created_at": 1789689600,
"finished_at": 1789689710,
"output": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4"
}
}In our tests a 3-second std clip came back as MP4 (H.264) at 1280 × 720, and a 5-second pro clip with sound at 1920 × 1080 with an audio track, each in about two to three minutes.
Errors
Requests rejected before a task is created return an HTTP error with an error object and are not charged. A task that fails after acceptance returns HTTP 200 when queried, with status: "failed" and an error object.
See the shared error catalog for codes, HTTP statuses, and retry guidance.
{
"id": "task_...",
"model": "kling-3-0",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}If submission itself times out, check your tasks before submitting again: the first request may have been accepted.
Tips
- Describe subject, place, camera move and light in one sentence each; Kling follows camera language such as "slow push-in" and "low angle".
- Draft in
std, then render the final shot inproor4Kwith the same request. - Use a first and a last frame to control where a shot starts and ends.
- Split a scene into shots with
multi_promptinstead of describing several cuts in one prompt. - Add
no text, no logosto keep invented marks out.
