Kling O3 4K Text to Video API
kwaivgi/kling-video-o3-4k/text-to-videoGenerate 3–15-second videos from text prompts with Kling O3 4K. Outputs 4K video. Supports single-shot and multi-shot generation. Explicitly set sound; multi-shot requires audio.
461/2,500
REST API Reference
Quick Start
Submit a task and query its status.
Step 1: Set up authentication
Create an API key in the dashboard and attach Authorization: Bearer <API_KEY> when submitting a task.
- Submit Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authorization Header
- Authorization: Bearer VIDGO_API_KEY
Step 2: Submit a task
POST /api/generate/submit: kwaivgi/kling-video-o3-4k/text-to-video
REQUEST_BODY=$(cat <<'JSON'
{
"model": "kwaivgi/kling-video-o3-4k/text-to-video",
"input": {
"duration": 4,
"sound": true,
"multi_shots": false,
"prompt": "Photoreal slow lateral dolly through an empty ancient temple gallery in rain. Weathered floral stone reliefs fill the foreground; rows of pillars recede toward a quiet courtyard. Water follows carved grooves and drips from worn edges, revealing mineral grains, chisel marks and moss in cracks. Soft overcast daylight, subtle wet highlights, stable architecture and rich fine detail. Audio: gentle rain and isolated drips; no music. No text, logos or watermarks.",
"aspect_ratio": "16:9"
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Step 3: Poll for completion
Poll with task_id while status is not_started or running, and stop at finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
Status Endpoint
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll with task_id while status is not_started or running, and stop at finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-submitted-example",
"status": "not_started",
"created_time": "2026-09-22T00:00:00Z"
}
}{
"code": 200,
"data": {
"task_id": "EE4XVIYVL5IAX4YG",
"status": "finished",
"files": [
{
"file_type": "video",
"file_url": "https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-4k/text-to-video/v1/01/output.mp4"
}
],
"created_time": "2026-09-22T18:48:45",
"error_message": null,
"progress": 100
}
}Complete executable script
Expand to review an end-to-end script with automatic polling, error handling, and timeout safeguards.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "kwaivgi/kling-video-o3-4k/text-to-video",
"input": {
"duration": 4,
"sound": true,
"multi_shots": false,
"prompt": "Photoreal slow lateral dolly through an empty ancient temple gallery in rain. Weathered floral stone reliefs fill the foreground; rows of pillars recede toward a quiet courtyard. Water follows carved grooves and drips from worn edges, revealing mineral grains, chisel marks and moss in cracks. Soft overcast daylight, subtle wet highlights, stable architecture and rich fine detail. Audio: gentle rain and isolated drips; no music. No text, logos or watermarks.",
"aspect_ratio": "16:9"
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters (input object)
Put generation parameters inside input. Use standard JSON numbers and booleans. For compatibility, integer strings such as "5" are accepted. Boolean strings true/1/yes/y/on mean true; false/0/no/n/off mean false. These strings are case-insensitive and trimmed. Numeric 1 and 0 are also accepted for boolean fields. Numeric and boolean prompt values are converted to text; 0, false and null are treated as empty. Objects and arrays are not accepted as prompts. The API validates prompts up to 2,500 characters. Some multi-shot generation requests have failed when a shot prompt exceeded 512 characters. We recommend keeping each shot prompt within 512 characters; this recommendation does not change the API validation limit.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Conditional | - | Required when multi_shots=false. Describe the scene, action and camera movement. Use nonblank text, up to 2,500 characters after trimming. Omit prompt when multi_shots=true. |
| multi_shots | boolean | Yes | - | Required: explicitly send false for a single shot or true for multiple shots. Single-shot mode requires prompt. Multi-shot mode requires multi_prompt and sound=true, with no nonblank top-level prompt. Omitting this field is an error. |
| multi_prompt | array | Conditional | - | Required when multi_shots=true; omit in single-shot mode. Supply at least one shot, each with a nonblank prompt of up to 2,500 characters and an integer duration of 1–12 seconds. Shot durations must sum to the top-level duration (3–15 seconds). Extra fields inside a shot are ignored. |
| duration | integer | Yes | - | Required integer from 3 to 15 seconds. In multi-shot mode, this must equal the sum of all shot durations. Credits are calculated using this value. |
| sound | boolean | Yes | - | Required: explicitly send true to generate audio or false for video without audio. Single-shot mode accepts either value; multi-shot mode requires true. |
| aspect_ratio | string | No | - | Optional: 16:9 (landscape), 9:16 (portrait) or 1:1 (square). Sets the video aspect ratio. |
Response Fields (Status Query)
Details returned by GET /api/generate/status/{task_id}:
| Field | Type | Description |
|---|---|---|
| code | integer | HTTP/business response status code (200 indicates success). |
| data.task_id | string | Globally unique task identifier. |
| data.status | string | Task lifecycle state: not_started, running, finished, or failed. |
| data.files | array | Array of output assets containing file_url and file_type upon completion. |
| data.error_message | string | null | Error diagnostic details if the task status is failed. |
Task Lifecycle
Clients should poll status until reaching either the finished or failed terminal state:
not_startedQueued
runningGenerating
finishedReady
failedFailed
Polling & Error Handling
- Polling frequencyStart polling with a 2 to 3-second interval, gradually increasing to 5 seconds for extended takes.
- Network resiliencyTransient 5xx responses or timeouts do not signify task failure; retry status requests after a short backoff.
- Webhook callbacksProvide a top-level callback_url in your submission payload to receive completion notifications automatically.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model | kwaivgi/kling-video-o3-4k/text-to-video | Kuaishou Kling O3 flagship native 4K text-to-video tier supporting ultra-high-definition micro-textures and multi-shot cinematic pacing. |
| Duration | 3-15 s | Required integer, 3–15 seconds. In multi-shot mode it must equal the sum of shot durations. Billing uses this duration. |
Kling O3 4K Text to Video
Generate 3–15-second videos from text prompts with Kling O3 4K. Outputs 4K video. Supports single-shot and multi-shot generation. Explicitly set sound; multi-shot requires audio.
Why Choose This Model
Native 4K Point-to-Point SynthesisGenerates true native 4K UHD video from scratch rather than upscaling, ensuring micro-textures, water refractions, and skin pores remain razor-sharp.
High-Dimensional Spatio-Temporal PhysicsModels complex rigid-body collisions, fluid dynamics, and optical dispersion, preserving convincing physical plausibility in energetic takes.
Cinema-Grade Multi-Shot StoryboardingSequences multiple shots in a single generation, coordinating boom shots, Dutch angles, and fluid dolly moves seamlessly.
Full-Spectrum Immersive Spatial AudioSynthesizes native high-fidelity audio tracks concurrently with 4K video, precisely synchronizing Foley sound effects with physical impacts.
Theatrical Giant-Screen CleanlinessEliminates compression smearing and digital halos, providing clean dynamic range suitable for color-grading in professional cinema suites.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Conditional | Required when multi_shots=false. Describe the scene, action and camera movement. Use nonblank text, up to 2,500 characters after trimming. Omit prompt when multi_shots=true. Default - |
| multi_shots | Yes | Required: explicitly send false for a single shot or true for multiple shots. Single-shot mode requires prompt. Multi-shot mode requires multi_prompt and sound=true, with no nonblank top-level prompt. Omitting this field is an error. Default - |
| multi_prompt | Conditional | Required when multi_shots=true; omit in single-shot mode. Supply at least one shot, each with a nonblank prompt of up to 2,500 characters and an integer duration of 1–12 seconds. Shot durations must sum to the top-level duration (3–15 seconds). Extra fields inside a shot are ignored. Default - |
| duration | Yes | Required integer from 3 to 15 seconds. In multi-shot mode, this must equal the sum of all shot durations. Credits are calculated using this value. Default - |
| sound | Yes | Required: explicitly send true to generate audio or false for video without audio. Single-shot mode accepts either value; multi-shot mode requires true. Default - |
| aspect_ratio | No | Optional: 16:9 (landscape), 9:16 (portrait) or 1:1 (square). Sets the video aspect ratio. Default - |
How to Use
Formulate 4K descriptive promptsSpecify fine material surfaces, lighting conditions (such as volumetric rays or rim light), and character actions in detail.
Define framing and narrative structureSelect a 16:9 widescreen, 9:16 vertical, or 1:1 format, choosing either single-shot take or multi-shot sequence mode.
Set runtime and audio channelInput an integer duration between 3 and 15 seconds, and activate sound=true for synchronized spatial audio synthesis.
Dispatch high-density rendering taskSubmit via API or playground; dedicated high-density GPU clusters perform point-to-point 4K diffusion inference.
Verify fidelity and download masterInspect the completed 4K video for micro-texture detail and kinetic smoothness, then download your master MP4 file.
Pricing
Credits = top-level duration × per-second rate. 1 credit = $0.005. If generation fails, consumed credits are automatically and fully refunded.
| Usage | Rate | Details |
|---|---|---|
| Without sound | 50 credits/s ($0.250/s) | Native 4K ultra-high-definition output ready for professional studio post-production. |
| With sound | 50 credits/s ($0.250/s) | Native 4K video integrated with multimodal spatial audio and precise lip-sync. |
Best Use Cases
Luxury & Flagship Tech CommercialsShowcase intricate watch escapements, automotive clear coats, and diamond facets with uncompromising clarity.
Cinema & Streaming MastersProduce establishers and theatrical visual effects sequences ready for native 4K theatrical projection.
Glasses-Free 3D & Digital BillboardsLeverage pure 4K sharpness and depth clarity to create eye-catching outdoor advertising installations.
High-Fidelity Nature DocumentariesCapture individual avian plumage barbs, rushing mountain torrents, and crisp starry nightscapes.
Pro Tips
- Incorporate physical material phrases like "brushed titanium surface", "microscopic water droplets refracting morning light", or "shot on 8K cinema sensor".
- 4K rendering responds strongly to lighting geometry: explicitly describing light sources (e.g., "harsh tungsten rim light") dramatically enhances sculptural depth.
- In multi-shot mode, maintain consistent wardrobe textures and weather descriptions across shots to ensure seamless editing transitions.
- Wrap character dialogue in quotation marks within the prompt; the 4K lip-sync engine computes remarkably accurate micro-movements.
- Because 4K computing intensity is high, selecting a 5 to 10-second duration often delivers the best balance between kinetic stability and rendering time.
Notes
- The 4K tier generates native 3840×2160 video; allocate a sufficient client polling timeout window to account for intensive compute cycles.
- Multi-shot mode requires sound=true and mandates that individual shot durations sum exactly to the top-level duration.
- Task execution is asynchronous; poll task status at 3 to 5-second intervals until reaching finished or failed.
Kling O3 4K Text to Video API FAQ
What does this endpoint generate?
Generate 3–15-second videos from text prompts with Kling O3 4K. Outputs 4K video. Supports single-shot and multi-shot generation. Explicitly set sound; multi-shot requires audio.
How do I set up multiple shots?
Required: explicitly send false for a single shot or true for multiple shots. Single-shot mode requires prompt. Multi-shot mode requires multi_prompt and sound=true, with no nonblank top-level prompt. Omitting this field is an error. Required when multi_shots=true; omit in single-shot mode. Supply at least one shot, each with a nonblank prompt of up to 2,500 characters and an integer duration of 1–12 seconds. Shot durations must sum to the top-level duration (3–15 seconds). Extra fields inside a shot are ignored.
How is the video aspect ratio determined?
Optional: 16:9 (landscape), 9:16 (portrait) or 1:1 (square). Sets the video aspect ratio.
How do I control audio?
Required: explicitly send true to generate audio or false for video without audio. Single-shot mode accepts either value; multi-shot mode requires true.
What are the prompt length limits?
The API validates prompts up to 2,500 characters. Some multi-shot generation requests have failed when a shot prompt exceeded 512 characters. We recommend keeping each shot prompt within 512 characters; this recommendation does not change the API validation limit.
How are duration and credits calculated?
Duration is 3–15 seconds. Video without audio costs 50 credits/s; video with audio costs 50 credits/s. Credits equal the top-level duration multiplied by the applicable rate.
What happens if generation fails or my request times out?
Invalid parameters are rejected before a generation task is created or credits are deducted. If an accepted generation task later reaches failed, its deducted credits are refunded. A client timeout alone does not mean the task failed; query its task_id before submitting again.