{
  "aboutHtml": "<p>Seedance 2.0 Mini là một mô hình có tên riêng trong họ âm thanh–video Seedance 2.0 của ByteDance. Nhà sản xuất mô tả chuyển văn bản thành video, chuyển ảnh thành video với khung đầu hoặc khung đầu và cuối, tạo theo tham chiếu đa phương thức, chỉnh sửa và kéo dài video. Âm thanh có thể được tạo cùng hình ảnh. Chọn chế độ theo tư liệu đã có: bản mô tả viết, hình mở đầu cố định, hai khung biên hoặc đoạn video cần chỉnh sửa hay tiếp nối.</p><p>Mini có cấu hình đầu ra riêng. Nhà sản xuất liệt kê video 480p và 720p với màu 8-bit, 24 khung hình mỗi giây và đầu ra MP4. Các tỷ lệ khung hình được hỗ trợ là 21:9, 16:9, 4:3, 1:1, 3:4 và 9:16; thời lượng tạo được mô tả là 4–15 giây. Điều khiển thời lượng của nhà sản xuất còn cho phép tự động chọn trong phạm vi đó. Các lựa chọn 1080p và 4K của mô hình Seedance 2.0 đầy đủ là riêng biệt; chúng không phải thiết lập Mini. Bảng năng lực của họ mô hình liệt kê việc trả lại khung hình cuối được tạo, còn chế độ Draft không được hỗ trợ.</p><p>Tham chiếu omni tạo cảnh mới bằng thông tin đã chọn từ tư liệu cung cấp. Hình ảnh có thể xác định diện mạo chủ thể, bố cục hoặc cách thể hiện hình ảnh. Video có thể xác lập hành động, chuyển động máy quay hoặc hiệu ứng; tham chiếu âm thanh có thể xác lập âm sắc giọng, giai điệu hoặc lời nói. Nói rõ cần lấy gì từ mỗi tham chiếu thay vì yêu cầu sao chép mọi thuộc tính. Ví dụ, dùng ảnh sản phẩm cho hình dạng và màu sắc, đoạn chuyển động máy quay ngắn cho cách tiếp cận và tham chiếu âm thanh cho không khí.</p><p>Quy trình của họ mô hình cho phép đến chín ảnh tham chiếu, ba đoạn video và ba đoạn âm thanh. Mỗi video tham chiếu dài 2–15 giây, tổng không quá 15 giây; tham chiếu âm thanh dùng cùng giới hạn cho từng đoạn và tổng thời lượng. Chỉ âm thanh và văn bản cộng âm thanh không có tham chiếu hình ảnh không phải các tổ hợp được hỗ trợ. Tạo chỉ từ văn bản là chế độ được hỗ trợ riêng. Với một chuỗi, cung cấp tài sản theo thứ tự dự kiến và tham chiếu nhất quán bằng Image 1, Video 1 hoặc Audio 1, theo thứ tự trong từng loại phương tiện. Không thay tham chiếu có số trong lời nhắc viết bằng mã định danh tài sản.</p><p>Ảnh khung đầu xác định phần mở đầu của cú máy dựa trên ảnh. Chế độ khung đầu và cuối xác định cả hai biên. Nếu những ảnh biên chính xác đó quan trọng, chọn chế độ chuyên biệt thay vì mô tả tham chiếu là mở đầu và kết thúc trong lời nhắc omni. Cách sau là hiệu ứng được chỉ dẫn bằng lời nhắc, không tương đương lựa chọn khung biên nghiêm ngặt. Chuẩn bị ảnh cho bố cục đầu ra và nêu hành động nối tình huống bắt đầu với kết thúc.</p><p>Chỉnh sửa video thay đổi đoạn có sẵn thay vì chỉ dùng nó làm cảm hứng. Xác định video cần sửa, vật hoặc vùng cần đổi, thời điểm xuất hiện và vị trí, cùng chi tiết cần giữ. Một bản yêu cầu hữu ích là “Trong Video 1, thay chiếc cốc bằng vật đựng trong Image 1; giữ chuyển động tay, bố cục khung hình, ánh sáng và cách sắp xếp trên bàn.” Với việc xóa, nêu vật không mong muốn và các yếu tố xung quanh phải giữ lại. Nhà sản xuất khuyên tham chiếu trực tiếp video đích khi chỉnh sửa hoặc kéo dài; gọi nó là tham chiếu có thể lại truyền đạt yêu cầu tạo cảnh mới.</p><p>Kéo dài video bổ sung sự kiện trước hoặc sau đoạn có sẵn. Mô tả chiều tiếp nối và điều xảy ra tiếp theo hoặc trước đó. Quy trình được mô tả còn có thể nối hai hoặc ba đoạn bằng chuyển cảnh được tạo; cả ba video đầu vào vẫn phải nằm trong tổng tham chiếu 15 giây. Hướng dẫn phân biệt tiếp nối chủ yếu gồm phần cảnh ở biên của đoạn gốc với yêu cầu giữ rõ ràng nội dung gốc. Nêu thành phần kết quả mong muốn: chỉ phần tiếp nối, hoặc cảnh chứa đoạn được cung cấp cùng hành động mới.</p><p>Để chỉ đạo rõ ràng, tách mô tả cảnh ổn định khỏi chuỗi sự kiện. Xác định mỗi chủ thể bằng hai hoặc ba đặc điểm hình ảnh phân biệt và nhãn nhất quán. Sau đó mô tả hành động, bối cảnh, ánh sáng, chuyển động máy quay, phong cách hình ảnh và ràng buộc. Trong hội thoại, gắn từng câu với người nói và hành động liên quan. Dùng nhãn cú máy có thứ tự thay vì coi mốc thời gian chính xác là điều khiển đáng tin: nhà sản xuất lưu ý thời điểm chính xác có thể không ổn định. Bản mô tả sản phẩm được dàn dựng có thể là: “Image 1 xác định Product A. Shot 1: từ từ tiến tới Product A trên quầy. Shot 2: một bàn tay xoay sản phẩm về phía ánh sáng. Shot 3: dừng ở nhãn phía trước. Âm nền căn phòng nhẹ; giữ chữ in.”</p><p>Chuẩn bị tham chiếu theo quy tắc đầu vào của họ mô hình được mô tả. Các định dạng ảnh được hỗ trợ gồm JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC và HEIF; mỗi ảnh nhỏ hơn 30 MB. Hướng dẫn quy định chiều rộng và cao của ảnh đều lớn hơn 300 và nhỏ hơn 6,000 pixel, tỷ lệ khung hình lớn hơn 0.4 và nhỏ hơn 2.5. Video tham chiếu dùng MP4 hoặc MOV với video H.264 hoặc H.265 và âm thanh AAC hoặc MP3, mỗi tệp tối đa 200 MB và có 24–60 khung hình mỗi giây. Chiều rộng và cao là 300–6,000 pixel, tỷ lệ 0.4–2.5 và tổng số pixel 407,696–8,295,044. Âm thanh tham chiếu dùng WAV hoặc MP3, tối đa 15 MB mỗi tệp. Đây là đặc tả chuẩn bị đầu vào của nhà sản xuất, tách biệt với điều khiển tải lên của ứng dụng cụ thể.</p><p>Quy trình chân dung của nhà sản xuất đòi hỏi chuẩn bị riêng cho ảnh hoặc video chứa khuôn mặt người thật: tải tham chiếu trực tiếp không phải quy trình tiêu chuẩn được hỗ trợ. Tài liệu mô tả đầu ra mô hình đáng tin, nhân vật số cài sẵn và quy trình tài sản người thật được cho phép là các giải pháp riêng. Khớp giọng, phát âm và âm thanh tại biên đoạn video cũng cần kiểm tra. Hướng dẫn lời nhắc khuyên mô tả đặc tính giọng mong muốn và giữ phong cách hội thoại gần tham chiếu âm thanh. Xem xét sản phẩm cuối về tính nhất quán chủ thể, lời nói chính xác, thời điểm hành động, chuyển khung và âm thanh kết thúc; tinh chỉnh yếu tố cụ thể khác với bản mô tả.</p>",
  "aboutText": "Seedance 2.0 Mini là một mô hình có tên riêng trong họ âm thanh–video Seedance 2.0 của ByteDance. Nhà sản xuất mô tả chuyển văn bản thành video, chuyển ảnh thành video với khung đầu hoặc khung đầu và cuối, tạo theo tham chiếu đa phương thức, chỉnh sửa và kéo dài video. Âm thanh có thể được tạo cùng hình ảnh. Chọn chế độ theo tư liệu đã có: bản mô tả viết, hình mở đầu cố định, hai khung biên hoặc đoạn video cần chỉnh sửa hay tiếp nối.\n\nMini có cấu hình đầu ra riêng. Nhà sản xuất liệt kê video 480p và 720p với màu 8-bit, 24 khung hình mỗi giây và đầu ra MP4. Các tỷ lệ khung hình được hỗ trợ là 21:9, 16:9, 4:3, 1:1, 3:4 và 9:16; thời lượng tạo được mô tả là 4–15 giây. Điều khiển thời lượng của nhà sản xuất còn cho phép tự động chọn trong phạm vi đó. Các lựa chọn 1080p và 4K của mô hình Seedance 2.0 đầy đủ là riêng biệt; chúng không phải thiết lập Mini. Bảng năng lực của họ mô hình liệt kê việc trả lại khung hình cuối được tạo, còn chế độ Draft không được hỗ trợ.\n\nTham chiếu omni tạo cảnh mới bằng thông tin đã chọn từ tư liệu cung cấp. Hình ảnh có thể xác định diện mạo chủ thể, bố cục hoặc cách thể hiện hình ảnh. Video có thể xác lập hành động, chuyển động máy quay hoặc hiệu ứng; tham chiếu âm thanh có thể xác lập âm sắc giọng, giai điệu hoặc lời nói. Nói rõ cần lấy gì từ mỗi tham chiếu thay vì yêu cầu sao chép mọi thuộc tính. Ví dụ, dùng ảnh sản phẩm cho hình dạng và màu sắc, đoạn chuyển động máy quay ngắn cho cách tiếp cận và tham chiếu âm thanh cho không khí.\n\nQuy trình của họ mô hình cho phép đến chín ảnh tham chiếu, ba đoạn video và ba đoạn âm thanh. Mỗi video tham chiếu dài 2–15 giây, tổng không quá 15 giây; tham chiếu âm thanh dùng cùng giới hạn cho từng đoạn và tổng thời lượng. Chỉ âm thanh và văn bản cộng âm thanh không có tham chiếu hình ảnh không phải các tổ hợp được hỗ trợ. Tạo chỉ từ văn bản là chế độ được hỗ trợ riêng. Với một chuỗi, cung cấp tài sản theo thứ tự dự kiến và tham chiếu nhất quán bằng Image 1, Video 1 hoặc Audio 1, theo thứ tự trong từng loại phương tiện. Không thay tham chiếu có số trong lời nhắc viết bằng mã định danh tài sản.\n\nẢnh khung đầu xác định phần mở đầu của cú máy dựa trên ảnh. Chế độ khung đầu và cuối xác định cả hai biên. Nếu những ảnh biên chính xác đó quan trọng, chọn chế độ chuyên biệt thay vì mô tả tham chiếu là mở đầu và kết thúc trong lời nhắc omni. Cách sau là hiệu ứng được chỉ dẫn bằng lời nhắc, không tương đương lựa chọn khung biên nghiêm ngặt. Chuẩn bị ảnh cho bố cục đầu ra và nêu hành động nối tình huống bắt đầu với kết thúc.\n\nChỉnh sửa video thay đổi đoạn có sẵn thay vì chỉ dùng nó làm cảm hứng. Xác định video cần sửa, vật hoặc vùng cần đổi, thời điểm xuất hiện và vị trí, cùng chi tiết cần giữ. Một bản yêu cầu hữu ích là “Trong Video 1, thay chiếc cốc bằng vật đựng trong Image 1; giữ chuyển động tay, bố cục khung hình, ánh sáng và cách sắp xếp trên bàn.” Với việc xóa, nêu vật không mong muốn và các yếu tố xung quanh phải giữ lại. Nhà sản xuất khuyên tham chiếu trực tiếp video đích khi chỉnh sửa hoặc kéo dài; gọi nó là tham chiếu có thể lại truyền đạt yêu cầu tạo cảnh mới.\n\nKéo dài video bổ sung sự kiện trước hoặc sau đoạn có sẵn. Mô tả chiều tiếp nối và điều xảy ra tiếp theo hoặc trước đó. Quy trình được mô tả còn có thể nối hai hoặc ba đoạn bằng chuyển cảnh được tạo; cả ba video đầu vào vẫn phải nằm trong tổng tham chiếu 15 giây. Hướng dẫn phân biệt tiếp nối chủ yếu gồm phần cảnh ở biên của đoạn gốc với yêu cầu giữ rõ ràng nội dung gốc. Nêu thành phần kết quả mong muốn: chỉ phần tiếp nối, hoặc cảnh chứa đoạn được cung cấp cùng hành động mới.\n\nĐể chỉ đạo rõ ràng, tách mô tả cảnh ổn định khỏi chuỗi sự kiện. Xác định mỗi chủ thể bằng hai hoặc ba đặc điểm hình ảnh phân biệt và nhãn nhất quán. Sau đó mô tả hành động, bối cảnh, ánh sáng, chuyển động máy quay, phong cách hình ảnh và ràng buộc. Trong hội thoại, gắn từng câu với người nói và hành động liên quan. Dùng nhãn cú máy có thứ tự thay vì coi mốc thời gian chính xác là điều khiển đáng tin: nhà sản xuất lưu ý thời điểm chính xác có thể không ổn định. Bản mô tả sản phẩm được dàn dựng có thể là: “Image 1 xác định Product A. Shot 1: từ từ tiến tới Product A trên quầy. Shot 2: một bàn tay xoay sản phẩm về phía ánh sáng. Shot 3: dừng ở nhãn phía trước. Âm nền căn phòng nhẹ; giữ chữ in.”\n\nChuẩn bị tham chiếu theo quy tắc đầu vào của họ mô hình được mô tả. Các định dạng ảnh được hỗ trợ gồm JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC và HEIF; mỗi ảnh nhỏ hơn 30 MB. Hướng dẫn quy định chiều rộng và cao của ảnh đều lớn hơn 300 và nhỏ hơn 6,000 pixel, tỷ lệ khung hình lớn hơn 0.4 và nhỏ hơn 2.5. Video tham chiếu dùng MP4 hoặc MOV với video H.264 hoặc H.265 và âm thanh AAC hoặc MP3, mỗi tệp tối đa 200 MB và có 24–60 khung hình mỗi giây. Chiều rộng và cao là 300–6,000 pixel, tỷ lệ 0.4–2.5 và tổng số pixel 407,696–8,295,044. Âm thanh tham chiếu dùng WAV hoặc MP3, tối đa 15 MB mỗi tệp. Đây là đặc tả chuẩn bị đầu vào của nhà sản xuất, tách biệt với điều khiển tải lên của ứng dụng cụ thể.\n\nQuy trình chân dung của nhà sản xuất đòi hỏi chuẩn bị riêng cho ảnh hoặc video chứa khuôn mặt người thật: tải tham chiếu trực tiếp không phải quy trình tiêu chuẩn được hỗ trợ. Tài liệu mô tả đầu ra mô hình đáng tin, nhân vật số cài sẵn và quy trình tài sản người thật được cho phép là các giải pháp riêng. Khớp giọng, phát âm và âm thanh tại biên đoạn video cũng cần kiểm tra. Hướng dẫn lời nhắc khuyên mô tả đặc tính giọng mong muốn và giữ phong cách hội thoại gần tham chiếu âm thanh. Xem xét sản phẩm cuối về tính nhất quán chủ thể, lời nói chính xác, thời điểm hành động, chuyển khung và âm thanh kết thúc; tinh chỉnh yếu tố cụ thể khác với bản mô tả.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "4ca2ce417161f640cf1f9352b33f7ccc0e99042a248fef03557fa3be3f9f47d6",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "vi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 2.0 Mini</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>bytedance/seedance-2.0-mini</code><button type=\"button\" id=\"copy-id\">Sao chép ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Các phần của thẻ mô hình\"><button type=\"button\" data-card-jump=\"overview\">Bắt đầu</button><button type=\"button\" data-card-jump=\"methods\">Đầu vào &amp; phương thức</button><button type=\"button\" data-card-jump=\"pricing\">Bảng giá</button><button type=\"button\" data-card-jump=\"examples\">Ví dụ</button><button type=\"button\" data-card-jump=\"results\">Kết quả</button><button type=\"button\" data-card-jump=\"aliases\">Bí danh</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Phương thức API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|bytedance%2Fseedance-2.0-mini\">Video</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Bắt đầu</h3><p class=\"mdesc-full\">Seedance 2.0 Mini tạo video ngắn với âm thanh được tạo tùy chọn từ văn bản, hình ảnh, video và tham chiếu âm thanh. Mô hình hỗ trợ tạo cảnh, chỉnh sửa video có mục tiêu và tiếp nối, với cấu hình đầu ra 480p hoặc 720p được mô tả.</p><dl class=\"card-io\" data-card-io><div><dt>Đầu vào được chấp nhận</dt><dd>Văn bản · Ảnh · Âm thanh</dd></div><div><dt>Kết quả</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Về mô hình</summary><p class=\"note-s\" data-model-method-boundary>Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.</p><div class=\"mabout\" id=\"m-about\"><p>Seedance 2.0 Mini là một mô hình có tên riêng trong họ âm thanh–video Seedance 2.0 của ByteDance. Nhà sản xuất mô tả chuyển văn bản thành video, chuyển ảnh thành video với khung đầu hoặc khung đầu và cuối, tạo theo tham chiếu đa phương thức, chỉnh sửa và kéo dài video. Âm thanh có thể được tạo cùng hình ảnh. Chọn chế độ theo tư liệu đã có: bản mô tả viết, hình mở đầu cố định, hai khung biên hoặc đoạn video cần chỉnh sửa hay tiếp nối.</p><p>Mini có cấu hình đầu ra riêng. Nhà sản xuất liệt kê video 480p và 720p với màu 8-bit, 24 khung hình mỗi giây và đầu ra MP4. Các tỷ lệ khung hình được hỗ trợ là 21:9, 16:9, 4:3, 1:1, 3:4 và 9:16; thời lượng tạo được mô tả là 4–15 giây. Điều khiển thời lượng của nhà sản xuất còn cho phép tự động chọn trong phạm vi đó. Các lựa chọn 1080p và 4K của mô hình Seedance 2.0 đầy đủ là riêng biệt; chúng không phải thiết lập Mini. Bảng năng lực của họ mô hình liệt kê việc trả lại khung hình cuối được tạo, còn chế độ Draft không được hỗ trợ.</p><p>Tham chiếu omni tạo cảnh mới bằng thông tin đã chọn từ tư liệu cung cấp. Hình ảnh có thể xác định diện mạo chủ thể, bố cục hoặc cách thể hiện hình ảnh. Video có thể xác lập hành động, chuyển động máy quay hoặc hiệu ứng; tham chiếu âm thanh có thể xác lập âm sắc giọng, giai điệu hoặc lời nói. Nói rõ cần lấy gì từ mỗi tham chiếu thay vì yêu cầu sao chép mọi thuộc tính. Ví dụ, dùng ảnh sản phẩm cho hình dạng và màu sắc, đoạn chuyển động máy quay ngắn cho cách tiếp cận và tham chiếu âm thanh cho không khí.</p><p>Quy trình của họ mô hình cho phép đến chín ảnh tham chiếu, ba đoạn video và ba đoạn âm thanh. Mỗi video tham chiếu dài 2–15 giây, tổng không quá 15 giây; tham chiếu âm thanh dùng cùng giới hạn cho từng đoạn và tổng thời lượng. Chỉ âm thanh và văn bản cộng âm thanh không có tham chiếu hình ảnh không phải các tổ hợp được hỗ trợ. Tạo chỉ từ văn bản là chế độ được hỗ trợ riêng. Với một chuỗi, cung cấp tài sản theo thứ tự dự kiến và tham chiếu nhất quán bằng Image 1, Video 1 hoặc Audio 1, theo thứ tự trong từng loại phương tiện. Không thay tham chiếu có số trong lời nhắc viết bằng mã định danh tài sản.</p><p>Ảnh khung đầu xác định phần mở đầu của cú máy dựa trên ảnh. Chế độ khung đầu và cuối xác định cả hai biên. Nếu những ảnh biên chính xác đó quan trọng, chọn chế độ chuyên biệt thay vì mô tả tham chiếu là mở đầu và kết thúc trong lời nhắc omni. Cách sau là hiệu ứng được chỉ dẫn bằng lời nhắc, không tương đương lựa chọn khung biên nghiêm ngặt. Chuẩn bị ảnh cho bố cục đầu ra và nêu hành động nối tình huống bắt đầu với kết thúc.</p><p>Chỉnh sửa video thay đổi đoạn có sẵn thay vì chỉ dùng nó làm cảm hứng. Xác định video cần sửa, vật hoặc vùng cần đổi, thời điểm xuất hiện và vị trí, cùng chi tiết cần giữ. Một bản yêu cầu hữu ích là “Trong Video 1, thay chiếc cốc bằng vật đựng trong Image 1; giữ chuyển động tay, bố cục khung hình, ánh sáng và cách sắp xếp trên bàn.” Với việc xóa, nêu vật không mong muốn và các yếu tố xung quanh phải giữ lại. Nhà sản xuất khuyên tham chiếu trực tiếp video đích khi chỉnh sửa hoặc kéo dài; gọi nó là tham chiếu có thể lại truyền đạt yêu cầu tạo cảnh mới.</p><p>Kéo dài video bổ sung sự kiện trước hoặc sau đoạn có sẵn. Mô tả chiều tiếp nối và điều xảy ra tiếp theo hoặc trước đó. Quy trình được mô tả còn có thể nối hai hoặc ba đoạn bằng chuyển cảnh được tạo; cả ba video đầu vào vẫn phải nằm trong tổng tham chiếu 15 giây. Hướng dẫn phân biệt tiếp nối chủ yếu gồm phần cảnh ở biên của đoạn gốc với yêu cầu giữ rõ ràng nội dung gốc. Nêu thành phần kết quả mong muốn: chỉ phần tiếp nối, hoặc cảnh chứa đoạn được cung cấp cùng hành động mới.</p><p>Để chỉ đạo rõ ràng, tách mô tả cảnh ổn định khỏi chuỗi sự kiện. Xác định mỗi chủ thể bằng hai hoặc ba đặc điểm hình ảnh phân biệt và nhãn nhất quán. Sau đó mô tả hành động, bối cảnh, ánh sáng, chuyển động máy quay, phong cách hình ảnh và ràng buộc. Trong hội thoại, gắn từng câu với người nói và hành động liên quan. Dùng nhãn cú máy có thứ tự thay vì coi mốc thời gian chính xác là điều khiển đáng tin: nhà sản xuất lưu ý thời điểm chính xác có thể không ổn định. Bản mô tả sản phẩm được dàn dựng có thể là: “Image 1 xác định Product A. Shot 1: từ từ tiến tới Product A trên quầy. Shot 2: một bàn tay xoay sản phẩm về phía ánh sáng. Shot 3: dừng ở nhãn phía trước. Âm nền căn phòng nhẹ; giữ chữ in.”</p><p>Chuẩn bị tham chiếu theo quy tắc đầu vào của họ mô hình được mô tả. Các định dạng ảnh được hỗ trợ gồm JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC và HEIF; mỗi ảnh nhỏ hơn 30 MB. Hướng dẫn quy định chiều rộng và cao của ảnh đều lớn hơn 300 và nhỏ hơn 6,000 pixel, tỷ lệ khung hình lớn hơn 0.4 và nhỏ hơn 2.5. Video tham chiếu dùng MP4 hoặc MOV với video H.264 hoặc H.265 và âm thanh AAC hoặc MP3, mỗi tệp tối đa 200 MB và có 24–60 khung hình mỗi giây. Chiều rộng và cao là 300–6,000 pixel, tỷ lệ 0.4–2.5 và tổng số pixel 407,696–8,295,044. Âm thanh tham chiếu dùng WAV hoặc MP3, tối đa 15 MB mỗi tệp. Đây là đặc tả chuẩn bị đầu vào của nhà sản xuất, tách biệt với điều khiển tải lên của ứng dụng cụ thể.</p><p>Quy trình chân dung của nhà sản xuất đòi hỏi chuẩn bị riêng cho ảnh hoặc video chứa khuôn mặt người thật: tải tham chiếu trực tiếp không phải quy trình tiêu chuẩn được hỗ trợ. Tài liệu mô tả đầu ra mô hình đáng tin, nhân vật số cài sẵn và quy trình tài sản người thật được cho phép là các giải pháp riêng. Khớp giọng, phát âm và âm thanh tại biên đoạn video cũng cần kiểm tra. Hướng dẫn lời nhắc khuyên mô tả đặc tính giọng mong muốn và giữ phong cách hội thoại gần tham chiếu âm thanh. Xem xét sản phẩm cuối về tính nhất quán chủ thể, lời nói chính xác, thời điểm hành động, chuyển khung và âm thanh kết thúc; tinh chỉnh yếu tố cụ thể khác với bản mô tả.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Có trên Ailoot · đầu vào &amp; phương thức</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>text</code>, <code>image</code>, <code>audio</code></dd></div><div><dt>Đầu ra</dt><dd><code>video</code></dd></div><div><dt>Định dạng đầu ra</dt><dd>byte MP4 gốc; không chuẩn hóa hoặc chuyển mã</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Trường</th><th>Loại</th><th>Yêu cầu</th><th>Giá trị &amp; giới hạn</th><th>Mặc định</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>bytedance/seedance-2.0-mini</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>integer</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15</div><div>Tối thiểu: 1</div><div>Tối đa: 600</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>480p, 720p</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>1:1, 3:4, 9:16, 4:3, 16:9, 21:9, 9:21</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>boolean</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>false, true</div><div>Điều kiện: Bỏ generate_audio sẽ chọn giá có âm thanh; false chọn giá không có âm thanh. Kiểm tra has_audio trong kết quả để biết có bản âm thanh được trả về hay không.</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>array</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Số mục tối thiểu: 1</div><div>Số mục tối đa: 2</div><div>Nội dung đầu vào: Mảng đối tượng khung hình. Mỗi đối tượng có type=image_url, image_url chứa url và frame_type=first_frame hoặc last_frame. Mỗi vai trò xuất hiện tối đa một lần. Dùng các URL HTTPS công khai.</div><div>Khóa chính xác: type, image_url, frame_type</div><div>Điều kiện: Các khóa này áp dụng cho từng đối tượng khung hình. Bỏ frame_images đối với yêu cầu chỉ có văn bản.</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>array</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Nội dung đầu vào: Mảng đối tượng tham chiếu ảnh hoặc âm thanh. Đặt type thành image_url hoặc audio_url và cung cấp đối tượng URL tương ứng chứa url. Vẫn chưa thể định giá tham chiếu video.</div><div>Điều kiện: Bỏ frame_images để dùng chế độ tham chiếu. Dùng các URL HTTPS công khai.</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">size</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>480x480, 480x640, 480x854, 640x480, 854x480, 1120x480, 720x720, 720x960, 720x1280, 720x1680, 960x720, 1280x720, 1680x720</div><div>Mẫu: ^[1-9][0-9]*x[1-9][0-9]*$</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>integer</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Tối thiểu: -9.223.372.036.854.775.808</div><div>Tối đa: 9.223.372.036.854.775.807</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Mẫu: ^https://</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>object</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Tổ hợp tư liệu đầu vào</summary><p class=\"note-s\"><b>Văn bản thành video</b> · Câu lệnh dạng văn bản. · Bắt buộc: model, prompt, duration</p><p class=\"note-s\"><code>Cung cấp câu lệnh văn bản và thời lượng nguyên giây được hỗ trợ. Dùng kích thước chính xác được liệt kê, hoặc độ phân giải và tỷ lệ khung hình tương ứng với kích thước được liệt kê.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Loại: string · bytedance/seedance-2.0-mini</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Loại: string · Số byte UTF-8 tối đa: 10.000 · Bắt buộc có ký tự không phải khoảng trắng: Có</p><p class=\"note-s\"><b>Ảnh thành video</b> · Câu lệnh dạng văn bản và ảnh khung hình. · Bắt buộc: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images là mảng đối tượng có type=image_url, image_url chứa url và frame_type. Dùng URL ảnh HTTPS công khai; first_frame và last_frame có thể xuất hiện tối đa một lần cho mỗi vai trò. Dùng kích thước đầu ra được liệt kê hoặc kích thước tương thích. Không thêm tham chiếu video.</code></p><p class=\"note-s\">Khóa chính xác: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Loại: string · bytedance/seedance-2.0-mini</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Loại: string · Số byte UTF-8 tối đa: 10.000 · Bắt buộc có ký tự không phải khoảng trắng: Có</p><p class=\"note-s\"><b>Reference to video</b> · Câu lệnh dạng văn bản và các tham chiếu ảnh hoặc âm thanh. · Bắt buộc: model, prompt, duration, input_references</p><p class=\"note-s\"><code>input_references là một mảng. Mỗi đối tượng có type=image_url hoặc type=audio_url và đối tượng URL tương ứng chứa url. Dùng liên kết HTTPS công khai. Bỏ frame_images để chọn chế độ tham chiếu. Không thể định giá tham chiếu video.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Loại: string · bytedance/seedance-2.0-mini</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Loại: string · Số byte UTF-8 tối đa: 10.000 · Bắt buộc có ký tự không phải khoảng trắng: Có</p></details><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>content_type</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>application/json</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>required</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_types</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>text, image, audio</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>additional_properties</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>false</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>optional_controls</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, size, seed, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Vòng đời: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div class=\"card-result-process\" data-billing-basis><h5>Cách tính phí cuối cùng</h5><p class=\"note-s\">Các đơn giá hiển thị dùng để ước tính chi phí trước khi tạo. Khoản phí cuối cùng được tính dựa trên chi phí ghi nhận cho lượt tạo gốc. Thời lượng đầu ra đo được và số lượng dự kiến không phải là số lượng cuối cùng dùng để tính phí.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí ước tính để so sánh</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Số lượng dự báo</th><th>Đơn vị tính phí</th><th>Điều kiện tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ · Ước tính chỉ để so sánh</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá token video</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi 1K token video</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>Không có điều kiện bổ sung nào được khai báo trong khóa định giá này.</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Giá token video · Ước tính chỉ để so sánh</span> <b>$0.007</b> <span class=\"price-unit\">mỗi 1K token video</span></div><p class=\"note-s\">Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.</p></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá token video</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi 1K token video</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>đầu vào: with_video_input</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>reference · Giá token video · Ước tính chỉ để so sánh</span> <b>$0.0042</b> <span class=\"price-unit\">mỗi 1K token video</span></div><p class=\"note-s\">Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.</p></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá token video</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi 1K token video</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>âm thanh: without_audio</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Giá token video · Ước tính chỉ để so sánh</span> <b>$0.007</b> <span class=\"price-unit\">mỗi 1K token video</span></div><p class=\"note-s\">Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.</p></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Chi phí tạo ước tính</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Số lượng dự báo\"><span class=\"card-cell-label\">Số lượng dự báo</span>ước tính cho một lần tạo</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Chi phí tạo ước tính · Ước tính chỉ để so sánh</span> <b>$0.1512</b> <span class=\"price-unit\">ước tính trước khi tạo</span></div><p class=\"note-s\">Ước tính này không phải là khoản phí bổ sung hay mức giá cố định cho lượt tạo đã hoàn tất.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. <a href=\"/docs/vi/billing/reserve/\">Cách hoạt động của cơ chế tạm giữ và quyết toán →</a></p><div data-declared-reference-pricing><h4>Chi tiết giá cước tham chiếu</h4><p class=\"note-s\">Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Tham chiếu giá theo cấu hình video</summary><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Điều kiện tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá token video</th><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>Không có điều kiện bổ sung nào được khai báo trong khóa định giá này.</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Giá token video</span> <b>$0.007</b> <span class=\"price-unit\">mỗi 1K token video</span></div><p class=\"note-s\">Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.</p></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá token video</th><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>âm thanh: without_audio</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra · Giá token video</span> <b>$0.007</b> <span class=\"price-unit\">mỗi 1K token video</span></div><p class=\"note-s\">Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.</p></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá token video</th><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>đầu vào: with_video_input</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>reference · Giá token video</span> <b>$0.0042</b> <span class=\"price-unit\">mỗi 1K token video</span></div><p class=\"note-s\">Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Ví dụ yêu cầu</h3><h4>Ailoot Ultra · Video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-1137-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1137-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · tạo video</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1137-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1137-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;model&quot;:&quot;bytedance/seedance-2.0-mini&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;duration&quot;:4,&quot;resolution&quot;:&quot;480p&quot;,&quot;size&quot;:&quot;480x480&quot;,&quot;generate_audio&quot;:false}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Nhận và lưu kết quả</h3><h4>Ailoot Ultra · Video</h4><p class=\"note-s\">các URL nội dung đã ký thuộc quyền sở hữu</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>Kiểm tra trạng thái tác vụ</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-1138-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1138-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET trạng thái thao tác gốc</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1138-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1138-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Lượt đọc nội dung khác</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-1139-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1139-panel-0\" aria-selected=\"true\" tabindex=\"0\">Lưu mọi đầu ra đã hoàn tất thuộc về bạn</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1139-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1139-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Lưu tất cả kết quả đã hoàn tất</h5><p class=\"note-s\">Lưu mọi video đã hoàn tất hoặc tệp trả về; truy xuất từng URL tài nguyên thực tế được trả về.</p><p class=\"note-s\">Giữ lại mọi đầu ra thực tế thuộc quyền sở hữu và siêu dữ liệu đo lường được trả về.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Nếu cần kiểm tra phản hồi gốc</h5><p class=\"note-s\">503 result_pending_check + id ban đầu + X-Should-Retry:false; tuyệt đối không gửi lại yêu cầu ban đầu</p></div><details class=\"card-about\" data-output-fields><summary>Trường phản hồi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Trường</th><th>Loại</th><th>Ý nghĩa</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>integer</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Vị trí bắt đầu từ không của video này trong danh sách outputs.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>URL tải xuống HTTPS đã ký cho video đã hoàn tất này.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Giá trị băm SHA-256 của các byte video gốc; null nếu không có dữ liệu.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>integer | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Dung lượng tệp video gốc tính bằng byte; null nếu không có dữ liệu.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>integer | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Thời lượng video đo được tính bằng mili giây; null nếu không có dữ liệu.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>integer | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Chiều rộng video tính bằng pixel; null nếu không có dữ liệu.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>integer | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Chiều cao video tính bằng pixel; null nếu không có dữ liệu.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Mã định danh codec video; null nếu chưa được ghi nhận.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>boolean | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Video có chứa bản âm thanh hay không; null nếu chưa được đo.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string | null</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Mã định danh codec âm thanh; null khi chưa ghi nhận mã định danh.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Lỗi và bước tiếp theo</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Phản hồi</th><th>Điều kiện</th><th>Bước tiếp theo</th></tr></thead><tbody><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Không thể truy cập video hoặc không tìm thấy ID video này.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Kiểm tra quyền truy cập video. Với video hiện có, dùng ID công khai ban đầu và cùng khóa API.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Khóa API không khớp với tài khoản đã xác thực.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Kiểm tra khóa API và quyền truy cập tài khoản trước khi gửi.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Không thể đọc yêu cầu hoặc chỉ số tải xuống không hợp lệ.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Sửa nội dung yêu cầu. Để tải xuống, chọn một chỉ số đầu ra được tác vụ ban đầu trả về.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Không thể định giá cấu hình video đã chọn.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Chọn cấu hình video được hỗ trợ và điền đầy đủ các tùy chọn bắt buộc trước khi gửi yêu cầu đã sửa.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Đầu vào video hoặc tác vụ tiếp nối ban đầu không hợp lệ.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Dùng đầu vào HTTPS hợp lệ. Để tiếp nối, dùng ID video công khai ban đầu đã hoàn tất của bạn với cùng khóa API.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>402 · <code>billing_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Số dư khả dụng hoặc các giới hạn không cho phép giữ trước số tiền.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Kiểm tra số dư khả dụng và các giới hạn trước khi gửi yêu cầu mới.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>503 · <code>server_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Tạm thời không thể xác minh video, lưu trữ hoặc truy cập dịch vụ.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Đợi dịch vụ khả dụng. Nếu đã có ID video, kiểm tra tác vụ ban đầu đó thay vì tạo thêm video.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Kết quả video và khoản phí ban đầu cần được kiểm tra.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại ID video được trả về và kiểm tra tác vụ đó. Không gửi yêu cầu tạo thay thế trong khi tác vụ đang được kiểm tra.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Tạm thời không thể tải xuống video hiện có.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Kiểm tra lại cùng tác vụ video sau và tải xuống đầu ra hiện có. Một lần tạo mới sẽ tạo thao tác riêng.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Nội dung video chưa được công bố.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Kiểm tra trạng thái tác vụ ban đầu. Tải xuống sau khi trạng thái là completed; nếu là failed, làm theo thông báo kiểm tra khoản phí.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Bí danh</h3><h4>Bí danh mô hình</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=bytedance%2Fseedance-2.0-mini&amp;route=Ultra&amp;caller=bytedance%2Fseedance-2.0-mini&amp;fmt=videos\"><code>bytedance/seedance-2.0-mini</code></a></span></p><h4>Bí danh đường dẫn phương thức</h4><p class=\"note-s\">Dùng các đường dẫn phương thức hiển thị ở trên.</p><h4>ID gọi liên quan</h4><p class=\"note-s\"><a href=\"#m=bytedance%2Fseedance-2.0-mini&amp;route=Ultra&amp;caller=bytedance%2Fseedance-2.0-mini&amp;fmt=videos\"><code>bytedance/seedance-2.0-mini</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "bytedance/seedance-2.0-mini",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|bytedance%2Fseedance-2.0-mini",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Các đơn giá hiển thị dùng để ước tính chi phí trước khi tạo. Khoản phí cuối cùng được tính dựa trên chi phí ghi nhận cho lượt tạo gốc. Thời lượng đầu ra đo được và số lượng dự kiến không phải là số lượng cuối cùng dùng để tính phí.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Giữ lại mọi đầu ra thực tế thuộc quyền sở hữu và siêu dữ liệu đo lường được trả về.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Không thể truy cập video hoặc không tìm thấy ID video này.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra quyền truy cập video. Với video hiện có, dùng ID công khai ban đầu và cùng khóa API.",
                "type": "not_found_error"
              },
              {
                "condition": "Khóa API không khớp với tài khoản đã xác thực.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra khóa API và quyền truy cập tài khoản trước khi gửi.",
                "type": "authentication_error"
              },
              {
                "condition": "Không thể đọc yêu cầu hoặc chỉ số tải xuống không hợp lệ.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Sửa nội dung yêu cầu. Để tải xuống, chọn một chỉ số đầu ra được tác vụ ban đầu trả về.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Không thể định giá cấu hình video đã chọn.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Chọn cấu hình video được hỗ trợ và điền đầy đủ các tùy chọn bắt buộc trước khi gửi yêu cầu đã sửa.",
                "type": "price_unavailable"
              },
              {
                "condition": "Đầu vào video hoặc tác vụ tiếp nối ban đầu không hợp lệ.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Dùng đầu vào HTTPS hợp lệ. Để tiếp nối, dùng ID video công khai ban đầu đã hoàn tất của bạn với cùng khóa API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Số dư khả dụng hoặc các giới hạn không cho phép giữ trước số tiền.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra số dư khả dụng và các giới hạn trước khi gửi yêu cầu mới.",
                "type": "billing_error"
              },
              {
                "condition": "Tạm thời không thể xác minh video, lưu trữ hoặc truy cập dịch vụ.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Đợi dịch vụ khả dụng. Nếu đã có ID video, kiểm tra tác vụ ban đầu đó thay vì tạo thêm video.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Kết quả video và khoản phí ban đầu cần được kiểm tra.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Giữ lại ID video được trả về và kiểm tra tác vụ đó. Không gửi yêu cầu tạo thay thế trong khi tác vụ đang được kiểm tra.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Tạm thời không thể tải xuống video hiện có.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Kiểm tra lại cùng tác vụ video sau và tải xuống đầu ra hiện có. Một lần tạo mới sẽ tạo thao tác riêng.",
                "type": "server_error"
              },
              {
                "condition": "Nội dung video chưa được công bố.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra trạng thái tác vụ ban đầu. Tải xuống sau khi trạng thái là completed; nếu là failed, làm theo thông báo kiểm tra khoản phí.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + id ban đầu + X-Should-Retry:false; tuyệt đối không gửi lại yêu cầu ban đầu"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Cung cấp câu lệnh văn bản và thời lượng nguyên giây được hỗ trợ. Dùng kích thước chính xác được liệt kê, hoặc độ phân giải và tỷ lệ khung hình tương ứng với kích thước được liệt kê.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Câu lệnh dạng văn bản."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images là mảng đối tượng có type=image_url, image_url chứa url và frame_type. Dùng URL ảnh HTTPS công khai; first_frame và last_frame có thể xuất hiện tối đa một lần cho mỗi vai trò. Dùng kích thước đầu ra được liệt kê hoặc kích thước tương thích. Không thêm tham chiếu video.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Câu lệnh dạng văn bản và ảnh khung hình."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references là một mảng. Mỗi đối tượng có type=image_url hoặc type=audio_url và đối tượng URL tương ứng chứa url. Dùng liên kết HTTPS công khai. Bỏ frame_images để chọn chế độ tham chiếu. Không thể định giá tham chiếu video.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Câu lệnh dạng văn bản và các tham chiếu ảnh hoặc âm thanh."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Vị trí bắt đầu từ không của video này trong danh sách outputs.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL tải xuống HTTPS đã ký cho video đã hoàn tất này.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Giá trị băm SHA-256 của các byte video gốc; null nếu không có dữ liệu.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Dung lượng tệp video gốc tính bằng byte; null nếu không có dữ liệu.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Thời lượng video đo được tính bằng mili giây; null nếu không có dữ liệu.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Chiều rộng video tính bằng pixel; null nếu không có dữ liệu.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Chiều cao video tính bằng pixel; null nếu không có dữ liệu.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Mã định danh codec video; null nếu chưa được ghi nhận.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Video có chứa bản âm thanh hay không; null nếu chưa được đo.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Mã định danh codec âm thanh; null khi chưa ghi nhận mã định danh.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "các URL nội dung đã ký thuộc quyền sở hữu",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-2.0-mini"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "4:3",
                  "16:9",
                  "21:9",
                  "9:21"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Bỏ generate_audio sẽ chọn giá có âm thanh; false chọn giá không có âm thanh. Kiểm tra has_audio trong kết quả để biết có bản âm thanh được trả về hay không.",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Các khóa này áp dụng cho từng đối tượng khung hình. Bỏ frame_images đối với yêu cầu chỉ có văn bản.",
                "content": "Mảng đối tượng khung hình. Mỗi đối tượng có type=image_url, image_url chứa url và frame_type=first_frame hoặc last_frame. Mỗi vai trò xuất hiện tối đa một lần. Dùng các URL HTTPS công khai.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Bỏ frame_images để dùng chế độ tham chiếu. Dùng các URL HTTPS công khai.",
                "content": "Mảng đối tượng tham chiếu ảnh hoặc âm thanh. Đặt type thành image_url hoặc audio_url và cung cấp đối tượng URL tương ứng chứa url. Vẫn chưa thể định giá tham chiếu video.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "640x480",
                  "854x480",
                  "1120x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "960x720",
                  "1280x720",
                  "1680x720"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "đầu vào: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Ước tính này không phải là khoản phí bổ sung hay mức giá cố định cho lượt tạo đã hoàn tất.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Chi phí tạo ước tính",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"model\":\"bytedance/seedance-2.0-mini\",\"prompt\":\"A serene mountain landscape at sunset\",\"duration\":4,\"resolution\":\"480p\",\"size\":\"480x480\",\"generate_audio\":false}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0042000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_with_video_input",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000042",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "reference",
            "unit": "video_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.1512",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1512",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "bytedance/seedance-2.0-mini",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "8b22b2a1f64837cfc5417e3bc6467a68db6fca516f8108a29140cd3d70d7e9f0",
    "input_html_sha256": "7c9d0782338b595ec339117e952d2496d9506a316eaded7444b31a78f1c50383",
    "private_audit_sha256": "5a0e51f50707dd1bd0fbbd743da69f0bd1213af0f9b5153c2898cfcf41029b5a",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/bytedance-seedance-2-0-mini/",
    "description": "Seedance 2.0 Mini tạo video ngắn với âm thanh được tạo tùy chọn từ văn bản, hình ảnh, video và tham chiếu âm thanh. Mô hình hỗ trợ tạo cảnh, chỉnh sửa video có mục tiêu và tiếp nối, với cấu hình đầu ra 480p hoặc 720p được mô tả.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/bytedance-seedance-2-0-mini/index.md",
    "title": "ByteDance: Seedance 2.0 Mini — Ailoot",
    "url": "https://ailoot.ai/models/vi/bytedance-seedance-2-0-mini/"
  },
  "rawModel": {
    "about": "Seedance 2.0 Mini là một mô hình có tên riêng trong họ âm thanh–video Seedance 2.0 của ByteDance. Nhà sản xuất mô tả chuyển văn bản thành video, chuyển ảnh thành video với khung đầu hoặc khung đầu và cuối, tạo theo tham chiếu đa phương thức, chỉnh sửa và kéo dài video. Âm thanh có thể được tạo cùng hình ảnh. Chọn chế độ theo tư liệu đã có: bản mô tả viết, hình mở đầu cố định, hai khung biên hoặc đoạn video cần chỉnh sửa hay tiếp nối.\n\nMini có cấu hình đầu ra riêng. Nhà sản xuất liệt kê video 480p và 720p với màu 8-bit, 24 khung hình mỗi giây và đầu ra MP4. Các tỷ lệ khung hình được hỗ trợ là 21:9, 16:9, 4:3, 1:1, 3:4 và 9:16; thời lượng tạo được mô tả là 4–15 giây. Điều khiển thời lượng của nhà sản xuất còn cho phép tự động chọn trong phạm vi đó. Các lựa chọn 1080p và 4K của mô hình Seedance 2.0 đầy đủ là riêng biệt; chúng không phải thiết lập Mini. Bảng năng lực của họ mô hình liệt kê việc trả lại khung hình cuối được tạo, còn chế độ Draft không được hỗ trợ.\n\nTham chiếu omni tạo cảnh mới bằng thông tin đã chọn từ tư liệu cung cấp. Hình ảnh có thể xác định diện mạo chủ thể, bố cục hoặc cách thể hiện hình ảnh. Video có thể xác lập hành động, chuyển động máy quay hoặc hiệu ứng; tham chiếu âm thanh có thể xác lập âm sắc giọng, giai điệu hoặc lời nói. Nói rõ cần lấy gì từ mỗi tham chiếu thay vì yêu cầu sao chép mọi thuộc tính. Ví dụ, dùng ảnh sản phẩm cho hình dạng và màu sắc, đoạn chuyển động máy quay ngắn cho cách tiếp cận và tham chiếu âm thanh cho không khí.\n\nQuy trình của họ mô hình cho phép đến chín ảnh tham chiếu, ba đoạn video và ba đoạn âm thanh. Mỗi video tham chiếu dài 2–15 giây, tổng không quá 15 giây; tham chiếu âm thanh dùng cùng giới hạn cho từng đoạn và tổng thời lượng. Chỉ âm thanh và văn bản cộng âm thanh không có tham chiếu hình ảnh không phải các tổ hợp được hỗ trợ. Tạo chỉ từ văn bản là chế độ được hỗ trợ riêng. Với một chuỗi, cung cấp tài sản theo thứ tự dự kiến và tham chiếu nhất quán bằng Image 1, Video 1 hoặc Audio 1, theo thứ tự trong từng loại phương tiện. Không thay tham chiếu có số trong lời nhắc viết bằng mã định danh tài sản.\n\nẢnh khung đầu xác định phần mở đầu của cú máy dựa trên ảnh. Chế độ khung đầu và cuối xác định cả hai biên. Nếu những ảnh biên chính xác đó quan trọng, chọn chế độ chuyên biệt thay vì mô tả tham chiếu là mở đầu và kết thúc trong lời nhắc omni. Cách sau là hiệu ứng được chỉ dẫn bằng lời nhắc, không tương đương lựa chọn khung biên nghiêm ngặt. Chuẩn bị ảnh cho bố cục đầu ra và nêu hành động nối tình huống bắt đầu với kết thúc.\n\nChỉnh sửa video thay đổi đoạn có sẵn thay vì chỉ dùng nó làm cảm hứng. Xác định video cần sửa, vật hoặc vùng cần đổi, thời điểm xuất hiện và vị trí, cùng chi tiết cần giữ. Một bản yêu cầu hữu ích là “Trong Video 1, thay chiếc cốc bằng vật đựng trong Image 1; giữ chuyển động tay, bố cục khung hình, ánh sáng và cách sắp xếp trên bàn.” Với việc xóa, nêu vật không mong muốn và các yếu tố xung quanh phải giữ lại. Nhà sản xuất khuyên tham chiếu trực tiếp video đích khi chỉnh sửa hoặc kéo dài; gọi nó là tham chiếu có thể lại truyền đạt yêu cầu tạo cảnh mới.\n\nKéo dài video bổ sung sự kiện trước hoặc sau đoạn có sẵn. Mô tả chiều tiếp nối và điều xảy ra tiếp theo hoặc trước đó. Quy trình được mô tả còn có thể nối hai hoặc ba đoạn bằng chuyển cảnh được tạo; cả ba video đầu vào vẫn phải nằm trong tổng tham chiếu 15 giây. Hướng dẫn phân biệt tiếp nối chủ yếu gồm phần cảnh ở biên của đoạn gốc với yêu cầu giữ rõ ràng nội dung gốc. Nêu thành phần kết quả mong muốn: chỉ phần tiếp nối, hoặc cảnh chứa đoạn được cung cấp cùng hành động mới.\n\nĐể chỉ đạo rõ ràng, tách mô tả cảnh ổn định khỏi chuỗi sự kiện. Xác định mỗi chủ thể bằng hai hoặc ba đặc điểm hình ảnh phân biệt và nhãn nhất quán. Sau đó mô tả hành động, bối cảnh, ánh sáng, chuyển động máy quay, phong cách hình ảnh và ràng buộc. Trong hội thoại, gắn từng câu với người nói và hành động liên quan. Dùng nhãn cú máy có thứ tự thay vì coi mốc thời gian chính xác là điều khiển đáng tin: nhà sản xuất lưu ý thời điểm chính xác có thể không ổn định. Bản mô tả sản phẩm được dàn dựng có thể là: “Image 1 xác định Product A. Shot 1: từ từ tiến tới Product A trên quầy. Shot 2: một bàn tay xoay sản phẩm về phía ánh sáng. Shot 3: dừng ở nhãn phía trước. Âm nền căn phòng nhẹ; giữ chữ in.”\n\nChuẩn bị tham chiếu theo quy tắc đầu vào của họ mô hình được mô tả. Các định dạng ảnh được hỗ trợ gồm JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC và HEIF; mỗi ảnh nhỏ hơn 30 MB. Hướng dẫn quy định chiều rộng và cao của ảnh đều lớn hơn 300 và nhỏ hơn 6,000 pixel, tỷ lệ khung hình lớn hơn 0.4 và nhỏ hơn 2.5. Video tham chiếu dùng MP4 hoặc MOV với video H.264 hoặc H.265 và âm thanh AAC hoặc MP3, mỗi tệp tối đa 200 MB và có 24–60 khung hình mỗi giây. Chiều rộng và cao là 300–6,000 pixel, tỷ lệ 0.4–2.5 và tổng số pixel 407,696–8,295,044. Âm thanh tham chiếu dùng WAV hoặc MP3, tối đa 15 MB mỗi tệp. Đây là đặc tả chuẩn bị đầu vào của nhà sản xuất, tách biệt với điều khiển tải lên của ứng dụng cụ thể.\n\nQuy trình chân dung của nhà sản xuất đòi hỏi chuẩn bị riêng cho ảnh hoặc video chứa khuôn mặt người thật: tải tham chiếu trực tiếp không phải quy trình tiêu chuẩn được hỗ trợ. Tài liệu mô tả đầu ra mô hình đáng tin, nhân vật số cài sẵn và quy trình tài sản người thật được cho phép là các giải pháp riêng. Khớp giọng, phát âm và âm thanh tại biên đoạn video cũng cần kiểm tra. Hướng dẫn lời nhắc khuyên mô tả đặc tính giọng mong muốn và giữ phong cách hội thoại gần tham chiếu âm thanh. Xem xét sản phẩm cuối về tính nhất quán chủ thể, lời nói chính xác, thời điểm hành động, chuyển khung và âm thanh kết thúc; tinh chỉnh yếu tố cụ thể khác với bản mô tả.",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "available": null,
    "canonical_model": "bytedance/seedance-2.0-mini",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image",
        "video",
        "audio"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.1512",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1512",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "0b52dda4bb8d8eb2776e0f56",
        "label": "Tham chiếu giá theo cấu hình video",
        "profiles": [
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "Không có điều kiện bổ sung nào được khai báo trong khóa định giá này."
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.007",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "âm thanh: without_audio"
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.007",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "đầu vào: with_video_input"
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.0042",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "bytedance/seedance-2.0-mini",
    "input": [
      "text",
      "image",
      "audio"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Các đơn giá hiển thị dùng để ước tính chi phí trước khi tạo. Khoản phí cuối cùng được tính dựa trên chi phí ghi nhận cho lượt tạo gốc. Thời lượng đầu ra đo được và số lượng dự kiến không phải là số lượng cuối cùng dùng để tính phí.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Giữ lại mọi đầu ra thực tế thuộc quyền sở hữu và siêu dữ liệu đo lường được trả về.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Không thể truy cập video hoặc không tìm thấy ID video này.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra quyền truy cập video. Với video hiện có, dùng ID công khai ban đầu và cùng khóa API.",
                "type": "not_found_error"
              },
              {
                "condition": "Khóa API không khớp với tài khoản đã xác thực.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra khóa API và quyền truy cập tài khoản trước khi gửi.",
                "type": "authentication_error"
              },
              {
                "condition": "Không thể đọc yêu cầu hoặc chỉ số tải xuống không hợp lệ.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Sửa nội dung yêu cầu. Để tải xuống, chọn một chỉ số đầu ra được tác vụ ban đầu trả về.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Không thể định giá cấu hình video đã chọn.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Chọn cấu hình video được hỗ trợ và điền đầy đủ các tùy chọn bắt buộc trước khi gửi yêu cầu đã sửa.",
                "type": "price_unavailable"
              },
              {
                "condition": "Đầu vào video hoặc tác vụ tiếp nối ban đầu không hợp lệ.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Dùng đầu vào HTTPS hợp lệ. Để tiếp nối, dùng ID video công khai ban đầu đã hoàn tất của bạn với cùng khóa API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Số dư khả dụng hoặc các giới hạn không cho phép giữ trước số tiền.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra số dư khả dụng và các giới hạn trước khi gửi yêu cầu mới.",
                "type": "billing_error"
              },
              {
                "condition": "Tạm thời không thể xác minh video, lưu trữ hoặc truy cập dịch vụ.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Đợi dịch vụ khả dụng. Nếu đã có ID video, kiểm tra tác vụ ban đầu đó thay vì tạo thêm video.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Kết quả video và khoản phí ban đầu cần được kiểm tra.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Giữ lại ID video được trả về và kiểm tra tác vụ đó. Không gửi yêu cầu tạo thay thế trong khi tác vụ đang được kiểm tra.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Tạm thời không thể tải xuống video hiện có.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Kiểm tra lại cùng tác vụ video sau và tải xuống đầu ra hiện có. Một lần tạo mới sẽ tạo thao tác riêng.",
                "type": "server_error"
              },
              {
                "condition": "Nội dung video chưa được công bố.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Kiểm tra trạng thái tác vụ ban đầu. Tải xuống sau khi trạng thái là completed; nếu là failed, làm theo thông báo kiểm tra khoản phí.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + id ban đầu + X-Should-Retry:false; tuyệt đối không gửi lại yêu cầu ban đầu"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Cung cấp câu lệnh văn bản và thời lượng nguyên giây được hỗ trợ. Dùng kích thước chính xác được liệt kê, hoặc độ phân giải và tỷ lệ khung hình tương ứng với kích thước được liệt kê.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Câu lệnh dạng văn bản."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images là mảng đối tượng có type=image_url, image_url chứa url và frame_type. Dùng URL ảnh HTTPS công khai; first_frame và last_frame có thể xuất hiện tối đa một lần cho mỗi vai trò. Dùng kích thước đầu ra được liệt kê hoặc kích thước tương thích. Không thêm tham chiếu video.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Câu lệnh dạng văn bản và ảnh khung hình."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references là một mảng. Mỗi đối tượng có type=image_url hoặc type=audio_url và đối tượng URL tương ứng chứa url. Dùng liên kết HTTPS công khai. Bỏ frame_images để chọn chế độ tham chiếu. Không thể định giá tham chiếu video.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Câu lệnh dạng văn bản và các tham chiếu ảnh hoặc âm thanh."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Vị trí bắt đầu từ không của video này trong danh sách outputs.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL tải xuống HTTPS đã ký cho video đã hoàn tất này.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Giá trị băm SHA-256 của các byte video gốc; null nếu không có dữ liệu.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Dung lượng tệp video gốc tính bằng byte; null nếu không có dữ liệu.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Thời lượng video đo được tính bằng mili giây; null nếu không có dữ liệu.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Chiều rộng video tính bằng pixel; null nếu không có dữ liệu.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Chiều cao video tính bằng pixel; null nếu không có dữ liệu.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Mã định danh codec video; null nếu chưa được ghi nhận.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Video có chứa bản âm thanh hay không; null nếu chưa được đo.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Mã định danh codec âm thanh; null khi chưa ghi nhận mã định danh.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "các URL nội dung đã ký thuộc quyền sở hữu",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-2.0-mini"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "4:3",
                  "16:9",
                  "21:9",
                  "9:21"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Bỏ generate_audio sẽ chọn giá có âm thanh; false chọn giá không có âm thanh. Kiểm tra has_audio trong kết quả để biết có bản âm thanh được trả về hay không.",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Các khóa này áp dụng cho từng đối tượng khung hình. Bỏ frame_images đối với yêu cầu chỉ có văn bản.",
                "content": "Mảng đối tượng khung hình. Mỗi đối tượng có type=image_url, image_url chứa url và frame_type=first_frame hoặc last_frame. Mỗi vai trò xuất hiện tối đa một lần. Dùng các URL HTTPS công khai.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Bỏ frame_images để dùng chế độ tham chiếu. Dùng các URL HTTPS công khai.",
                "content": "Mảng đối tượng tham chiếu ảnh hoặc âm thanh. Đặt type thành image_url hoặc audio_url và cung cấp đối tượng URL tương ứng chứa url. Vẫn chưa thể định giá tham chiếu video.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "640x480",
                  "854x480",
                  "1120x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "960x720",
                  "1280x720",
                  "1680x720"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Đơn giá token video là giá tham khảo chính. Các mức giá ước tính theo giây được nêu nổi bật là giá tham khảo riêng, không phải khoản phí bổ sung.",
            "dimensions": {
              "conditions": "đầu vào: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Giá token video",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Ước tính này không phải là khoản phí bổ sung hay mức giá cố định cho lượt tạo đã hoàn tất.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Chi phí tạo ước tính",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"model\":\"bytedance/seedance-2.0-mini\",\"prompt\":\"A serene mountain landscape at sunset\",\"duration\":4,\"resolution\":\"480p\",\"size\":\"480x480\",\"generate_audio\":false}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0042000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_with_video_input",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000042",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "reference",
            "unit": "video_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.1512",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1512",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "bytedance/seedance-2.0-mini",
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 2.0 Mini",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.1512,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.1512,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
          "image_audio_ref_independent_charge": "not listed separately in this tariff",
          "input_includes_video": false,
          "maker_model_id": "dreamina-seedance-2-0-mini-260615",
          "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
          "minimum_tokens_when_video_input": false,
          "offline_not_supported": true,
          "quoted_unit": "1000000_video_tokens",
          "resolution": "480p/720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000070",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
              "image_audio_ref_independent_charge": "not listed separately in this tariff",
              "input_includes_video": false,
              "maker_model_id": "dreamina-seedance-2-0-mini-260615",
              "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
              "minimum_tokens_when_video_input": false,
              "offline_not_supported": true,
              "quoted_unit": "1000000_video_tokens",
              "resolution": "480p/720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
          "image_audio_ref_independent_charge": "not listed separately in this tariff",
          "input_includes_video": true,
          "maker_model_id": "dreamina-seedance-2-0-mini-260615",
          "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
          "minimum_tokens_when_video_input": true,
          "offline_not_supported": true,
          "quoted_unit": "1000000_video_tokens",
          "resolution": "480p/720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000042",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
              "image_audio_ref_independent_charge": "not listed separately in this tariff",
              "input_includes_video": true,
              "maker_model_id": "dreamina-seedance-2-0-mini-260615",
              "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
              "minimum_tokens_when_video_input": true,
              "offline_not_supported": true,
              "quoted_unit": "1000000_video_tokens",
              "resolution": "480p/720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.0070000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video token",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000070",
            "key": "video_tokens",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000070",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0070000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000070",
            "key": "video_tokens_without_audio",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000070",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0042000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video_reference_present Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000042",
            "key": "video_tokens_with_video_input",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000042",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          }
        ]
      }
    ],
    "public_id": "bytedance/seedance-2.0-mini",
    "short": "Seedance 2.0 Mini tạo video ngắn với âm thanh được tạo tùy chọn từ văn bản, hình ảnh, video và tham chiếu âm thanh. Mô hình hỗ trợ tạo cảnh, chỉnh sửa video có mục tiêu và tiếp nối, với cấu hình đầu ra 480p hoặc 720p được mô tả."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Seedance 2.0 Mini tạo video ngắn với âm thanh được tạo tùy chọn từ văn bản, hình ảnh, video và tham chiếu âm thanh. Mô hình hỗ trợ tạo cảnh, chỉnh sửa video có mục tiêu và tiếp nối, với cấu hình đầu ra 480p hoặc 720p được mô tả.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_exact_canonical_sha256": "77f83924645b855d8ae3ef9669c289a2eb3c197e62b4184b2afada0efba73372",
    "raw_model_js_projection_sha256": "d21b052b7633ac955d0bafbdc840e5d12ea73bcb0e74f0d503c481608e5282fd",
    "raw_model_json_sha256": "77f83924645b855d8ae3ef9669c289a2eb3c197e62b4184b2afada0efba73372",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "6a33ac4bbd825228beb6c8a95637bb9aa417d6985a0cf102fa1bc4296182ce33"
}
