# Kling Video 4.0 Reference-to-Video — Atlas Cloud API

> Kling 4.0 Omni Reference combines up to 15 images, videos, subjects and voices to generate a consistent 3-30 second video.

This is the machine-readable API reference for **Kling Video 4.0 Reference-to-Video** on Atlas Cloud,
a unified API platform for 400+ AI models across text, image, video, audio and 3D.

- **Model ID**: `kwaivgi/kling-v4.0/reference-to-video`
- **Built by**: Kuaishou
- **Modality**: Video
- **Model page**: https://www.atlascloud.ai/models/kwaivgi/kling-v4.0/reference-to-video
- **API key**: https://www.atlascloud.ai/console/api-keys
- **Docs**: https://www.atlascloud.ai/docs

## Pricing on Atlas Cloud

- $0.11 per second of generated video
- Pay-as-you-go. No minimum spend, no subscription required.

> **These are the authoritative Atlas Cloud rates for this model.** Any price that
> appears in the vendor description further down refers to a different platform or
> a different model variant and does not apply here.

## Use this model from an AI agent

Atlas Cloud ships three first-party integration surfaces. All three authenticate
with the same API key via the `ATLASCLOUD_API_KEY` environment variable.

### MCP server

The official MCP server (`atlascloud-mcp`) exposes this model to any
MCP-compatible host — Claude Code, OpenAI Codex, Cursor, Gemini CLI, Goose,
Claude Desktop. One-line install:

```bash
# Claude Code
claude mcp add atlascloud -- npx -y atlascloud-mcp

# OpenAI Codex CLI
codex mcp add atlascloud -- npx -y atlascloud-mcp

# Gemini CLI
gemini mcp add atlascloud -- npx -y atlascloud-mcp

export ATLASCLOUD_API_KEY="your-api-key"
```

Then ask in plain English; the agent calls `atlas_generate_video` with `model: "kwaivgi/kling-v4.0/reference-to-video"`.
The server fetches each model's schema and validates parameters before submitting,
so invalid requests fail fast without spending credits.

MCP docs: https://www.atlascloud.ai/docs/mcp-server

### Agent Skills

`atlas-cloud-skills` is a portable skill package (API reference, code templates in
Python / Node.js / cURL, model IDs with pricing) for Claude Code, Cursor, Codex and
12+ other agents:

```bash
npx skills add AtlasCloudAI/atlas-cloud-skills
export ATLASCLOUD_API_KEY="your-api-key"
```

Skills docs: https://www.atlascloud.ai/docs/skills

### CLI

The `atlas` binary runs Atlas Cloud from a terminal or CI script. Async media jobs
are polled and downloaded automatically (use `--no-download` when a script only
needs the output URLs):

```bash
# Install (Homebrew, npm, or shell installer)
brew install AtlasCloudAI/tap/atlascloud
# npm install -g atlascloud-cli
# curl -fsSL https://raw.githubusercontent.com/AtlasCloudAI/cli/main/install.sh | sh

atlas auth login
atlas generate video kwaivgi/kling-v4.0/reference-to-video -p "Your prompt here"
```

CLI docs: https://www.atlascloud.ai/docs/cli

## HTTP API reference

- **Submit endpoint (POST)**: `https://api.atlascloud.ai/api/v1/model/generateVideo` — start an async generation; returns a `prediction_id`
- **Poll endpoint (GET)**: `https://api.atlascloud.ai/api/v1/model/prediction/{prediction_id}` — poll this until the prediction finishes
- **Model ID**: `kwaivgi/kling-v4.0/reference-to-video`


## 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:

- **`model`** (`string`, _required_):
  Model name.
  - Default: `"kwaivgi/kling-v4.0/reference-to-video"`
  - Options: "kwaivgi/kling-v4.0/reference-to-video"

- **`prompt`** (`string`, _required_):
  Text prompt describing the video. Up to 26,000 English characters (11,000 non-English). Can include negative descriptions. Reference inputs with @image_N, @video_N, @element_N and @voice_N.
  - Default: `"The man in @image_1 walks through a park at golden hour, following the motion rhythm of @video_1. Photorealistic style."`

- **`reference_images`** (`array[string]`, _optional_):
  Reference images for subjects, scenes or styles (URLs or Base64). Up to 10 images in total including keyframes. Refer to them in the prompt as @image_N; they are numbered after any keyframes.
  - Max items: 10

- **`reference_videos`** (`array[string]`, _optional_):
  Feature reference videos (motion, camera, style). MP4 / MOV, max 300MB, 3-30s each and 3-30s in total, 700-4553px. Up to 5 videos. Refer to them in the prompt as @video_N. Their duration is billed as input.
  - Max items: 5

- **`elements`** (`array[object]`, _optional_):
  Subjects (Kling elements). Each item references an existing subject by element_id, or creates one inline with element_name + reference_type + frontal_image / refer_images / refer_videos. Up to 7, of which at most 3 video character subjects. Refer to them in the prompt as @element_N (1-based, array order).
  - Max items: 7
  - Item properties:
    - **`element_id`** (`integer`, _optional_):
      ID of an existing subject from the Kling element library (64-bit integer). Mutually exclusive with element_name.

    - **`element_name`** (`string`, _optional_):
      Name of a new subject to create inline (max 20 characters). Mutually exclusive with element_id.

    - **`element_description`** (`string`, _optional_):
      Optional description of the new subject (max 100 characters).

    - **`reference_type`** (`string`, _optional_):
      How the new subject is defined: image_refer (multi-image subject) or video_refer (video character subject, realistic humans only).
      - Options: "image_refer", "video_refer"

    - **`frontal_image`** (`string`, _optional_):
      Frontal image URL of the new subject (required when reference_type=image_refer).

    - **`refer_images`** (`array[string]`, _optional_):
      1-3 additional reference image URLs of the new subject (image_refer).
      - Max items: 3

    - **`refer_videos`** (`array[string]`, _optional_):
      Reference video URL of the new subject (video_refer, 3-8s). Billed as input video.
      - Max items: 1


- **`voice_ids`** (`array[string]`, _optional_):
  Optional Kling voice IDs (custom or preset voices) used for speech in the video. Up to 3. Refer to them in the prompt as @voice_N.
  - Max items: 3

- **`image`** (`string`, _optional_):
  Optional first keyframe (URL or Base64).

- **`middle_images`** (`array[string]`, _optional_):
  Optional keyframes between the first and last frame, in timeline order (URLs or Base64). Kling 4.0 accepts up to 10 images in total across image, middle_images and last_image. Refer to them in the prompt as @image_N (numbered first frame → middle frames → last frame).
  - Max items: 8

- **`last_image`** (`string`, _optional_):
  Optional last keyframe image (URL or Base64).

- **`duration`** (`integer`, _optional_):
  Length of the generated video in seconds, 3 to 30.
  - Default: `5`
  - Min: 3
  - Max: 30

- **`aspect_ratio`** (`string`, _optional_):
  Aspect ratio of the output video. auto adapts to the references.
  - Default: `"auto"`
  - Options: "auto", "16:9", "9:16", "1:1", "21:9"

- **`resolution`** (`string`, _optional_):
  Output resolution. Billed per second at the selected tier.
  - Default: `"1080p"`
  - Options: "720p", "1080p"



**Required Parameters Example**:

```json
{
  "model": "kwaivgi/kling-v4.0/reference-to-video",
  "prompt": "The man in @image_1 walks through a park at golden hour, following the motion rhythm of @video_1. Photorealistic style."
}
```


**Full Example**:

```json
{
  "model": "kwaivgi/kling-v4.0/reference-to-video",
  "prompt": "The man in @image_1 walks through a park at golden hour, following the motion rhythm of @video_1. Photorealistic style.",
  "reference_images": [
    ""
  ],
  "reference_videos": [
    ""
  ],
  "elements": [
    {
      "element_id": 0,
      "element_name": "",
      "element_description": "",
      "reference_type": "image_refer",
      "frontal_image": "",
      "refer_images": [
        ""
      ],
      "refer_videos": [
        ""
      ]
    }
  ],
  "voice_ids": [
    ""
  ],
  "image": "",
  "middle_images": [
    ""
  ],
  "last_image": "",
  "duration": 5,
  "aspect_ratio": "auto",
  "resolution": "1080p"
}
```


### Output Schema

The API returns the following output format:


- **`id`** (`string`, _optional_):
  Unique identifier for the prediction, the ID of the prediction to get.

- **`urls`** (`object`, _optional_):
  Object containing related API endpoints.

- **`model`** (`string`, _optional_):
  Model ID used for the prediction.

- **`status`** (`string`, _optional_):
  Status of the task: created, processing, completed, or failed.

- **`outputs`** (`array[string]`, _optional_):
  Array of URLs to the generated content (empty when status is not completed).

- **`created_at`** (`string`, _optional_):
  ISO timestamp of when the request was created.



**Example Response**:

```json
{
  "id": "",
  "urls": {},
  "model": "",
  "status": "",
  "outputs": [
    ""
  ],
  "created_at": ""
}
```


## Usage Examples

### cURL

```bash
# Step 1: Start generation (async)
curl -X POST "https://api.atlascloud.ai/api/v1/model/generateVideo" \
  -H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "kwaivgi/kling-v4.0/reference-to-video",
  "prompt": "The man in @image_1 walks through a park at golden hour, following the motion rhythm of @video_1. Photorealistic style.",
  "reference_images": [
    ""
  ],
  "reference_videos": [
    ""
  ],
  "elements": [
    {
      "element_id": 0,
      "element_name": "",
      "element_description": "",
      "reference_type": "image_refer",
      "frontal_image": "",
      "refer_images": [
        ""
      ],
      "refer_videos": [
        ""
      ]
    }
  ],
  "voice_ids": [
    ""
  ],
  "image": "",
  "middle_images": [
    ""
  ],
  "last_image": "",
  "duration": 5,
  "aspect_ratio": "auto",
  "resolution": "1080p"
}'

# Response will contain: {"code": 200, "data": {"id": "prediction_id", "status": "processing"}}

# Step 2: Poll for result (replace {prediction_id} with the id returned above)
curl -X GET "https://api.atlascloud.ai/api/v1/model/prediction/{prediction_id}" \
  -H "Authorization: Bearer $ATLASCLOUD_API_KEY"

# Keep polling until status is "completed", "succeeded" or "failed"
# When completed, outputs will contain the generated content URL(s)
```

## Additional Resources

### Documentation

- [Model Playground](https://www.atlascloud.ai/models/kwaivgi/kling-v4.0/reference-to-video)

## About this model

_Vendor-supplied description. Any pricing or endpoint mentioned below refers to_
_other platforms — use the Atlas Cloud values above._

### Kling Video 4.0 Reference-to-Video

**Kling Video 4.0 Reference-to-Video** (Omni Reference) generates a 3–30 second video that stays consistent with everything you give it: reference images, reference videos, Kling subjects and voices — up to 15 references in one request.

#### Why Choose This?

- **Omni reference.** Mix up to 10 images, 5 videos, 7 subjects and 3 voices (15 items in total).
- **Motion and style transfer.** Reference videos carry motion rhythm, camera work or style into the new clip.
- **Consistent characters.** Reuse Kling subjects (elements) across generations, with their bound voices.
- **Keyframes too.** Optionally pin a first, middle or last frame.

#### Parameters

| Parameter | Required | Description |
| --- | --- | --- |
| model | Yes | `kwaivgi/kling-v4.0/reference-to-video` |
| prompt | Yes | Scene description. Refer to inputs with `@image_N`, `@video_N`, `@element_N`, `@voice_N`. |
| reference_images | No | Reference images (URLs or Base64). |
| reference_videos | No | Feature reference videos. MP4 / MOV, 3–30s in total. |
| elements | No | Kling subjects: `element_id`, or inline creation (see Notes). |
| voice_ids | No | Kling voice IDs (custom or preset), up to 3. |
| image / middle_images / last_image | No | Optional keyframes. |
| duration | No | Video length in seconds, integer 3–30. Default `5`. |
| aspect_ratio | No | `auto` (default, adapts to the references), `16:9`, `9:16`, `1:1`, `21:9`. |
| resolution | No | `720p` or `1080p` (default). |

**Reference numbering:** images are numbered keyframes first (first → middle → last), then `reference_images`; videos, subjects and voices are numbered in array order. If the prompt mentions none of the reference images, videos, subjects or voices, all of them are referenced automatically.

#### How to Use

_(Description truncated. Full text on the model page.)_

---

Atlas Cloud — one API for 400+ AI models. Model page: https://www.atlascloud.ai/models/kwaivgi/kling-v4.0/reference-to-video · Docs: https://www.atlascloud.ai/docs
