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

# Quickstart API Veo 3: Buat video dengan CometAPI

> Buat satu task video Veo dengan CometAPI, poll status task, dan simpan output video yang selesai dengan curl, Python, atau Node.js.

## Apa yang akan Anda buat

Anda akan membuat satu task video Veo dengan multipart form data, menyimpan task ID yang dikembalikan, melakukan poll pada endpoint retrieve, dan menyimpan URL aset akhir atau file di sistem Anda sendiri.

## Prasyarat

* CometAPI API key yang disimpan di `COMETAPI_KEY`
* Python 3.10+ dengan `requests`, atau Node.js 18+
* Runner job sisi server untuk polling

## API key, base URL, autentikasi

Buat task Veo dengan:

```text theme={null}
POST https://api.cometapi.com/v1/videos
```

Poll status task Veo dengan:

```text theme={null}
GET https://api.cometapi.com/v1/videos/<task_id>
```

Lakukan autentikasi dengan token Bearer:

```text theme={null}
Authorization: Bearer $COMETAPI_KEY
```

## Contoh kode

Gunakan tab di bawah untuk contoh yang bisa disalin dalam cURL, Python, dan Node.js.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.cometapi.com/v1/videos \
    -H "Authorization: Bearer $COMETAPI_KEY" \
    -F model=veo3.1-fast \
    -F "prompt=A paper kite floats above a field." \
    -F seconds=4 \
    -F size=1280x720

  curl "https://api.cometapi.com/v1/videos/<task_id>" \
    -H "Authorization: Bearer $COMETAPI_KEY"
  ```

  ```python Python theme={null}
  import os
  import time

  import requests

  api_key = os.environ["COMETAPI_KEY"]
  headers = {"Authorization": f"Bearer {api_key}"}

  create_response = requests.post(
      "https://api.cometapi.com/v1/videos",
      headers=headers,
      files={
          "model": (None, "veo3.1-fast"),
          "prompt": (None, "A paper kite floats above a field."),
          "seconds": (None, "4"),
          "size": (None, "1280x720"),
      },
      timeout=60,
  )
  create_response.raise_for_status()
  task_id = create_response.json()["id"]

  for _ in range(60):
      retrieve_response = requests.get(
          f"https://api.cometapi.com/v1/videos/{task_id}",
          headers=headers,
          timeout=30,
      )
      retrieve_response.raise_for_status()
      task = retrieve_response.json()
      if task["status"] in {"completed", "failed", "error"}:
          print(task)
          break
      time.sleep(5)
  else:
      raise TimeoutError("Veo task did not finish in time")
  ```

  ```javascript Node.js theme={null}
  const form = new FormData();
  form.append("model", "veo3.1-fast");
  form.append("prompt", "A paper kite floats above a field.");
  form.append("seconds", "4");
  form.append("size", "1280x720");

  const createResponse = await fetch("https://api.cometapi.com/v1/videos", {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
    body: form,
  });

  if (!createResponse.ok) {
    throw new Error(await createResponse.text());
  }

  const { id } = await createResponse.json();

  for (let attempt = 0; attempt < 60; attempt += 1) {
    const retrieveResponse = await fetch(`https://api.cometapi.com/v1/videos/${id}`, {
      headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
    });

    if (!retrieveResponse.ok) {
      throw new Error(await retrieveResponse.text());
    }

    const task = await retrieveResponse.json();
    if (["completed", "failed", "error"].includes(task.status)) {
      console.log(task);
      break;
    }
    await new Promise((resolve) => setTimeout(resolve, 5000));
  }
  ```
</CodeGroup>

## Penjelasan alur

Pembuatan video Veo bersifat asynchronous. Endpoint create menerima multipart form data dan langsung mengembalikan task ID. Lakukan poll pada endpoint retrieve sampai task mencapai status terminal, lalu simpan detail URL atau file video akhir dari respons yang sudah selesai.

Gunakan durasi singkat dan ukuran terkecil yang tetap berguna untuk pengujian awal. Pindahkan aset yang sudah selesai ke penyimpanan Anda sendiri saat aplikasi Anda memerlukan retensi.

## Parameter umum

| Parameter         | Penggunaan                                                            |
| ----------------- | --------------------------------------------------------------------- |
| `model`           | Veo model ID. Contoh referensi API menggunakan `veo3.1-fast`.         |
| `prompt`          | Prompt teks untuk tugas video.                                        |
| `seconds`         | Field formulir durasi. Referensi mendokumentasikan `4`, `6`, dan `8`. |
| `size`            | Ukuran `WxH` yang tepat, seperti `1280x720`.                          |
| `input_reference` | File gambar frame pertama opsional untuk image-to-video.              |

## Pemecahan masalah / FAQ

<AccordionGroup>
  <Accordion title="Permintaan gagal karena masalah content type">
    Kirim multipart form data. Jangan kirim permintaan pembuatan Veo sebagai JSON.
  </Accordion>

  <Accordion title="Polling memakan waktu lebih lama dari yang diharapkan">
    Gunakan loop polling yang dibatasi, simpan task ID, dan tampilkan status pending di aplikasi Anda alih-alih memblokir permintaan web.
  </Accordion>

  <Accordion title="Bagaimana sebaiknya saya mengontrol biaya">
    Mulai dengan durasi singkat, satu task, dan ukuran terkecil yang masih dapat diterima. Gunakan kuota akun dan estimasi biaya sebelum meningkatkan jumlah task.
  </Accordion>
</AccordionGroup>

## Langkah berikutnya

* Baca [Referensi API untuk membuat video Veo 3](/api/video/veo3/create).
* Lakukan polling dengan [Mengambil video Veo 3](/api/video/veo3/retrieve).
* Temukan model video Veo di [Models](/id/overview/models).
* Tinjau [Gunakan polling dan webhook untuk pembuatan video](/id/guides/webhook-and-polling-for-video-generation).
* Estimasikan biaya task dengan [Estimasi biaya permintaan sebelum memanggil model](/id/guides/how-to-estimate-cost-before-calling-a-model).
