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.

URL Base
https://api.seevio.ai
Daftar 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_xxxxxxxx
sk_live_

Gunakan kunci sk_live_ untuk lalu lintas produksi.

sk_test_

Gunakan kunci sk_test_ untuk pengujian integrasi di lingkungan sandbox dengan skema API yang sama.

401

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.

Kirim tugas

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
    }
  }'
Opsi hasil: Polling

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"
Opsi hasil: Webhook

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.

POST
/v1/videos/generations
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
    }
  }'

Mode Pembuatan

generation_type menentukan input media apa saja yang diterima dan bagaimana model menafsirkannya.

Kemampuan Seedance 2.5
seedance-2-5

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
ModeMedia wajibMedia opsionalCatatan
text-to-videopromptduration, aspect_ratio, resolution, seedHanya perintah teks. image_urls, video_urls, dan audio_urls tidak diperlukan.
image-to-videoprompt + array image_urls (1-2 URL gambar)duration, aspect_ratio, resolution, seedimage_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-videoprompt + minimal satu referensi gambar, video, atau audiogambar, video, dan audio dalam batas materi yang ditentukanSeedance 2.5 mendukung referensi audio saja. Untuk Seedance 2.0, tambahkan minimal satu gambar atau video jika menyertakan audio.
text-to-video

Gunakan 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-video

Gunakan 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-video

Gunakan 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

Teks + Gambar
Teks + Video
Teks + Audio (Seedance 2.5)
Teks + Gambar + Video
Teks + Gambar + Audio
Teks + Video + Audio
Teks + Gambar + Video + Audio
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

HeaderWajibDeskripsiContoh
AuthorizationYaKunci API Bearer yang digunakan untuk mengautentikasi permintaan.Bearer sk_live_xxx
Content-TypeYaSemua permintaan tulis (write request) menggunakan JSON.application/json

Field tingkat atas

FieldTipeWajibDefaultRentang / EnumModeContoh
model

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

stringYa-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minisemuaseedance-2-5
callback_url

Endpoint HTTPS yang menerima callback saat tugas selesai atau gagal.

stringTidak-URL HTTPS, tidak boleh jaringan privatsemuahttps://your-domain.com/hook
input

Pengaturan pembuatan video dan referensi media.

objectYa--semua-

input.* field

FieldTipeWajibDefaultRentang / EnumModeContoh
input.prompt

Perintah teks yang mendeskripsikan video yang ingin dibuat.

stringYa-teks tidak boleh kosongsemuaa cat surfing
input.generation_type

Mode pembuatan video. Default ke text-to-video.

stringTidaktext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

URL 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_urls

URL 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_urls

URL 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.duration

Durasi video hasil akhir dalam detik.

intTidak5Seedance 2.5: 4-30 detik. Seedance 2.0: 4-15 detik.semua5
input.aspect_ratio

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

stringTidakadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivesemua16:9
input.resolution

Tingkat resolusi video hasil akhir.

stringTidak720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (tergantung varian).semua720p
input.generate_audio

Menentukan apakah model harus menghasilkan audio jika didukung.

booleanTidaktruetrue | falsesemuatrue
input.watermark

Menentukan apakah ingin menambahkan watermark.

booleanTidakfalsetrue | falsesemuafalse
input.web_search

Menentukan apakah mengizinkan bantuan pencarian web jika didukung.

booleanTidakfalsetrue | falsesemuafalse
input.return_last_frame

Menentukan apakah ingin mengembalikan URL bingkai terakhir jika tersedia.

booleanTidakfalsetrue | falsesemuafalse
input.seed

Nilai seed deterministik untuk varian Seedance 2.0. Seedance 2.5 tidak mendukung parameter ini; silakan kosongkan.

intTidak-1-1 atau 0-4294967295semua-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 kredit

Respons

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"
}
NilaiArti
status=queuedDiterima dan sedang mengantre untuk dikirim atau diproses.
status=generatingPenyedia sedang memproses pembuatan video.
status=completedPembuatan video selesai dan data.results berisi URL hasil akhir.
status=failedPembuatan video gagal atau mengalami waktu habis (timeout).
billing_status=reservedKredit ditahan selama tugas sedang berlangsung.
billing_status=chargedTugas berhasil dan kredit yang ditahan resmi dipotong.
billing_status=refundedTugas gagal atau waktu habis, kredit dikembalikan otomatis.
billing_status=refund_failedTransaksi 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
  }
}
KodeHTTPArtiCoba lagi?
invalid_request400Parameter hilang atau tidak valid.Tidak, perbaiki permintaan Anda.
invalid_api_key401Kunci API hilang, tidak valid, atau telah dicabut.Tidak, gunakan kunci API yang valid.
insufficient_credits402Kredit tidak cukup. Tugas tidak diterima dan saldo tidak dipotong.Setelah melakukan isi ulang.
forbidden403Kunci API tidak memiliki cakupan (scope) yang diperlukan.Tidak.
not_found404Tugas tidak ditemukan atau bukan milik pemilik kunci API tersebut.Tidak.
rate_limited429Batas frekuensi permintaan terlampaui.Ya, ikuti petunjuk Retry-After.
internal_error500Terjadi 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.

Log API