Kwaivgi Kling Video O3 Pro Reference To Video API Documentation
Playground
Try it on WaveSpeedAI!Kling Omni Video O3 Reference-to-Video generates creative videos using character, prop, or scene references from multiple viewpoints. Extracts subject features and creates new video content while maintaining identity consistency across frames. Supports audio generation. Ready-to-use REST API, best performance, no cold starts, affordable pricing.
Features
Kling Video O3 Pro Reference-to-Video generates premium video from reference images with optional video guidance. Upload reference images to establish character identity and appearance, optionally provide a reference video for motion guidance, and describe the scene — the model produces top-tier cinematic video with identity consistency.
Why Choose This?
-
O3 Pro quality The highest visual fidelity and motion realism in the Kling family.
-
Multi-reference images Upload up to 7 reference images (or up to 4 with a reference video).
-
Video-guided generation Optional reference video for motion and scene guidance.
-
Keep original sound Preserve the audio from the reference video in the output.
-
Sound generation Optional AI-generated sound effects when no reference video is provided.
-
Multi-prompt and element list support Chain prompt segments for scene transitions and lock in specific visual elements for consistency throughout the clip.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | No | Text description of the video scene, characters, and motion. |
| video | No | Reference video for motion guidance. |
| images | No | Reference images: up to 4 with video, up to 7 without. |
| keep_original_sound | No | Keep audio from the reference video. Default: enabled. |
| sound | No | Generate AI audio (only when no reference video). Default: disabled. |
| aspect_ratio | No | Output ratio: 16:9 (default), 9:16, 1:1. |
| duration | No | Video length in seconds. Range: 3–15. Default: 5. |
| shot_type | No | Editing mode: intelligence or customize. |
| multi_prompt | No | Additional prompt segments to guide scene transitions and progressions. |
| element_list | No | List of visual elements to maintain consistency throughout the clip. |
How to Use
- Write your prompt — describe the scene, characters, and action. Use the Prompt Enhancer for better results.
- Upload reference video (optional) — provide a video for motion guidance.
- Upload reference images — add character or scene references.
- Configure audio — keep original sound from the reference video, or enable AI sound generation.
- Select aspect ratio — match your target platform.
- Set duration — choose any length from 3 to 15 seconds.
- Select shot_type (optional) — use intelligence for automatic scope, or customize for manual control.
- Add multi-prompt segments (optional) — click Add Item to guide scene transitions.
- Add element list items (optional) — see Notes below for how to use elements effectively.
- Run — submit and download your video.
Pricing
Pricing is based on the requested duration, whether a reference video is provided, and the sound setting.
| Duration | No Video, No Sound | No Video, With Sound | With Reference Video |
|---|---|---|---|
| 3s | $0.336 | $0.420 | $0.504 |
| 5s | $0.560 | $0.700 | $0.840 |
| 10s | $1.120 | $1.400 | $1.680 |
| 15s | $1.680 | $2.100 | $2.520 |
Billing Rules
- No reference video, sound disabled: $0.112 per second.
- No reference video, sound enabled: $0.140 per second (1.25× base).
- With a reference video: $0.168 per second (1.5× base). New audio generation must be disabled; retaining the original audio does not add a separate charge.
- Duration: 3–15 seconds, in 1-second increments. Default: 5 seconds.
- Selecting
shot_type=intelligencedoes not add a separate charge.
Best Use Cases
- Character Consistency — Generate videos with identity-consistent characters from reference images.
- Video Remixing — Use a reference video for motion guidance with new characters or elements.
- Marketing & Ads — Create promotional videos featuring specific people or products.
- Storytelling — Produce narrative scenes with consistent character appearance across clips.
- Long-Form Scenes — Up to 15 seconds for extended scene development.
Pro Tips
- Use multiple reference images from different angles for better identity preservation.
- When using a reference video, the image limit is 4; without a video, you can use up to 7.
- Enable keep_original_sound to preserve audio from your reference video.
- Sound generation is only available when no reference video is provided.
- Use shorter durations (3–5s) for testing, longer (10–15s) for final production.
- Match aspect ratio to your platform: 16:9 for YouTube, 9:16 for TikTok and Reels, 1:1 for Instagram.
- Use multi_prompt to build smooth narrative progressions across the clip.
Notes
- All parameters are optional.
- Duration range: minimum 3 seconds, maximum 15 seconds.
- Reference images limit: up to 4 with video, up to 7 without.
- When a reference video is provided, sound generation is replaced by keep_original_sound.
- Using element_list: First use Kling Elements to generate your element and note its name and ID. Then simply write the element name naturally in your prompt, and enter the corresponding element ID in the element_list field. No special characters or syntax required.
- Ensure uploaded image and video URLs are publicly accessible.
customizeis the defaultshot_type.- In
customizemode, usemulti_promptto define each shot manually. - When
customizeis used withmulti_prompt, the top-levelpromptis not used for storyboard generation. intelligenceautomatically creates the storyboard from the top-levelprompt, sopromptmust not be empty.multi_promptis ignored whenshot_typeis set tointelligence.
Related Models
- Kling Video O3 Std Reference-to-Video — Standard tier reference-to-video at budget-friendly pricing.
- Kling Video O3 Pro Image-to-Video — O3 Pro quality single image to video.
- Kling Video O3 Pro Text-to-Video — O3 Pro quality text-to-video.
- Kling Video O3 Pro Video Edit — Edit existing videos with natural-language instructions.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"keep_original_sound": true,
"sound": false,
"aspect_ratio": "16:9",
"duration": 5,
"shot_type": "customize"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-pro/reference-to-video" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | No | - | The positive prompt for the generation. | |
| video | string | No | - | The reference video URL. Supported formats: .mp4/.mov, up to 200MB, 3-15 seconds (longer videos are trimmed to 15s), width and height between 700px and 3840px. | |
| images | array<string> | No | - | 0 ~ 7 items | Reference images. With a reference video: image elements <= 4; without a reference video: <= 7 |
| keep_original_sound | boolean | No | true | - | Whether to keep the original sound from the reference video. |
| sound | boolean | No | false | - | Whether to generate audio for the video. |
| aspect_ratio | string | No | 16:9 | 16:9, 9:16, 1:1 | The aspect ratio of the generated video. |
| duration | integer | No | 5 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | The duration of the generated media in seconds (3-15). |
| shot_type | string | No | customize | customize, intelligence | Shot type for the generation. |
| multi_prompt | array<object> | No | - | 0 ~ 6 items | List of multi-prompt elements for the generation. |
| element_list | array<object> | No | - | 0 ~ 3 items | Element reference list. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |