> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apipod.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Kling 3.0 Omni Video Edit

> Kling 3.0 Omni Edit is APIPod's video editing mode for Kling 3.0 Omni, rewriting a source video from a text instruction with up to 4 optional reference images.

## Usage notes

* **Source video**: pass exactly one MP4/MOV video (3-15.5 seconds) in `video_urls`, plus up to 4 optional reference images. Output duration and aspect ratio follow the source video, so `duration` and `aspect_ratio` are not accepted. Set `keep_original_sound` to `true` to keep the original audio.
* **Referencing inputs**: images are numbered `image_1`..`image_N` in order and the video is `video_1`. Use `@image_1` / `@video_1` in the prompt to point at a specific input.
* **Not supported**: `negative_prompt` (write exclusions into the prompt), `audio_urls`, and `video_url` (use `video_urls`).

## Billing

Billed per second of the source video duration (rounded up to whole seconds), using the enhanced tier for 720p/1080p (or the 4K tier). The per-second rate depends on the tier: 720p basic, 720p enhanced, 1080p basic, 1080p enhanced, or 4K. The enhanced tier applies when native audio is enabled or any video input is provided. Current prices are shown on the [model page](https://www.apipod.ai/models).

## Task flow

The create call returns `data.task_id`. Poll [Query video task](/query-video-task) until `status` is `completed` (outputs in `data.result`) or `failed`, or pass `callback_url` to be notified when the task reaches a terminal state.


## OpenAPI

````yaml api-reference/openapi/kling-3.0--kling-3.0-omni-edit.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Kling 3.0 Omni Video Edit API
  version: 1.0.0
  description: >-
    Kling 3.0 Omni Edit is APIPod's video editing mode for Kling 3.0 Omni,
    rewriting a source video from a text instruction with up to 4 optional
    reference images. In APIPod, the public model ID is kling-3.0-omni-edit. It
    accepts text, image, and video inputs; duration and aspect ratio follow the
    source video, and results are returned through asynchronous video tasks.
servers:
  - url: https://api.apipod.ai
    description: Production
security: []
paths:
  /v1/videos/generations:
    post:
      tags:
        - Kling 3.0 Omni Video Edit
      summary: Create Generation Task
      description: >-
        Kling 3.0 Omni Edit is APIPod's video editing mode for Kling 3.0 Omni,
        rewriting a source video from a text instruction with up to 4 optional
        reference images. In APIPod, the public model ID is kling-3.0-omni-edit.
        It accepts text, image, and video inputs; duration and aspect ratio
        follow the source video, and results are returned through asynchronous
        video tasks.
      operationId: create-kling-3.0-kling-3.0-omni-edit
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Kling 3.0 Omni Video Edit
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: kling-3.0-omni-edit
                prompt:
                  type: string
                  title: Prompt
                  description: >-
                    Required editing instruction, up to 2,500 characters. Inputs
                    are numbered automatically: images become
                    `image_1`..`image_N` in order and the video becomes
                    `video_1`; reference them in the prompt as `@image_1` or
                    `@video_1`.
                  maxLength: 2500
                video_urls:
                  type: array
                  title: Source Video
                  description: >-
                    Exactly one source video URL to edit (MP4 or MOV, 3-15.5
                    seconds). The output duration and aspect ratio follow this
                    video.
                  minItems: 1
                  maxItems: 1
                  items:
                    type: string
                image_urls:
                  type: array
                  title: Reference Images
                  description: Optional reference image URLs (up to 4).
                  maxItems: 4
                  items:
                    type: string
                resolution:
                  type: string
                  title: Resolution
                  description: >-
                    Output resolution. Defaults to 720p. The per-second rate
                    depends on the resolution tier.
                  enum:
                    - 720p
                    - 1080p
                    - 4k
                  default: 720p
                keep_original_sound:
                  type: boolean
                  title: Keep Original Sound
                  description: >-
                    Keep the audio track of the source video. Defaults to false
                    (the output has no original audio).
                  default: false
                watermark:
                  type: boolean
                  title: Watermark
                  description: >-
                    When true, an additional watermarked copy is generated and
                    the watermarked copy is returned as the result.
                  default: false
                callback_url:
                  type: string
                  title: Callback URL
                  description: HTTPS URL that receives the task's terminal state.
                  default: ''
              required:
                - model
                - prompt
                - video_urls
            examples:
              basic:
                summary: Edit with a reference image
                value:
                  model: kling-3.0-omni-edit
                  prompt: >-
                    Replace the cloudy sky in @video_1 with the sunset sky from
                    @image_1, keep everything else unchanged.
                  video_urls:
                    - https://cdn.example.com/source-clip.mp4
                  image_urls:
                    - https://cdn.example.com/kling-ref-1.jpg
                  resolution: 1080p
                  keep_original_sound: true
              text_only:
                summary: Text-only edit
                value:
                  model: kling-3.0-omni-edit
                  prompt: Turn @video_1 into a hand-drawn watercolor animation style.
                  video_urls:
                    - https://cdn.example.com/source-clip.mp4
                  resolution: 720p
      responses:
        '200':
          description: Task accepted
          content:
            application/json:
              schema:
                type: object
                title: Task Submit Response
                description: Standard response for task submission
                properties:
                  code:
                    type: integer
                  data:
                    type: object
                    title: Task Submit Data
                    description: Data content for task submission
                    properties:
                      task_id:
                        type: string
                        description: Task ID used to query the task status.
                  message:
                    type: string
                required:
                  - code
                  - message
                  - data
              example:
                code: 200
                message: success
                data:
                  task_id: vid_task_01JEXAMPLE
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |-
            curl https://api.apipod.ai/v1/videos/generations \
              -H "Authorization: Bearer $APIPOD_API_KEY" \
              -H "Content-Type: application/json" \
              -d '{
              "model": "kling-3.0-omni-edit",
              "prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
              "video_urls": [
                "https://cdn.example.com/source-clip.mp4"
              ],
              "image_urls": [
                "https://cdn.example.com/kling-ref-1.jpg"
              ],
              "resolution": "1080p",
              "keep_original_sound": true
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
              "model": "kling-3.0-omni-edit",
              "prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
              "video_urls": [
                "https://cdn.example.com/source-clip.mp4"
              ],
              "image_urls": [
                "https://cdn.example.com/kling-ref-1.jpg"
              ],
              "resolution": "1080p",
              "keep_original_sound": True
            }

            response = requests.post(
                "https://api.apipod.ai/v1/videos/generations",
                headers={
                    "Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
                    "Content-Type": "application/json",
                },
                json=payload,
                timeout=60,
            )
            response.raise_for_status()
            print(response.json())
        - lang: Go
          label: Go
          source: |-
            package main

            import (
                "bytes"
                "fmt"
                "io"
                "net/http"
                "os"
            )

            func main() {
                body := []byte(`{
              "model": "kling-3.0-omni-edit",
              "prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
              "video_urls": [
                "https://cdn.example.com/source-clip.mp4"
              ],
              "image_urls": [
                "https://cdn.example.com/kling-ref-1.jpg"
              ],
              "resolution": "1080p",
              "keep_original_sound": true
            }`)

                req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
                if err != nil {
                    panic(err)
                }
                req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
                req.Header.Set("Content-Type", "application/json")

                resp, err := http.DefaultClient.Do(req)
                if err != nil {
                    panic(err)
                }
                defer resp.Body.Close()
                out, _ := io.ReadAll(resp.Body)
                fmt.Println(resp.Status, string(out))
            }
        - lang: Rust
          label: Rust
          source: |-
            use reqwest::Client;
            use serde_json::json;
            use std::env;

            #[tokio::main]
            async fn main() -> Result<(), Box<dyn std::error::Error>> {
                let payload = json!({
                  "model": "kling-3.0-omni-edit",
                  "prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
                  "video_urls": [
                    "https://cdn.example.com/source-clip.mp4"
                  ],
                  "image_urls": [
                    "https://cdn.example.com/kling-ref-1.jpg"
                  ],
                  "resolution": "1080p",
                  "keep_original_sound": true
                });
                let response = Client::new()
                    .post("https://api.apipod.ai/v1/videos/generations")
                    .bearer_auth(env::var("APIPOD_API_KEY")?)
                    .json(&payload)
                    .send()
                    .await?
                    .error_for_status()?;

                println!("{}", response.text().await?);
                Ok(())
            }
        - lang: JavaScript
          label: JavaScript
          source: >-
            const response = await
            fetch("https://api.apipod.ai/v1/videos/generations", {
              method: "POST",
              headers: {
                Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                "model": "kling-3.0-omni-edit",
                "prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
                "video_urls": [
                  "https://cdn.example.com/source-clip.mp4"
                ],
                "image_urls": [
                  "https://cdn.example.com/kling-ref-1.jpg"
                ],
                "resolution": "1080p",
                "keep_original_sound": true
              }),
            });


            if (!response.ok) {
              throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
            }


            console.log(await response.json());
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: APIPod API key
      description: Use your APIPod API key as a Bearer token in the Authorization header.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.