Dokumentasi Panggilan API Pembuatan Video
kozeai menyediakan antarmuka pembuatan video yang kompatibel dengan OpenAI Sora, menggunakan mode **tugas asinkron**: pertama-tama kirimkan tugas untuk mendapatkan `task_id`, kemudian periksa status tugas, dan unduh konten video setelah selesai.
Autentikasi
Semua permintaan diautentikasi menggunakan `Authorization: Bearer
export KOZEAI_API_KEY="sk-your-token"
export KOZEAI_BASE_URL="https://api.kozeai.com"
Antarmuka Gambaran Umum
/v1/videos/generations/v1/videos/{task_id}/v1/videos/{task_id}/contentID Tugas dalam bentuk
task_12345, yang dikembalikan oleh antarmuka pengiriman, hanya milik pengguna saat ini.
1. Buat tugas video
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "video-ds-2.0",
"prompt": "Video sinematik berdurasi 9:16 tentang seekor kucing yang berlari di bawah sinar matahari yang hangat",
"detik": 15,
"rasio_aspek": "9:16"
}'
Parameter Permintaan
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model |
string | Ya | Nama model video, misalnya video-ds-2.0 |
prompt |
string | Ya | Deskripsi konten video | detik |
bilangan bulat | Tidak | Durasi video (detik), berdasarkan rentang dukungan model upstream |
rasio aspek |
string | Tidak | Rasio aspek, yang umum digunakan 9:16, 16:9, 1:1 |
gambar |
array | Tidak | URL gambar referensi atau base64 |
video |
array | Tidak | URL Video Referensi |
audio |
array | Tidak | URL Audio Referensi |
Model upstream yang berbeda mungkin mendukung parameter yang berbeda. Parameter yang tidak tercantum akan diteruskan sesuai dengan protokol hulu.
Video yang dihasilkan dari gambar (dengan gambar referensi)
Masukkan array images untuk menghasilkan video berdasarkan gambar referensi:
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json
-d {
model: video-ds-2.0,
prompt: Gunakan gaya gambar referensi dan buat video produk yang halus,
detik: 15,
rasio_aspek: "9:16",
"gambar": ["https://example.com/input.png"],
"video": ["https://example.com/input.mp4"],
"audio": ["https://example.com/input.mp3"]
}'
imagesmendukung URL gambar atau base64.videos/audiosadalah materi referensi opsional.- Saat melakukan panggilan melalui antarmuka pelengkapan otomatis obrolan (lihat akhir artikel), cukup lampirkan gambar ke pesan; sistem akan secara otomatis mengonversinya ke parameter
images.
Respons (pengiriman berhasil)
{
"id": "task_12345",
"task_id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "queued",
"progress": 0",
"created_at":
}
status Nilai: queued (dalam antrian), in_progress (sedang berlangsung), completed (selesai), gagal (gagal).
2. Status Tugas Polling
Gunakan id yang dikembalikan oleh pengajuan untuk melakukan polling, dengan interval yang disarankan 3-5 detik.
curl "$KOZEAI_BASE_URL/v1/videos/task_12345" \
-H "Authorization: Bearer $KOZEAI_API_KEY"
Respons (sedang dibuat)
{
id: task_12345,
object: video,
model: video-ds-2.0,
status: in_progress,
"progress": 45,
"created_at": 1751000000
}
Respons (Selesai)
{
"id": "task_12345",
"object": ,
: ,
: ,
Setelah selesai, `metadata.content_url` akan memberikan alamat video yang dapat diakses langsung; video tersebut juga dapat diunduh menggunakan antarmuka konten di bawah ini.
Respons (gagal)
{
id: task_12345,
objek: video,
status: gagal,
error: { pesan: Alasan kegagalan }
}
3. Unduh konten video
curl -L "$KOZEAI_BASE_URL/v1/videos/task_12345/content" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-o result.mp4
- Mengembalikan 409 Conflict jika tugas belum selesai (Masih dalam antrian/sedang dibuat).
- Mendukung pengunduhan tersegmentasi/pemutaran seret dan lepas menggunakan header permintaan
.
- Mengembalikan
.
Contoh lengkap
JavaScript (fetch + polling)
const BASE = process.env.KOZEAI_BASE_URL;
const KEY = process.env.KOZEAI_API_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// 1. Kirim tugas
const submit = await fetch(`${BASE}/v1/videos/generations`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'video-ds-2.0',
prompt: 'Video komersial yang halus tentang botol parfum di atas kaca',
seconds: 15,
aspect_ratio: '9:16',
}),
});
const task = await submit.json();
const taskId = task.id;
// 2. Polling sampai selesai
async function poll() {
while (true) {
const res = await fetch(`${BASE}/v1/videos/${taskId}`, { headers });
const data = await res.json();
if (data.status === 'complete') return data;
if (data.status === 'failed') throw new Error(data.error?.message || 'failed');
await new Promise((r) ==> setTimeout(r, 5000));
}
}
const done = await poll();
// 3. Dapatkan alamat video
console.log('Alamat video:', done.metadata?.content_url
|| `${BASE}/v1/videos/${taskId}/content`);
Python (requests + polling)
import os, time, requests
BASE = os.environ["KOZEAI_BASE_URL"]
KEY = os.environ["KOZEAI_API_KEY"]
headers = {"Authorization": fPembawa {KEY}}
# 1. Kirim tugas
resp = requests.post(
f{BASE}/v1/videos/generations,
headers=headers,
json={
model: video-ds-2.0,
prompt: Sebuah video sinematik berdurasi 9:16 tentang seekor kucing yang berlari di bawah sinar matahari yang hangat,
detik: 15,
rasio_aspek: 9:16,
},
)
task_id = resp.json()[id]
# 2. Polling
while True:
data = requests.get(f"{BASE}/v1/videos/{task_id}", headers=headers).json()
if data["status"] == "complete":
break
if data["status"] == "failed":
raise RuntimeError(data.get("error", {}).get("message", "failed"))
time.sleep(5)
# 3. Unduh
mp4 = requests.get(f"{BASE}/v1/videos/{task_id}/content", headers=headers)
with open("result.mp4", "wb") as f: f.write(mp4.content)
Dipanggil di antarmuka penyelesaian obrolan (penggunaan yang kompatibel)
Model video juga dapat dipanggil melalui /v1/chat/completions, sehingga memudahkan penggunaan kembali klien obrolan.
Saat membuat permintaan, cukup berikan nama model video di `model`, dan sistem akan secara otomatis mengubahnya menjadi tugas video:
curl $KOZEAI_BASE_URL/v1/chat/completions \
-H Authorization: Bearer $KOZEAI_API_KEY \
-H Content-Type: application/json \
-d {
Model: } `mengembalikan "video-ds-2.0
,
"pesan: [{"peran: "pengguna, "konten: "seekor kucing berlari di bawah sinar matahari, sinematik, 9:16}]
}
Mengembalikan penyelesaian obrolan
Formatnya adalah `pesan.konten`, yang berisi status tugas dan tautan `/v1/videos/{task_id}`. Tautan ini akan memutar video setelah selesai. Halaman lobi obrolan menggunakan metode ini.
Kedua titik masuk (/v1/videos/generations dan /v1/chat/completions) berbagi sistem tugas yang sama dan tidak saling bertentangan. Untuk integrasi langsung, disarankan untuk menggunakan antarmuka standar `/v1/videos/*`.
Kode Kesalahan
Status Kode
Arti
401
Token hilang, kedaluwarsa, atau tidak valid
403
Saldo tidak mencukupi, atau grup saat ini tidak memiliki izin untuk model ini
404
ID Tugas Tidak ada, atau tidak dimiliki oleh pengguna saat ini; atau model belum dikonfigurasi.
409
Konten video belum siap (tugas masih mengantri/membuat)
429
Tingkat pemicu batas
502
Pemasok hulu gagal atau mengembalikan hasil yang tidak valid