Seedance 2.0 API: hướng dẫn tích hợp đầy đủ năm 2026

Tích hợp tính năng tạo video AI ấn tượng với Seedance 2.0 API. Hướng dẫn đầy đủ về xác thực, endpoint, code mẫu và quy trình làm việc với Veo3 AI.

S

Veo3 AI · 28 min read · Jun 30, 2026

Seedance 2.0 API: hướng dẫn tích hợp đầy đủ năm 2026

Có lẽ bạn cũng đã vấp phải rào cản mà nhiều người gặp với Seedance 2.0 API. Mô hình mạnh, kết quả đẹp hơn nhiều lựa chọn khác, bộ tính năng đa phương thức lại đúng thứ cần có cho video marketing ngắn. Nhưng đến khi tích hợp vào một sản phẩm thực tế, phần dễ nhất hóa ra lại là chính khâu tạo video.

Phần khó là quyền truy cập.

Hiện vẫn chưa có con đường cấp phép công khai, chính thức và đủ rõ ràng để các đội làm sản phẩm thương mại yên tâm. Vì vậy, phần lớn lập trình viên phải chọn giữa các cổng trung gian của bên thứ ba: tài liệu chất lượng thất thường, cách tính phí mỗi nơi một kiểu, còn câu trả lời về quyền đối với nội dung thì mơ hồ. Điều này thay đổi cách bạn nên đánh giá Seedance 2.0 API. Bạn không chỉ tích hợp một mô hình video. Bạn đang tích hợp cả một mối quan hệ với nhà cung cấp, một hệ thống tính phí và một rủi ro tuân thủ.

Về mặt kỹ thuật, Seedance 2.0 vẫn đáng để làm. Mô hình tạo được âm thanh đồng bộ ngay khi tạo video (âm thanh gốc), nhận nhiều loại tham chiếu cùng lúc và xử lý những prompt sáng tạo có cấu trúc chặt chẽ hơn các mô hình video đời trước. Nhưng nếu đặt nó phía sau giao diện của một sản phẩm đang chạy thật (production), bạn cần một bản tích hợp theo hướng phòng thủ: lớp trừu tượng hóa nhà cung cấp, kiểm soát chi phí rõ ràng, cơ chế kiểm tra trạng thái task định kỳ (polling) không làm nghẽn hàng chờ, và một chính sách rõ ràng về nội dung nào bạn sẽ tạo, nội dung nào không, khi đi qua đường API không chính thức.

Giới thiệu Seedance 2.0 API

Seedance 2.0 đáng chú ý vì nó không chỉ là một lớp bọc (wrapper) tạo video từ văn bản như bao công cụ khác. Mô hình kết hợp tạo hình ảnh và âm thanh đồng bộ trong cùng một đường xử lý, nên cách bạn xây quy trình sáng tạo cũng khác đi. Thay vì ghép hình ảnh, khớp khẩu hình (lip sync), âm thanh môi trường và thiết kế âm thanh lại với nhau sau khi tạo, bạn có thể yêu cầu tất cả trong một lượt chạy, miễn là nhà cung cấp hỗ trợ tính năng này đúng cách.

Bên trong, mô hình xây trên kiến trúc Dual-Branch Diffusion Transformer 4,5B tham số, cho phép đồng thời tạo video và âm thanh đồng bộ trong cùng một không gian tiềm ẩn (latent space). Theo bản tóm tắt mô hình Seedance 2.0 của Segmind, Seedance 2.0 hiện dẫn đầu bảng xếp hạng Elo của Artificial Analysis ở mức 1.269, vượt Google Veo 3 và OpenAI Sora 2. Hai chi tiết này giải thích phần lớn sức hút của mô hình: kiến trúc giúp nó xử lý đa phương thức tốt hơn, còn thứ hạng trên bảng xếp hạng cho các đội thêm tin tưởng rằng đây không phải chuyện thổi phồng.

Seedance 2.0 cũng phản ánh một xu hướng rộng hơn của mảng tạo video. Các công cụ đời trước thường buộc bạn chọn một thế mạnh: chuyển động, mức bám sát prompt, tính nhất quán hoặc âm thanh. Seedance 2.0 gây chú ý vì gộp được nhiều khả năng trong số đó vào cùng một mô hình. Nó nhận được tham chiếu dạng văn bản, hình ảnh, video và âm thanh trong một request, và đặc biệt hữu ích khi cần giữ sự liền mạch giữa các cảnh quay.

Vì sao lập trình viên săn đón Seedance 2.0

Với ứng dụng chạy thật, sức hút thực tế không nằm ở chất lượng mô hình nói chung, mà ở chỗ quy trình gọn hơn.

Một mô hình vừa giữ được phong cách nhân vật, vừa làm theo chỉ dẫn máy quay, vừa tạo được âm thanh đồng bộ sẽ giúp bạn bớt phải viết code điều phối (orchestration) xoay quanh nó. Nghĩa là ít điểm chuyển giao mong manh giữa các công cụ riêng lẻ, ít lệch nhịp hơn, và ít tình huống khiến người dùng mất niềm tin vì bản xem trước không khớp với bản xuất cuối.

Quy tắc thực tế: Nếu sản phẩm phục vụ marketer, nhà giáo dục hoặc người làm video ngắn, một mô hình xử lý được cả tính liền mạch hình ảnh lẫn âm thanh thường đáng giá hơn một mô hình chỉ thắng ở vài clip benchmark riêng lẻ.

ByteDance chính thức ra mắt Seedance 2.0 vào ngày 10/2/2026. Theo bài đưa tin về đợt ra mắt Seedance 2.0 của SitePoint, kế hoạch mở API công khai bị hoãn vì lo ngại về deepfake và bản quyền liên quan đến người thật, và dự kiến sẽ có các biện pháp bảo vệ chặt chẽ hơn xoay quanh việc lọc nội dung và việc dùng chân dung khi chưa được cấp phép. Sự chậm trễ đó chính là bối cảnh đằng sau cảnh hỗn loạn của các nhà cung cấp hiện nay.

Nếu muốn có cái nhìn tổng quan về sản phẩm trước khi bắt tay vào code, trang giới thiệu Seedance 2.0 trên Veo3 AI là điểm khởi đầu hữu ích.

Seedance 2.0 làm tốt điều gì trong thực tế

Có ba trường hợp sử dụng nổi bật:

  • Video quảng bá ngắn chất lượng điện ảnh: teaser sản phẩm, clip ra mắt ứng dụng, các biến thể quảng cáo.
  • Tạo video nhiều tham chiếu: ảnh nhân vật, khung hình phong cách, ví dụ chuyển động và gợi ý âm thanh kết hợp cùng lúc.
  • Dàn dựng nhiều cảnh quay: prompt có cấu trúc, gồm chuyển cảnh và chỉ dẫn máy quay rõ ràng.

Cách dùng kém hiệu quả hơn là coi nó như một chiếc hộp đen thần kỳ. Seedance 2.0 đáp lại tốt khi bạn viết prompt có cấu trúc và quản lý tham chiếu cẩn thận. Nếu ứng dụng cho người dùng ném vào những prompt mơ hồ rồi kỳ vọng lần nào cũng ra kết quả chỉn chu, ticket hỗ trợ sẽ kéo đến ngay.

Thị trường nhà cung cấp API và cách chọn

Hệ sinh thái Seedance 2.0 API phân mảnh đến mức việc chọn nhà cung cấp trở thành một phần của kiến trúc tích hợp. Điều này hiếm thấy trong một bài hướng dẫn API, nhưng đó đúng là vấn đề các đội đang gặp.

Theo một thảo luận của giới lập trình viên về bức tranh Seedance 2.0 API hiện nay, có ít nhất 7 nền tảng API bên thứ ba khác nhau đang cung cấp Seedance 2.0 mà không có đảm bảo về ủy quyền pháp lý chính thức, và người dùng báo cáo mức giá dao động từ $0.05 đến $0.18 mỗi clip với mô hình tính phí không rõ ràng. Nếu bạn xây dựng cho mục đích thương mại, đây không phải chú thích nhỏ: nó ảnh hưởng đến khâu mua sắm dịch vụ, kế hoạch biên lợi nhuận và mức độ yên tâm về quyền sở hữu.

Cần kiểm tra gì trước khi chốt nhà cung cấp

Hầu hết trang của nhà cung cấp chỉ nhấn mạnh việc truy cập dễ dàng. Những câu hỏi quan trọng lại nằm ở khâu vận hành.

Câu hỏi Vì sao quan trọng
Task thất bại có bị tính phí không? Có nhà cung cấp ghi rõ, có nhà không.
Giá tính theo giây, theo clip, theo token hay một công thức ẩn? Bạn cần đơn giá dự đoán được.
Họ có trả về trạng thái task nguyên bản không? Thiếu thông tin này, việc hỗ trợ chỉ còn là đoán mò.
Bạn có lấy được chi tiết lỗi từ phía nhà cung cấp không? Phản hồi “failed” chung chung làm việc gỡ lỗi chậm hơn.
Điều khoản của họ nói gì về nội dung tạo ra và tệp (asset) tải lên? Rủi ro về quyền sở hữu nội dung thường nằm ở đây.

Những lần tích hợp tệ nhất xảy ra khi các đội coi mọi nhà cung cấp là như nhau. Thực tế không phải vậy. Dù nhiều bên cùng đứng trước một dòng mô hình, họ vẫn khác nhau về giới hạn tốc độ (rate limit), kiểu xác thực, cấu trúc request, cách kiểm duyệt và mức minh bạch về tính phí.

Checklist đánh giá nhà cung cấp

Hãy chạy thử một giai đoạn trước khi chuyển lưu lượng của khách hàng thật sang nhà cung cấp.

  • Kiểm tra mức minh bạch về thanh toán trước tiên: hỏi họ tính phí thế nào với các lần thử lại, task bị hủy và task bị chặn khi kiểm duyệt.
  • Đọc điều khoản về nội dung từng dòng: tìm những câu nói về tham chiếu tải lên, kết quả đầu ra và việc sử dụng thương mại.
  • Xem kỹ cơ chế polling: nếu nhà cung cấp không trả về task ID ổn định và các trường trạng thái, đừng xây dựng trên nền đó.
  • Thử gửi request trùng lặp: lỗi mạng vẫn xảy ra, và bạn cần biết việc vô tình gửi lại có bị tính phí hai lần hay không.
  • Xem lại cách xử lý dữ liệu: nếu người dùng tải lên ảnh sản phẩm, cảnh quay người thuyết trình hoặc tài sản thương hiệu nội bộ, chính sách về nơi lưu trữ dữ liệu (data residency) và thời gian lưu giữ rất quan trọng.

“Nhà cung cấp nào giải thích được chất lượng video nhưng không giải thích được cách xuất hóa đơn thì chưa sẵn sàng cho production.”

Một cách thực tế để giảm rủi ro là xây ngay từ đầu một lớp adapter cho nhà cung cấp. Giữ code ứng dụng độc lập với cấu trúc dữ liệu của bất kỳ nhà cung cấp riêng lẻ nào. Chuẩn hóa việc tạo task, polling, ánh xạ trạng thái và lấy kết quả đầu ra về một giao diện nội bộ của riêng bạn. Nhờ vậy bạn có thể đổi nhà cung cấp mà không phải viết lại toàn bộ pipeline tạo video.

Nếu bạn so sánh các bên chủ yếu theo chi phí, bảng phân tích giá Seedance 2.0 trên Veo3 AI là một mốc tham khảo hữu ích. Hãy xem kiểu so sánh đó là một đầu vào, đừng lấy nó làm quyết định cuối cùng.

Những sai lầm thường gặp

Những sai lầm phổ biến nhất khá dễ đoán:

  1. Chọn mức giá quảng cáo thấp nhất mà không kiểm tra các trường hợp đặc biệt trong cách tính phí.
  2. Cho rằng “được phép dùng thương mại” nghĩa là quyền sở hữu nội dung đã rõ ràng.
  3. Gắn cứng (hardcode) cấu trúc request của một nhà cung cấp vào ứng dụng.
  4. Đưa lên chạy thật mà không xử lý timeout cho task hoặc không có cơ chế chặn retry bừa bãi.

Thị trường nhà cung cấp quanh Seedance 2.0 vẫn giống một giải pháp tình thế thay đổi nhanh hơn là một nhóm nền tảng đã trưởng thành. Hãy xây dựng sản phẩm theo đúng thực tế đó.

Xác thực và thiết lập ban đầu

Xác thực khá đơn giản. Điều đáng chú ý là cách quản lý khóa bí mật, không phải cú pháp của header.

Hầu hết nhà cung cấp bên thứ ba dùng bearer token. Trên thực tế, request đầu tiên thường chỉ cần các header sau:

  • Authorization: Bearer YOUR_API_KEY
  • Content-Type: application/json

Hãy giữ khóa API ở phía server. Đừng để lộ nó trong ứng dụng chạy trên trình duyệt, ứng dụng di động hay bất kỳ cấu hình nào người dùng truy cập được. Nếu sản phẩm cho phép người dùng tạo video trực tiếp từ giao diện frontend, hãy chuyển request qua backend và tự cấp mã định danh job có thời hạn ngắn.

Mẫu thiết lập tối giản

Lưu khóa của nhà cung cấp trong biến môi trường và gói các request gửi đi trong một module client nhỏ.

{
  "headers": {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  }
}

Nghe có vẻ tầm thường, nhưng rất nhiều việc phải xử lý ở khâu hỗ trợ đến từ những lỗi hoàn toàn tránh được: khóa sao chép dính khoảng trắng, nhầm lẫn giữa các môi trường, thông tin xác thực hết hạn, hoặc đổi nhà cung cấp rồi quên rằng endpoint mới yêu cầu trường model hoặc task khác.

Quy tắc thiết lập nên áp dụng sớm

  • Mỗi môi trường một khóa bí mật: tách riêng khóa cho local, staging và production.
  • Ghi log request ID, không ghi khóa bí mật: log nên giúp gỡ lỗi mà không làm lộ thông tin xác thực.
  • Gói phần xác thực của nhà cung cấp vào một service class: nhờ vậy việc đổi nhà cung cấp vẫn trong tầm kiểm soát.
  • Kiểm tra cấu hình khi khởi động: báo lỗi ngay nếu thiếu biến môi trường bắt buộc.

Nếu hỗ trợ nhiều nhà cung cấp Seedance 2.0 API, hãy tạo một cấu trúc cấu hình gồm provider, baseUrl, apiKey, defaultModel và timeoutMs. Cách này giữ cho phần còn lại của codebase ổn định trong khi các nhà cung cấp thay đổi bên dưới.

Hiểu quy trình bất đồng bộ

Seedance 2.0 API hoạt động bất đồng bộ. Chỉ riêng điều này đã định hình toàn bộ cách tích hợp.

Theo tài liệu API Seedance 2, cách làm chuẩn là gửi một request POST với task_type='seedance-2-preview', rồi polling endpoint của task cứ 5 đến 10 giây một lần cho đến khi trạng thái chuyển thành COMPLETED; lúc đó response sẽ chứa URL của video đầu ra. Nếu coi nó như một API media đồng bộ thông thường, trình xử lý request sẽ bị chặn quá lâu và ứng dụng sẽ có cảm giác thiếu ổn định.

Hình dung quy trình như sau sẽ dễ hơn:

Infographic bốn bước minh họa quy trình bất đồng bộ của Seedance 2.0 API, từ request đầu tiên đến khi nhận kết quả cuối cùng.

Vòng đời thực tế của một request

Một bản tích hợp lành mạnh thường đi qua bốn bước.

  1. Gửi task tạo video
    Backend gửi request tạo và lưu lại task ID trả về.

  2. Đánh dấu job ở trạng thái chờ trong nội bộ
    Nếu có thể, đừng giữ request HTTP ban đầu để chờ. Hãy trả về một mã định danh job (job handle) cho giao diện.

  3. Polling để theo dõi thay đổi trạng thái
    Một worker hoặc job nền kiểm tra trạng thái task theo khoảng thời gian nhà cung cấp quy định.

  4. Lưu URL của tệp kết quả
    Khi task hoàn tất, lưu URL đầu ra và đánh dấu job đã sẵn sàng để lấy về.

Quy trình này đơn giản, nhưng chi tiết khi triển khai mới là điều quan trọng. Polling quá dày sẽ làm chi phí tăng hoặc chạm giới hạn của nhà cung cấp. Polling quá thưa thì ứng dụng có cảm giác chậm chạp, cũ kỹ. Polling từ trình duyệt thì các giả định của nhà cung cấp sẽ rò rỉ sang phía client.

Trước khi vào phần ghi chú triển khai, mời bạn xem video hướng dẫn minh họa:

<iframe width="100%" style="aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/5ubi8Dwokp0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

Cách làm hiệu quả trên production

Cách làm ổn định là gửi task từ backend kết hợp polling chạy nền. Giao diện nên hỏi trạng thái job từ chính ứng dụng, chứ không hỏi thẳng nhà cung cấp phía trên.

Polling thuộc về server hoặc queue worker. Trình duyệt chỉ nên làm việc với endpoint job do chính bạn quản lý.

Một vòng lặp giả mã (pseudocode) cơ bản trông như sau:

async function waitForSeedanceCompletion(taskId) {
  while (true) {
    const result = await getTaskStatus(taskId);

    if (result.status === "COMPLETED") {
      return result.output_url;
    }

    if (result.status === "FAILED") {
      throw new Error(result.error || "Generation failed");
    }

    await sleep(5000);
  }
}

Những điểm dễ bị bỏ sót

  • Ánh xạ trạng thái khác nhau tùy nhà cung cấp: có bên trả trạng thái viết hoa, có bên viết thường.
  • Hoàn tất chưa chắc đã tải về được: một số nhà cung cấp đánh dấu task hoàn tất trước khi tệp kết quả kịp phân phối đầy đủ.
  • Timeout cần logic nghiệp vụ: job chạy lâu không phải lúc nào cũng là job thất bại, nhưng trải nghiệm người dùng vẫn cần một mốc giới hạn.
  • Tính idempotent rất quan trọng: khi người dùng tải lại trang hoặc thử lại, đừng tạo task trùng lặp trừ khi họ chủ động yêu cầu render thêm một lần nữa.

Khi các đội than rằng Seedance 2.0 API “thiếu ổn định”, thủ phạm thường là phần tích hợp bất đồng bộ chứ không phải khâu tạo video.

Endpoint và tham số tạo video

Hầu hết nhà cung cấp mở Seedance 2.0 API qua ba chế độ tạo video thực dụng: tạo video từ văn bản thuần túy, tạo chuyển động dựa trên ảnh và chế độ tham chiếu đa phương thức. Tên gọi có khác đôi chút, nhưng khái niệm trong request khá giống nhau.

Theo tài liệu tham khảo Seedance 2.0 của EvoLink, API hỗ trợ đầu vào bốn phương thức (quad-modal) với tối đa 12 tệp tham chiếu hỗn hợp, thời lượng video từ 4 đến 15 giây và độ phân giải đầu ra từ 480p đến 4K. Giá trên các nền tảng như Atlas Cloud bắt đầu từ khoảng $0.09 mỗi giây cho bậc nhanh (fast tier). Đây là những con số nên ghi nhớ khi bạn thiết kế giá trị mặc định cho ứng dụng.

Hình minh họa các nhóm tham số tạo video chính của Seedance 2.0 API: văn bản, hình ảnh, âm thanh và hệ thống.

Ba chế độ bạn sẽ thực sự dùng

Chế độ Phù hợp nhất với Đầu vào thường gặp
text_to_video Lên ý tưởng nhanh và phác thảo quảng cáo Chỉ prompt
first_last_frames Tạo video từ ảnh có kiểm soát Một hoặc hai URL ảnh
omni_reference Kiểm soát độ liền mạch và phong cách phức tạp Kết hợp văn bản, ảnh, video, âm thanh

Với các đội sản phẩm, text_to_video là chế độ nháp. first_last_frames là chế độ “làm cho bức ảnh tĩnh này sống động”. omni_reference là nơi Seedance 2.0 bắt đầu chứng minh độ phức tạp của nó là xứng đáng.

Các tham số quan trọng nhất

Một danh sách ngắn là đủ cho phần lớn các tác vụ thực tế:

  • prompt
    Chỉ dẫn chính. Seedance phản hồi tốt với chỉ đạo có cấu trúc hơn là mô tả mơ hồ.

  • duration
    Dùng các giá trị nằm trong khoảng nhà cung cấp hỗ trợ. Clip ngắn phù hợp hơn khi thử đi thử lại prompt. Clip dài phù hợp hơn khi chuyển động và bố cục đã ổn.

  • resolution hoặc các trường width và height
    Độ phân giải thấp phù hợp với bản nháp. Độ phân giải cao nên dành cho bản render cuối vì làm tăng nhu cầu tính toán và thời gian tạo.

  • aspect_ratio
    Chọn đúng định dạng đích ngay từ đầu. Nội dung dọc cho mạng xã hội và cảnh quay quảng bá ngang không nên dùng chung một giá trị mặc định.

  • generate_audio
    Chỉ bật khi âm thanh gốc đồng bộ thực sự giúp ích cho kết quả. Nếu ứng dụng sẽ chèn nhạc nền riêng về sau, hãy giữ phần điều khiển này đơn giản.

  • Các trường tệp tham chiếu
    Ở chế độ omni_reference, bạn thường tải tệp lên riêng, rồi gọi chúng trong prompt bằng cú pháp riêng của từng nhà cung cấp, ví dụ @image1, @video1 hoặc @audio1.

Giá trị mặc định nên dùng

Các giá trị mặc định dưới đây an toàn cho lần chạy đầu tiên:

Trường hợp sử dụng Chế độ đề xuất Chiến lược độ phân giải
Thử prompt text_to_video 480p
Clip mạng xã hội bản cuối text_to_video hoặc first_last_frames 720p hoặc 1080p
Giữ phong cách nhất quán giữa các cảnh omni_reference Bắt đầu ở mức thấp, chốt bản cuối ở mức cao hơn
Cảnh nhiều thoại hoặc nhiều âm thanh môi trường omni_reference Chủ động bật âm thanh

Nếu đội gặp khó với chất lượng prompt, hãy ôn lại bài hiểu về prompt engineering để thành công với AI. Seedance 2.0 rất mạnh, nhưng chất lượng đầu ra vẫn phản ánh chất lượng chỉ dẫn bạn đưa vào.

Những lựa chọn tham số thường phản tác dụng

Có hai kiểu làm gây ra những thất bại hoàn toàn tránh được.

Thứ nhất là nhét mọi tham chiếu có sẵn vào một request. Đúng là mô hình hỗ trợ tham chiếu hỗn hợp, nhưng không có nghĩa tác vụ nào cũng hưởng lợi từ lượng đầu vào phức tạp tối đa. Quá nhiều tham chiếu yếu sẽ làm mờ ý đồ.

Thứ hai là dùng độ phân giải cao ngay từ giai đoạn thử nghiệm. Hãy làm nháp rẻ, rút kinh nghiệm nhanh, rồi render lại. Điều này với Seedance 2.0 còn quan trọng hơn so với các công cụ tạo video đơn giản hơn, vì request đa phương thức làm chi phí và độ trễ tăng chồng lên nhau.

Giải thích cấu trúc request và response

Cách tích hợp Seedance 2.0 API gọn gàng nhất là chuẩn hóa payload riêng của từng nhà cung cấp về một cấu trúc nội bộ do chính bạn định nghĩa. Dù request body của bên này trông gần giống bên kia, những khác biệt nhỏ về tên trường vẫn sẽ len vào ứng dụng nếu bạn không dựng một lớp chuyển đổi.

Ví dụ request tạo video từ văn bản

Đây là một cấu trúc tiêu biểu cho trình dựng request phía server:

{
  "model": "seedance",
  "task_type": "seedance-2-preview",
  "input": {
    "mode": "text_to_video",
    "prompt": "Quảng cáo sản phẩm gọn gàng cho chiếc bình nước bằng thép không gỉ đặt trên bàn studio, máy quay đẩy chậm vào, phản chiếu mềm, âm thanh phòng thu rất nhẹ",
    "duration": 5,
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "generate_audio": true
  }
}

Điều quan trọng không phải là tên trường chính xác, mà là ứng dụng biểu diễn nhất quán chế độ, prompt, thời lượng, định dạng và ý định về âm thanh trước khi chuyển chúng thành payload mà từng nhà cung cấp yêu cầu.

Request đa phương thức có tham chiếu

Với những tác vụ nhiều tham chiếu, request thường cần cả danh sách tệp lẫn các tham chiếu ngay trong prompt:

{
  "model": "seedance",
  "task_type": "seedance-2-preview",
  "input": {
    "mode": "omni_reference",
    "prompt": "Dùng @image1 làm nhận diện sản phẩm, theo phong cách chuyển động của @video1, dùng @audio1 làm mốc thời gian, cận cảnh điện ảnh với chuyển động máy quay mượt mà",
    "duration": 8,
    "aspect_ratio": "9:16",
    "resolution": "720p",
    "generate_audio": true,
    "references": {
      "images": ["https://example.com/assets/product-front.jpg"],
      "videos": ["https://example.com/assets/camera-motion-reference.mp4"],
      "audio": ["https://example.com/assets/timing-bed.wav"]
    }
  }
}

Phần ánh xạ giữa prompt và tham chiếu là chỗ nhiều bản tích hợp trở nên mong manh. Nếu quy trình tải lên đánh số lại các tệp hoặc âm thầm làm rơi mất một tệp, mô hình sẽ không dùng đúng thứ bạn nghĩ.

Lưu ý khi triển khai: Hãy lưu cả ID tệp gốc của người dùng lẫn tên tham chiếu dùng với nhà cung cấp. Như vậy việc dựng lại prompt và gỡ lỗi khi hỗ trợ sẽ dễ hơn nhiều.

Response điển hình khi tạo task

Response đầu tiên thường chưa có video. Nó nên chứa một bản ghi task để bạn polling.

{
  "id": "task_abc123",
  "status": "PENDING"
}

Response điển hình khi polling

Trong lúc task chạy, bạn thường thấy các trạng thái trung gian:

{
  "id": "task_abc123",
  "status": "PROCESSING"
}

Và khi đã hoàn tất:

{
  "id": "task_abc123",
  "status": "COMPLETED",
  "output": {
    "video_url": "https://example.com/output/video.mp4"
  }
}

Hãy thiết kế bộ phân tích response để coi trạng thái như một enum do bạn tự kiểm soát trong nội bộ. Đừng để các giá trị thô của nhà cung cấp lan khắp ứng dụng. Chỉ riêng kỷ luật này đã ngăn được rất nhiều lỗi hồi quy khi sau này bạn thêm nhà cung cấp thứ hai.

Code mẫu cho các quy trình phổ biến

Cách dễ nhất để giữ cho bản tích hợp Seedance 2.0 API ổn định là tách thành ba phần việc: gửi task, polling và hoàn tất. Đừng viết một hàm trợ giúp khổng lồ làm tất cả rồi che giấu các kiểu lỗi. Bạn sẽ hối hận khi retry và khác biệt giữa các nhà cung cấp xuất hiện.

Ví dụ cURL

Cách này hữu ích để kiểm tra xác thực và cấu trúc payload trước khi viết code ứng dụng.

curl -X POST "https://your-provider.example.com/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance",
    "task_type": "seedance-2-preview",
    "input": {
      "mode": "text_to_video",
      "prompt": "Teaser sản phẩm chất lượng điện ảnh cho chiếc máy xay cà phê màu đen nhám, ánh sáng cạnh bên đầy kịch tính, máy quay đẩy chậm vào, âm thanh phòng nhẹ nhàng",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true
    }
  }'

Sau đó polling bằng task ID:

curl -X GET "https://your-provider.example.com/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Ví dụ Python

Phiên bản này dùng requests và giữ quy trình thật tường minh.

import time
import requests

BASE_URL = "https://your-provider.example.com"
API_KEY = "YOUR_API_KEY"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

create_payload = {
    "model": "seedance",
    "task_type": "seedance-2-preview",
    "input": {
        "mode": "text_to_video",
        "prompt": "Clip quảng cáo ngắn cho một chiếc đèn bàn hiện đại, ánh sáng buổi tối ấm áp, máy quay lướt từ trái sang phải, âm thanh môi trường nhẹ nhàng",
        "duration": 5,
        "aspect_ratio": "16:9",
        "resolution": "720p",
        "generate_audio": True,
    },
}

create_res = requests.post(f"{BASE_URL}/tasks", json=create_payload, headers=headers)
create_res.raise_for_status()

task = create_res.json()
task_id = task["id"]

while True:
    poll_res = requests.get(f"{BASE_URL}/tasks/{task_id}", headers=headers)
    poll_res.raise_for_status()
    data = poll_res.json()

    status = data.get("status")

    if status == "COMPLETED":
        print("Video URL:", data["output"]["video_url"])
        break

    if status == "FAILED":
        raise RuntimeError(data.get("error", "Generation failed"))

    time.sleep(5)

Ví dụ JavaScript

Với backend Node hoặc serverless, hãy giữ polling bên ngoài trình duyệt.

const BASE_URL = "https://your-provider.example.com";
const API_KEY = "YOUR_API_KEY";

async function createTask() {
  const res = await fetch(`${BASE_URL}/tasks`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "seedance",
      task_type: "seedance-2-preview",
      input: {
        mode: "text_to_video",
        prompt:
          "Video quảng bá bóng bẩy cho tai nghe không dây, cận cảnh sản phẩm xoay tròn, vệt sáng bóng loáng, âm thanh điện tử nhẹ nhàng",
        duration: 5,
        aspect_ratio: "9:16",
        resolution: "720p",
        generate_audio: true,
      },
    }),
  });

  if (!res.ok) throw new Error(`Create failed: ${res.status}`);
  return res.json();
}

async function pollTask(taskId) {
  while (true) {
    const res = await fetch(`${BASE_URL}/tasks/${taskId}`, {
      headers: { Authorization: `Bearer ${API_KEY}` },
    });

    if (!res.ok) throw new Error(`Poll failed: ${res.status}`);

    const data = await res.json();

    if (data.status === "COMPLETED") return data.output.video_url;
    if (data.status === "FAILED") {
      throw new Error(data.error || "Generation failed");
    }

    await new Promise((resolve) => setTimeout(resolve, 5000));
  }
}

(async () => {
  const task = await createTask();
  const videoUrl = await pollTask(task.id);
  console.log("Done:", videoUrl);
})();

Cần điều chỉnh gì cho production

  • Chuyển các khóa bí mật vào cấu hình môi trường
  • Lưu job vào cơ sở dữ liệu riêng
  • Thêm cơ chế bảo vệ khi retry cho các lỗi mạng
  • Ánh xạ lỗi của nhà cung cấp sang các loại lỗi riêng của ứng dụng

Nhờ vậy bản tích hợp vẫn dễ bảo trì khi nhà cung cấp thay đổi cách hoạt động, một chuyện khá phổ biến ở mảng thị trường này.

Ví dụ tích hợp với Veo3 AI

Người dùng nhập prompt cho một video quảng bá ngắn, chọn định dạng dọc, tải lên ảnh tham chiếu của sản phẩm rồi bấm tạo. Dưới góc nhìn của người dùng, quy trình này phải thật đơn giản. Còn phía sau, phần tích hợp cần lặng lẽ làm rất nhiều việc.

Ảnh chụp màn hình từ https://veo3ai.io

Điều gì diễn ra phía sau giao diện

Một ứng dụng chạy thật nên chuyển các lựa chọn của người dùng thành một đặc tả job nội bộ trước tiên. Đặc tả này có thể gồm nội dung prompt, tỷ lệ khung hình mong muốn, có tạo âm thanh hay không và các tham chiếu đã tải lên. Chỉ sau đó backend mới chọn adapter của nhà cung cấp để dùng.

Một quy trình vững chắc trông như sau:

  1. Ứng dụng nhận yêu cầu của người dùng.
  2. Backend kiểm tra chính sách nội dung và định dạng tệp.
  3. Backend tạo job Seedance qua nhà cung cấp đã chọn.
  4. Một worker chạy nền polling cho đến khi task hoàn tất.
  5. Hệ thống sao chép URL của tệp kết quả cuối vào bản ghi thư viện media của người dùng.

Người dùng chỉ thấy một trạng thái tiến độ. Những chi tiết rắc rối do backend lo.

Vì sao lớp trừu tượng này quan trọng

Nếu để hành vi của nhà cung cấp lộ thẳng ra sản phẩm, mọi sự thiếu nhất quán ở thượng nguồn sẽ trở thành vấn đề của người dùng. Bên này có thể xử lý chậm. Bên kia có thể đổi tên các trạng thái. Bên thứ ba có thể kiểm duyệt khắt khe hơn với tệp tham chiếu tải lên. Ứng dụng nên san phẳng tất cả những khác biệt đó thành một trải nghiệm dễ đoán.

Hãy xây mô hình job của riêng bạn trước. Coi Seedance 2.0 là công cụ thực thi, không phải nguồn dữ liệu chuẩn (source of truth) của sản phẩm.

Cách này cũng hỗ trợ việc xác định quyền sở hữu và khả năng kiểm toán. Bạn có thể lưu lại nội dung prompt, tệp đã tải lên, nhà cung cấp đã dùng, mã định danh task, mốc thời gian và vị trí lưu kết quả cuối. Nếu sau này khách hàng hỏi một clip cụ thể do đâu mà có, bạn sẽ có dấu vết để truy lại.

Cách chia kiến trúc trong thực tế

Lớp Trách nhiệm
Frontend Thu thập prompt, tệp tải lên và tùy chọn đầu ra
API backend Kiểm tra request và tạo job nội bộ
Provider adapter Chuyển cấu trúc nội bộ thành payload riêng của từng nhà cung cấp
Worker Polling trạng thái task và lưu thông tin khi hoàn tất
Thư viện media Lưu kết quả cuối cùng và siêu dữ liệu quyền truy cập của người dùng

Nếu bạn đang thiết kế một luồng điều phối tương tự, hướng dẫn tích hợp Veo 3 API năm 2026 là ví dụ hữu ích về cách nghĩ đến việc trừu tượng hóa mô hình ở tầng sản phẩm.

Giới hạn tốc độ (rate limit) và bảng mã lỗi

Giới hạn tốc độ khác nhau tùy nhà cung cấp, và đó chính là lý do bản tích hợp không nên dựa trên những giả định không có trong tài liệu. Có bên gần như không công bố gì về số lượng xử lý đồng thời (concurrency), có bên giấu tác động lên chi phí sau những cách nói chung chung như “mức sử dụng”. Hãy thiết kế cơ chế backoff (giãn cách thời gian giữa các lần thử lại) ngay cả khi tài liệu có vẻ không khắt khe.

Bảng xử lý lỗi thường gặp

Mã Ý nghĩa Hành động khuyến nghị
400 Payload request không hợp lệ Kiểm tra các trường bắt buộc trước khi gửi. Rà lại chế độ, cấu trúc prompt và phần ánh xạ tham chiếu.
401 Xác thực thất bại Kiểm tra bearer token, môi trường đang chọn và việc nạp khóa bí mật.
403 Request bị chặn do chính sách hoặc quyền truy cập Rà lại nội dung prompt, tệp tham chiếu và các hạn chế của tài khoản.
404 Không tìm thấy task hoặc endpoint Xác nhận đường dẫn của nhà cung cấp, task ID và base URL của môi trường.
429 Quá nhiều request Giãn cách (back off), xếp hàng các lần thử lại và giảm tần suất polling.
500 Lỗi từ phía nhà cung cấp Thử lại có giới hạn và ghi log chi tiết response của nhà cung cấp.
503 Dịch vụ tạm thời không khả dụng Trì hoãn rồi thử lại qua job worker, không thử lại trong luồng request của người dùng.

Quy tắc phục hồi giúp ứng dụng ổn định

  • Khi gặp lỗi 429: giãn tần suất polling và dàn đều thời điểm gửi task mới.
  • Khi task thất bại: hiển thị lỗi dễ hiểu cho người dùng trong ứng dụng và giữ nguyên payload gốc của nhà cung cấp để ghi log.
  • Khi lỗi 5xx lặp lại: tạm dừng gửi task đến nhà cung cấp đó và chuyển sang nhà cung cấp khác (fail over) nếu bạn hỗ trợ.

Đừng để nội dung lỗi của nhà cung cấp đi thẳng đến người dùng. Hãy chuẩn hóa nó.

Câu hỏi thường gặp về API

Chọn nhà cung cấp thế nào khi không bên nào thật sự chính thức?

Hãy chọn bên trả lời rõ ràng nhất về cách tính phí, phí khi task thất bại, điều khoản nội dung và khả năng theo dõi task. Nhà cung cấp nào trông có vẻ rẻ nhưng không giải thích được chuyện retry, quyền sở hữu hay thời gian lưu giữ dữ liệu thì không phù hợp cho mục đích thương mại.

Xử lý độ phân giải và nâng độ phân giải (upscale) thế nào cho tốt nhất?

Đây vẫn là một trong những khoảng trống thực tế lớn nhất. Nhu cầu được nhắc đến nhiều mà chưa ai đáp ứng là nâng độ phân giải đáng tin cậy từ đầu ra bị giới hạn ở 720p của Seedance 2.0 lên 1080p hoặc 4K mà không bị nhòe chuyển động. Một thảo luận trên Reddit cho biết 83% người dùng nêu giới hạn độ phân giải và giọng nói tiếng Pháp bị lỗi trong số các điểm yếu hàng đầu, trong khi phần tổng hợp các phàn nàn của người dùng trong chủ đề đó, đăng trên r/generativeAI, không đưa ra quy trình nâng độ phân giải bằng AI nào đã qua xác thực chính thức.

Câu trả lời thực tế khá thận trọng: tạo clip nguồn sạch nhất có thể, giữ độ phức tạp của chuyển động ở mức hợp lý, và thử công cụ nâng độ phân giải trên cảnh quay nhiều khuôn mặt trước khi đưa vào production. Hiện chưa có quy trình nâng độ phân giải riêng cho Seedance nào được công nhận rộng rãi, nên hãy coi khâu xử lý hậu kỳ là giai đoạn thử nghiệm chứ không phải bước đã giải xong.

Làm sao giữ sự nhất quán giữa nhiều clip?

Hãy dùng cùng một bộ tham chiếu, giữ cấu trúc prompt ổn định và đừng đổi các mô tả hình ảnh giữa các cảnh quay, trừ khi bạn muốn diện mạo thay đổi. Seedance 2.0 mạnh về tính liền mạch, nhưng sự nhất quán vẫn phụ thuộc vào việc viết prompt có kỷ luật.

Có nên luôn bật tính năng tạo âm thanh không?

Không. Hãy bật âm thanh gốc khi lời thoại, âm thanh môi trường hoặc sự ăn khớp về nhịp là phần quan trọng của chính clip. Hãy tắt khi sản phẩm đã thêm lồng tiếng, nhạc nền hoặc âm thanh theo timeline ở khâu hậu kỳ.

Làm sao kiểm soát chi phí?

Bản nháp ngắn, thử nghiệm ở độ phân giải thấp và các giai đoạn render lại tách bạch rõ ràng. Đừng để người dùng chạy các lượt tạo chất lượng cuối khi họ vẫn đang thử prompt ở giai đoạn ý tưởng.


Nếu muốn xây dựng với Seedance, Veo và các mô hình video liên quan mà không phải xoay xở giữa nhiều công cụ riêng lẻ, Veo3 AI cho bạn một nơi duy nhất để tạo video từ văn bản hoặc ảnh, điều chỉnh các tùy chọn đầu ra và kiểm soát các quy trình sáng tạo sẵn sàng cho thương mại.

Ready to create AI videos?
Turn ideas and images into finished videos with the core Veo3 AI tools.

Related Articles

Continue with more blog posts in the same locale.

Browse all posts