Tóm tắt
API Seedance 2.0 ra mắt ngày 2/4/2026, cung cấp qua Volcengine Ark. Bạn gửi yêu cầu POST để tạo video, sau đó thăm dò endpoint GET cho đến khi trạng thái là "succeeded". API hỗ trợ nhiều kiểu đầu vào: chuyển văn bản/hình ảnh thành video, kiểm soát khung hình đầu-cuối, đa phương thức và âm thanh gốc. Video 1080p 5 giây giá khoảng $0,93. Tải video trong 24 giờ, sau đó URL sẽ hết hạn.
Giới thiệu
Ngày 2/4/2026, Volcengine Ark (ByteDance) phát hành chính thức API Seedance 2.0. Trước đó, bạn chỉ có thể tạo video Seedance 2.0 qua web UI. Bài viết này hướng dẫn cách sử dụng API thực cho các workflow tự động, kiểm thử, và tích hợp trực tiếp vào sản phẩm.
💡 API Seedance tuân theo mô hình tác vụ không đồng bộ: Gửi POST tạo tác vụ, nhận ID, thăm dò GET cho đến khi hoàn tất. Hãy thử nghiệm workflow từ đầu đến cuối trước khi tích hợp thực tế. Apidog hỗ trợ chuỗi kiểm thử: gửi POST, lấy ID tác vụ, thăm dò GET liên tục, xác nhận phản hồi cuối cùng chứa URL video hợp lệ. Xem phần hướng dẫn kiểm thử chi tiết với Apidog bên dưới.
Bài viết tập trung vào cách tạo các loại đầu vào, đọc chi phí từ phản hồi, xử lý lỗi thực tế, và các ví dụ code cụ thể.
Seedance 2.0 là gì?
Seedance 2.0 là mô hình tạo video AI của ByteDance trên Volcengine Ark. ID mô hình: doubao-seedance-2-0-260128 (chuẩn) và doubao-seedance-2-0-fast-260128 (nhanh hơn, chất lượng thấp hơn).
So với phiên bản 1.5, bản 2.0 hỗ trợ:
- Khung hình đầu-cuối (cung cấp cả hai ảnh)
- Đầu vào đa phương thức: ảnh, video, âm thanh cùng lúc
- Âm thanh gốc (đối thoại, hiệu ứng, nhạc, môi trường)
- Lip sync > 8 ngôn ngữ
- Điều khiển chuyển động camera bằng ngôn ngữ tự nhiên
- Video tối đa 15 giây, độ phân giải đến 2K
Video xuất ra 24fps, chọn được tỷ lệ khung hình và độ phân giải trong mỗi request.
Hướng dẫn API chính thức khác gì hướng dẫn cũ?
Các bài trước như hướng dẫn tháng 2/2026 chỉ mô tả thao tác trên web. Giờ đây, với API chính thức, bạn có thể tự động hóa quy trình, gọi từ mọi ngôn ngữ, tích hợp vào hệ thống riêng – phù hợp với mọi use case của developer.
Điều kiện tiên quyết
- Tạo tài khoản Volcengine: volcengine.com
- Vào bảng điều khiển Ark:
https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
- Tạo API Key và xuất thành biến môi trường:
export ARK_API_KEY="your-api-key-here"
- Khi gọi API, dùng header:
Authorization: Bearer YOUR_ARK_API_KEY
Tài khoản mới có credit miễn phí (~8 video 15 giây 1080p).
Chuyển văn bản thành video: Yêu cầu đầu tiên
Base URL Seedance API:
https://ark.cn-beijing.volces.com/api/v3
Gửi POST tới: /v1/contents/generations/tasks
Ví dụ cURL
curl -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
}
],
"resolution": "1080p",
"ratio": "16:9",
"duration": 5,
"watermark": false
}'
Phản hồi:
{"id": "cgt-2025xxxxxxxx-xxxx"}
Ví dụ Python (SDK chính thức)
Cài SDK:
pip install volcenginesdkarkruntime
Gửi tác vụ:
import os
from volcenginesdkarkruntime import Ark
client = Ark(api_key=os.environ.get("ARK_API_KEY"))
resp = client.content_generation.tasks.create(
model="doubao-seedance-2-0-260128",
content=[
{
"type": "text",
"text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
}
],
resolution="1080p",
ratio="16:9",
duration=5,
watermark=False,
)
print(resp.id)
Lưu ID tác vụ để thăm dò ở bước tiếp theo.
Mô hình tác vụ không đồng bộ: Gửi, thăm dò, tải xuống
Video tạo không tức thời; ví dụ, 5 giây 1080p mất ~60-120 giây. Quy trình:
queued -> running -> succeeded
-> failed
-> expired
-> cancelled
Thăm dò endpoint GET cho đến khi trạng thái không còn là queued/running.
Vòng lặp thăm dò Python hoàn chỉnh
import os
import time
import requests
from volcenginesdkarkruntime import Ark
client = Ark(api_key=os.environ.get("ARK_API_KEY"))
# Bước 1: Gửi tác vụ
resp = client.content_generation.tasks.create(
model="doubao-seedance-2-0-260128",
content=[
{"type": "text", "text": "Aerial shot of a mountain lake at sunrise, slow dolly forward"}
],
resolution="1080p",
ratio="16:9",
duration=5,
watermark=False,
)
task_id = resp.id
print(f"Task submitted: {task_id}")
# Bước 2: Thăm dò với exponential backoff
wait = 10
while True:
result = client.content_generation.tasks.get(task_id=task_id)
status = result.status
print(f"Status: {status}")
if status == "succeeded":
video_url = result.content.video_url
print(f"Video URL: {video_url}")
break
elif status in ("failed", "expired", "cancelled"):
print(f"Task ended with status: {status}")
break
time.sleep(wait)
wait = min(wait * 2, 60) # tối đa 60 giây
# Bước 3: Tải về ngay lập tức
if status == "succeeded":
response = requests.get(video_url, stream=True)
with open("output.mp4", "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print("Downloaded: output.mp4")
Lưu ý: Exponential backoff giúp tránh bị giới hạn đồng thời, bảo vệ tài nguyên API.
Chuyển hình ảnh thành video (I2V): Tạo hoạt ảnh từ ảnh tĩnh
Để tạo hoạt ảnh từ ảnh tĩnh, thêm đối tượng image_url vào mảng content cùng prompt văn bản. Ảnh sẽ là khung hình đầu tiên.
resp = client.content_generation.tasks.create(
model="doubao-seedance-2-0-260128",
content=[
{
"type": "text",
"text": "The woman slowly turns her head and smiles at the camera"
},
{
"type": "image_url",
"image_url": {"url": "https://example.com/portrait.jpg"}
}
],
ratio="adaptive",
duration=5,
watermark=False,
)
-
ratio: "adaptive"sẽ dùng tỷ lệ gốc của ảnh, tránh crop hoặc viền đen. - Mỗi ảnh <30MB, tối đa 9 ảnh/lần.
Khung hình đầu và cuối: Kiểm soát điểm bắt đầu và kết thúc
Cung cấp 2 ảnh (đầu-cuối) và prompt văn bản:
resp = client.content_generation.tasks.create(
model="doubao-seedance-2-0-260128",
content=[
{
"type": "text",
"text": "The flower blooms from bud to full open, macro lens, soft light"
},
{
"type": "image_url",
"image_url": {"url": "https://example.com/flower-bud.jpg"}
},
{
"type": "image_url",
"image_url": {"url": "https://example.com/flower-open.jpg"}
}
],
ratio="adaptive",
duration=8,
watermark=False,
)
- 2 ảnh + prompt = chế độ đầu-cuối.
- Có thể dùng
return_last_frame: trueđể lấy khung hình cuối từ 1 clip, dùng làm đầu vào cho clip tiếp theo (nối chuỗi).
Tham chiếu đa phương thức: Kết hợp ảnh, video, âm thanh
Seedance 2.0 cho phép đa dạng đầu vào cùng lúc: ảnh, video, audio, text.
{"type": "text", "text": "..."}{"type": "image_url", "image_url": {"url": "..."}}{"type": "video_url", "video_url": {"url": "..."}}{"type": "audio_url", "audio_url": {"url": "..."}}
Giới hạn:
- Tối đa 9 ảnh (<30MB/ảnh)
- Tối đa 3 video (2-15s, <50MB/clip)
- Tối đa 3 audio (mp3, <15MB/file)
Ví dụ:
resp = client.content_generation.tasks.create(
model="doubao-seedance-2-0-260128",
content=[
{
"type": "text",
"text": "Match the visual style of the reference clip and add the provided background audio"
},
{
"type": "image_url",
"image_url": {"url": "https://example.com/style-reference.jpg"}
},
{
"type": "video_url",
"video_url": {"url": "https://example.com/motion-reference.mp4"}
},
{
"type": "audio_url",
"audio_url": {"url": "https://example.com/background-music.mp3"}
}
],
duration=10,
ratio="16:9",
watermark=False,
)
Lưu ý: Có video reference thì giá giảm còn 3,90$/triệu token.
Tạo âm thanh gốc
Thêm generate_audio: true để tạo audio đồng bộ với nội dung video, bao gồm đối thoại, nhạc, hiệu ứng, tiếng môi trường.
resp = client.content_generation.tasks.create(
model="doubao-seedance-2-0-260128",
content=[
{
"type": "text",
"text": "A street musician plays guitar outside a cafe in Paris, crowds passing by, city sounds"
}
],
resolution="1080p",
ratio="16:9",
duration=10,
generate_audio=True,
watermark=False,
)
Việc này tăng nhẹ số token tiêu thụ, lưu ý khi tính chi phí.
Kiểm soát độ phân giải, tỷ lệ, thời lượng
-
resolution:
"480p","720p","1080p","2K"(mặc định:"1080p") -
ratio:
"16:9","9:16","4:3","3:4","21:9","1:1","adaptive" - duration: số nguyên 4-15 (giây, mặc định 5)
Mô hình fast cho chất lượng thấp hơn, hoàn thành nhanh hơn (thích hợp thử nghiệm).
Chọn Seedance 2.0 khi:
- Cần audio gốc đồng bộ
- Kiểm soát khung hình đầu-cuối
- Đầu vào đa phương thức
Nếu chỉ cần text-to-video đơn giản, chọn model fast với 480p để tiết kiệm chi phí.
Đọc chi phí từ phản hồi
Sau khi task thành công, trường usage trả về số token:
{
"usage": {
"completion_tokens": 246840,
"total_tokens": 246840
}
}
Tham khảo:
- 1080p, 15 giây: ~308.880 token
- 1080p, 5 giây: ~102.960 token
Giá T2V/I2V 1080p: 46 NDT/triệu token (~6,40$/triệu token).
Ước tính:
- 5 giây: ~102.960 token ≈ 0,93$
- 10 giây: ~205.920 token ≈ 1,97$
V2V (có video reference): 28 NDT/triệu token (~3,90$).
Tích hợp theo dõi chi phí trong app: lấy completion_tokens * đơn giá.
Quan trọng: Tải video trong vòng 24 giờ
Trường video_url sẽ hết hạn sau 24 giờ kể từ khi task thành công. Sau đó URL trả về 403, file bị xóa.
Luôn tải về ngay sau khi trạng thái là "succeeded".
Trường execution_expires_after chỉ thời gian lưu record (thường 48h), nhưng URL video vẫn chỉ 24h.
Task history chỉ giữ 7 ngày gần nhất.
Cách kiểm thử API Seedance bằng Apidog
Workflow bất đồng bộ cần chuỗi nhiều request.
Apidog cho phép tự động hóa và xác nhận từng bước.
Thiết lập kiểm thử Apidog
-
Tạo Kịch bản Kiểm thử
- Vào module Tests, tạo mới "Tạo video Seedance 2.0"
- Đặt biến môi trường
ARK_API_KEYtrong Apidog
-
Thêm bước gửi POST
- POST tới
https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks - Header:
Authorization: Bearer {{ARK_API_KEY}} - Body: JSON model, content
- POST tới
-
Extract Variable
- Sau bước POST, dùng Extract Variable lấy
$.idlưu vàoTASK_ID
- Sau bước POST, dùng Extract Variable lấy
-
Wait
- Thêm bước Wait 30 giây
-
Vòng lặp thăm dò GET
- For loop tối đa 20 lần:
- GET tới
/contents/generations/tasks/{{TASK_ID}} - Wait 10 giây
- Break If:
$.status == "succeeded"hoặc"failed"
- GET tới
- For loop tối đa 20 lần:
-
Assertion
- Kiểm tra:
$.status == "succeeded" - Kiểm tra:
$.content.video_urlkhông rỗng
- Kiểm tra:
Chạy kịch bản, Apidog sẽ log chi tiết từng bước, giúp bạn debug workflow và kiểm soát toàn bộ quy trình tạo video.
Tip: Có thể import cURL trực tiếp vào Apidog để nhanh chóng tạo các request.
Phân tích chi phí: Giá video 10 giây
Seedance API tính phí theo token sử dụng, không giới hạn user/tháng ngoài credit thử.
| Loại tác vụ | Giá (triệu token) |
|---|---|
| T2V / I2V ở 1080p | 46 NDT (~6,40$) |
| V2V (video reference) | 28 NDT (~3,90$) |
Ước tính chi phí phổ biến 1080p:
| Thời lượng | Token ước tính | Chi phí (T2V/I2V) |
|---|---|---|
| 5 giây | ~103.000 | ~0,66 NDT / ~0,93$ |
| 10 giây | ~206.000 | ~9,48 NDT / ~1,32$ |
| 15 giây | ~309.000 | ~14,21 NDT / ~1,97$ |
Tài khoản mới có credit đủ thử nghiệm ~8 video 15 giây 1080p.
Độ phân giải thấp hơn giảm chi phí đáng kể, nên phát triển ở 720p, chỉ nâng lên 1080p khi cần.
Các lỗi thường gặp và cách khắc phục
429 Quá nhiều yêu cầu:
Đạt giới hạn đồng thời. Dùng exponential backoff (bắt đầu 10s, nhân đôi, tối đa 60s).
Trạng thái "failed":
Model không thể tạo video. Kiểm tra prompt, ảnh đầu vào, dung lượng file, hoặc tham số.
Trạng thái "expired":
Task chờ quá lâu không hoàn thành (thường do cao điểm). Gửi lại request mới.
Lỗi 403 trên video_url:
URL đã hết hạn (quá 24h). Phải tạo lại video (dùng seed nếu muốn kết quả giống).
Khả năng tái tạo Seed:
Lưu lại giá trị seed để truyền lại cho các request sau, giúp tái tạo video giống hệt (nếu cùng tham số).
Kết luận
Seedance 2.0 cho phép developer tạo video AI đa phương thức, audio gốc, kiểm soát khung hình đầu-cuối thông qua API bất đồng bộ đơn giản: POST → nhận ID → thăm dò GET → tải ngay.
Luôn kiểm thử workflow với Apidog trước khi triển khai thực tế để phát hiện lỗi logic, thiếu extract, hoặc hết hạn URL.
Câu hỏi thường gặp
Sự khác biệt giữa doubao-seedance-2-0-260128 và doubao-seedance-2-0-fast-260128?
Bản chuẩn cho chất lượng cao, dùng cho sản xuất. Bản fast nhanh hơn, chất lượng thấp hơn, phù hợp test hoặc lặp prompt.
Tôi có thể sử dụng Seedance 2.0 ngoài Trung Quốc không?
API đặt tại Bắc Kinh, có thể gọi từ nước ngoài nhưng latency cao hơn. Xem điều khoản Volcengine về giới hạn địa lý.
Nối nhiều clip thành video dài hơn thế nào?
Dùng return_last_frame: true để lấy ảnh cuối, dùng làm đầu vào cho task tiếp theo, sau đó ghép các clip lại.
Tạo âm thanh gốc có tốn nhiều chi phí hơn không?
Có, tăng số token tiêu thụ một chút. So sánh completion_tokens để tính toán.
Có thể dùng webhook thay vì thăm dò không?
Có. Truyền thêm callback_url khi gửi task. API sẽ POST kết quả khi xong.
Vượt quá giới hạn 9 ảnh sẽ ra sao?
API trả về lỗi 400, cần giảm số lượng ảnh <=9.
Seed có đảm bảo kết quả giống hệt không?
Seed tăng khả năng tái tạo, nhưng không đảm bảo tuyệt đối nếu tham số hoặc model server thay đổi.
Theo dõi chi phí nhiều task như thế nào?
Đọc completion_tokens từ từng phản hồi, nhân với giá token. Lưu lại vào database riêng để tracking, vì API không có dashboard chi tiêu sẵn.


Top comments (0)