API Docs
Autentikasi
Base URL: https://api.vivareel.com/api/developer/v1. Semua endpoint open API menggunakan API Key: Authorization: Bearer sk_live_xxx atau sk_test_xxx.
Respons & penagihan
Respons open API mencakup code, message, dan data; code 200 berarti berhasil. Panggilan ditagihkan ke poin akun—periksa harga melalui GET /models. Poll GET /tasks/task_id setiap 3–5d untuk tugas asinkron.
Kemampuan Wan 3.0
Wan 3.0 adalah model video referensi all-in-one. Model yang sama mencakup text-to-video, first-frame dan first-last-frame image-to-video, serta generasi referensi campuran gambar / video / audio. Kirimkan nama model dari GET /models (misalnya wan-3.0). Anda tidak memerlukan endpoint terpisah.
Mode resmi dan aturan kombinasi materi: Wan3.0 Video Generation API Reference. Platform ini membungkusnya sebagai POST /api/developer/v1/videos/generations. Nama field berbeda dari DashScope input.media[]; gunakan parameter di halaman ini.
Cakupan field
- Umum: model, motion_instruction (wajib bersyarat), aspect_ratio, duration_seconds, capability, image_url (spesifik mode), last_frame_url (spesifik mode; tidak didukung HappyHorse), dan reference_urls (mode referensi).
- Multi-model: reference_video_urls (Seedance / semantik Wan3 / Wan2.7 R2V / VivaReel2.0); reference_audio_urls (Seedance / semantik Wan3 / Wan2.7 R2V / minimax-H3).
- Semantik Wan3: resolution, audio, seed, prompt_extend, dan smart_duration. Berlaku untuk model yang menggunakan semantik field Wan 3.
- hanya dashscope-wan3.0-video: watermark, enable_thinking, document_url, dan web_url.
Mode generasi
- Text-to-video: kirim hanya motion_instruction dan hilangkan capability atau setel ke null.
- Video first-frame: kirim image_url, dengan capability first_frame.
- Video first-last-frame: kirim image_url dan last_frame_url, dengan capability flf2v.
- Referensi all-modal: gabungkan reference_urls, reference_video_urls, dan reference_audio_urls. Gunakan capability image_reference. motion_instruction wajib.
- Pengeditan / perpanjangan video: kirim reference_video_urls dan jelaskan suntingan atau perpanjangan di motion_instruction, misalnya “ubah ini menjadi gaya clay” atau “perpanjang Video 1 ke depan”.
Aturan saling eksklusif
- Jangan kirim image_url / last_frame_url bersama reference_urls, reference_video_urls, atau reference_audio_urls.
- Mode first-frame dan first-last-frame tidak menerima driving audio. Untuk generasi berbasis audio, gunakan referensi all-modal (gambar referensi + audio referensi).
- Sediakan motion_instruction, atau set materi yang valid untuk mode saat ini.
Batas materi dan keluaran
- Maksimal 10 gambar referensi; JPEG / JPG / PNG / BMP / WEBP, 240–8000 px per sisi, 20MB masing-masing. Batas live adalah max_reference_images dari GET /models.
- Maksimal 5 klip referensi, masing-masing 1–15 detik, total 15 detik; mp4 / mov, 100MB masing-masing. Batas live adalah max_reference_videos.
- Maksimal 5 klip referensi, masing-masing 1–15 detik, total 15 detik; wav / mp3, 15MB masing-masing. Batas live adalah max_reference_audios.
- Tanpa video referensi, durasi keluaran biasanya 2–30 detik. Dengan video referensi, durasi input + durasi output tidak boleh melebihi 30 detik. Selalu periksa duration_range / max_duration_seconds.
- Keluaran adalah MP4 pada 30 fps dan secara default dapat mencakup dialog, BGM, dan efek suara.
Merujuk materi dalam prompt
Hitung setiap jenis secara terpisah: gambar referensi pertama adalah Image 1, video referensi pertama adalah Video 1, dan audio referensi pertama adalah Audio 1. Anda dapat menulis Image 1, Video 1, atau @Image 1 / @Video 1 / @Audio 1.
Hasilkan gambar
/api/developer/v1/images/generationsKirim tugas generasi gambar mandiri (text-to-image atau komposisi gambar referensi). Mengembalikan task_id; poll GET /api/developer/v1/tasks/task_id untuk hasil.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| model | body | string | ✓ | Nama model gambar; daftar model yang tersedia melalui GET /models |
| prompt | body | string | ✓ | Deskripsi teks gambar yang akan dihasilkan |
| aspect_ratio | body | string | — | Rasio aspek: 16:9, 9:16, 4:3, atau 3:4 |
| image_resolution | body | string | — | Resolusi keluaran: 1K, 2K, atau 4K |
| reference_urls | body | string[] | — | URL gambar referensi (0–5); tidak kosong mengaktifkan mode komposisi referensi |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/images/generations" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "dashscope-wan2.1-t2i-turbo",
"prompt": "一只可爱的猫咪在草地上奔跑",
"aspect_ratio": "16:9",
"image_resolution": "2K",
"reference_urls": [
"https://example.com/ref1.jpg"
]
}'Contoh Request Body
{
"model": "dashscope-wan2.1-t2i-turbo",
"prompt": "一只可爱的猫咪在草地上奔跑",
"aspect_ratio": "16:9",
"image_resolution": "2K",
"reference_urls": [
"https://example.com/ref1.jpg"
]
}Contoh Response
{
"code": 200,
"message": "ok",
"data": {
"task_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Hasilkan video
/api/developer/v1/videos/generationsKirim tugas generasi video mandiri. Model all-in-one seperti Wan 3.0 mendukung text-to-video, first frame, first/last frame, dan referensi campuran gambar / video / audio. Mengembalikan task_id; poll GET /api/developer/v1/tasks/task_id untuk hasil.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| model | body | string | ✓ | [Umum] Nama model video dari GET /models; biasanya wan-3.0 atau dashscope-wan3.0-video |
| motion_instruction | body | string | null | — | [Umum / wajib bersyarat] Prompt / instruksi gerak. Wajib untuk text-to-video, referensi all-modal, pengeditan, dan perpanjangan. Anda dapat menyebutkan Image 1 / Video 1 / Audio 1 |
| aspect_ratio | body | 16:9 | 9:16 | 4:3 | 3:4 | null | — | [Umum] Rasio aspek: 16:9, 9:16, 4:3, atau 3:4 |
| duration_seconds | body | integer | null | — | [Umum] Durasi keluaran dalam detik. Lihat duration_range / max_duration_seconds dari GET /models |
| capability | body | first_frame | flf2v | image_reference | null | — | [Umum] first_frame, flf2v, atau image_reference; hilangkan atau null untuk disimpulkan dari field (hanya motion_instruction = text-to-video) |
| image_url | body | string | null | — | [Umum / spesifik mode] URL gambar first-frame untuk first_frame / flf2v. Jangan kirim bersama field reference_* |
| last_frame_url | body | string | null | — | [Umum / spesifik mode] URL gambar last-frame untuk flf2v. Harus digunakan bersama image_url dan tidak boleh gambar yang sama. Tidak didukung HappyHorse |
| reference_urls | body | string[] | — | [Umum / mode referensi] URL gambar referensi untuk image_reference |
| reference_video_urls | body | string[] | — | [Multi-model] Seedance / semantik Wan3 / Wan2.7 R2V / VivaReel2.0. URL video referensi |
| reference_audio_urls | body | string[] | — | [Multi-model] Seedance / semantik Wan3 / Wan2.7 R2V / minimax-H3. URL audio referensi |
| resolution | body | 480P | 720P | 1080P | null | — | [Semantik Wan3] Resolusi keluaran: 480P, 720P, atau 1080P |
| audio | body | boolean | null | — | [Semantik Wan3] Apakah akan menghasilkan audio |
| seed | body | integer | null | — | [Semantik Wan3] Seed acak untuk hasil yang dapat direproduksi |
| watermark | body | boolean | null | — | [hanya dashscope-wan3.0-video] Apakah akan menambahkan watermark |
| prompt_extend | body | boolean | null | — | [Semantik Wan3] Apakah akan memperluas prompt |
| smart_duration | body | boolean | — | [Semantik Wan3] Durasi cerdas; default false |
| enable_thinking | body | boolean | null | — | [hanya dashscope-wan3.0-video] Apakah akan mengaktifkan thinking |
| document_url | body | string | null | — | [hanya dashscope-wan3.0-video] URL referensi dokumen |
| web_url | body | string | null | — | [hanya dashscope-wan3.0-video] URL referensi halaman web |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/videos/generations" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-3.0",
"motion_instruction": "Video 1 sits on the chair in Image 2 and sings. Image 1 walks over, places Image 3 on the table, and says: the sunshine is so nice today.",
"aspect_ratio": "9:16",
"duration_seconds": 8,
"capability": "image_reference",
"reference_urls": [
"https://example.com/character.jpg",
"https://example.com/chair.jpg",
"https://example.com/prop.jpg"
],
"reference_video_urls": [
"https://example.com/performance.mp4"
],
"resolution": "720P",
"audio": true,
"prompt_extend": true,
"smart_duration": false
}'Contoh Request Body
{
"model": "wan-3.0",
"motion_instruction": "Video 1 sits on the chair in Image 2 and sings. Image 1 walks over, places Image 3 on the table, and says: the sunshine is so nice today.",
"aspect_ratio": "9:16",
"duration_seconds": 8,
"capability": "image_reference",
"reference_urls": [
"https://example.com/character.jpg",
"https://example.com/chair.jpg",
"https://example.com/prop.jpg"
],
"reference_video_urls": [
"https://example.com/performance.mp4"
],
"resolution": "720P",
"audio": true,
"prompt_extend": true,
"smart_duration": false
}Contoh Response
{
"code": 200,
"message": "ok",
"data": {
"task_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Ganti karakter dalam video
/api/developer/v1/videos/replace-characterKirim tugas penggantian karakter dengan 1–3 video sumber dan 1–9 gambar referensi. Mengembalikan task_id; poll GET /api/developer/v1/tasks/task_id untuk result_url.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| video_urls | body | string[] | ✓ | URL video sumber (1–3), harus tautan http(s) |
| reference_urls | body | string[] | ✓ | URL gambar referensi (1–9), harus tautan http(s) |
| prompt | body | string | ✓ | Prompt penggantian yang mendeskripsikan tukar yang diinginkan |
| resolution | body | string | — | Resolusi keluaran; default 720P |
| aspect_ratio | body | string | — | Rasio aspek; default 9:16 |
| model | body | string | — | Model video; menggunakan default jika dihilangkan |
| duration_seconds | body | number | — | Total durasi video sumber (detik) untuk perkiraan penagihan; terdeteksi otomatis jika dihilangkan |
| seed | body | integer | — | Seed acak untuk hasil yang dapat direproduksi |
| watermark | body | boolean | — | Apakah akan menambahkan watermark; default false |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/videos/replace-character" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"video_urls": [
"https://example.com/video1.mp4"
],
"reference_urls": [
"https://example.com/face1.jpg",
"https://example.com/face2.jpg"
],
"prompt": "将视频中的人物替换为参考图中的人物,保持表情和动作自然",
"resolution": "720P",
"aspect_ratio": "9:16",
"model": "dashscope-wan2.1-i2v-plus",
"duration_seconds": 10.5,
"seed": 12345,
"watermark": false
}'Contoh Request Body
{
"video_urls": [
"https://example.com/video1.mp4"
],
"reference_urls": [
"https://example.com/face1.jpg",
"https://example.com/face2.jpg"
],
"prompt": "将视频中的人物替换为参考图中的人物,保持表情和动作自然",
"resolution": "720P",
"aspect_ratio": "9:16",
"model": "dashscope-wan2.1-i2v-plus",
"duration_seconds": 10.5,
"seed": 12345,
"watermark": false
}Contoh Response
{
"code": 200,
"message": "ok",
"data": {
"task_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Dapatkan status tugas
/api/developer/v1/tasks/{task_id}Poll status dan hasil tugas asinkron. Poll setiap 3–5 detik hingga status completed atau failed.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| task_id | path | string | ✓ | Task ID yang dikembalikan oleh endpoint image/video/replace |
Contoh Kode
curl -X GET "https://vivareel.ai/api/developer/v1/tasks/{task_id}" \
-H "Authorization: Bearer sk_live_xxx"Contoh Response
{
"code": 200,
"message": "ok",
"data": {
"task_id": "550e8400-e29b-41d4-a716-446655440000",
"task_type": "standalone_image_generate",
"status": "completed",
"progress": 1,
"points_cost": 10,
"result_url": "https://storage.vivareel.com/output/xxx.png",
"error_message": null,
"extra": {
"model": "dashscope-wan2.1-t2i-turbo",
"aspect_ratio": "16:9"
}
}
}Unggah file
/api/developer/v1/filesUnggah file ke penyimpanan dan terima URL yang dapat dirujuk. Gunakan untuk gambar first-frame, gambar referensi, video referensi, atau audio referensi (Content-Type: multipart/form-data).
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| file | formData | file | ✓ | File yang akan diunggah (gambar, video, audio, dll.) |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/files" \
-H "Authorization: Bearer sk_live_xxx"Contoh Response
{
"code": 200,
"message": "ok",
"data": {
"url": "https://storage.vivareel.com/uploads/xxx.jpg",
"storage_key": "uploads/2024/01/xxx.jpg",
"original_filename": "my_image.jpg",
"size_bytes": 204800,
"content_type": "image/jpeg"
}
}Daftar model
/api/developer/v1/modelsDaftar model gambar dan video yang tersedia beserta kemampuan, parameter yang didukung, dan harga. Sebelum memanggil Wan 3.0, konfirmasikan capabilities, duration_range, dan max_reference_images / videos / audios.
Parameter
Tidak ada
Contoh Kode
curl -X GET "https://vivareel.ai/api/developer/v1/models" \
-H "Authorization: Bearer sk_live_xxx"Contoh Response
{
"code": 200,
"message": "ok",
"data": {
"image_models": [
{
"name": "dashscope-wan2.1-t2i-turbo",
"display_name": "Wan 2.1 Turbo",
"icon_url": "https://api.vivareel.com/icons/wan.png",
"capabilities": [
"text_to_image"
],
"capability_labels": {
"text_to_image": "文生图"
},
"max_reference_images": 0,
"pricing_by_capability": {
"text_to_image": {
"capability": "text_to_image",
"feature_key": "image_generation",
"billing_unit": "flat",
"label": "文生图",
"points": 10
}
}
}
],
"video_models": [
{
"name": "wan-3.0",
"display_name": "Wan 3.0",
"icon_url": "https://api.vivareel.com/icons/wan_video.png",
"capabilities": [
"text_to_video",
"first_frame",
"flf2v",
"image_reference"
],
"capability_labels": {
"text_to_video": "文生视频",
"first_frame": "首帧生视频",
"flf2v": "首尾帧生视频",
"image_reference": "全能参考"
},
"duration_range": {
"min": 2,
"max": 30
},
"max_duration_seconds": {
"text_to_video": 30,
"first_frame": 30,
"flf2v": 30,
"image_reference": 30
},
"max_reference_images": 10,
"max_reference_videos": 5,
"max_reference_audios": 5,
"pricing_by_capability": {
"image_reference": {
"capability": "image_reference",
"feature_key": "video_generation_image_reference",
"billing_unit": "per_second",
"label": "全能参考",
"points_per_second": 5
}
}
}
]
}
}Pustaka potret virtual
Tambahkan potret https publik ke pustaka kanal saat ini, lalu kirim URL https yang sama saat membuat video. Jangan kirim asset://.
Sebelum memanggil
- Autentikasi dengan API Key. Jangan kirim X-Team-Id atau channel. Kanal hanya mengikuti pengaturan portrait_channel di backend: byteplus untuk pustaka resmi, baidu untuk pustaka Baidu.
- Gambar harus berupa URL https publik. Saat membuat video, kirim URL https yang sama. Jangan kirim asset://.
- Urutan panggilan: unggah berkas untuk mendapat URL, sinkronkan ke pustaka, periksa status bila perlu, buat video dengan URL yang sama, lalu keluarkan saat tidak lagi dipakai.
- message mengikuti Accept-Language. Contoh di bawah ini berbahasa Tionghoa.
Kesalahan
| code | Kapan |
|---|---|
| 400 | image_url bukan URL https publik, atau gambar tidak ada di pustaka kanal saat ini. |
| 403 | Pengguna pemilik API Key bukan VIP atau SVIP. |
| 404 | Gambar tidak ditemukan saat dikeluarkan. |
| 502 | Pembuatan atau pengeluaran di sisi resmi atau Baidu gagal. message memuat teks dari upstream. |
| 503 | Kredensial kanal saat ini belum dikonfigurasi. |
| 504 | Sinkronisasi habis waktu. |
Pergantian kanal
Setelah backend mengganti kanal dari Baidu ke resmi, atau sebaliknya, panggil sync lagi untuk gambar yang sama.
Sinkronkan potret
/api/developer/v1/virtual-assets/syncMenambahkan gambar ke pustaka potret virtual kanal saat ini. Panggilan menunggu hingga berhasil atau gagal. Gambar yang sudah Active di kanal ini tidak diunggah ulang. data.outcome bernilai created untuk unggahan baru, already_active jika sudah ada di pustaka, atau reused jika gambar yang sama sudah tertaut dan tidak diunggah ulang. Saat berhasil, in_virtual_asset_library bernilai true.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| image_url | body | string | ✓ | URL https publik gambar |
| name | body | string | — | Nama, opsional |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/virtual-assets/sync" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://cdn.example/a.png",
"name": "角色甲"
}'Contoh Request Body
{
"image_url": "https://cdn.example/a.png",
"name": "角色甲"
}Contoh Response
{
"code": 200,
"message": "已加入 Seedance 虚拟资产库",
"data": {
"asset_id": 321,
"image_url": "https://cdn.example/a.png",
"in_virtual_asset_library": true,
"outcome": "created"
},
"pagination": null
}Periksa status
/api/developer/v1/virtual-assets/statusMemeriksa apakah URL gambar berstatus Active di pustaka kanal saat ini. Status Active di pustaka resmi tidak membuat hasil menjadi true di kanal Baidu. asset_id bernilai null jika URL tidak cocok.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| urls | body | string[] | ✓ | Daftar URL gambar, 1 sampai 200 |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/virtual-assets/status" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://cdn.example/a.png"
]
}'Contoh Request Body
{
"urls": [
"https://cdn.example/a.png"
]
}Contoh Response
{
"code": 200,
"message": "获取资产 URL 状态成功",
"data": [
{
"url": "https://cdn.example/a.png",
"in_virtual_asset_library": true,
"asset_id": 321
}
],
"pagination": null
}Keluarkan potret
/api/developer/v1/virtual-assets/removeHanya mengeluarkan catatan kanal saat ini. Kanal resmi mengosongkan kolom aset resmi. Kanal Baidu hanya menghapus ikatan Baidu dan tidak mengubah kolom resmi. Catatan gambar lokal tetap ada, jadi bisa disinkronkan lagi setelah kembali ke kanal lain. in_virtual_asset_library bernilai false setelah dikeluarkan.
Parameter
| name | in | type | required | desc |
|---|---|---|---|---|
| image_url | body | string | ✓ | URL https publik yang akan dikeluarkan |
Contoh Kode
curl -X POST "https://vivareel.ai/api/developer/v1/virtual-assets/remove" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://cdn.example/a.png"
}'Contoh Request Body
{
"image_url": "https://cdn.example/a.png"
}Contoh Response
{
"code": 200,
"message": "已移出 Seedance 虚拟资产库",
"data": {
"asset_id": 321,
"image_url": "https://cdn.example/a.png",
"in_virtual_asset_library": false
},
"pagination": null
}