# kwaivgi/kling-o3/image-to-video > ShortAPI's kling-o3/image-to-video seamlessly merges the core capabilities of Image-to-Video and Reference-to-Video. Leveraging Kling Omni Video O3 and MVL technology, simply input any character, prop, or scene reference, and it automatically extracts key features to generate dynamic videos with strict identity consistency across frames. From highly accurate physics simulation to silky natural motion and synchronized audio generation, every request outputs a cinematic sequence. Built for hyper-efficient workflows, it delivers the best performance with immediate execution and absolutely zero coldstarts (no coldstarts). ## Overview - **Endpoint**: `https://api.shortapi.ai/api/v1/job/create` - **Model ID**: `kwaivgi/kling-o3/image-to-video` - **Category**: image-to-video - **Kind**: inference ## Pricing The billing rate for std mode video is $0.071 per second (without audio) and $0.095 per second (with audio), while Pro mode is $0.095 per second (without audio) and $0.119 per second (with audio). For more details, please check our pricing page. ## API Information This model can be used via our HTTP API or more conveniently via our client libraries. See the input and output schema below, as well as the usage examples. ### Input Schema The API accepts the following input parameters: - **`prompt`** (`string`, _required_): Text prompts, including positive and negative descriptions. Must not exceed 2,500 characters. This parameter cannot be empty when multi_shot is false, or when multi_shot is true and the shot-type parameter is 'intelligence' - Examples: "An action shot of a black lab swimming..." - **`mode`** (`string`, _optional_): Video generation mode - Default: `pro` - Options: "std", "pro" - **`duration`** (`int`, _optional_): Video Length, unit: s (seconds) - Default: `5` - Range: `3` to `15` - **`aspect_ratio`** (`string`, _optional_): The aspect ratio of the generated video frame (width:height) - Default: `16:9` - Options: "16:9", "1:1", "9:16" - **`sound`** (`string`, _optional_): Whether to generate sound simultaneously when generating videos - Default: `off` - Options: "on", "off" - **`multi_shot`** (`bool`, _optional_): Whether to generate multi-shot video怂When this parameter is true, the prompt parameter is invalid, and setting the first and last frames for video generation is not supported. When this parameter is false, the shot_type and multi_prompt parameters are invalid - Default: `false` - Options: "true", "false" - **`shot_type`** (`string`, _optional_): Shot breakdown method (required when multi_shot is true) - Default: `intelligence` - Options: "intelligence", "customize" - **`multi_prompt`** (`list`, _optional_): Supports a minimum of 1 and a maximum of 6 scenes (or shots). The maximum content length for each scene cannot exceed 512.The duration of each scene must be at least 1 and cannot exceed the total duration of the current task.The total duration of all scenes combined must equal the total duration of the current task - **`prompt`** (`string`, _required_): Images for video generation - Examples: "An action shot of a black lab swimming..." - **`duration`** (`int`, _required_): Video Length, unit: s (seconds) - Range: `1` to `15` - **`images`** (`list`, _optional_): Images for video generation. Include reference images for the subject, scene, style, and other elements. Use the type parameter to specify whether an image is the first (first_frame) or last (end_frame) frame; if it is neither, do not configure this parameter. Please note that providing only a last frame is currently unsupported, meaning a first frame must be included if a last frame is present. You may provide images using either Base64 encoding or accessible URLs, and the total number of reference images must not exceed 7 - **`image`** (`string`, _required_): Images for video generation - **`type`** (`string`, _optional_): Control task actions - Options: "first_frame", "end_frame" ### Output Schema The API returns a JSON response with a `job_id` for tracking the request status. **Create Job Response:** ```json { "code": 0, "data": { "amount": "0.02", "job_id": "" } } ``` **Query Job Result (when status is 2, meaning succeeded):** ```json { "code": 0, "data": { "status": 2, "result": { "images": [{ "url": "https://..." }] } } } ``` ## Use Example To use this model, make an HTTP POST request to the API endpoint, then poll for results using the returned `job_id`. ### Bash (cURL) ```bash # Step 1: Create a job response=$(curl --request POST \ --url https://api.shortapi.ai/api/v1/job/create \ --header "Authorization: Bearer $SHORTAPI_KEY" \ --header "Content-Type: application/json" \ --data '{ "model": "kwaivgi/kling-o3/image-to-video", "args": { "prompt": "[@image1] Clad in the attire from [@image2], hands tucked in pockets, strolling through [@image3]." }, "callback_url": "CALLBACK_URL" }') JOB_ID=$(echo "$response" | grep -o '"job_id": *"[^"]*"' | sed 's/"job_id": *//; s/"//g') # Step 2: Poll for results curl --request GET \ --url "https://api.shortapi.ai/api/v1/job/query?id=$JOB_ID" \ --header "Authorization: Bearer $SHORTAPI_KEY" ``` ### JavaScript (Fetch API) ```javascript // Step 1: Create a job const response = await fetch(`https://api.shortapi.ai/api/v1/job/create`, { method: "POST", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "model": "kwaivgi/kling-o3/image-to-video", "args": { "prompt": "[@image1] Clad in the attire from [@image2], hands tucked in pockets, strolling through [@image3]." }, "callback_url": "CALLBACK_URL" }) }); const data = await response.json(); const JOB_ID = data.job_id; // Step 2: Poll for results const result = await fetch(`https://api.shortapi.ai/api/v1/job/query?id=${JOB_ID}`, { method: "GET", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}` } }); const resultData = await result.json(); console.log(resultData); ``` ### Python (Requests) ```python import requests # Step 1: Create a job url = "https://api.shortapi.ai/api/v1/job/create" payload = { "model": "kwaivgi/kling-o3/image-to-video", "args": { "prompt": "[@image1] Clad in the attire from [@image2], hands tucked in pockets, strolling through [@image3]." }, "callback_url": "CALLBACK_URL" } headers = { "Authorization": f"Bearer {SHORTAPI_KEY}", "Content-Type": "application/json" } response = requests.post(url, headers=headers, json=payload) data = response.json() JOB_ID = data.get("job_id") # Step 2: Poll for results result_url = f"https://api.shortapi.ai/api/v1/job/query?id={JOB_ID}" result = requests.get(result_url, headers={"Authorization": f"Bearer {SHORTAPI_KEY}"}) print(result.json()) ```