# kwaivgi/kling-o3/video-to-video > Powered by Kling O3 Omni, you can generate new shots guided by an input reference video, precisely preserving core cinematic language such as motion trajectories and camera styles to ensure seamless scene continuity. Additionally, combined with Kling Omni Video O3 Video-Edit, you will experience conversational video editing driven by natural language commands. With simple instructions, you can easily remove objects, change backgrounds, modify visual styles, adjust weather and lighting, or even completely transform scenes. ## Overview - **Endpoint**: `https://api.shortapi.ai/api/v1/job/create` - **Model ID**: `kwaivgi/kling-o3/video-to-video` - **Category**: video-to-video - **Kind**: inference ## Pricing The billing rate for std mode video is $0.107 per second, while Pro mode is $0.143 per second. 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: - **`mode`** (`string`, _optional_): Video generation mode - Default: `pro` - Options: "std", "pro" - **`action`** (`string`, _optional_): Control task actions - Default: `refer` - Options: "refer", "edit" - **`prompt`** (`string`, _required_): Text prompts, include positive and negative descriptions - Examples: "An action shot of a black lab swimming..." - **`video`** (`string`, _required_): Original video, used for 'refer' or 'edit' tasks - **`images`** (`list`, _optional_): Images for video generation - **`elements`** (`list`, _optional_): Elements for video generation. The number of images in images + elements must not exceed 4 - **`frontal_image_url`** (`string`, _required_): The frontal image of the element (main view) - **`reference_image_urls`** (`list`, _optional_): Additional reference images from different angles - **`duration`** (`int`, _optional_): Video Duration (Unit: s). When action = 'edit': the original video must be between 3–10 seconds. The duration will be forcibly overridden to match the actual video length, and aspect_ratio will be cleared. Billing is based on the input video duration, rounded to the nearest integer - Default: `5` - Range: `3` to `10` - **`aspect_ratio`** (`string`, _optional_): The aspect ratio of the generated video frame (width:height). Invalid for Edit - Default: `16:9` - Options: "16:9", "1:1", "9:16" ### 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": { "videos": [{ "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/video-to-video", "args": { "prompt": "Text prompts, include positive and negative descriptions", "video": "https://shortapi-02.oss-us-east-1.aliyuncs.com/assets/examples/kwaivgi/kling-o3/video-to-video-video.mp4" }, "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/video-to-video", "args": { "prompt": "Text prompts, include positive and negative descriptions", "video": "https://shortapi-02.oss-us-east-1.aliyuncs.com/assets/examples/kwaivgi/kling-o3/video-to-video-video.mp4" }, "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/video-to-video", "args": { "prompt": "Text prompts, include positive and negative descriptions", "video": "https://shortapi-02.oss-us-east-1.aliyuncs.com/assets/examples/kwaivgi/kling-o3/video-to-video-video.mp4" }, "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()) ```