Animate this exact single garden snail in one continuous five-second natural-history macro shot. Its TWO upper eyestalks slowly extend forward and slightly upward from their existing positions; the two short lower feelers remain small. The snail's soft foot creeps forward just a few millimeters along the moss, carrying the same spiral shell without changing its shape. Keep the snail attached to the twig, the shell markings and damp moss stable. Locked macro camera, shallow depth of field, very small believable movement. No added tentacles, no second animal, no scene changes or text.
Kling 2.5 Turbo Pro Image to Video API
kwaivgi/kling-v2.5-turbo-pro/image-to-videoKling 2.5 Turbo Pro Image to Video generates video from images and a text prompt. Guide a 5- or 10-second clip with a start frame, an end frame, or both, and describe subject movement, scene changes and camera motion in your prompt.
622/2,500

Provide a start frame, an end frame, or both.
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/image-to-video
REQUEST_BODY=$(cat <<'JSON'
{
"model": "kwaivgi/kling-v2.5-turbo-pro/image-to-video",
"input": {
"prompt": "A slow camera pan across a sunlit garden.",
"duration": 5,
"start_image_url": "https://example.com/start-frame.png"
}
}
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/image-to-video",
"input": {
"prompt": "A slow camera pan across a sunlit garden.",
"duration": 5,
"start_image_url": "https://example.com/start-frame.png"
}
}
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. |
| start_image_url | string | At least one | - | First-frame public HTTP(S) URL without credentials or whitespace. Provide start_image_url, end_image_url, or both. Omit when unused; empty strings and null are rejected. |
| end_image_url | string | At least one | - | Last-frame public HTTP(S) URL without credentials or whitespace. Provide start_image_url, end_image_url, or both. Omit when unused; empty strings and null are rejected. |
| 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/image-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 Image to Video
Kling 2.5 Turbo Pro Image to Video accepts start_image_url, end_image_url, or both, together with a required prompt, to generate 5- or 10-second videos. Supply reference frames for product showcases, portrait animation or storyboards, then describe the desired motion. Pricing is 42 credits ($0.210) for 5 seconds and 84 credits ($0.420) for 10 seconds.
Why choose this model
Start, End or Both FramesProvide start_image_url, end_image_url, or both to guide generation.
Images Paired with a PromptSupply reference frames and a required prompt describing subject movement, scene changes and camera motion.
Optional Negative PromptUse negative_prompt to describe content to avoid, or omit it when unused.
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 - |
| start_image_url | At least one | First-frame public HTTP(S) URL without credentials or whitespace. Provide start_image_url, end_image_url, or both. Omit when unused; empty strings and null are rejected. Default - |
| end_image_url | At least one | Last-frame public HTTP(S) URL without credentials or whitespace. Provide start_image_url, end_image_url, or both. Omit when unused; empty strings and null are rejected. 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
Prepare Reference Keyframe ImagesPrepare a start frame, an end frame, or both, using publicly accessible HTTP(S) URLs.
Configure Motion Prompt & ParametersProvide a nonblank prompt describing subject movement, scene changes and camera motion, up to 2,500 Unicode characters after trimming.
Specify Duration and FramingChoose 5 or 10 seconds. aspect_ratio is an optional string. The API reference does not specify an enum or default; omit it when unused.
Submit Task via Playground or APIRun the task interactively in the web console or send a JSON payload to POST /api/generate/submit with your API key.
Retrieve Finished 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
Digital Avatar & Portrait AnimationBreathe life into digital humans, AI portraits, and character illustrations with natural facial micro-expressions and subtle head turns.
E-Commerce Product & Fashion ShowcasesTransform flat apparel lookbooks and catalog product stills into fluid runway walk-cycles and cinematic commercial motion clips.
Storyboarding & Keyframe Scene TransitionsBridge two conceptual storyboards smoothly using dual-frame interpolation, maintaining narrative continuity between critical beats.
Architectural & Landscape FlythroughsConvert static 3D renderings and environmental photography into immersive camera sweeps and atmospheric ambient flythroughs.
Pro Tips
- Maintain Cohesive Lighting Across Frames: When providing both start_image_url and end_image_url, ensure similar lighting and perspective for seamless optical interpolation.
- Emphasize Motion in Prompts: Use action-oriented phrasing like 'gently turns head to face camera, wind blowing hair softly' rather than re-describing static visual elements.
- Guide Camera Path Explicitly: Detail focal transitions and lens movements such as 'slow cinematic zoom in on eyes' to control kinetic energy throughout the take.
- Leverage Duration to Pacing: Select 5 seconds for single explosive or subtle gestures, and 10 seconds when complex transitions between dual keyframes require breathing room.
- Clean Artifacts with Negative Prompt: Exclude unwanted noise such as 'morphing, warping, jitter, duplicate limbs, blur' using negative_prompt for crisp visual clarity.
Notes
- Image URL Accessibility: At least one of start_image_url or end_image_url is required; image URLs must be publicly reachable over HTTP(S) without credentials.
- 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.
- Credit Consumption & Refund Policy: Tasks deduct 42 credits ($0.21) for 5s and 84 credits ($0.42) for 10s upon submission, with automated full credit refunds for failed runs.
Kling 2.5 Turbo Pro Image to Video API frequently asked questions
What is the Kling 2.5 Turbo Pro Image to Video API?
Kling 2.5 Turbo Pro Image to Video generates video from images and a text prompt. Guide a 5- or 10-second clip with a start frame, an end frame, or both, and describe subject movement, scene changes and camera motion in your prompt. Try it in the playground above or submit tasks through the REST API.
What video durations does Kling 2.5 Turbo Pro Image to Video support?
The model supports 5-second and 10-second video durations. Pass duration as an integer value of 5 or 10; if omitted from your payload, the default duration is 5 seconds.
How does dual-frame keyframe control work in Kling 2.5 Turbo Pro Image to Video?
Yes. Supply both start_image_url and end_image_url to guide the first and last frames of the video. A prompt is still required.
Can I generate video using only a single image in Kling 2.5 Turbo Pro Image to Video?
Yes. Provide either start_image_url or end_image_url together with a prompt. An end frame guides the closing image; it does not specify reverse playback.
What are the input image requirements for Kling 2.5 Turbo Pro Image to Video?
Provide images through publicly accessible HTTP(S) URLs without credentials or whitespace. The API reference does not list supported image formats, file sizes or resolution limits, so it does not confirm a specific format list.
How is Kling 2.5 Turbo Pro Image to Video priced?
Pricing is 42 credits ($0.210) for 5-second generations and 84 credits ($0.420) for 10-second generations. If a task fails to generate a valid output video due to server or processing errors, all consumed credits are automatically refunded.
How do reference images guide Kling 2.5 Turbo Pro Image to Video?
Use start_image_url to guide the opening frame, end_image_url to guide the closing frame, or both. Describe the desired motion in prompt, then review the subject and scene in the generated result.
When should I choose Kling 2.5 Turbo Pro Image to Video over other models?
Use this endpoint when you have product images, portraits or storyboard frames to guide a 5- or 10-second video alongside a text prompt. It accepts a start frame, an end frame, or both, with pricing based on duration.