Seedance API
Integrasikan pembuatan video langsung ke dalam produk Anda dengan Seedance 2.5 atau Seedance 2.0, tugas asinkron, webhook, dan penagihan berbasis kredit.
https://api.seevio.aiDaftar isi halaman ini
Pengantar
API ini memungkinkan Anda mengirimkan tugas pembuatan video Seedance 2.5 dan Seedance 2.0 secara programmatic. Seedance 2.5 adalah model yang direkomendasikan dan mendukung teks-ke-video, gambar-ke-video (bingkai pertama atau bingkai pertama dan terakhir), serta referensi multimodal ke video. Proses pembuatannya bersifat asinkron: buat tugas, terima ID tugas secara instan, lalu ambil video yang sudah selesai dengan melakukan polling ke endpoint tugas atau via webhook.
Tugas asinkron
Polling sangat cocok untuk tahap pengembangan dan integrasi sederhana.
Dukungan webhook
Webhook direkomendasikan untuk lingkungan produksi karena menghindari polling berlebih dan langsung memberi tahu sistem Anda begitu tugas mencapai status akhir.
Berbasis kredit
Kredit akan ditahan saat tugas dikirim. Tugas yang sukses akan memotong saldo dari kredit yang ditahan tersebut; tugas yang gagal atau mengalami waktu habis (timeout) akan dikembalikan otomatis.
Autentikasi
Buat kunci API di dasbor dan kirimkan sebagai Bearer token pada setiap permintaan. Kunci lengkap hanya akan ditampilkan sekali saat pertama kali dibuat.
Authorization: Bearer sk_live_xxxxxxxxGunakan kunci sk_live_ untuk lalu lintas produksi.
Gunakan kunci sk_test_ untuk pengujian integrasi di lingkungan sandbox dengan skema API yang sama.
Kunci yang hilang, tidak valid, atau telah dicabut akan mengembalikan error invalid_api_key dengan HTTP 401.
Mulai Cepat
Kirim tugas terlebih dahulu. Setelah tugas diterima, pilih salah satu metode pengambilan hasil: lakukan polling ke endpoint tugas, atau terima hasil akhir lewat webhook.
Buat tugas video asinkron dan langsung dapatkan ID tugas.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'Kirim permintaan ke endpoint status tugas jika integrasi Anda lebih menyukai polling manual.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Sertakan callback_url saat mengirim tugas untuk menerima notifikasi otomatis saat tugas selesai atau gagal, lalu perbarui data tugas di sistem Anda.
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}Buat Tugas Video
Buat tugas video dengan POST /v1/videos/generations. Body permintaan berisi model tingkat atas, callback_url opsional, dan objek input yang berisi perintah teks (prompt) serta pengaturan pembuatan video.
/v1/videos/generationscurl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'Mode Pembuatan
generation_type menentukan input media apa saja yang diterima dan bagaimana model menafsirkannya.
Atur model ke seedance-2-5 untuk menghasilkan video output 480p atau 720p dengan durasi 4 hingga 30 detik.
- Teks-ke-video dengan rasio aspek adaptif, 16:9, 9:16, 1:1, 4:3, 3:4, atau 21:9
- Gambar-ke-video menggunakan satu gambar bingkai pertama, atau dua gambar bingkai pertama dan terakhir; rasio aspek harus diatur ke adaptif
- Referensi-ke-video dengan maksimal 30 gambar, 10 video, dan 10 file audio, dengan batas total keseluruhan 50 materi
- Setiap referensi video atau audio harus berdurasi 2-30 detik; total durasi gabungan video dan total durasi gabungan audio masing-masing tidak boleh lebih dari 30 detik
- Mendukung input referensi audio saja dan return_last_frame; parameter seed tidak didukung
| Mode | Media wajib | Media opsional | Catatan |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Hanya perintah teks. image_urls, video_urls, dan audio_urls tidak diperlukan. |
image-to-video | prompt + array image_urls (1-2 URL gambar) | duration, aspect_ratio, resolution, seed | image_urls harus berupa array. Berikan 1 URL gambar untuk bingkai pertama, atau 2 URL gambar untuk bingkai pertama dan terakhir. Video dan audio akan diabaikan. |
reference-to-video | prompt + minimal satu referensi gambar, video, atau audio | gambar, video, dan audio dalam batas materi yang ditentukan | Seedance 2.5 mendukung referensi audio saja. Untuk Seedance 2.0, tambahkan minimal satu gambar atau video jika menyertakan audio. |
text-to-videoGunakan teks-ke-video jika prompt adalah satu-satunya input kreatif Anda.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'image-to-videoGunakan gambar-ke-video jika input.image_urls berupa array berisi 1-2 URL gambar: satu URL untuk menentukan bingkai pertama, dan dua URL untuk menentukan bingkai pertama dan terakhir. Referensi video dan audio akan diabaikan pada mode ini.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"input": {
"prompt": "the subject turns toward camera, soft studio motion",
"generation_type": "image-to-video",
"image_urls": ["https://your.cdn.com/first-frame.jpg"],
"duration": 5,
"resolution": "720p"
}
}'reference-to-videoGunakan referensi-ke-video untuk kontrol yang lebih kaya dengan gambar, video, dan audio referensi. Seedance 2.5 mendukung audio sebagai satu-satunya jenis referensi; Seedance 2.0 memerlukan minimal satu gambar atau video jika audio disertakan.
Batas materi
- Seedance 2.5: hingga 30 gambar referensi
- Seedance 2.5: hingga 10 video referensi, masing-masing 2-30 detik dengan total durasi <= 30 detik
- Seedance 2.5: hingga 10 audio referensi, masing-masing 2-30 detik dengan total durasi <= 30 detik
- Seedance 2.5: maksimal 50 materi secara keseluruhan untuk semua jenis
- Varian Seedance 2.0 tetap menggunakan batas yang ada: 9 gambar, 3 video, 3 audio, dan 15 detik per grup video/audio
Kombinasi input yang didukung
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"input": {
"prompt": "use the product from image 1 and the camera motion from the reference video",
"generation_type": "reference-to-video",
"image_urls": ["https://your.cdn.com/product.jpg"],
"video_urls": ["https://your.cdn.com/camera-motion.mp4"],
"audio_urls": [],
"duration": 8,
"resolution": "720p"
}
}'Parameter Permintaan
Nama parameter, nilai enum, path endpoint, dan contoh adalah bagian dari kontrak API. Deskripsi di bawah ini menjelaskan cara kerja dari setiap field.
Header
| Header | Wajib | Deskripsi | Contoh |
|---|---|---|---|
Authorization | Ya | Kunci API Bearer yang digunakan untuk mengautentikasi permintaan. | Bearer sk_live_xxx |
Content-Type | Ya | Semua permintaan tulis (write request) menggunakan JSON. | application/json |
Field tingkat atas
| Field | Tipe | Wajib | Default | Rentang / Enum | Mode | Contoh |
|---|---|---|---|---|---|---|
modelVarian model yang digunakan untuk pembuatan video. Gunakan seedance-2-5 untuk Seedance 2.5, seedance-2-0 untuk Seedance 2.0, seedance-2-0-fast untuk Seedance 2.0 Fast, atau seedance-2-0-mini untuk Seedance 2.0 Mini. | string | Ya | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | semua | seedance-2-5 |
callback_urlEndpoint HTTPS yang menerima callback saat tugas selesai atau gagal. | string | Tidak | - | URL HTTPS, tidak boleh jaringan privat | semua | https://your-domain.com/hook |
inputPengaturan pembuatan video dan referensi media. | object | Ya | - | - | semua | - |
input.* field
| Field | Tipe | Wajib | Default | Rentang / Enum | Mode | Contoh |
|---|---|---|---|---|---|---|
input.promptPerintah teks yang mendeskripsikan video yang ingin dibuat. | string | Ya | - | teks tidak boleh kosong | semua | a cat surfing |
input.generation_typeMode pembuatan video. Default ke text-to-video. | string | Tidak | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsURL gambar yang dapat diakses publik. Untuk image-to-video, kirimkan 1 gambar untuk bingkai pertama atau 2 gambar untuk bingkai pertama dan terakhir. Untuk reference-to-video, Seedance 2.5 menerima hingga 30 gambar dan Seedance 2.0 menerima hingga 9 gambar. | string[] | Kondisional | [] | Gambar-ke-video: 1 atau 2 gambar. Referensi-ke-video: hingga 30 untuk Seedance 2.5; hingga 9 untuk Seedance 2.0. | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsURL video referensi yang dapat diakses publik khusus untuk mode reference-to-video. Seedance 2.5 menerima hingga 10 video, masing-masing 2-30 detik dengan total durasi <= 30 detik. Seedance 2.0 menerima hingga 3 video dengan total durasi <= 15 detik. | string[] | Tidak | [] | Seedance 2.5: hingga 10 video, masing-masing 2-30 detik, total durasi <= 30 detik. Seedance 2.0: hingga 3 video, total durasi <= 15 detik. | reference-to-video | [] |
input.audio_urlsURL file audio referensi yang dapat diakses publik khusus untuk mode reference-to-video. Seedance 2.5 menerima hingga 10 file audio, masing-masing 2-30 detik dengan total durasi <= 30 detik, serta mendukung referensi audio saja. Seedance 2.0 menerima hingga 3 file dengan total durasi <= 15 detik. | string[] | Tidak | [] | Seedance 2.5: hingga 10 file audio, masing-masing 2-30 detik, total durasi <= 30 detik. Seedance 2.0: hingga 3 file, total durasi <= 15 detik. | reference-to-video | [] |
input.durationDurasi video hasil akhir dalam detik. | int | Tidak | 5 | Seedance 2.5: 4-30 detik. Seedance 2.0: 4-15 detik. | semua | 5 |
input.aspect_ratioRasio aspek video hasil akhir. Pengaturan adaptive memungkinkan sistem menentukan rasio aspek terbaik secara otomatis. Mode image-to-video pada Seedance 2.5 hanya mendukung adaptive. | string | Tidak | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | semua | 16:9 |
input.resolutionTingkat resolusi video hasil akhir. | string | Tidak | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (tergantung varian). | semua | 720p |
input.generate_audioMenentukan apakah model harus menghasilkan audio jika didukung. | boolean | Tidak | true | true | false | semua | true |
input.watermarkMenentukan apakah ingin menambahkan watermark. | boolean | Tidak | false | true | false | semua | false |
input.web_searchMenentukan apakah mengizinkan bantuan pencarian web jika didukung. | boolean | Tidak | false | true | false | semua | false |
input.return_last_frameMenentukan apakah ingin mengembalikan URL bingkai terakhir jika tersedia. | boolean | Tidak | false | true | false | semua | false |
input.seedNilai seed deterministik untuk varian Seedance 2.0. Seedance 2.5 tidak mendukung parameter ini; silakan kosongkan. | int | Tidak | -1 | -1 atau 0-4294967295 | semua | -1 |
Biaya kredit bervariasi berdasarkan resolusi, durasi, model, dan apakah referensi-ke-video menyertakan referensi video. Nilai kredit yang dikembalikan pada respons pembuatan adalah jumlah aktual yang ditahan untuk tugas tersebut.
Lihat harga kreditRespons
Ini adalah respons sukses dari POST /v1/videos/generations. Respons ini menandakan bahwa tugas telah diterima dan kredit telah ditahan. Gunakan taskId yang dikembalikan untuk melakukan polling pada GET /v1/tasks/:id atau mencocokkannya dengan callback sukses atau gagal.
Respons sukses POST /v1/videos/generations
{
"taskId": "3f2aK9mR...",
"credits": 100
}Cek Status Tugas
Gunakan GET /v1/tasks/:id untuk mendapatkan status tugas saat ini. Lakukan polling maksimal sekali setiap 10 detik. Untuk sistem produksi, sebaiknya gunakan webhook.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Respons tugas selesai
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Respons tugas gagal
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}| Nilai | Arti |
|---|---|
status=queued | Diterima dan sedang mengantre untuk dikirim atau diproses. |
status=generating | Penyedia sedang memproses pembuatan video. |
status=completed | Pembuatan video selesai dan data.results berisi URL hasil akhir. |
status=failed | Pembuatan video gagal atau mengalami waktu habis (timeout). |
billing_status=reserved | Kredit ditahan selama tugas sedang berlangsung. |
billing_status=charged | Tugas berhasil dan kredit yang ditahan resmi dipotong. |
billing_status=refunded | Tugas gagal atau waktu habis, kredit dikembalikan otomatis. |
billing_status=refund_failed | Transaksi pengembalian dana gagal dan memerlukan penanganan manual. |
Setelah waktu video_expires_at lewat, data.results akan kosong. Unduh dan simpan file sebelum batas waktu kedaluwarsa berakhir.
Webhook
Jika callback_url disertakan, Seedance akan memanggil endpoint Anda setelah tugas selesai atau gagal dengan mengirimkan data JSON berisi hasil akhir. Jika endpoint Anda mengembalikan respons selain 2xx atau tidak merespons dalam 15 detik, pengiriman akan dicoba ulang hingga 5 kali. Upaya coba ulang menggunakan task id yang sama, jadi pastikan lakukan de-duplikasi berdasarkan ID tersebut. Segera kembalikan respons 200 begitu Anda berhasil menyimpan data callback dengan aman.
Callback tugas selesai
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Callback tugas gagal
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}Validasi struktur data callback, lakukan de-duplikasi berdasarkan ID, perbarui data tugas di sistem Anda, dan berikan respons dengan cepat.
callback_url harus menggunakan protokol HTTPS dan tidak boleh mengarah ke rentang jaringan privat, loopback, atau link-local.
Error
POST /v1/videos/generations dan GET /v1/tasks/:id akan mengembalikan struktur error ini jika permintaan API itu sendiri gagal, seperti parameter tidak valid, kunci API tidak sah, kredit tidak cukup, terkena batas frekuensi, atau tugas tidak ditemukan. Beberapa error menyertakan field tambahan seperti required, available, atau retry_after tergantung situasinya.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 100,
"available": 12
}
}| Kode | HTTP | Arti | Coba lagi? |
|---|---|---|---|
invalid_request | 400 | Parameter hilang atau tidak valid. | Tidak, perbaiki permintaan Anda. |
invalid_api_key | 401 | Kunci API hilang, tidak valid, atau telah dicabut. | Tidak, gunakan kunci API yang valid. |
insufficient_credits | 402 | Kredit tidak cukup. Tugas tidak diterima dan saldo tidak dipotong. | Setelah melakukan isi ulang. |
forbidden | 403 | Kunci API tidak memiliki cakupan (scope) yang diperlukan. | Tidak. |
not_found | 404 | Tugas tidak ditemukan atau bukan milik pemilik kunci API tersebut. | Tidak. |
rate_limited | 429 | Batas frekuensi permintaan terlampaui. | Ya, ikuti petunjuk Retry-After. |
internal_error | 500 | Terjadi gangguan pada server. | Ya, coba lagi nanti. |
Batas Frekuensi
Batas frekuensi diterapkan per kunci API menggunakan metode sliding window. Default untuk pembuatan video adalah 100 permintaan per menit; kueri status tugas memiliki batas yang lebih longgar. Respons HTTP 429 menyertakan header Retry-After.
Pembuatan video
100/mnt
Kueri status
Lebih longgar
Header 429
Retry-After
Penagihan & Kredit
Sistem API menggunakan metode penahanan kredit saat pengiriman, pemotongan saat sukses, dan pengembalian saat gagal. Halaman penggunaan di dasbor menampilkan riwayat kredit API, log tugas, serta statistik penggunaan berdasarkan waktu.
Ditahan
Kredit akan diperiksa dan ditahan saat tugas berhasil diterima.
Dipotong
Tugas yang berhasil selesai akan memotong dana dari kredit yang ditahan.
Dikembalikan
Tugas yang gagal atau mengalami waktu habis (timeout) akan mengembalikan kredit yang ditahan secara otomatis.
Pantau penggunaan di dasbor
Lihat log API, linimasa tugas, riwayat kredit, dan metrik penggunaan berbasis waktu.