One continuous five-second realistic portrait of a single adult female cellist seated on a plain chair in an empty wood-paneled chamber-music hall. She wears a simple dark green concert dress. The cello stands correctly between her knees with its endpin on the floor. Medium frontal three-quarter framing includes her face, both hands, complete bow and most of the cello. From the first frame the bow hair already rests across the strings between fingerboard and bridge. Her right arm draws the same straight bow slowly in ONE direction for the entire shot, maintaining contact with the strings; her left hand remains steadily on the neck. Her focused gaze follows the bow. Subtle slow camera push-in, soft warm side light and a quiet background. Preserve rigid instrument and bow geometry. No audience, no cuts, no text or logos.
Kling 2.5 Turbo Pro Text to Video API
kwaivgi/kling-v2.5-turbo-pro/text-to-videoKling 2.5 Turbo Pro Text to Video generates 5- or 10-second videos from descriptive text prompts. Describe subjects, actions, lighting and camera movement, with optional aspect ratio and negative prompt inputs.
775/2,500
Examples
REST API Reference
Quick Start
Submit a task and query its status. URLs using example.com or your-domain.com are placeholders; replace image and callback URLs with your own publicly accessible URLs. Output file URLs are illustrative.
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-v2.5-turbo-pro/text-to-video
REQUEST_BODY=$(cat <<'JSON'
{
"model": "kwaivgi/kling-v2.5-turbo-pro/text-to-video",
"input": {
"prompt": "A slow camera pan across a sunlit garden.",
"duration": 5,
"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-example",
"status": "not_started",
"created_time": "2026-09-24T00:00:00Z"
}
}{
"code": 200,
"data": {
"task_id": "task-example",
"status": "finished",
"files": [
{
"file_type": "video",
"file_url": "https://example.com/output.mp4"
}
],
"created_time": "2026-09-23T00:00:00Z"
}
}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-v2.5-turbo-pro/text-to-video",
"input": {
"prompt": "A slow camera pan across a sunlit garden.",
"duration": 5,
"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)
Place generation parameters in input, with model and optional callback_url at the request root. Use standard JSON types; unsupported input fields are rejected.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | - | Required nonblank string, maximum 2,500 Unicode characters after trimming. |
| duration | integer | No | 5 | Duration accepts integer values 5 or 10 and defaults to 5 when omitted. Numeric 5.0 and 10.0 are accepted as integer values; strings, booleans, non-integer values and null are rejected. |
| aspect_ratio | string | No | - | aspect_ratio is an optional string. The API reference does not specify an enum or default; omit it when unused. |
| negative_prompt | string | No | - | negative_prompt is an optional string describing content to avoid. The API reference does not specify a length limit for it; the 2,500-character limit applies only to prompt. |
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-v2.5-turbo-pro/text-to-video | |
| Duration | 5 / 10 s | Duration accepts integer values 5 or 10 and defaults to 5 when omitted. Numeric 5.0 and 10.0 are accepted as integer values; strings, booleans, non-integer values and null are rejected. |
Kling 2.5 Turbo Pro Text to Video
Kling 2.5 Turbo Pro Text to Video uses a required prompt of up to 2,500 Unicode characters after trimming. Choose a 5- or 10-second duration and optionally describe content to avoid with negative_prompt. Pricing is 42 credits ($0.210) for 5 seconds and 84 credits ($0.420) for 10 seconds, for exploring ad concepts, storyboards and other video ideas.
Why choose this model
Prompt-Based Video GenerationDescribe subjects, environments, actions and camera movement in a text prompt.
Optional Negative PromptUse negative_prompt to describe content to avoid. The API reference does not specify a length limit for this field.
Prompts up to 2,500 CharactersProvide a nonblank prompt of up to 2,500 Unicode characters after trimming.
5- and 10-Second DurationsSet duration to 5 or 10 seconds. The default is 5 seconds when omitted.
Per-Video PricingPay 42 credits ($0.210) for 5s or 84 credits ($0.420) for 10s, with credits refunded when a task fails.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Yes | Required nonblank string, maximum 2,500 Unicode characters after trimming. Default - |
| duration | No | Duration accepts integer values 5 or 10 and defaults to 5 when omitted. Numeric 5.0 and 10.0 are accepted as integer values; strings, booleans, non-integer values and null are rejected. Default 5 |
| aspect_ratio | No | aspect_ratio is an optional string. The API reference does not specify an enum or default; omit it when unused. Default - |
| negative_prompt | No | negative_prompt is an optional string describing content to avoid. The API reference does not specify a length limit for it; the 2,500-character limit applies only to prompt. Default - |
How to Use
Compose Descriptive Scene PromptDescribe your subjects, lighting, environment, and desired camera motion in natural language, using up to 2,500 Unicode characters.
Select Duration and Aspect RatioChoose 5 or 10 seconds. aspect_ratio is an optional string. The API reference does not specify an enum or default; omit it when unused.
Add Negative Prompt FilteringUse negative_prompt to explicitly exclude unwanted artifacts such as blur, distorted anatomy, morphing, or low resolution.
Submit via Playground or REST APIRun your prompt interactively in the web workspace or send a POST request to /api/generate/submit with your API key.
Poll Task Status and Download VideoPoll GET /api/generate/status/{task_id}. On finished, read and download the video files; on failed, stop polling and inspect the error message.
Pricing
Billed per video. 1 credit = $0.005.
| Usage | Rate | Details |
|---|---|---|
| 5 seconds | 42 credits/video | $0.210/video |
| 10 seconds | 84 credits/video | $0.420/video |
Best Use Cases
Commercial Advertising & Social Media AdsProduce dynamic, high-engagement video ads and promotional clips tailored for TikTok, Instagram Reels, and YouTube Shorts.
Film Pre-Visualization & Dynamic StoryboardingQuickly convert script treatments into moving video animatics to test camera framing, scene pacing, and narrative flow.
E-Commerce & Brand Motion ContentGenerate eye-catching lifestyle atmospheres and stylized brand visualizers without expensive physical film shoots.
Rapid Creative Concepting for AgenciesEmpower creative teams to explore dozens of visual iterations and present polished client treatments in minutes.
Pro Tips
- Specify Camera Movement: Use concrete cinematographic terms like 'slow cinematic push-in', 'low-angle tracking shot', or 'smooth aerial pan' to guide dynamic camera paths.
- Incorporate Lighting Details: Terms like 'golden hour volumetric sunlight', 'dramatic chiaroscuro', and 'soft studio rim light' enhance depth and cinematic visual texture.
- Structure Narrative Progression: Describe actions chronologically using clear sequential clauses separated by commas to help the model synthesize natural step-by-step movement.
- Choose Durations Thoughtfully: Select 5 seconds for punchy single-action shots and 10 seconds for developing storylines or gradual environmental transformations.
- Refine with Negative Prompt: Exclude unwanted elements such as 'motion blur, facial distortion, unnatural limbs, text, watermark' in negative_prompt for cleaner outputs.
Notes
- Duration validation: Duration accepts integer values 5 or 10 and defaults to 5 when omitted. Numeric 5.0 and 10.0 are accepted as integer values; strings, booleans, non-integer values and null are rejected.
- Character limits: prompt accepts up to 2,500 Unicode characters after trimming. negative_prompt is an optional string describing content to avoid. The API reference does not specify a length limit for it; the 2,500-character limit applies only to prompt.
- Per-Video Billing & Automatic Refund: Generations cost 42 credits ($0.21) for 5s and 84 credits ($0.42) for 10s. If a task fails due to a system error, credits are automatically refunded.
Kling 2.5 Turbo Pro Text to Video API frequently asked questions
What is the Kling 2.5 Turbo Pro Text to Video API?
Kling 2.5 Turbo Pro Text to Video generates 5- or 10-second videos from descriptive text prompts. Describe subjects, actions, lighting and camera movement, with optional aspect ratio and negative prompt inputs. Try it in the playground above or submit tasks through the REST API.
What video durations does Kling 2.5 Turbo Pro Text to Video support?
The model supports 5-second and 10-second video durations. Specify duration as an integer value of 5 or 10 in your request payload; if omitted, the system defaults to 5 seconds.
What aspect ratios does Kling 2.5 Turbo Pro Text to Video support?
aspect_ratio is an optional string. The API reference does not specify an enum or default; omit it when unused.
What is the prompt character limit for Kling 2.5 Turbo Pro Text to Video?
The prompt field accepts up to 2,500 Unicode characters after trimming. This generous capacity accommodates detailed storytelling, multiple action beats, and complex lighting or stylistic cues.
How does negative_prompt work in Kling 2.5 Turbo Pro Text to Video?
negative_prompt is an optional string describing content to avoid. The API reference does not specify a length limit for it; the 2,500-character limit applies only to prompt.
How is Kling 2.5 Turbo Pro Text to Video priced?
Pricing is billed on a per-video basis: 42 credits ($0.210) for a 5-second video, and 84 credits ($0.420) for a 10-second video. Credits are deducted upon submission, and if a task encounters an internal generation failure, all deducted credits are automatically refunded.
How do I retrieve a Kling 2.5 Turbo Pro Text to Video result?
Keep the task_id returned on submission and query GET /api/generate/status/{task_id}. When the status is finished, read video URLs from data.files. Stop polling on failed and inspect the error message.
Does Kling 2.5 Turbo Pro Text to Video accept image inputs?
No. This endpoint is dedicated strictly to text-to-video generation. If you have reference still images or wish to guide motion using starting and ending keyframes, use the Kling 2.5 Turbo Pro Image to Video endpoint.