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

# Kling 3.0 Omni

> Kling 3.0 Omni video. Drive generation with a prompt plus any combination of a first frame, a first+last frame pair, reference images and one reference video.

**Referring to materials in the prompt** — every material gets an index you can mention with `@`: images are numbered `@image_1…` in the order first frame → last frame → `ref_imgs`, and the reference video is always `@video_1`. **The array order is the numbering**, so reordering `ref_imgs` changes what your prompt refers to.

**Reference video roles** (`video_type`):

- `feature` (default) — the output imitates its motion and style. Upstream forces multi-shot on and audio off for this mode, so `generate_audio` is rejected here.
- `base` — the video is edited in place. First / last frames and `multi_shots` are not supported, and `generate_audio` keeps the base video's **original** sound rather than generating a new track.

**Material limits** — `image_url` + `image_end_url` + `ref_imgs` must not exceed **7** in total, or **4** when `ref_videos` is used.

**Pricing** — per second of generated video, in tokens (USD at $0.02/token). Same as the official rate:

| scenario | 720p | 1080p | 4k |
|---|---|---|---|
| No video · no audio | 4.2 ($0.084) | 5.6 ($0.112) | 21 ($0.42) |
| No video · native audio | 5.6 ($0.112) | 7 ($0.14) | 21 ($0.42) |
| With video | 6.3 ($0.126) | 8.4 ($0.168) | 21 ($0.42) |

⚠️ Pricing is **three-dimensional** — resolution × reference video × native audio. A request with a reference video costs 50% more than a plain one at the same resolution, so do not read this as a two-tier table.

⚠️ **At 4K all three scenarios cost the same** (21 tokens/s). That is the official rate, not a typo here.

⚠️ There is no "with video + native audio" price because the combination does not exist: `feature` forbids audio, and `base`'s audio is retained rather than generated — both are billed at the "with video" tier.

**Not the same model as [`kling-o1`](/api-reference/video-generations/kling-o1).** O1 shares the upstream path prefix but drops multi-shot, 4K and generated audio, and caps duration at 10s.

Returns an `img_uuid`; poll GET /api/v1/jobs/detail (or use `custom_callback_url`) to get the generated video.

**Reference materials use the shared naming**: `ref_imgs` and `ref_videos`, the same as seedance / hailuo / wan's reference endpoints. `ref_videos` is an array capped at 1. The older `image_urls` / `video_url` spellings still work.

⚠️ Do not confuse `image_url` (first frame) with `ref_imgs` (reference images) — they are different inputs and count against the same material budget.



## OpenAPI

````yaml api-reference/video-generations/openapi-kling-v3-omni.json POST /api/v1/videos/generations
openapi: 3.1.0
info:
  title: GoEnhance API - Kling 3.0 Omni
  description: Omni video generation with Kling 3.0 Omni.
  version: 1.0.0
servers:
  - url: https://api.goenhance.ai
security: []
paths:
  /api/v1/videos/generations:
    post:
      tags:
        - VideoGenerations
      summary: Kling 3.0 Omni
      description: >-
        Kling 3.0 Omni video. Drive generation with a prompt plus any
        combination of a first frame, a first+last frame pair, reference images
        and one reference video.


        **Referring to materials in the prompt** — every material gets an index
        you can mention with `@`: images are numbered `@image_1…` in the order
        first frame → last frame → `ref_imgs`, and the reference video is always
        `@video_1`. **The array order is the numbering**, so reordering
        `ref_imgs` changes what your prompt refers to.


        **Reference video roles** (`video_type`):


        - `feature` (default) — the output imitates its motion and style.
        Upstream forces multi-shot on and audio off for this mode, so
        `generate_audio` is rejected here.

        - `base` — the video is edited in place. First / last frames and
        `multi_shots` are not supported, and `generate_audio` keeps the base
        video's **original** sound rather than generating a new track.


        **Material limits** — `image_url` + `image_end_url` + `ref_imgs` must
        not exceed **7** in total, or **4** when `ref_videos` is used.


        **Pricing** — per second of generated video, in tokens (USD at
        $0.02/token). Same as the official rate:


        | scenario | 720p | 1080p | 4k |

        |---|---|---|---|

        | No video · no audio | 4.2 ($0.084) | 5.6 ($0.112) | 21 ($0.42) |

        | No video · native audio | 5.6 ($0.112) | 7 ($0.14) | 21 ($0.42) |

        | With video | 6.3 ($0.126) | 8.4 ($0.168) | 21 ($0.42) |


        ⚠️ Pricing is **three-dimensional** — resolution × reference video ×
        native audio. A request with a reference video costs 50% more than a
        plain one at the same resolution, so do not read this as a two-tier
        table.


        ⚠️ **At 4K all three scenarios cost the same** (21 tokens/s). That is
        the official rate, not a typo here.


        ⚠️ There is no "with video + native audio" price because the combination
        does not exist: `feature` forbids audio, and `base`'s audio is retained
        rather than generated — both are billed at the "with video" tier.


        **Not the same model as
        [`kling-o1`](/api-reference/video-generations/kling-o1).** O1 shares the
        upstream path prefix but drops multi-shot, 4K and generated audio, and
        caps duration at 10s.


        Returns an `img_uuid`; poll GET /api/v1/jobs/detail (or use
        `custom_callback_url`) to get the generated video.


        **Reference materials use the shared naming**: `ref_imgs` and
        `ref_videos`, the same as seedance / hailuo / wan's reference endpoints.
        `ref_videos` is an array capped at 1. The older `image_urls` /
        `video_url` spellings still work.


        ⚠️ Do not confuse `image_url` (first frame) with `ref_imgs` (reference
        images) — they are different inputs and count against the same material
        budget.
      parameters:
        - name: Authorization
          in: header
          description: ''
          required: false
          example: '{{Authorization}}'
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                model:
                  type: string
                  enum:
                    - kling-v3-omni
                  description: Model name. Must be `kling-v3-omni`.
                prompt:
                  type: string
                  description: >-
                    Text prompt. Use `@image_1` / `@video_1` to refer to
                    specific materials.
                image_url:
                  type: string
                  format: uri
                  description: Optional. First-frame image URL.
                image_end_url:
                  type: string
                  format: uri
                  description: >-
                    Optional. Last-frame image URL. Requires `image_url` —
                    last-frame-only is not supported.
                ref_imgs:
                  type: array
                  items:
                    type: string
                    format: uri
                  maxItems: 7
                  description: >-
                    Optional reference images. Order is the `@image_N`
                    numbering. `image_urls` is accepted as a compatible alias.
                ref_videos:
                  type: array
                  items:
                    type: string
                    format: uri
                  maxItems: 1
                  description: >-
                    Optional reference video (.mp4 / .mov, 3–15.5s). At most
                    one. Named as an array to match the other reference-driven
                    endpoints (`ref_imgs` / `ref_videos` / `ref_audios`), even
                    though only one is allowed. `video_url` is accepted as a
                    compatible alias, and a bare string is accepted too.
                video_type:
                  type: string
                  enum:
                    - feature
                    - base
                  default: feature
                  description: >-
                    Role of `video_url`. See the description above. Requires
                    `ref_videos`.
                duration:
                  type: integer
                  minimum: 3
                  maximum: 15
                  default: 5
                  description: Video duration in seconds. Any integer from 3 to 15.
                resolution:
                  type: string
                  enum:
                    - 720p
                    - 1080p
                    - 4k
                  default: 720p
                  description: >-
                    Output resolution. `quality` is accepted as a compatible
                    alias.
                ratio:
                  type: string
                  enum:
                    - '16:9'
                    - '9:16'
                    - '1:1'
                  default: '16:9'
                  description: >-
                    Output aspect ratio. Only used when there is no first frame
                    and no reference video — otherwise the material decides.
                    `aspect_ratio` is accepted as a compatible alias.
                generate_audio:
                  type: boolean
                  default: false
                  description: >-
                    Generate a native audio track. ⚠️ Rejected together with
                    `video_type: feature`. Costs more per second when there is
                    no reference video.
                multi_shots:
                  type: boolean
                  default: false
                  description: >-
                    Generate a multi-shot video. ⚠️ Rejected together with
                    `video_type: base`. Note the upstream default is `true`;
                    GoEnhance always sends this explicitly so an omitted value
                    means single-shot.
                custom_callback_url:
                  type: string
                  format: uri
                  description: >-
                    Optional. A publicly accessible HTTPS URL. When the task
                    status changes (processing / success / failed), GoEnhance
                    sends a POST request to this URL. The request body is
                    identical to the response of GET /api/v1/jobs/detail. If
                    your server does not respond with HTTP 200, the notification
                    is retried up to 3 times, with a 3-second timeout per
                    attempt.
                  example: https://your-server.com/goenhance/callback
              required:
                - model
                - prompt
            example:
              model: kling-v3-omni
              prompt: '@image_1 turns to face the camera as the rain starts, cinematic'
              image_url: https://example.com/first-frame.png
              resolution: 1080p
              duration: 5
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  msg:
                    type: string
                  data:
                    type: object
                    properties:
                      img_uuid:
                        type: string
                    required:
                      - img_uuid
                required:
                  - code
                  - msg
                  - data
              examples:
                '1':
                  summary: Success
                  value:
                    code: 0
                    msg: Success
                    data:
                      img_uuid: c12b656c-747a-44fd-9c80-add79b0c52d5
                '2':
                  summary: Insufficient tokens
                  value:
                    code: 100
                    msg: tokens is not enough
          headers: {}
        '401':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  msg:
                    type: string
                required:
                  - code
                  - msg
          headers: {}
      deprecated: false

````