# kwaivgi/kling-o1/video-to-video > Kling O1 video-to-video facilitates conversational video editing strictly through natural language commands. Users can effortlessly remove objects, change backgrounds, modify styles, and adjust weather/lighting using simple text instructions. This solution is characterized by its best performance, no coldstarts, and affordable pricing. ## Overview - **Endpoint**: `https://api.shortapi.ai/api/v1/job/create` - **Model ID**: `kwaivgi/kling-o1/video-to-video` - **Category**: video-to-video - **Kind**: inference ## Pricing The billing rate for Standard mode video is $0.11 per second, while Pro mode video 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`, _required_): Video generation mode - Default: `pro` - Options: "std", "pro" - **`action`** (`string`, _required_): 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. Only .mp4/.mov formats supported, 3-10 seconds duration, 720-2160px resolution, max 200MB - **`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 - **`keep_audio`** (`bool`, _optional_): Whether to keep the original audio from the video - Default: `false` - Options: "true", "false" - **`duration`** (`string`, _optional_): Video Duration (Unit: s). This parameter is ignored when the action is 'edit', The output duration remains the same as the input, 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' tasks - 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-o1/video-to-video", "args": { "mode": "pro", "action": "edit", "prompt": "Replace the statue in [@Video1] with the giant dog from [@Element1], with the dog looking up at the starry sky. Replace the background of [@Video1] with [@Image1].", "video": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-o1/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-o1/video-to-video", "args": { "mode": "pro", "action": "edit", "prompt": "Replace the statue in [@Video1] with the giant dog from [@Element1], with the dog looking up at the starry sky. Replace the background of [@Video1] with [@Image1].", "video": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-o1/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-o1/video-to-video", "args": { "mode": "pro", "action": "edit", "prompt": "Replace the statue in [@Video1] with the giant dog from [@Element1], with the dog looking up at the starry sky. Replace the background of [@Video1] with [@Image1].", "video": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-o1/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()) ```