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

# Pixverse v6 Pembuatan Video

>  - Model pembuatan video terpadu Pixverse v6
- Mendukung teks-ke-video, gambar-ke-video, transisi frame awal/akhir, fusi gambar referensi multipel, dan perpanjangan video
- Mendukung resolusi 360p/540p/720p/1080p, durasi 1–15 detik
- API tugas asinkron: setelah pengiriman, kueri hasil melalui ID tugas 

<RequestExample>
  ```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": "pixverse-v6",
      "prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
      "size": "16:9",
      "resolution": "540p",
      "duration": 5
    }'
  ```

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

  url = "https://api.apimart.ai/v1/videos/generations"

  payload = {
      "model": "pixverse-v6",
      "prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
      "size": "16:9",
      "resolution": "540p",
      "duration": 5
  }

  headers = {
      "Authorization": "Bearer <token>",
      "Content-Type": "application/json"
  }

  response = requests.post(url, json=payload, headers=headers)

  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const url = "https://api.apimart.ai/v1/videos/generations";

  const payload = {
    model: "pixverse-v6",
    prompt: "A cinematic shot of a corgi running through a sunflower field at golden hour",
    size: "16:9",
    resolution: "540p",
    duration: 5
  };

  const headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
  };

  fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(payload)
  })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error("Error:", error));
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "code": 200,
    "data": [
      {
        "status": "submitted",
        "task_id": "task_01JWXXXXXXXXXXXX"
      }
    ]
  }
  ```

  ```json 400 theme={null}
  {
    "error": {
      "type": "invalid_request_error",
      "message": "invalid duration 20, allowed range: 1-15 seconds"
    }
  }
  ```

  ```json 401 theme={null}
  {
    "error": {
      "code": 401,
      "message": "Autentikasi gagal, silakan periksa API key Anda",
      "type": "authentication_error"
    }
  }
  ```

  ```json 403 theme={null}
  {
    "error": {
      "code": 403,
      "message": "insufficient quota: balance=0, required=0.25",
      "type": "quota_not_enough"
    }
  }
  ```

  ```json 429 theme={null}
  {
    "error": {
      "code": 429,
      "message": "Terlalu banyak permintaan, silakan coba lagi nanti",
      "type": "rate_limit_error"
    }
  }
  ```
</ResponseExample>

## Autentikasi

<ParamField header="Authorization" type="string" required>
  Semua endpoint memerlukan autentikasi menggunakan Bearer Token.

  Mendapatkan API Key:

  Kunjungi [halaman pengelolaan API Key](https://apimart.ai/keys) untuk mendapatkan API Key Anda.

  Tambahkan header berikut pada permintaan:

  ```
  Authorization: Bearer YOUR_API_KEY
  ```
</ParamField>

## Parameter Permintaan

<ParamField body="model" type="string" required>
  Nama model pembuatan video. Tetap `pixverse-v6`.
</ParamField>

<ParamField body="prompt" type="string" required>
  Deskripsi konten video, hingga 5000 karakter. Wajib di semua mode.
</ParamField>

<ParamField body="resolution" type="string" default="540p">
  Tingkat resolusi video. Memengaruhi penagihan secara langsung.

  * `360p`: SD
  * `540p`: Standar (default)
  * `720p`: HD
  * `1080p`: Full HD

  <Warning>
    Nilai resolusi lain akan mengembalikan kesalahan parameter.
  </Warning>
</ParamField>

<ParamField body="duration" type="integer" default="5">
  Durasi video dalam detik, rentang `1–15`.

  <Warning>
    Mode transisi frame awal/akhir hanya mendukung `5` atau `8` detik.
  </Warning>
</ParamField>

<ParamField body="size" type="string" default="16:9">
  Rasio aspek video. Hanya berlaku pada mode teks-ke-video dan fusi gambar referensi multipel.

  * `16:9`: Lanskap layar lebar (default)
  * `4:3`: Lanskap 4:3
  * `1:1`: Persegi
  * `3:4`: Potret 3:4
  * `9:16`: Potret vertikal
  * `2:3`: Potret 2:3
  * `3:2`: Lanskap 3:2
  * `21:9`: Sinema layar lebar
</ParamField>

<ParamField body="seed" type="integer" default="0">
  Seed acak, rentang `0–2147483647`. Prompt dan seed yang sama dapat menghasilkan kembali hasil yang serupa.
</ParamField>

<ParamField body="negative_prompt" type="string">
  Prompt negatif untuk mengecualikan konten yang tidak diinginkan. Hingga 2048 karakter.
</ParamField>

<ParamField body="audio" type="boolean" default="false">
  Apakah trek audio dihasilkan.

  * `true`: Hasilkan audio (menaikkan harga)
  * `false`: Tanpa audio (default)
</ParamField>

<ParamField body="watermark" type="boolean" default="false">
  Apakah watermark ditambahkan di pojok kanan bawah video.

  * `true`: Tambahkan watermark
  * `false`: Tanpa watermark (default)
</ParamField>

<ParamField body="motion_mode" type="string">
  Mode gerakan.

  * `normal`: Mode standar (`pixverse-v6` hanya mendukung nilai ini)

  <Warning>
    `fast` hanya berlaku untuk model lama dan akan ditolak oleh upstream pada `pixverse-v6`.
  </Warning>
</ParamField>

<ParamField body="generate_multi_clip_switch" type="boolean" default="false">
  Apakah menghasilkan video multi-klip yang berkelanjutan. Hanya didukung pada teks-ke-video dan gambar-ke-video.

  * `true`: Hasilkan video multi-klip berkelanjutan
  * `false`: Klip tunggal (default)
</ParamField>

<ParamField body="image_urls" type="array<url>">
  Array URL gambar masukan untuk gambar-ke-video. Hanya gambar pertama yang digunakan.

  Gambar harus berupa URL HTTP/HTTPS yang dapat diakses publik.
</ParamField>

<ParamField body="first_frame_image" type="url">
  URL frame awal pada mode transisi. Harus disertakan bersama `last_frame_image`.
</ParamField>

<ParamField body="last_frame_image" type="url">
  URL frame akhir pada mode transisi. Harus disertakan bersama `first_frame_image`.
</ParamField>

<ParamField body="img_references" type="array<url>">
  Array URL gambar referensi untuk mode fusi gambar referensi multipel. Mendukung 1–7 gambar.

  Mengirimkan kolom ini akan memicu mode fusi gambar referensi multipel.
</ParamField>

<ParamField body="extend_from_task_id" type="string">
  ID tugas sumber untuk perpanjangan video. Mengirimkan kolom ini akan memicu mode perpanjangan video.

  Tugas sumber harus milik pengguna saat ini, menggunakan model `pixverse-v6`, dan berstatus `completed`.
</ParamField>

## Mode Pembuatan

Adapter secara otomatis mengarahkan ke mode pembuatan yang sesuai berdasarkan kolom permintaan. Pencocokan dilakukan berdasarkan urutan prioritas; mode pertama yang cocok yang dipilih.

| Mode                           | Kondisi pemicu                                                 | Deskripsi                                          |
| ------------------------------ | -------------------------------------------------------------- | -------------------------------------------------- |
| Teks-ke-video                  | Tidak ada kolom gambar atau perpanjangan                       | Membuat video dari `prompt`                        |
| Gambar-ke-video                | `image_urls` berisi satu gambar                                | Menggunakan gambar pertama sebagai input           |
| Transisi frame awal/akhir      | `first_frame_image` dan `last_frame_image` keduanya disertakan | Menghasilkan transisi mulus antara dua frame       |
| Fusi gambar referensi multipel | Array `img_references` disertakan                              | Menggabungkan 1–7 gambar referensi menjadi video   |
| Perpanjangan video             | `extend_from_task_id` disertakan                               | Melanjutkan dari tugas Pixverse yang telah selesai |

<Warning>
  Semua input gambar hanya menerima URL HTTP/HTTPS yang dapat diakses publik. base64 atau Data URI tidak didukung. Jika Anda hanya memiliki gambar lokal, unggah dulu ke object storage lalu kirimkan URL-nya.
</Warning>

## Aturan Parameter

| Batasan                        | Deskripsi                                                                                                 |
| ------------------------------ | --------------------------------------------------------------------------------------------------------- |
| Durasi video                   | `1 ≤ duration ≤ 15` detik; mode transisi hanya `5` atau `8` detik                                         |
| Resolusi                       | Hanya `360p`, `540p`, `720p`, `1080p` yang didukung                                                       |
| Rasio aspek                    | `size` hanya berlaku pada teks-ke-video dan fusi gambar referensi multipel                                |
| Panjang prompt                 | `prompt` hingga 5000 karakter, `negative_prompt` hingga 2048 karakter                                     |
| Gambar-ke-video                | `image_urls` hanya menggunakan gambar pertama                                                             |
| Transisi                       | `first_frame_image` dan `last_frame_image` harus dikirim berpasangan                                      |
| Mode gerakan                   | `pixverse-v6` hanya mendukung `normal`                                                                    |
| Fusi gambar referensi multipel | `img_references` mendukung 1–7 gambar                                                                     |
| Perpanjangan video             | `extend_from_task_id` harus mengarah ke tugas `pixverse-v6` berstatus `completed` milik pengguna saat ini |

## Respons

<ResponseField name="code" type="integer">
  Kode status respons. `200` jika berhasil.
</ResponseField>

<ResponseField name="data" type="array">
  Array tugas yang dikembalikan.

  <Expandable title="Elemen array">
    <ResponseField name="status" type="string">
      Status awal tugas. `submitted` setelah pengiriman berhasil.
    </ResponseField>

    <ResponseField name="task_id" type="string">
      Pengenal unik tugas untuk mengueri status dan hasil.
    </ResponseField>
  </Expandable>
</ResponseField>

## Mengueri Hasil Tugas

Pembuatan video adalah tugas asinkron. Setelah pengiriman, `task_id` dikembalikan. Gunakan endpoint [Dapatkan Status Tugas](/id/api-reference/tasks/status) untuk mengueri progres dan hasil.

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

Disarankan polling setiap 5 detik hingga status menjadi `completed` atau `failed`.

### Contoh hasil sukses

```json theme={null}
{
  "code": 200,
  "data": {
    "id": "task_01KSPX48B8V1M6C2ZN0D0T4BKB",
    "status": "completed",
    "progress": 100,
    "cost": 0.2,
    "credits_cost": 2,
    "created": 1779958948,
    "completed": 1779958999,
    "estimated_time": 100,
    "actual_time": 51,
    "result": {
      "videos": [
        {
          "url": ["https://upload.apimart.ai/f/video/xxxx.mp4"],
          "expires_at": 1780045399
        }
      ]
    }
  }
}
```

URL video berada pada `data.result.videos[0].url[0]`. Kolom `url` itu sendiri merupakan array. Tautan video biasanya kedaluwarsa setelah 24 jam — segera unduh atau transfer.

### Contoh hasil gagal

```json theme={null}
{
  "code": 200,
  "data": {
    "id": "task_01KSPX48B8V1M6C2ZN0D0T4BKB",
    "status": "failed",
    "progress": 100,
    "cost": 0,
    "credits_cost": 0,
    "created": 1779958948,
    "completed": 1779958960,
    "error": {
      "code": "task_failed",
      "message": "pixverse error 400063: moderation failed",
      "type": "task_failed"
    }
  }
}
```

Saat gagal, `cost` umumnya `0`. Penyebab kesalahan terdapat pada `data.error.message`.

## Skenario Penggunaan

### Skenario 1: Teks-ke-video

```json theme={null}
{
  "model": "pixverse-v6",
  "prompt": "A neon-lit alley in Tokyo at night, light rain, anamorphic lens flare",
  "size": "21:9",
  "resolution": "720p",
  "duration": 8,
  "seed": 42,
  "audio": true
}
```

### Skenario 2: Gambar-ke-video

```json theme={null}
{
  "model": "pixverse-v6",
  "prompt": "Camera slowly zooms in, gentle wind moves the leaves",
  "image_urls": ["https://example.com/first-frame.jpg"],
  "resolution": "540p",
  "duration": 5
}
```

### Skenario 3: Transisi frame awal/akhir

```json theme={null}
{
  "model": "pixverse-v6",
  "prompt": "transform smoothly from a puppy to a cat",
  "first_frame_image": "https://example.com/puppy.jpg",
  "last_frame_image": "https://example.com/cat.jpg",
  "resolution": "540p",
  "duration": 5,
  "motion_mode": "normal"
}
```

### Skenario 4: Fusi gambar referensi multipel

```json theme={null}
{
  "model": "pixverse-v6",
  "prompt": "A girl wearing the outfit from image 2, holding the cat from image 3",
  "img_references": [
    "https://example.com/character.jpg",
    "https://example.com/outfit.jpg",
    "https://example.com/cat.jpg"
  ],
  "size": "9:16",
  "resolution": "720p",
  "duration": 5
}
```

### Skenario 5: Perpanjangan video

```json theme={null}
{
  "model": "pixverse-v6",
  "prompt": "the character now walks into a forest",
  "extend_from_task_id": "task_01JWXXXXXXXXXXXX",
  "resolution": "540p",
  "duration": 5
}
```
