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

# Kling V4 Pembuatan Video

> Teks ke video, gambar ke video, pembuatan berbasis referensi, pengeditan, dan perpanjangan video. Hasilkan 3–30 detik pada 720p / 1080p, selalu dengan audio stereo.

> [!NOTE]
>
> Endpoint ini bekerja secara asinkron. Setelah mengirim permintaan, gunakan `task_id` yang dikembalikan dengan `GET /v1/videos/generations/{task_id}` untuk memeriksa status dan hasil tugas.

```bash cURL theme={null}
curl --request POST \
  --url https://api.apimart.ai/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "kling-v4",
    "prompt": "A paper boat drifts along a gutter on a rainy night, with the gentle sound of rain",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }'
```

```python Python theme={null}
import requests

response = requests.post(
    "https://api.apimart.ai/v1/videos/generations",
    headers={"Authorization": "Bearer <token>"},
    json={
        "model": "kling-v4",
        "prompt": "A paper boat drifts along a gutter on a rainy night, with the gentle sound of rain",
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "9:16"
    }
)
response.raise_for_status()
print(response.json())
```

```javascript JavaScript theme={null}
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer <token>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "kling-v4",
    prompt: "A paper boat drifts along a gutter on a rainy night, with the gentle sound of rain",
    duration: 5,
    resolution: "720p",
    aspect_ratio: "9:16"
  })
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

## Pemilihan mode

Kelima mode memakai nama model yang sama, `kling-v4`. Mode dipilih berdasarkan aset yang diberikan dan `omni_reference_task_type`.

| Mode | Input |
| - | - |
| Teks ke video | Tanpa aset gambar, video, atau audio |
| Gambar ke video | Satu bingkai awal, dengan bingkai akhir dan hingga 8 bingkai antara sebagai opsi |
| Pembuatan berbasis referensi | Berikan `video_urls`, `audio_urls`, atau `reference_image` dalam `image_with_roles`; atau tetapkan `omni_reference_task_type: "reference"` secara eksplisit |
| Pengeditan video | Tetapkan `omni_reference_task_type: "edit"` dan berikan video input |
| Perpanjangan video | Tetapkan `omni_reference_task_type: "extend"` dan berikan video input |

Nilai default `omni_reference_task_type` adalah `auto`, sama dengan tidak mengirim kolom ini. Jika secara eksplisit diatur ke `reference`, gambar dalam `image_urls` diperlakukan sebagai gambar referensi.

> [!WARNING]
>
> Mengirim hanya `video_url` tanpa menentukan `edit` atau `extend` menghasilkan HTTP 400. Untuk memakai video sebagai referensi, gunakan `video_urls`.

## Header permintaan

**Authorization** `string` *required*

Autentikasi Bearer: `Bearer <token>`, dengan `<token>` sebagai API Key APIMart Anda.

## Parameter permintaan

**model** `string` *required*

Harus `kling-v4`.

**prompt** `string`

Jelaskan konten yang akan dibuat atau diedit. Opsional untuk gambar ke video; wajib untuk mode lainnya.

Dalam pembuatan berbasis referensi, gunakan `@Image1`, `@Video1`, dan `@Audio1` untuk merujuk aset, dengan penomoran mulai dari 1 sesuai urutan setiap array. Dalam pengeditan video, video input adalah `@Video1`, sedangkan gambar referensi adalah `@Image1`, `@Image2`, dan seterusnya.

**duration** `integer`

Durasi yang dihasilkan dalam detik, dari `3` hingga `30`; default: `5`.

* Pengeditan video: jika tidak dikirim, durasi output mengikuti video input.
* Perpanjangan video: durasi segmen baru. Video yang dikembalikan menggabungkan video asli dan segmen baru.

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

Resolusi output: `720p` atau `1080p`. Gunakan kolom ini untuk memilih resolusi; V4 tidak mendukung `mode`.

**aspect\_ratio** `string`

Mendukung `16:9`, `9:16`, `1:1`, dan `21:9`. Pembuatan berbasis referensi juga mendukung `auto`.

| Mode | Perilaku default |
| - | - |
| Teks ke video | `16:9` |
| Gambar ke video | Mengikuti bingkai awal |
| Pembuatan berbasis referensi | `auto` |
| Pengeditan video | Mengikuti video input |
| Perpanjangan video | Kolom ini tidak didukung; rasio aspek asli dipertahankan |

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

Daftar URL gambar, dengan arti sesuai mode:

* Gambar ke video: gambar pertama menjadi bingkai awal dan gambar kedua menjadi bingkai akhir; maksimal 2 gambar.
* Pembuatan berbasis referensi dan pengeditan video: hingga 10 gambar referensi. Untuk membuat video hanya dari gambar referensi, tetapkan `omni_reference_task_type: "reference"` secara eksplisit.

URL aset harus dapat diakses publik.

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

Daftar gambar dengan peran. Setiap item berisi `url` dan `role`.

| `role` | Kegunaan |
| - | - |
| `first_frame` | Bingkai awal untuk gambar ke video; wajib tepat 1 |
| `last_frame` | Bingkai akhir untuk gambar ke video, atau bingkai akhir target untuk perpanjangan |
| `keyframe` | Bingkai antara untuk gambar ke video; `middle_frame` juga diterima. Digunakan sesuai urutan array, hingga 8 gambar |
| `reference_image` | Gambar referensi untuk pembuatan berbasis referensi |

Untuk gambar ke video, total bingkai awal, akhir, dan antara tidak boleh melebihi 10 gambar.

**first\_frame\_image** `string`

URL bingkai awal untuk gambar ke video. Bisa juga diberikan melalui `first_frame` dalam `image_with_roles`, atau sebagai gambar pertama dalam `image_urls`.

**last\_frame\_image** `string`

URL bingkai akhir untuk gambar ke video, atau URL bingkai akhir target untuk perpanjangan.

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

Video referensi untuk pembuatan berbasis referensi: hingga 5 klip, dengan total penggunaan maksimal 30 detik.

Untuk pengeditan atau perpanjangan, Anda juga dapat memberikan tepat 1 URL video sebagai pengganti `video_url`, dengan `omni_reference_task_type: "edit"` atau `"extend"`.

**video\_url** `string`

URL video input untuk pengeditan atau perpanjangan. Wajib disertai `omni_reference_task_type: "edit"` atau `"extend"`.

Untuk pengeditan, video input harus berdurasi minimal 3 detik; durasi yang lebih pendek menghasilkan HTTP 400. Jika melebihi 30 detik, hanya 30 detik pertama yang digunakan.

**audio\_urls** `string[]`

Audio referensi untuk pembuatan berbasis referensi: hingga 3 klip, masing-masing 5–30 detik.

Dalam pembuatan berbasis referensi, total gambar, video, dan audio referensi maksimal 15 aset.

**omni\_reference\_task\_type** `string` (default: auto)

Mendukung `auto`, `reference`, `edit`, dan `extend`.

* `auto`: memilih teks ke video, gambar ke video, atau pembuatan berbasis referensi berdasarkan aset; sama dengan tidak mengirim kolom ini.
* `reference`: pembuatan berbasis referensi; gambar dalam `image_urls` diperlakukan sebagai referensi.
* `edit`: pengeditan video; memerlukan video input.
* `extend`: perpanjangan video; memerlukan video input.

**audio\_setting** `string`

Mendukung `origin` (mempertahankan audio video input) dan `auto` (membuat audio baru). Hanya untuk pengeditan atau pembuatan berbasis referensi yang menyertakan video referensi.

* Pengeditan video: secara default mempertahankan audio asli; `auto` membuat audio baru.
* Pembuatan berbasis referensi dengan video referensi: secara default membuat audio baru; `origin` mempertahankan audio video referensi.
* Perpanjangan video: kolom ini tidak didukung. Audio asli dipertahankan, dan audio untuk segmen baru dibuat secara otomatis.

V4 selalu menghasilkan video dengan audio stereo; suara dan visual dibuat bersama.

## Contoh permintaan

URL aset di bawah hanyalah contoh. Ganti dengan URL asli yang dapat diakses publik.

### Gambar ke video: bingkai awal dan akhir

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "The camera slowly moves closer",
  "image_urls": ["https://example.com/start.png", "https://example.com/end.png"]
}
```

Gambar pertama adalah bingkai awal dan gambar kedua adalah bingkai akhir. `prompt` opsional untuk gambar ke video.

### Gambar ke video: bingkai awal, antara, dan akhir

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "A girl walks from the window to the door, then looks back and smiles",
  "image_with_roles": [
    {"url": "https://example.com/1.png", "role": "first_frame"},
    {"url": "https://example.com/2.png", "role": "keyframe"},
    {"url": "https://example.com/3.png", "role": "keyframe"},
    {"url": "https://example.com/4.png", "role": "last_frame"}
  ],
  "duration": 10
}
```

Bingkai antara digunakan sesuai urutan array. Wajib ada tepat 1 bingkai awal, dengan total maksimal 10 gambar untuk bingkai awal, akhir, dan antara.

### Pembuatan berbasis referensi

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "The girl in @Image1 runs along the beach with the camera movement from @Video1 and background music from @Audio1",
  "image_with_roles": [
    {"url": "https://example.com/girl.png", "role": "reference_image"}
  ],
  "video_urls": ["https://example.com/camera.mp4"],
  "audio_urls": ["https://example.com/bgm.mp3"],
  "aspect_ratio": "auto",
  "duration": 5
}
```

Hingga 10 gambar referensi, 5 video referensi, dan 3 klip audio referensi, dengan total maksimal 15 aset. Video referensi memakai total maksimal 30 detik; tiap audio referensi harus berdurasi 5–30 detik.

### Pengeditan video

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "Change the scene to a snowy winter night",
  "omni_reference_task_type": "edit",
  "video_url": "https://example.com/in.mp4",
  "image_urls": ["https://example.com/style.png"]
}
```

Video input minimal 3 detik; jika melebihi 30 detik, hanya 30 detik pertama yang digunakan. Tanpa `duration` dan `aspect_ratio`, durasi serta rasio aspek output mengikuti video input. Audio asli dipertahankan secara default; gunakan `audio_setting: "auto"` untuk membuat audio baru.

### Perpanjangan video

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "The camera continues moving forward as the sky grows darker",
  "omni_reference_task_type": "extend",
  "video_url": "https://example.com/in.mp4",
  "duration": 5
}
```

Perpanjangan dimulai dari bingkai terakhir video input. Hasil menggabungkan video asli dan segmen baru; hanya durasi segmen baru yang dikenai biaya.

Berikan bingkai akhir target melalui `last_frame_image` atau `last_frame` dalam `image_with_roles`. Perpanjangan tidak mendukung `aspect_ratio` maupun `audio_setting`.

## Memeriksa tugas

Ganti ID tugas dalam permintaan berikut dengan ID yang dikembalikan saat pengiriman:

```bash theme={null}
curl --request GET \
  --url 'https://api.apimart.ai/v1/videos/generations/<task_id>' \
  --header 'Authorization: Bearer <token>'
```

Perkiraan waktu pembuatan: 3 menit untuk video 720p berdurasi 3 detik, dan 3,5 menit untuk video berdurasi 15 detik.

## Penagihan

Ditagih per detik. Lihat [Harga Model](https://apimart.ai/pricing) untuk tarif. `720p` dan `1080p` memiliki tarif terpisah.

Pengeditan video dan pembuatan berbasis referensi dengan video referensi menggunakan tarif dengan input video. Mode lainnya menggunakan tarif pembuatan standar.

| Mode | Detik yang ditagih |
| - | - |
| Teks ke video, gambar ke video, pembuatan berbasis referensi hanya dengan gambar atau audio | Detik output |
| Perpanjangan video | Detik segmen baru |
| Pengeditan video, pembuatan berbasis referensi dengan video referensi | Detik output + max(detik output, detik video input) |

Detik video input dihitung dengan menjumlahkan durasi klip, membulatkan ke atas ke detik penuh, lalu membatasi total menjadi 30 detik. Contoh: mengedit video 3,04 detik tanpa `duration` menghasilkan 4 detik, dengan tagihan 4 + 4 = 8 detik.

Untuk pengeditan dan pembuatan berbasis referensi dengan video referensi, durasi video input diperiksa saat pengiriman. Jika pemeriksaan gagal, HTTP 400 dikembalikan tanpa biaya. Pembuatan yang gagal mendapat pengembalian dana penuh.

## Parameter yang tidak didukung

Parameter atau nilai berikut menghasilkan HTTP 400:

* `mode`: V4 tidak memiliki tingkat `std`, `pro`, atau `4k`. Gunakan `resolution`.
* `negative_prompt`, `watermark: true`, `audio: false`.
* `multi_shot`, `multi_prompt`, `element_list`, `video_list`.
* `camera_control`, `voice_list`.

## Kesalahan umum

| Kesalahan | Tindakan |
| - | - |
| `video_url needs omni_reference_task_type edit ... or extend` | Tentukan `edit` atau `extend` saat memakai `video_url`; gunakan `video_urls` untuk video referensi |
| `image-to-video requires exactly 1 first frame` | Berikan tepat 1 bingkai awal; bingkai akhir atau antara saja tidak cukup |
| `first frame, last frame and keyframes together are at most 10 images` | Kurangi total bingkai awal, akhir, dan antara menjadi maksimal 10 |
| `reference images, videos and audios together are at most 15 files` | Kurangi total aset referensi menjadi maksimal 15 |
| `video edit requires an input video of at least 3 seconds` | Gunakan video input minimal 3 detik |
| `Failed to probe the input video duration` | Pastikan URL dapat diakses dan mengarah ke file video yang valid |
| `has no std/pro/4k mode` | Hapus `mode` dan gunakan `resolution` |
| `Could not download the input from ... (HTTP 403)` | Gunakan URL aset publik tanpa perlindungan hotlink |


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