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

# Kling v4 Flash Video Generation

> One kling-4.0-flash model for text-to-video, reference media and first-frame generation

All three input modes use `kling-4.0-flash`. The API selects the generation path from the supplied media. Generation is asynchronous; query the platform task ID returned by submission.

> [!NOTE]
>
> Use a platform API key. Mainland China users can replace `https://toapis.com` with `https://toapis.cn`. Availability depends on the deployed channel configuration and account access.

## Input modes

| Mode | Request content |
| - | - |
| Text-to-video | Send a prompt and output specifications without media. |
| Reference media | Use `image_urls` / `video_urls`, or media with reference roles. Images and videos can be combined. |
| First frame | Set a single `first_frame` image in `image_with_roles`. Do not include reference images or videos; middle and last frames are unsupported. |

## Request parameters

**Authorization** `string` *required*

Authenticate with `Bearer YOUR_API_KEY`.

**model** `string` *required*

Always `kling-4.0-flash`. Do not change the model ID between modes.

**prompt** `string` *required*

Required, nonblank, at most 8000 Unicode characters. Describe the subject, action, camera and relationships between media.

**duration** `integer` (default: 5)

Integer from 3 to 20 seconds. Defaults to 5.

**resolution** `string` (default: 720p)

Only `720p`. Defaults to `720p`.

**aspect\_ratio** `string`

`auto`, `16:9`, `9:16`, `1:1` or `21:9`. Omission leaves the upstream default unchanged; send `auto` explicitly for automatic aspect ratio.

**image\_urls** `string[]`

Reference image URL array, at most 10 images. Positions do not imply a first frame. Counts combine with reference image roles; use one representation per media item.

**video\_urls** `string[]`

Reference video URL array, at most 5 videos combined with `video_with_roles`.

**image\_with\_roles** `object[]`

Each object has `url` and `role`. `reference` / `reference_image` means reference image; `first_frame` means the first frame. `keyframe` and `last_frame` are unsupported.

**video\_with\_roles** `object[]`

Each object has `url` and `role`. Supported roles: `reference` / `reference_video`.

**metadata** `object`

Boolean `keep_original_sound` preserves reference video audio, for example `{"keep_original_sound": true}`. Use for reference videos only. First-frame mode rejects this key even when false.

**client\_business\_id** `string`

Optional client business ID, stored with the task and accepted by the same query endpoint.

## Media rules and validation

* Use publicly accessible HTTP(S) media URLs without usernames or passwords. Upload local files with [image upload](https://docs.toapis.com/docs/en/api-reference/uploads/images.md) or [video upload](https://docs.toapis.com/docs/en/api-reference/uploads/videos.md). Do not send local paths or base64.
* Reference mode allows up to 10 images and 5 videos. Plain arrays and explicit reference roles are combined; do not send the same media twice.
* First-frame mode accepts exactly one `first_frame` image; `keyframe` and `last_frame` roles are rejected. The first frame is selected by role, not by plain image array positions.
* First frame and reference media are mutually exclusive. Do not use legacy Kling `mode`, `audio`, `video_list` or Omni reference structures. `audio_with_roles`, `metadata.elements` and `metadata.voices` are unsupported.
* Invalid specifications, roles, URLs, counts or mode combinations are rejected. Correct the returned error before retrying. This page does not promise file size, codec or input video duration limits; media must also satisfy upload service and upstream requirements.

## Request examples

### Text-to-video

```json theme={null}
{
  "model": "kling-4.0-flash",
  "prompt": "Waves on the shore, a slow camera push, sunset lighting",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "16:9"
}
```

### Reference media

```json theme={null}
{
  "model": "kling-4.0-flash",
  "prompt": "Keep the character from the reference image and the camera motion from the reference video",
  "duration": 10,
  "resolution": "720p",
  "aspect_ratio": "16:9",
  "image_urls": [
    "https://example.com/character.png"
  ],
  "video_urls": [
    "https://example.com/motion.mp4"
  ],
  "metadata": {
    "keep_original_sound": true
  }
}
```

### First frame

```json theme={null}
{
  "model": "kling-4.0-flash",
  "prompt": "Starting from the first frame, the character slowly turns toward the window",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "16:9",
  "image_with_roles": [
    {
      "url": "https://example.com/first.png",
      "role": "first_frame"
    }
  ]
}
```

### Submit a task

```bash cURL theme={null}
curl --request POST \
  --url https://toapis.com/v1/videos/generations \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "kling-4.0-flash",
  "prompt": "Waves on the shore, a slow camera push, sunset lighting",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "16:9"
}'
```

```json theme={null}
{
  "id": "task_example",
  "object": "generation.task",
  "model": "kling-4.0-flash",
  "status": "queued",
  "created_at": 1792713600
}
```

## Task queries and billing

The response `id` is the platform task ID. Query it below instead of using the provider task\_id. States include `queued`, `in_progress`, `completed` and `failed`. See [video task status](https://docs.toapis.com/docs/en/api-reference/tasks/video-status.md) for the result schema and [task webhooks](https://docs.toapis.com/docs/en/api-reference/webhooks/task-webhooks.md) for callbacks.

```bash theme={null}
curl --request GET \
  --url https://toapis.com/v1/videos/generations/YOUR_TASK_ID \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

Defaults are 5 seconds / 720p. Set these explicitly to control output specifications. This page does not quote fixed prices or equate original audio preservation with legacy Sound billing. Account quotes and task usage / billing determine the actual charges.


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