Seedance 2.0 API

Bangun pembuatan video ke dalam produk Anda dengan pembuatan tugas asinkron, polling status, webhook, dan penagihan yang sadar kredit.

URL Dasar
https://api.seedance2.ai
Di halaman ini

Pendahuluan

API memungkinkan Anda mengirimkan tugas pembuatan video Seedance 2.0 secara terprogram. Pembuatan bersifat asinkron: buat tugas, segera terima ID tugas, lalu dapatkan video yang selesai dengan polling endpoint tugas atau dengan menerima webhook.

Tugas asinkron

Polling bekerja dengan baik untuk pengembangan dan integrasi sederhana.

Siap webhook

Webhook direkomendasikan untuk produksi karena menghindari polling agresif dan memberi tahu layanan Anda saat tugas mencapai status terminal.

Sadar kredit

Kredit dicadangkan saat pengiriman. Tugas yang berhasil akan dibebankan dari cadangan tersebut; tugas yang gagal atau kehabisan waktu akan dikembalikan secara otomatis.

Autentikasi

Buat kunci API di dasbor dan kirimkan sebagai token Bearer pada setiap permintaan. Kunci lengkap hanya ditampilkan sekali pada saat pembuatan.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Gunakan kunci sk_live_ untuk lalu lintas produksi.

sk_test_

Gunakan kunci sk_test_ untuk pengujian integrasi sandbox dengan kontrak API yang sama.

401

Kunci yang hilang, tidak valid, atau dicabut mengembalikan invalid_api_key dengan HTTP 401.

Mulai Cepat

Kirim tugas terlebih dahulu. Setelah tugas diterima, pilih salah satu metode pengiriman hasil: polling endpoint tugas, atau terima hasil akhir melalui webhook.

Kirim tugas

Buat tugas video asinkron dan segera terima ID tugas.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'
Opsi hasil: Polling

Ambil endpoint status tugas ketika integrasi Anda lebih memilih polling eksplisit.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Opsi hasil: Webhook

Lewati callback_url saat mengirimkan tugas, lalu terima callback penyelesaian atau kegagalan dan perbarui catatan tugas Anda sendiri.

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. Badan permintaan memiliki model tingkat atas, callback_url opsional, dan objek input yang berisi pengaturan prompt dan pembuatan.

POST
/v1/videos/generations
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'

Mode pembuatan

generation_type mengontrol input media mana yang diterima dan bagaimana model menginterpretasikannya.

ModeMedia yang diperlukanMedia opsionalCatatan
text-to-videopromptduration, aspect_ratio, resolution, seedHanya prompt 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. Sediakan 1 URL gambar untuk bingkai pertama, atau 2 URL gambar untuk bingkai pertama dan terakhir. Video dan audio diabaikan.
reference-to-videoprompt + setidaknya satu gambar atau videogambar, video, dan audio dalam batas materialAudio tidak dapat digunakan sendiri dengan teks. Tambahkan setidaknya satu gambar atau video saat audio disediakan.
text-to-video

Gunakan text-to-video saat prompt adalah satu-satunya input kreatif.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'
image-to-video

Gunakan image-to-video saat input.image_urls adalah array dengan 1-2 URL gambar: satu URL mengatur bingkai pertama, dan dua URL mengatur bingkai pertama dan terakhir. Referensi video dan audio diabaikan dalam mode ini.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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 reference-to-video untuk arah yang lebih kaya dengan gambar, video, dan audio referensi. Audio tidak dapat digunakan sendiri dengan teks; sertakan setidaknya satu gambar atau video saat audio disediakan.

Batas material

  • Hingga 9 gambar referensi
  • Hingga 3 video referensi, total durasi <= 15 detik
  • Hingga 3 audio referensi, total durasi <= 15 detik
  • Maksimal 12 material secara total di semua jenis

Kombinasi input yang didukung

Teks + Gambar
Teks + Video
Teks + Gambar + Video
Teks + Gambar + Audio
Teks + Video + Audio
Teks + Gambar + Video + Audio
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "1080p"
    }
  }'

Parameter permintaan

Nama parameter, nilai enum, jalur endpoint, dan contoh adalah bagian dari kontrak API. Deskripsi di bawah ini menjelaskan bagaimana setiap bidang berperilaku.

Header

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

Bidang tingkat atas

BidangTipeWajibDefaultRentang / EnumModeContoh
model

Varian model yang digunakan untuk pembuatan.

stringYa-seedance-2-0 | seedance-2-0-fastsemuaseedance-2-0
callback_url

Endpoint HTTPS yang menerima callback penyelesaian dan kegagalan tugas.

stringTidak-URL HTTPS, tanpa jaringan pribadisemuahttps://your-domain.com/hook
input

Pengaturan pembuatan dan referensi media.

objectYa--semua-

input.* bidang

BidangTipeWajibDefaultRentang / EnumModeContoh
input.prompt

Prompt teks yang menjelaskan video yang akan dibuat.

stringYa-teks tidak kosongsemuaa cat surfing
input.generation_type

Mode pembuatan. 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, kirim 1 gambar untuk bingkai pertama atau 2 gambar untuk bingkai pertama dan terakhir. Untuk reference-to-video, kirim hingga 9 gambar sebagai referensi visual.

string[]Kondisional[]Image-to-video: 1 atau 2 gambar. Reference-to-video: hingga 9 gambar. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Video referensi yang dapat diakses publik hanya untuk reference-to-video. Anda dapat mengirim hingga 3 file video, dan total waktu putarnya harus 15 detik atau kurang.

string[]Tidak[]Hingga 3 video. Total durasi video harus 15 detik atau kurang.reference-to-video[]
input.audio_urls

File audio referensi yang dapat diakses publik hanya untuk reference-to-video. Anda dapat mengirim hingga 3 file audio, dan total waktu putarnya harus 15 detik atau kurang.

string[]Tidak[]Hingga 3 file audio. Total durasi audio harus 15 detik atau kurang.reference-to-video[]
input.duration

Durasi video output dalam detik.

intTidak54-15 detiksemua5
input.aspect_ratio

Rasio aspek output. adaptif memungkinkan layanan menyimpulkan rasio terbaik.

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

Tingkatan resolusi output.

stringTidak720p480p | 720p | 1080psemua720p
input.generate_audio

Apakah model harus menghasilkan audio jika didukung.

booleanTidaktruetrue | falsesemuatrue
input.watermark

Apakah akan menambahkan tanda air.

booleanTidakfalsetrue | falsesemuafalse
input.web_search

Apakah akan mengizinkan augmentasi pencarian web jika didukung.

booleanTidakfalsetrue | falsesemuafalse
input.return_last_frame

Apakah akan mengembalikan URL bingkai terakhir jika tersedia.

booleanTidakfalsetrue | falsesemuafalse
input.seed

Seed deterministik. Gunakan -1 untuk seed acak.

intTidak-1-1 atau 0-4294967295semua-1

Kredit bervariasi berdasarkan resolusi, durasi, model, dan apakah reference-to-video menyertakan referensi video. Nilai kredit yang dikembalikan oleh respons pembuatan adalah jumlah sebenarnya yang dicadangkan untuk tugas tersebut.

Lihat harga kredit

Respons

Ini adalah respons berhasil dari POST /v1/videos/generations. Ini berarti tugas telah diterima dan kredit telah dicadangkan. Gunakan taskId yang dikembalikan untuk polling GET /v1/tasks/:id atau untuk mencocokkan callback penyelesaian atau kegagalan.

POST /v1/videos/generations respons berhasil

{
  "taskId": "3f2aK9mR...",
  "credits": 60
}

Dapatkan status tugas

Gunakan GET /v1/tasks/:id untuk mengambil status tugas saat ini. Polling tidak lebih dari sekali setiap 10 detik. Untuk sistem produksi, lebih pilih webhook.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"

Respons tugas yang selesai

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "charged",
  "credits": 60,
  "failed_reason": null,
  "data": {
    "results": ["https://cdn.seedance2.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Respons tugas yang gagal

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
NilaiArti
status=queuedDiterima dan menunggu untuk dikirimkan atau diproses.
status=generatingPenyedia sedang memproses pembuatan.
status=completedVideo selesai dan data.results berisi URL hasilnya.
status=failedPembuatan gagal atau kehabisan waktu.
billing_status=reservedKredit dicadangkan saat tugas sedang berlangsung.
billing_status=chargedTugas berhasil dan cadangan diselesaikan.
billing_status=refundedTugas gagal atau kehabisan waktu dan kredit dikembalikan.
billing_status=refund_failedTransaksi pengembalian dana gagal dan memerlukan penanganan manual.

Setelah video_expires_at, data.results kosong. Unduh dan simpan file sebelum jendela validitas berakhir.

Webhook

Ketika callback_url ada, Seedance memanggil endpoint Anda saat tugas selesai atau gagal, dan mengirimkan data JSON yang menjelaskan hasil akhir. Jika endpoint Anda mengembalikan respons non-2xx atau tidak merespons dalam waktu 15 detik, pengiriman akan dicoba ulang hingga 5 kali. Percobaan ulang menggunakan id tugas yang sama, jadi hapus duplikasi berdasarkan id. Kembalikan respons 200 segera setelah Anda berhasil merekam data callback.

Callback penyelesaian tugas

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "results": ["https://cdn.seedance2.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Callback kegagalan tugas

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}
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 bentuk data callback, hapus duplikasi berdasarkan id, perbarui catatan tugas Anda sendiri, dan respons dengan cepat.

callback_url harus HTTPS dan tidak boleh menunjuk ke rentang jaringan pribadi, loopback, atau link-local.

Kesalahan

POST /v1/videos/generations dan GET /v1/tasks/:id mengembalikan bentuk kesalahan ini ketika permintaan API itu sendiri gagal, seperti parameter tidak valid, kunci API tidak valid, kredit tidak cukup, pembatasan laju, atau tugas tidak ditemukan. Beberapa kesalahan menyertakan bidang tambahan seperti required, available, atau retry_after tergantung pada situasinya.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "available": 12
  }
}
KodeHTTPArtiCoba lagi?
invalid_request400Parameter hilang atau tidak valid.Tidak, perbaiki permintaannya.
invalid_api_key401Kunci API hilang, tidak valid, atau dicabut.Tidak, gunakan kunci yang valid.
insufficient_credits402Kredit tidak cukup. Tugas tidak diterima atau dibebankan.Setelah pengisian ulang.
forbidden403Kunci API tidak memiliki cakupan yang diperlukan.Tidak.
not_found404Tugas tidak ada atau bukan milik pemilik kunci.Tidak.
rate_limited429Laju permintaan terlampaui.Ya, ikuti Retry-After.
internal_error500Kesalahan server.Ya, coba lagi nanti.

Batas laju

Batas laju diterapkan per kunci API dengan jendela geser. Pembuatan default ke 60 permintaan per menit; kueri status lebih longgar. Respons HTTP 429 menyertakan Retry-After.

Pembuatan

60/min

Kueri status

Lebih longgar

Header 429

Retry-After

Penagihan & kredit

API menggunakan cadangan saat pengiriman, tagihan saat berhasil, dan pengembalian dana saat gagal. Halaman penggunaan Dasbor menunjukkan riwayat kredit API, log tugas, dan statistik penggunaan berdasarkan waktu.

Dicadangkan

Kredit diperiksa dan dicadangkan saat tugas diterima.

Dibebankan

Tugas yang selesai menyelesaikan cadangan yang ada.

Dikembalikan

Tugas yang gagal atau kehabisan waktu mengembalikan kredit yang dicadangkan secara otomatis.

Periksa penggunaan di dasbor

Lihat log API, linimasa tugas, riwayat kredit, dan metrik penggunaan berdasarkan waktu.

Log API