> ## 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 Reference to Video

> Kling 3.0 Omni R2V is APIPod's reference-to-video mode for Kling 3.0 Omni, guiding generation with up to 7 reference images or one motion reference video.

## Usage notes

* **References**: pass 1-7 images in `image_urls`, or one motion reference video in `video_urls` plus up to 4 images. With a motion reference, `duration` is limited to 3-10 seconds and `generate_audio` is not supported.
* **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.
* **Multi-shot**: set `multi_shot` to `true` without `multi_prompt` to let the model split the prompt into shots automatically, or describe up to 6 shots in `multi_prompt` (`{prompt, duration}`, up to 512 characters each) whose durations add up to exactly `duration`.
* **Not supported**: `negative_prompt` (write exclusions into the prompt), `audio_urls`, and `video_url` (use `video_urls`).

## Billing

Billed per second of output video; the motion reference video's own length is not added. 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-r2v.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Kling 3.0 Omni Reference to Video API
  version: 1.0.0
  description: >-
    Kling 3.0 Omni R2V is APIPod's reference-to-video mode for Kling 3.0 Omni,
    guiding generation with up to 7 reference images or one motion reference
    video. In APIPod, the public model ID is kling-3.0-omni-r2v. It accepts
    text, image, and video inputs referenced as @image_N / @video_1 and returns
    results through asynchronous video tasks.
servers:
  - url: https://api.apipod.ai
    description: Production
security: []
paths:
  /v1/videos/generations:
    post:
      tags:
        - Kling 3.0 Omni Reference to Video
      summary: Create Generation Task
      description: >-
        Kling 3.0 Omni R2V is APIPod's reference-to-video mode for Kling 3.0
        Omni, guiding generation with up to 7 reference images or one motion
        reference video. In APIPod, the public model ID is kling-3.0-omni-r2v.
        It accepts text, image, and video inputs referenced as @image_N /
        @video_1 and returns results through asynchronous video tasks.
      operationId: create-kling-3.0-kling-3.0-omni-r2v
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Kling 3.0 Omni Reference to Video
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: kling-3.0-omni-r2v
                prompt:
                  type: string
                  title: Prompt
                  description: >-
                    Text prompt, up to 2,500 characters; required unless
                    `multi_prompt` is provided. 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
                image_urls:
                  type: array
                  title: Reference Images
                  description: >-
                    Reference image URLs: 1-7 images, or up to 4 images when a
                    motion reference video is provided.
                  maxItems: 7
                  items:
                    type: string
                video_urls:
                  type: array
                  title: Motion Reference Video
                  description: >-
                    Optional motion reference video (at most 1). With a motion
                    reference, `duration` is limited to 3-10 seconds and native
                    audio is not supported.
                  maxItems: 1
                  items:
                    type: string
                duration:
                  type: integer
                  title: Duration
                  description: >-
                    Output duration in seconds (3-15, or 3-10 with a motion
                    reference video). Defaults to 5. With `multi_prompt`, the
                    shot durations must add up to exactly this value.
                  minimum: 3
                  maximum: 15
                  default: 5
                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
                aspect_ratio:
                  type: string
                  title: Aspect Ratio
                  description: Output aspect ratio. Defaults to 16:9.
                  enum:
                    - '16:9'
                    - '9:16'
                    - '1:1'
                  default: '16:9'
                generate_audio:
                  type: boolean
                  title: Generate Audio
                  description: >-
                    Generate native audio (alias `audio`). Defaults to false.
                    Not supported when a motion reference video is provided in
                    `video_urls`. Enabling it uses the enhanced billing tier.
                  default: false
                multi_shot:
                  type: boolean
                  title: Multi Shot
                  description: >-
                    Enable multi-shot generation (alias `multi_shots`). Without
                    `multi_prompt`, the model splits the prompt into shots
                    automatically.
                multi_prompt:
                  type: array
                  title: Multi Prompt
                  description: >-
                    Shot list for multi-shot generation, up to 6 shots. Each
                    shot is `{prompt, duration}` with a prompt of up to 512
                    characters; the shot durations must add up to `duration`
                    (3-15 seconds).
                  maxItems: 6
                  items:
                    type: object
                    properties:
                      prompt:
                        type: string
                        description: Shot description, up to 512 characters.
                        maxLength: 512
                      duration:
                        type: integer
                        description: Shot duration in seconds (1-15).
                        minimum: 1
                        maximum: 15
                    required:
                      - prompt
                      - duration
                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
            examples:
              basic:
                summary: Reference images
                value:
                  model: kling-3.0-omni-r2v
                  prompt: >-
                    The woman from @image_1 wears the jacket from @image_2 and
                    walks along the beach in @image_3.
                  image_urls:
                    - https://cdn.example.com/kling-ref-1.jpg
                    - https://cdn.example.com/kling-ref-2.jpg
                    - https://cdn.example.com/kling-ref-3.jpg
                  duration: 5
                  resolution: 1080p
                  aspect_ratio: '16:9'
              motion_reference:
                summary: Motion reference video
                value:
                  model: kling-3.0-omni-r2v
                  prompt: >-
                    The character in @image_1 performs the dance moves from
                    @video_1 on a rooftop at sunset.
                  image_urls:
                    - https://cdn.example.com/kling-ref-1.jpg
                  video_urls:
                    - https://cdn.example.com/motion-reference.mp4
                  duration: 8
                  resolution: 720p
                  aspect_ratio: '9:16'
      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-r2v",
              "prompt": "The woman from @image_1 wears the jacket from @image_2 and walks along the beach in @image_3.",
              "image_urls": [
                "https://cdn.example.com/kling-ref-1.jpg",
                "https://cdn.example.com/kling-ref-2.jpg",
                "https://cdn.example.com/kling-ref-3.jpg"
              ],
              "duration": 5,
              "resolution": "1080p",
              "aspect_ratio": "16:9"
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
              "model": "kling-3.0-omni-r2v",
              "prompt": "The woman from @image_1 wears the jacket from @image_2 and walks along the beach in @image_3.",
              "image_urls": [
                "https://cdn.example.com/kling-ref-1.jpg",
                "https://cdn.example.com/kling-ref-2.jpg",
                "https://cdn.example.com/kling-ref-3.jpg"
              ],
              "duration": 5,
              "resolution": "1080p",
              "aspect_ratio": "16:9"
            }

            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-r2v",
              "prompt": "The woman from @image_1 wears the jacket from @image_2 and walks along the beach in @image_3.",
              "image_urls": [
                "https://cdn.example.com/kling-ref-1.jpg",
                "https://cdn.example.com/kling-ref-2.jpg",
                "https://cdn.example.com/kling-ref-3.jpg"
              ],
              "duration": 5,
              "resolution": "1080p",
              "aspect_ratio": "16:9"
            }`)

                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-r2v",
                  "prompt": "The woman from @image_1 wears the jacket from @image_2 and walks along the beach in @image_3.",
                  "image_urls": [
                    "https://cdn.example.com/kling-ref-1.jpg",
                    "https://cdn.example.com/kling-ref-2.jpg",
                    "https://cdn.example.com/kling-ref-3.jpg"
                  ],
                  "duration": 5,
                  "resolution": "1080p",
                  "aspect_ratio": "16:9"
                });
                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-r2v",
                "prompt": "The woman from @image_1 wears the jacket from @image_2 and walks along the beach in @image_3.",
                "image_urls": [
                  "https://cdn.example.com/kling-ref-1.jpg",
                  "https://cdn.example.com/kling-ref-2.jpg",
                  "https://cdn.example.com/kling-ref-3.jpg"
                ],
                "duration": 5,
                "resolution": "1080p",
                "aspect_ratio": "16:9"
              }),
            });


            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.