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

# Kling O1 Video

> Generate videos with Kling O1

Generate high-quality AI videos using Kling O1. Supports text-to-video, raw reference images, persistent subject/object elements (image only), start/end frames, video transform, and video reference.

Same shape as Omni 3.0 but does not support `multi_shots`, `native_audio`, or video-type elements. Max duration 10s.

## Model

```
kuaishou/kling-o1-video
```

## Parameters

| Parameter           | Type              | Required | Default | Description                                                                                                                                                                       |
| ------------------- | ----------------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `video_mode`        | string            | No       | -       | Input mode. Allowed: `"elements"`, `"start_end_frame"`, `"transform"`, `"video_reference"`. Omit for text-to-video                                                                |
| `prompt`            | string            | **Yes**  | -       | Text prompt                                                                                                                                                                       |
| `mode`              | string            | No       | `"pro"` | `"std"` (720p) or `"pro"` (1080p)                                                                                                                                                 |
| `duration`          | integer           | No       | `5`     | Video length in seconds (3–10)                                                                                                                                                    |
| `aspect_ratio`      | string            | No       | -       | `"1:1"`, `"9:16"`, `"16:9"`, or `"auto"`. Must be `"auto"` when `video_url` is set; rejected otherwise. Omit to let the server choose (`"auto"` if `video_url`, else `"16:9"`)    |
| `image_urls`        | string\[]         | No       | -       | Raw reference image URLs uploaded per request (max 7). No description, no reuse. Use `@Image1`, `@Image2` in `prompt`                                                             |
| `start_image_index` | integer           | No       | -       | 1-based index into `image_urls` marking which reference image anchors the first frame. No end-frame equivalent                                                                    |
| `elements`          | ElementInput30\[] | No       | -       | Persistent subject/object assets (image only on O1). Auto-created on Kling and auto-deleted if submit fails. Use `@Element1`, `@Element2` in `prompt`. Coexists with `image_urls` |
| `start_frame_url`   | string            | No       | -       | First frame image URL (`start_end_frame` mode)                                                                                                                                    |
| `end_frame_url`     | string            | No       | -       | Last frame image URL (`start_end_frame` mode)                                                                                                                                     |
| `video_url`         | string            | No       | -       | Source video URL (`transform` / `video_reference` modes)                                                                                                                          |

## Modes

| Mode                      | Required inputs                          | Optional inputs             | Notes                                                                                        |
| ------------------------- | ---------------------------------------- | --------------------------- | -------------------------------------------------------------------------------------------- |
| *omitted* (text-to-video) | `prompt`                                 | —                           | Rejects every input field including `elements`, `image_urls`, `start_frame_url`, `video_url` |
| `elements`                | At least one of `image_urls`, `elements` | —                           | Combined `image_urls` + `elements` cap of **7**. `video_url` rejected                        |
| `start_end_frame`         | `start_frame_url`                        | `end_frame_url`, `elements` | —                                                                                            |
| `transform`               | `video_url`                              | `image_urls`, `elements`    | Combined `image_urls` + `elements` cap of **4**. `aspect_ratio` must be `"auto"`             |
| `video_reference`         | `video_url`                              | `image_urls`, `elements`    | Combined `image_urls` + `elements` cap of **4**. `aspect_ratio` must be `"auto"`             |

<Note>
  **Text-to-video with elements** — set `video_mode: "elements"` and pass only the `elements` array (no `image_urls` required). The omit-`video_mode` path is strictly for pure text-to-video with **zero** inputs; any reference (image or element) requires `elements` mode.
</Note>

## Reference images vs elements

* **`image_urls`** — raw images uploaded per request. Single-use, no description, no reuse across tasks. Cap 7. Reference in `prompt` as `@Image1`, `@Image2`, …
* **`elements`** — persistent subject/object assets stored on the Kling account. Auto-created from your input on submit and auto-deleted if the submit fails. Reference in `prompt` as `@Element1`, `@Element2`, …

Both can be used together; they share the per-mode combined cap.

## Elements

O1 supports IMAGE elements only — passing an element with `type: "video"` returns 400.

```json theme={null}
"elements": [
  {"description": "Woman in red jacket", "type": "image", "image_urls": ["front.jpg", "side.jpg"]}
]
```

Each element accepts:

| Parameter     | Type      | Default   | Description                                      |
| ------------- | --------- | --------- | ------------------------------------------------ |
| `description` | string    | `""`      | Short description of the element (max 100 chars) |
| `type`        | string    | `"image"` | Must be `"image"` on O1                          |
| `image_urls`  | string\[] | -         | Source image URLs for the element (max 4)        |

## Example - Text-to-Video

```bash theme={null}
curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "kuaishou/kling-o1-video",
    "input": {
      "prompt": "A cinematic drone shot over a misty forest at dawn",
      "duration": 10,
      "mode": "pro"
    }
  }'
```

## Example - Reference Images

```bash theme={null}
curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "kuaishou/kling-o1-video",
    "input": {
      "video_mode": "elements",
      "prompt": "Create a video featuring @Image1 and @Image2",
      "image_urls": ["https://example.com/ref1.jpg", "https://example.com/ref2.jpg"],
      "duration": 10,
      "mode": "pro"
    }
  }'
```

## Example - With Elements

```bash theme={null}
curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "kuaishou/kling-o1-video",
    "input": {
      "video_mode": "elements",
      "prompt": "@Element1 walks through a park at sunset",
      "elements": [
        {"description": "Woman in red jacket", "type": "image", "image_urls": ["https://example.com/front.jpg"]}
      ],
      "duration": 10,
      "mode": "pro"
    }
  }'
```

## Example - Start/End Frame

```bash theme={null}
curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "kuaishou/kling-o1-video",
    "input": {
      "prompt": "Smooth transition between scenes",
      "video_mode": "start_end_frame",
      "start_frame_url": "https://example.com/start.jpg",
      "end_frame_url": "https://example.com/end.jpg",
      "duration": 10,
      "mode": "pro"
    }
  }'
```

## Response

```json theme={null}
{
  "code": 200,
  "success": true,
  "data": {
    "task_id": "abc123def456",
    "status": "processing"
  }
}
```
