{
  "aboutHtml": "<p>Seedance 1.5 Pro ialah model ByteDance Seed untuk penjanaan bersama audio-video secara natif. Ia memodelkan tindakan visual, pertuturan dan ritma bersama-sama, membolehkan adegan merangkumi persembahan watak, dialog terselaras dan landskap bunyi yang direka. Perbezaan utama berbanding taklimat video visual sahaja ialah bunyi menjadi sebahagian daripada penerangan adegan: siapa bercakap, cara baris disampaikan dan apa yang didengar khalayak di sekitar tindakan.</p><h4>Penjanaan bersama audiovisual</h4><p>Julat bunyi yang didokumentasikan merangkumi bunyi persekitaran, kesan tindakan, bunyi tersintesis, alat muzik, muzik latar dan vokal. Model bertujuan menghubungkan bunyi dengan kejadian di skrin: objek menghentam meja, pintu terbuka atau watak bercakap. Gunakan ini untuk detik dramatik ringkas, iklan produk bersuara atau adegan yang suasananya bergantung pada persembahan dan bunyi.</p><p>Mulakan prompt dengan subjek dan pergerakan, kemudian tambah persekitaran, kamera, gaya visual dan bunyi. Adegan ringkas boleh berbunyi: “Seorang cef mengangkat penutup periuk kecil, tersenyum dan berkata, ‘Sudah siap.’ Kepulan wap lembut keluar, diikuti bunyi denting perlahan penutup yang diletakkan di atas kaunter.” Ini memberikan sebab yang kelihatan bagi baris pertuturan dan kesan bunyi.</p><h4>Dialog dan suara latar</h4><p>Model menyokong monolog dan perbualan yang melibatkan beberapa penutur, dengan gerakan bibir dipadankan kepada watak. Panduannya mendokumentasikan Mandarin, dialek Cina termasuk Kantonis, Shaanxi dan Sichuan, serta pertuturan bahasa Inggeris, Jepun, Korea, Sepanyol dan Indonesia. Bahasa prompt yang didokumentasikan ialah bahasa Cina dan Inggeris; bahasa prompt dan bahasa yang diminta untuk baris pertuturan ialah pilihan berasingan.</p><p>Kenal pasti setiap penutur melalui ciri visual yang konsisten dan tulis dialog dalam tanda petikan. Sertakan arahan penyampaian seperti suara tenang, respons teragak-agak atau kadar lebih pantas, dan jelaskan giliran bercakap. Untuk dua penutur, terangkan siapa bercakap dahulu dan reaksi siapa yang ditunjukkan kamera. Pertukaran ringkas yang muat dalam klip terpilih memberikan sasaran persembahan lebih jelas kepada model berbanding petikan panjang tanpa penutur yang ditentukan.</p><p>Suara latar boleh diarahkan melalui timbre, emosi, intonasi dan kadar pertuturan. Ia berguna apabila suara patut menerangkan produk sementara kamera kekal pada produk, atau apabila narator menetapkan suasana tanpa penutur di skrin. Panduan menerangkan pengekalan timbre yang boleh dikenali sambil mengubah penyampaian; semak perkataan sebenar, sebutan dan persembahan bersama imej.</p><h4>Kesan bunyi dan muzik latar</h4><p>Terangkan kesan sebagai peristiwa yang berkaitan dengan tindakan: langkah kaki ketika watak masuk, hujan semakin lebat di luar tingkap atau kain bergerak ketika kot dipakai. Muzik latar dijana untuk memadankan prompt secara lalai. Nyatakan suasana, gaya dan ritmanya apabila itu penting, serta masa ia patut bermula atau memudar berbanding adegan.</p><p>Untuk demonstrasi tenang, minta muzik sederhana dan tekankan bunyi pengendalian produk. Untuk adegan animasi, terangkan detik tindakan yang patut bertepatan dengan ritma muzik. Trek bunyi yang dijana ialah mono. Kawalan audio yang didokumentasikan turut membolehkan video senyap apabila projek memerlukan trek bunyi yang disediakan secara berasingan.</p><h4>Peralihan syot dan pengarahan kamera</h4><p>Model menyokong perubahan syot dengan olahan visual konsisten, syot balas untuk perbualan dan arahan pemasaan peralihan. Urutan dialog yang berguna boleh memperkenalkan dua penutur dalam syot sederhana, memotong ke penutur yang menjawab dan kembali kepada reaksi penutur pertama. Nyatakan identiti setiap orang apabila syot berubah.</p><p>Panduan merangkumi sudut tinggi, rendah dan paras mata; pandangan dari belakang bahu dan pandangan subjektif; serta pembingkaian luas, sederhana dan dekat. Terangkan gerak kamera melalui komposisi awal, arah, amplitud dan komposisi akhirnya. Contohnya, gerakan dolly-in perlahan boleh berakhir pada ekspresi penutur ketika baris selesai. Hubungkan pergerakan dengan cerita, bukannya menyenaraikan beberapa teknik kamera tanpa tujuan.</p><h4>Mod, output dan pratonton</h4><p>Mod input yang didokumentasikan ialah teks-ke-video, imej-ke-video bingkai pertama serta imej-ke-video bingkai pertama dan terakhir. Imej pertama yang disediakan menetapkan komposisi awal; imej akhir boleh menentukan titik akhir yang dimaksudkan. Spesifikasi output menyenaraikan MP4 pada 24 fps, 480p, 720p atau 1080p dan tetapan tempoh 4–12 saat. Model turut boleh memilih panjang dalam saat bulat dalam julat sokongannya. Nisbah yang didokumentasikan ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16, dengan pembingkaian adaptif disokong.</p><p>Pengeluar mendokumentasikan aliran kerja Draft dua peringkat: pratonton 480p untuk memeriksa struktur adegan, pilihan syot, gerakan dan tujuan prompt, diikuti penjanaan akhir yang menggunakan semula input kreatif. Ini cara menilai persembahan yang dirancang sebelum memilih resolusi akhirnya. Pratonton itu sendiri terhad kepada 480p dan tidak menyokong pemulangan bingkai terakhir. ID tugas Draft pengeluar kekal sah selama tujuh hari selepas penciptaan; jana video akhir daripadanya dalam tempoh itu.</p><p>Untuk kerja berpandukan imej, sediakan gambar sumber untuk pembingkaian yang dimaksudkan: perubahan nisbah output boleh memangkas imej. Seed yang diulang menghasilkan bingkai serupa, bukannya bingkai yang dijamin sama, dan arahan kamera tetap bukan jaminan kuncian sempurna. Yang paling penting, nilai klip dialog sebagai satu persembahan audiovisual: penutur yang betul, dialog yang dapat didengar, reaksi wajah dan penekanan kamera semuanya perlu menyokong peristiwa yang sama.</p>",
  "aboutText": "Seedance 1.5 Pro ialah model ByteDance Seed untuk penjanaan bersama audio-video secara natif. Ia memodelkan tindakan visual, pertuturan dan ritma bersama-sama, membolehkan adegan merangkumi persembahan watak, dialog terselaras dan landskap bunyi yang direka. Perbezaan utama berbanding taklimat video visual sahaja ialah bunyi menjadi sebahagian daripada penerangan adegan: siapa bercakap, cara baris disampaikan dan apa yang didengar khalayak di sekitar tindakan.\n\n### Penjanaan bersama audiovisual\n\nJulat bunyi yang didokumentasikan merangkumi bunyi persekitaran, kesan tindakan, bunyi tersintesis, alat muzik, muzik latar dan vokal. Model bertujuan menghubungkan bunyi dengan kejadian di skrin: objek menghentam meja, pintu terbuka atau watak bercakap. Gunakan ini untuk detik dramatik ringkas, iklan produk bersuara atau adegan yang suasananya bergantung pada persembahan dan bunyi.\n\nMulakan prompt dengan subjek dan pergerakan, kemudian tambah persekitaran, kamera, gaya visual dan bunyi. Adegan ringkas boleh berbunyi: “Seorang cef mengangkat penutup periuk kecil, tersenyum dan berkata, ‘Sudah siap.’ Kepulan wap lembut keluar, diikuti bunyi denting perlahan penutup yang diletakkan di atas kaunter.” Ini memberikan sebab yang kelihatan bagi baris pertuturan dan kesan bunyi.\n\n### Dialog dan suara latar\n\nModel menyokong monolog dan perbualan yang melibatkan beberapa penutur, dengan gerakan bibir dipadankan kepada watak. Panduannya mendokumentasikan Mandarin, dialek Cina termasuk Kantonis, Shaanxi dan Sichuan, serta pertuturan bahasa Inggeris, Jepun, Korea, Sepanyol dan Indonesia. Bahasa prompt yang didokumentasikan ialah bahasa Cina dan Inggeris; bahasa prompt dan bahasa yang diminta untuk baris pertuturan ialah pilihan berasingan.\n\nKenal pasti setiap penutur melalui ciri visual yang konsisten dan tulis dialog dalam tanda petikan. Sertakan arahan penyampaian seperti suara tenang, respons teragak-agak atau kadar lebih pantas, dan jelaskan giliran bercakap. Untuk dua penutur, terangkan siapa bercakap dahulu dan reaksi siapa yang ditunjukkan kamera. Pertukaran ringkas yang muat dalam klip terpilih memberikan sasaran persembahan lebih jelas kepada model berbanding petikan panjang tanpa penutur yang ditentukan.\n\nSuara latar boleh diarahkan melalui timbre, emosi, intonasi dan kadar pertuturan. Ia berguna apabila suara patut menerangkan produk sementara kamera kekal pada produk, atau apabila narator menetapkan suasana tanpa penutur di skrin. Panduan menerangkan pengekalan timbre yang boleh dikenali sambil mengubah penyampaian; semak perkataan sebenar, sebutan dan persembahan bersama imej.\n\n### Kesan bunyi dan muzik latar\n\nTerangkan kesan sebagai peristiwa yang berkaitan dengan tindakan: langkah kaki ketika watak masuk, hujan semakin lebat di luar tingkap atau kain bergerak ketika kot dipakai. Muzik latar dijana untuk memadankan prompt secara lalai. Nyatakan suasana, gaya dan ritmanya apabila itu penting, serta masa ia patut bermula atau memudar berbanding adegan.\n\nUntuk demonstrasi tenang, minta muzik sederhana dan tekankan bunyi pengendalian produk. Untuk adegan animasi, terangkan detik tindakan yang patut bertepatan dengan ritma muzik. Trek bunyi yang dijana ialah mono. Kawalan audio yang didokumentasikan turut membolehkan video senyap apabila projek memerlukan trek bunyi yang disediakan secara berasingan.\n\n### Peralihan syot dan pengarahan kamera\n\nModel menyokong perubahan syot dengan olahan visual konsisten, syot balas untuk perbualan dan arahan pemasaan peralihan. Urutan dialog yang berguna boleh memperkenalkan dua penutur dalam syot sederhana, memotong ke penutur yang menjawab dan kembali kepada reaksi penutur pertama. Nyatakan identiti setiap orang apabila syot berubah.\n\nPanduan merangkumi sudut tinggi, rendah dan paras mata; pandangan dari belakang bahu dan pandangan subjektif; serta pembingkaian luas, sederhana dan dekat. Terangkan gerak kamera melalui komposisi awal, arah, amplitud dan komposisi akhirnya. Contohnya, gerakan dolly-in perlahan boleh berakhir pada ekspresi penutur ketika baris selesai. Hubungkan pergerakan dengan cerita, bukannya menyenaraikan beberapa teknik kamera tanpa tujuan.\n\n### Mod, output dan pratonton\n\nMod input yang didokumentasikan ialah teks-ke-video, imej-ke-video bingkai pertama serta imej-ke-video bingkai pertama dan terakhir. Imej pertama yang disediakan menetapkan komposisi awal; imej akhir boleh menentukan titik akhir yang dimaksudkan. Spesifikasi output menyenaraikan MP4 pada 24 fps, 480p, 720p atau 1080p dan tetapan tempoh 4–12 saat. Model turut boleh memilih panjang dalam saat bulat dalam julat sokongannya. Nisbah yang didokumentasikan ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16, dengan pembingkaian adaptif disokong.\n\nPengeluar mendokumentasikan aliran kerja Draft dua peringkat: pratonton 480p untuk memeriksa struktur adegan, pilihan syot, gerakan dan tujuan prompt, diikuti penjanaan akhir yang menggunakan semula input kreatif. Ini cara menilai persembahan yang dirancang sebelum memilih resolusi akhirnya. Pratonton itu sendiri terhad kepada 480p dan tidak menyokong pemulangan bingkai terakhir. ID tugas Draft pengeluar kekal sah selama tujuh hari selepas penciptaan; jana video akhir daripadanya dalam tempoh itu.\n\nUntuk kerja berpandukan imej, sediakan gambar sumber untuk pembingkaian yang dimaksudkan: perubahan nisbah output boleh memangkas imej. Seed yang diulang menghasilkan bingkai serupa, bukannya bingkai yang dijamin sama, dan arahan kamera tetap bukan jaminan kuncian sempurna. Yang paling penting, nilai klip dialog sebagai satu persembahan audiovisual: penutur yang betul, dialog yang dapat didengar, reaksi wajah dan penekanan kamera semuanya perlu menyokong peristiwa yang sama.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "b188ec07dfe3d1a84c36c409bf5ff2f99b45d4f4fc47b507ffe679a3319250a6",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ms",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 1.5 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Tutup\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>bytedance/seedance-1-5-pro</code><button type=\"button\" id=\"copy-id\">Salin ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Bahagian kad model\"><button type=\"button\" data-card-jump=\"overview\">Pengenalan</button><button type=\"button\" data-card-jump=\"methods\">Input &amp; kaedah</button><button type=\"button\" data-card-jump=\"pricing\">Pelan harga</button><button type=\"button\" data-card-jump=\"examples\">Contoh</button><button type=\"button\" data-card-jump=\"results\">Hasil</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Kaedah 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-1-5-pro\">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\">Pengenalan</h3><p class=\"mdesc-full\">ByteDance Seedance 1.5 Pro menjana video bersama dialog, kesan bunyi dan muzik yang terselaras. Arahkan penutur, emosi, kamera dan suasana bunyi untuk mengembangkan drama pendek, iklan bersuara dan adegan watak.</p><dl class=\"card-io\" data-card-io><div><dt>Input yang diterima</dt><dd>Teks · Imej</dd></div><div><dt>Hasil</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Tentang model</summary><p class=\"note-s\" data-model-method-boundary>Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.</p><div class=\"mabout\" id=\"m-about\"><p>Seedance 1.5 Pro ialah model ByteDance Seed untuk penjanaan bersama audio-video secara natif. Ia memodelkan tindakan visual, pertuturan dan ritma bersama-sama, membolehkan adegan merangkumi persembahan watak, dialog terselaras dan landskap bunyi yang direka. Perbezaan utama berbanding taklimat video visual sahaja ialah bunyi menjadi sebahagian daripada penerangan adegan: siapa bercakap, cara baris disampaikan dan apa yang didengar khalayak di sekitar tindakan.</p><h4>Penjanaan bersama audiovisual</h4><p>Julat bunyi yang didokumentasikan merangkumi bunyi persekitaran, kesan tindakan, bunyi tersintesis, alat muzik, muzik latar dan vokal. Model bertujuan menghubungkan bunyi dengan kejadian di skrin: objek menghentam meja, pintu terbuka atau watak bercakap. Gunakan ini untuk detik dramatik ringkas, iklan produk bersuara atau adegan yang suasananya bergantung pada persembahan dan bunyi.</p><p>Mulakan prompt dengan subjek dan pergerakan, kemudian tambah persekitaran, kamera, gaya visual dan bunyi. Adegan ringkas boleh berbunyi: “Seorang cef mengangkat penutup periuk kecil, tersenyum dan berkata, ‘Sudah siap.’ Kepulan wap lembut keluar, diikuti bunyi denting perlahan penutup yang diletakkan di atas kaunter.” Ini memberikan sebab yang kelihatan bagi baris pertuturan dan kesan bunyi.</p><h4>Dialog dan suara latar</h4><p>Model menyokong monolog dan perbualan yang melibatkan beberapa penutur, dengan gerakan bibir dipadankan kepada watak. Panduannya mendokumentasikan Mandarin, dialek Cina termasuk Kantonis, Shaanxi dan Sichuan, serta pertuturan bahasa Inggeris, Jepun, Korea, Sepanyol dan Indonesia. Bahasa prompt yang didokumentasikan ialah bahasa Cina dan Inggeris; bahasa prompt dan bahasa yang diminta untuk baris pertuturan ialah pilihan berasingan.</p><p>Kenal pasti setiap penutur melalui ciri visual yang konsisten dan tulis dialog dalam tanda petikan. Sertakan arahan penyampaian seperti suara tenang, respons teragak-agak atau kadar lebih pantas, dan jelaskan giliran bercakap. Untuk dua penutur, terangkan siapa bercakap dahulu dan reaksi siapa yang ditunjukkan kamera. Pertukaran ringkas yang muat dalam klip terpilih memberikan sasaran persembahan lebih jelas kepada model berbanding petikan panjang tanpa penutur yang ditentukan.</p><p>Suara latar boleh diarahkan melalui timbre, emosi, intonasi dan kadar pertuturan. Ia berguna apabila suara patut menerangkan produk sementara kamera kekal pada produk, atau apabila narator menetapkan suasana tanpa penutur di skrin. Panduan menerangkan pengekalan timbre yang boleh dikenali sambil mengubah penyampaian; semak perkataan sebenar, sebutan dan persembahan bersama imej.</p><h4>Kesan bunyi dan muzik latar</h4><p>Terangkan kesan sebagai peristiwa yang berkaitan dengan tindakan: langkah kaki ketika watak masuk, hujan semakin lebat di luar tingkap atau kain bergerak ketika kot dipakai. Muzik latar dijana untuk memadankan prompt secara lalai. Nyatakan suasana, gaya dan ritmanya apabila itu penting, serta masa ia patut bermula atau memudar berbanding adegan.</p><p>Untuk demonstrasi tenang, minta muzik sederhana dan tekankan bunyi pengendalian produk. Untuk adegan animasi, terangkan detik tindakan yang patut bertepatan dengan ritma muzik. Trek bunyi yang dijana ialah mono. Kawalan audio yang didokumentasikan turut membolehkan video senyap apabila projek memerlukan trek bunyi yang disediakan secara berasingan.</p><h4>Peralihan syot dan pengarahan kamera</h4><p>Model menyokong perubahan syot dengan olahan visual konsisten, syot balas untuk perbualan dan arahan pemasaan peralihan. Urutan dialog yang berguna boleh memperkenalkan dua penutur dalam syot sederhana, memotong ke penutur yang menjawab dan kembali kepada reaksi penutur pertama. Nyatakan identiti setiap orang apabila syot berubah.</p><p>Panduan merangkumi sudut tinggi, rendah dan paras mata; pandangan dari belakang bahu dan pandangan subjektif; serta pembingkaian luas, sederhana dan dekat. Terangkan gerak kamera melalui komposisi awal, arah, amplitud dan komposisi akhirnya. Contohnya, gerakan dolly-in perlahan boleh berakhir pada ekspresi penutur ketika baris selesai. Hubungkan pergerakan dengan cerita, bukannya menyenaraikan beberapa teknik kamera tanpa tujuan.</p><h4>Mod, output dan pratonton</h4><p>Mod input yang didokumentasikan ialah teks-ke-video, imej-ke-video bingkai pertama serta imej-ke-video bingkai pertama dan terakhir. Imej pertama yang disediakan menetapkan komposisi awal; imej akhir boleh menentukan titik akhir yang dimaksudkan. Spesifikasi output menyenaraikan MP4 pada 24 fps, 480p, 720p atau 1080p dan tetapan tempoh 4–12 saat. Model turut boleh memilih panjang dalam saat bulat dalam julat sokongannya. Nisbah yang didokumentasikan ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16, dengan pembingkaian adaptif disokong.</p><p>Pengeluar mendokumentasikan aliran kerja Draft dua peringkat: pratonton 480p untuk memeriksa struktur adegan, pilihan syot, gerakan dan tujuan prompt, diikuti penjanaan akhir yang menggunakan semula input kreatif. Ini cara menilai persembahan yang dirancang sebelum memilih resolusi akhirnya. Pratonton itu sendiri terhad kepada 480p dan tidak menyokong pemulangan bingkai terakhir. ID tugas Draft pengeluar kekal sah selama tujuh hari selepas penciptaan; jana video akhir daripadanya dalam tempoh itu.</p><p>Untuk kerja berpandukan imej, sediakan gambar sumber untuk pembingkaian yang dimaksudkan: perubahan nisbah output boleh memangkas imej. Seed yang diulang menghasilkan bingkai serupa, bukannya bingkai yang dijamin sama, dan arahan kamera tetap bukan jaminan kuncian sempurna. Yang paling penting, nilai klip dialog sebagai satu persembahan audiovisual: penutur yang betul, dialog yang dapat didengar, reaksi wajah dan penekanan kamera semuanya perlu menyokong peristiwa yang sama.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tersedia di Ailoot · input &amp; kaedah</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Input</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Output</dt><dd><code>video</code></dd></div><div><dt>Format output</dt><dd>bait MP4 asal; tanpa penormalan atau pengekodan semula</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Medan</th><th>Jenis</th><th>Keperluan</th><th>Nilai &amp; had</th><th>Lalai</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>bytedance/seedance-1-5-pro</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>4, 5, 6, 7, 8, 9, 10, 11, 12</div><div>Minimum: 1</div><div>Maksimum: 600</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>480p, 720p, 1080p</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>1:1, 3:4, 9:16, 9:21, 4:3, 16:9, 21:9</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>boolean</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>false, true</div><div>Syarat: Menggugurkan pilihan ini memilih harga dengan audio. Tetapkan kepada false untuk memilih harga tanpa audio. Semak has_audio dalam hasil untuk mengetahui sama ada trek audio dikembalikan.</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>array</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Item minimum: 1</div><div>Item maksimum: 2</div><div>Kandungan input: Tatasusunan objek bingkai. Setiap objek mempunyai type=image_url, image_url yang mengandungi url dan frame_type. Gunakan URL imej HTTPS dan tetapkan frame_type kepada first_frame atau last_frame. Setiap peranan bingkai boleh muncul paling banyak sekali.</div><div>Kunci tepat: type, image_url, frame_type</div><div>Syarat: Kunci ini menerangkan setiap objek bingkai; image_url hanya mengandungi url. Gugurkan frame_images untuk permintaan teks sahaja.</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>array</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">size</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>480x480, 480x640, 480x854, 480x1120, 640x480, 720x720, 720x960, 720x1280, 720x1680, 854x480, 960x720, 1080x1080, 1080x1440, 1080x1920, 1080x2520, 1120x480, 1280x720, 1440x1080, 1680x720, 1920x1080, 2520x1080</div><div>Corak: ^[1-9][0-9]*x[1-9][0-9]*$</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Minimum: -9,223,372,036,854,775,808</div><div>Maksimum: 9,223,372,036,854,775,807</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Corak: ^https://</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Gabungan bahan input</summary><p class=\"note-s\"><b>Teks kepada video</b> · Prompt bertulis. · Diperlukan: model, prompt, duration</p><p class=\"note-s\"><code>Berikan prompt sebagai teks dan tempoh dalam saat bulat. Pilih resolusi dan nisbah bidang yang disokong, atau saiz tepat yang disenaraikan.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Jenis: string · bytedance/seedance-1-5-pro</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Jenis: string · Bait UTF-8 maksimum: 10,000 · Aksara selain ruang kosong diperlukan: Ya</p><p class=\"note-s\"><b>Imej kepada video</b> · Prompt bertulis dan imej bingkai pertama. · Diperlukan: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images ialah tatasusunan. Setiap objek bingkai mempunyai type, image_url dan frame_type; image_url mengandungi url. Tetapkan type kepada image_url. Gunakan first_frame dengan last_frame pilihan. Setiap peranan bingkai boleh muncul paling banyak sekali. Berikan URL imej HTTPS awam bagi setiap bingkai. Pilih resolusi dan nisbah bidang yang disokong, atau saiz tepat yang disenaraikan.</code></p><p class=\"note-s\">Kunci tepat: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Jenis: string · bytedance/seedance-1-5-pro</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Jenis: string · Bait UTF-8 maksimum: 10,000 · Aksara selain ruang kosong diperlukan: Ya</p></details><details class=\"note-s\" data-method-contract><summary>Parameter kaedah dan kitar hayat</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrak</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>text, image</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>additional_properties</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, size, seed, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Kitar hayat: <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\">Pelan harga</h3><div class=\"card-result-process\" data-billing-basis><h5>Cara caj akhir dikira</h5><p class=\"note-s\">Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.</p><dl data-price-conditions><dt>Mod pantas</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila mod pantas dipilih</span></dd><dt>Mod flex</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila mod flex dipilih</span></dd><dt>Usaha penaakulan maksimum</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila usaha penaakulan maksimum menggunakan pelarasan default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Anggaran kadar untuk perbandingan</h4><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Jadual kadar</th><th>Kuantiti ramalan</th><th>Unit pengebilan</th><th>Syarat pengebilan</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Kadar asas token</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>Kadar asas</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>—</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>—</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>bagi setiap 1K token video</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>Tiada syarat tambahan dinyatakan dalam kunci harga ini.</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video · Anggaran untuk perbandingan sahaja</span> <b>$0.0048</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>bagi setiap 1K token video</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>tetapan audio: without_audio</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video · Anggaran untuk perbandingan sahaja</span> <b>$0.0024</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Anggaran kos penjanaan</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>anggaran untuk satu penjanaan</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>—</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>—</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Anggaran kos penjanaan · Anggaran untuk perbandingan sahaja</span> <b>$0.05184</b> <span class=\"price-unit\">anggaran sebelum penjanaan</span></div><p class=\"note-s\">Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. <a href=\"/docs/ms/billing/reserve/\">Cara rizab dan penyelesaian caj berfungsi →</a></p><div data-declared-reference-pricing><h4>Butiran tarif rujukan</h4><p class=\"note-s\">Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Rujukan harga konfigurasi video</summary><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Syarat pengebilan</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>Tiada syarat tambahan dinyatakan dalam kunci harga ini.</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video</span> <b>$0.0048</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>tetapan audio: without_audio</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video</span> <b>$0.0024</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Contoh permintaan</h3><h4>Ailoot Ultra · Video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1128-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1128-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · cipta video</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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-1128-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1128-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;aspect_ratio&quot;:&quot;16:9&quot;,&quot;duration&quot;:8,&quot;model&quot;:&quot;bytedance/seedance-1-5-pro&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;resolution&quot;:&quot;720p&quot;}&#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\">Terima dan simpan hasil</h3><h4>Ailoot Ultra · Video</h4><p class=\"note-s\">pautan kandungan bertandatangan milik anda</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>Semak status tugas</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1129-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1129-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET status operasi asal</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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-1129-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1129-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>Pembacaan kandungan lain</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1130-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1130-panel-0\" aria-selected=\"true\" tabindex=\"0\">Simpan setiap output selesai yang menjadi milik anda</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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-1130-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1130-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>Simpan semua hasil yang selesai</h5><p class=\"note-s\">Simpan setiap video yang selesai atau fail yang dikembalikan; dapatkan setiap URL aset yang benar-benar dikembalikan.</p><p class=\"note-s\">Simpan setiap output sebenar milik anda berserta metadata ukuran yang dikembalikan.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asal perlu disemak</h5><p class=\"note-s\">503 result_pending_check + id asal + X-Should-Retry:false; jangan sekali-kali ulang operasi asal</p></div><details class=\"card-about\" data-output-fields><summary>Medan respons</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Medan</th><th>Jenis</th><th>Maksud</th></tr></thead><tbody><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Kedudukan video ini dalam senarai output dengan indeks bermula dari sifar.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>URL muat turun HTTPS bertandatangan untuk video siap ini.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Ringkasan SHA-256 bagi bait video asal; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Saiz fail video asal dalam bait; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Tempoh video yang diukur dalam milisaat; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Lebar video dalam piksel; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Ketinggian video dalam piksel; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Pengecam codec video; null jika tidak direkodkan.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>boolean | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Sama ada video mengandungi trek audio; null jika tidak diukur.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Pengecam codec audio; null apabila tiada pengecam direkodkan.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ralat dan langkah seterusnya</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respons</th><th>Syarat</th><th>Langkah seterusnya</th></tr></thead><tbody><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Akses video tidak tersedia, atau ID video ini tidak ditemui.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak akses video. Untuk video sedia ada, gunakan ID awam asalnya dan kunci API yang sama.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kunci API tidak sepadan dengan akaun yang disahkan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak kunci API dan akses akaun anda sebelum menghantar.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Permintaan tidak dapat dibaca, atau indeks muat turun tidak sah.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Betulkan badan permintaan. Untuk muat turun, pilih indeks output yang dikembalikan oleh tugas asal.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Harga konfigurasi video yang dipilih tidak dapat ditentukan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Pilih konfigurasi video yang disokong dan lengkapkan pilihan wajibnya sebelum menghantar permintaan yang dibetulkan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Input video atau tugas sambungan asal tidak sah.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Gunakan input HTTPS yang sah. Untuk sambungan, gunakan ID video awam asal anda yang telah siap dengan kunci API yang sama.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>402 · <code>billing_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Baki atau had yang tersedia tidak membenarkan penahanan dana.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak baki dan had yang tersedia sebelum menghantar permintaan baharu.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code>server_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Pengesahan video, storan atau akses perkhidmatan tidak tersedia buat sementara waktu.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Tunggu sehingga perkhidmatan tersedia. Jika anda sudah mempunyai ID video, semak tugas asal tersebut dan jangan cipta penjanaan lain.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Hasil video asal dan caj perlu disemak.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan ID video yang dikembalikan dan semak tugas tersebut. Jangan hantar permintaan penjanaan gantian semasa semakan sedang berjalan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Muat turun video sedia ada tidak tersedia buat sementara waktu.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak tugas video yang sama kemudian dan muat turun output sedia ada. Penjanaan baharu mencipta operasi berasingan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kandungan video belum diterbitkan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak status tugas asal. Muat turun selepas statusnya melaporkan completed; jika statusnya melaporkan failed, ikuti notis semakan cajnya.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias model</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=bytedance%2Fseedance-1-5-pro&amp;route=Ultra&amp;caller=bytedance%2Fseedance-1-5-pro&amp;fmt=videos\"><code>bytedance/seedance-1-5-pro</code></a></span></p><h4>Alias laluan kaedah</h4><p class=\"note-s\">Gunakan laluan kaedah yang dipaparkan di atas.</p><h4>ID pemanggil berkaitan</h4><p class=\"note-s\"><a href=\"#m=bytedance%2Fseedance-1-5-pro&amp;route=Ultra&amp;caller=bytedance%2Fseedance-1-5-pro&amp;fmt=videos\"><code>bytedance/seedance-1-5-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "bytedance/seedance-1-5-pro",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "bytedance/seedance-1-5-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|bytedance%2Fseedance-1-5-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.",
          "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": "Simpan setiap output sebenar milik anda berserta metadata ukuran yang dikembalikan.",
            "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": "Akses video tidak tersedia, atau ID video ini tidak ditemui.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Semak akses video. Untuk video sedia ada, gunakan ID awam asalnya dan kunci API yang sama.",
                "type": "not_found_error"
              },
              {
                "condition": "Kunci API tidak sepadan dengan akaun yang disahkan.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Semak kunci API dan akses akaun anda sebelum menghantar.",
                "type": "authentication_error"
              },
              {
                "condition": "Permintaan tidak dapat dibaca, atau indeks muat turun tidak sah.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Betulkan badan permintaan. Untuk muat turun, pilih indeks output yang dikembalikan oleh tugas asal.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Harga konfigurasi video yang dipilih tidak dapat ditentukan.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Pilih konfigurasi video yang disokong dan lengkapkan pilihan wajibnya sebelum menghantar permintaan yang dibetulkan.",
                "type": "price_unavailable"
              },
              {
                "condition": "Input video atau tugas sambungan asal tidak sah.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Gunakan input HTTPS yang sah. Untuk sambungan, gunakan ID video awam asal anda yang telah siap dengan kunci API yang sama.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Baki atau had yang tersedia tidak membenarkan penahanan dana.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Semak baki dan had yang tersedia sebelum menghantar permintaan baharu.",
                "type": "billing_error"
              },
              {
                "condition": "Pengesahan video, storan atau akses perkhidmatan tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Tunggu sehingga perkhidmatan tersedia. Jika anda sudah mempunyai ID video, semak tugas asal tersebut dan jangan cipta penjanaan lain.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Hasil video asal dan caj perlu disemak.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Simpan ID video yang dikembalikan dan semak tugas tersebut. Jangan hantar permintaan penjanaan gantian semasa semakan sedang berjalan.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Muat turun video sedia ada tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Semak tugas video yang sama kemudian dan muat turun output sedia ada. Penjanaan baharu mencipta operasi berasingan.",
                "type": "server_error"
              },
              {
                "condition": "Kandungan video belum diterbitkan.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Semak status tugas asal. Muat turun selepas statusnya melaporkan completed; jika statusnya melaporkan failed, ikuti notis semakan cajnya.",
                "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 asal + X-Should-Retry:false; jangan sekali-kali ulang operasi asal"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Berikan prompt sebagai teks dan tempoh dalam saat bulat. Pilih resolusi dan nisbah bidang yang disokong, atau saiz tepat yang disenaraikan.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Prompt bertulis."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images ialah tatasusunan. Setiap objek bingkai mempunyai type, image_url dan frame_type; image_url mengandungi url. Tetapkan type kepada image_url. Gunakan first_frame dengan last_frame pilihan. Setiap peranan bingkai boleh muncul paling banyak sekali. Berikan URL imej HTTPS awam bagi setiap bingkai. Pilih resolusi dan nisbah bidang yang disokong, atau saiz tepat yang disenaraikan.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Prompt bertulis dan imej bingkai pertama."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Kedudukan video ini dalam senarai output dengan indeks bermula dari sifar.",
                  "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 muat turun HTTPS bertandatangan untuk video siap ini.",
                  "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": "Ringkasan SHA-256 bagi bait video asal; null jika tidak tersedia.",
                  "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": "Saiz fail video asal dalam bait; null jika tidak tersedia.",
                  "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": "Tempoh video yang diukur dalam milisaat; null jika tidak tersedia.",
                  "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": "Lebar video dalam piksel; null jika tidak tersedia.",
                  "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": "Ketinggian video dalam piksel; null jika tidak tersedia.",
                  "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": "Pengecam codec video; null jika tidak direkodkan.",
                  "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": "Sama ada video mengandungi trek audio; null jika tidak diukur.",
                  "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": "Pengecam codec audio; null apabila tiada pengecam direkodkan.",
                  "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": "pautan kandungan bertandatangan milik anda",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-1-5-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "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
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "9:21",
                  "4:3",
                  "16:9",
                  "21:9"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Menggugurkan pilihan ini memilih harga dengan audio. Tetapkan kepada false untuk memilih harga tanpa audio. Semak has_audio dalam hasil untuk mengetahui sama ada trek audio dikembalikan.",
                "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": "Kunci ini menerangkan setiap objek bingkai; image_url hanya mengandungi url. Gugurkan frame_images untuk permintaan teks sahaja.",
                "content": "Tatasusunan objek bingkai. Setiap objek mempunyai type=image_url, image_url yang mengandungi url dan frame_type. Gunakan URL imej HTTPS dan tetapkan frame_type kepada first_frame atau last_frame. Setiap peranan bingkai boleh muncul paling banyak sekali.",
                "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",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 0,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "480x1120",
                  "640x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "854x480",
                  "960x720",
                  "1080x1080",
                  "1080x1440",
                  "1080x1920",
                  "1080x2520",
                  "1120x480",
                  "1280x720",
                  "1440x1080",
                  "1680x720",
                  "1920x1080",
                  "2520x1080"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "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",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "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
                  ],
                  "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": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "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",
                    "1080p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "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"
            ],
            "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"
          ],
          "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": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0048000",
                "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.0000048",
                "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": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "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.0000024",
                "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": "Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Anggaran kos penjanaan",
            "units": [
              {
                "amount": "0.05184",
                "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.05184",
                "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('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"bytedance/seedance-1-5-pro\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', 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"
        ],
        "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.0048000",
                "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.0000048",
                "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": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "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.0000024",
                "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.05184",
                "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.05184",
                "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-1-5-pro",
        "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.0048000",
            "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.0000048",
            "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.0024000",
            "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.0000024",
            "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.05184",
            "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.05184",
            "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-1-5-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "252361ccbf2b5e01e45b860191a5bc67182c3dee7e344c707917398b5695977d",
    "input_html_sha256": "ab390f906112e7208f29f516ae0e238462b4c9330e8b03ef600554f143c201bb",
    "private_audit_sha256": "7dfbe25848beb9b8c061254bf62b2b355a1fef7fcf309b5c43dde973f56b797e",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ms/bytedance-seedance-1-5-pro/",
    "description": "ByteDance Seedance 1.5 Pro menjana video bersama dialog, kesan bunyi dan muzik yang terselaras. Arahkan penutur, emosi, kamera dan suasana bunyi untuk mengembangkan drama pendek, iklan bersuara dan adegan watak.",
    "locale": "ms",
    "md_url": "https://ailoot.ai/models/ms/bytedance-seedance-1-5-pro/index.md",
    "title": "ByteDance: Seedance 1.5 Pro — Ailoot",
    "url": "https://ailoot.ai/models/ms/bytedance-seedance-1-5-pro/"
  },
  "rawModel": {
    "about": "Seedance 1.5 Pro ialah model ByteDance Seed untuk penjanaan bersama audio-video secara natif. Ia memodelkan tindakan visual, pertuturan dan ritma bersama-sama, membolehkan adegan merangkumi persembahan watak, dialog terselaras dan landskap bunyi yang direka. Perbezaan utama berbanding taklimat video visual sahaja ialah bunyi menjadi sebahagian daripada penerangan adegan: siapa bercakap, cara baris disampaikan dan apa yang didengar khalayak di sekitar tindakan.\n\n### Penjanaan bersama audiovisual\n\nJulat bunyi yang didokumentasikan merangkumi bunyi persekitaran, kesan tindakan, bunyi tersintesis, alat muzik, muzik latar dan vokal. Model bertujuan menghubungkan bunyi dengan kejadian di skrin: objek menghentam meja, pintu terbuka atau watak bercakap. Gunakan ini untuk detik dramatik ringkas, iklan produk bersuara atau adegan yang suasananya bergantung pada persembahan dan bunyi.\n\nMulakan prompt dengan subjek dan pergerakan, kemudian tambah persekitaran, kamera, gaya visual dan bunyi. Adegan ringkas boleh berbunyi: “Seorang cef mengangkat penutup periuk kecil, tersenyum dan berkata, ‘Sudah siap.’ Kepulan wap lembut keluar, diikuti bunyi denting perlahan penutup yang diletakkan di atas kaunter.” Ini memberikan sebab yang kelihatan bagi baris pertuturan dan kesan bunyi.\n\n### Dialog dan suara latar\n\nModel menyokong monolog dan perbualan yang melibatkan beberapa penutur, dengan gerakan bibir dipadankan kepada watak. Panduannya mendokumentasikan Mandarin, dialek Cina termasuk Kantonis, Shaanxi dan Sichuan, serta pertuturan bahasa Inggeris, Jepun, Korea, Sepanyol dan Indonesia. Bahasa prompt yang didokumentasikan ialah bahasa Cina dan Inggeris; bahasa prompt dan bahasa yang diminta untuk baris pertuturan ialah pilihan berasingan.\n\nKenal pasti setiap penutur melalui ciri visual yang konsisten dan tulis dialog dalam tanda petikan. Sertakan arahan penyampaian seperti suara tenang, respons teragak-agak atau kadar lebih pantas, dan jelaskan giliran bercakap. Untuk dua penutur, terangkan siapa bercakap dahulu dan reaksi siapa yang ditunjukkan kamera. Pertukaran ringkas yang muat dalam klip terpilih memberikan sasaran persembahan lebih jelas kepada model berbanding petikan panjang tanpa penutur yang ditentukan.\n\nSuara latar boleh diarahkan melalui timbre, emosi, intonasi dan kadar pertuturan. Ia berguna apabila suara patut menerangkan produk sementara kamera kekal pada produk, atau apabila narator menetapkan suasana tanpa penutur di skrin. Panduan menerangkan pengekalan timbre yang boleh dikenali sambil mengubah penyampaian; semak perkataan sebenar, sebutan dan persembahan bersama imej.\n\n### Kesan bunyi dan muzik latar\n\nTerangkan kesan sebagai peristiwa yang berkaitan dengan tindakan: langkah kaki ketika watak masuk, hujan semakin lebat di luar tingkap atau kain bergerak ketika kot dipakai. Muzik latar dijana untuk memadankan prompt secara lalai. Nyatakan suasana, gaya dan ritmanya apabila itu penting, serta masa ia patut bermula atau memudar berbanding adegan.\n\nUntuk demonstrasi tenang, minta muzik sederhana dan tekankan bunyi pengendalian produk. Untuk adegan animasi, terangkan detik tindakan yang patut bertepatan dengan ritma muzik. Trek bunyi yang dijana ialah mono. Kawalan audio yang didokumentasikan turut membolehkan video senyap apabila projek memerlukan trek bunyi yang disediakan secara berasingan.\n\n### Peralihan syot dan pengarahan kamera\n\nModel menyokong perubahan syot dengan olahan visual konsisten, syot balas untuk perbualan dan arahan pemasaan peralihan. Urutan dialog yang berguna boleh memperkenalkan dua penutur dalam syot sederhana, memotong ke penutur yang menjawab dan kembali kepada reaksi penutur pertama. Nyatakan identiti setiap orang apabila syot berubah.\n\nPanduan merangkumi sudut tinggi, rendah dan paras mata; pandangan dari belakang bahu dan pandangan subjektif; serta pembingkaian luas, sederhana dan dekat. Terangkan gerak kamera melalui komposisi awal, arah, amplitud dan komposisi akhirnya. Contohnya, gerakan dolly-in perlahan boleh berakhir pada ekspresi penutur ketika baris selesai. Hubungkan pergerakan dengan cerita, bukannya menyenaraikan beberapa teknik kamera tanpa tujuan.\n\n### Mod, output dan pratonton\n\nMod input yang didokumentasikan ialah teks-ke-video, imej-ke-video bingkai pertama serta imej-ke-video bingkai pertama dan terakhir. Imej pertama yang disediakan menetapkan komposisi awal; imej akhir boleh menentukan titik akhir yang dimaksudkan. Spesifikasi output menyenaraikan MP4 pada 24 fps, 480p, 720p atau 1080p dan tetapan tempoh 4–12 saat. Model turut boleh memilih panjang dalam saat bulat dalam julat sokongannya. Nisbah yang didokumentasikan ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16, dengan pembingkaian adaptif disokong.\n\nPengeluar mendokumentasikan aliran kerja Draft dua peringkat: pratonton 480p untuk memeriksa struktur adegan, pilihan syot, gerakan dan tujuan prompt, diikuti penjanaan akhir yang menggunakan semula input kreatif. Ini cara menilai persembahan yang dirancang sebelum memilih resolusi akhirnya. Pratonton itu sendiri terhad kepada 480p dan tidak menyokong pemulangan bingkai terakhir. ID tugas Draft pengeluar kekal sah selama tujuh hari selepas penciptaan; jana video akhir daripadanya dalam tempoh itu.\n\nUntuk kerja berpandukan imej, sediakan gambar sumber untuk pembingkaian yang dimaksudkan: perubahan nisbah output boleh memangkas imej. Seed yang diulang menghasilkan bingkai serupa, bukannya bingkai yang dijamin sama, dan arahan kamera tetap bukan jaminan kuncian sempurna. Yang paling penting, nilai klip dialog sebagai satu persembahan audiovisual: penutur yang betul, dialog yang dapat didengar, reaksi wajah dan penekanan kamera semuanya perlu menyokong peristiwa yang sama.",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "available": null,
    "canonical_model": "bytedance/seedance-1-5-pro",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.05184",
            "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.05184",
            "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": "Maklumat lengkap tentang harga konfigurasi terdapat dalam butiran."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "09b7f40b8299fa0acb9ef099",
        "label": "Rujukan harga konfigurasi video",
        "profiles": [
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "Tiada syarat tambahan dinyatakan dalam kunci harga ini."
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0048",
                "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": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "tetapan audio: without_audio"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0024",
                "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"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "bytedance/seedance-1-5-pro",
    "input": [
      "text",
      "image"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.",
          "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": "Simpan setiap output sebenar milik anda berserta metadata ukuran yang dikembalikan.",
            "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": "Akses video tidak tersedia, atau ID video ini tidak ditemui.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Semak akses video. Untuk video sedia ada, gunakan ID awam asalnya dan kunci API yang sama.",
                "type": "not_found_error"
              },
              {
                "condition": "Kunci API tidak sepadan dengan akaun yang disahkan.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Semak kunci API dan akses akaun anda sebelum menghantar.",
                "type": "authentication_error"
              },
              {
                "condition": "Permintaan tidak dapat dibaca, atau indeks muat turun tidak sah.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Betulkan badan permintaan. Untuk muat turun, pilih indeks output yang dikembalikan oleh tugas asal.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Harga konfigurasi video yang dipilih tidak dapat ditentukan.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Pilih konfigurasi video yang disokong dan lengkapkan pilihan wajibnya sebelum menghantar permintaan yang dibetulkan.",
                "type": "price_unavailable"
              },
              {
                "condition": "Input video atau tugas sambungan asal tidak sah.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Gunakan input HTTPS yang sah. Untuk sambungan, gunakan ID video awam asal anda yang telah siap dengan kunci API yang sama.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Baki atau had yang tersedia tidak membenarkan penahanan dana.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Semak baki dan had yang tersedia sebelum menghantar permintaan baharu.",
                "type": "billing_error"
              },
              {
                "condition": "Pengesahan video, storan atau akses perkhidmatan tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Tunggu sehingga perkhidmatan tersedia. Jika anda sudah mempunyai ID video, semak tugas asal tersebut dan jangan cipta penjanaan lain.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Hasil video asal dan caj perlu disemak.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Simpan ID video yang dikembalikan dan semak tugas tersebut. Jangan hantar permintaan penjanaan gantian semasa semakan sedang berjalan.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Muat turun video sedia ada tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Semak tugas video yang sama kemudian dan muat turun output sedia ada. Penjanaan baharu mencipta operasi berasingan.",
                "type": "server_error"
              },
              {
                "condition": "Kandungan video belum diterbitkan.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Semak status tugas asal. Muat turun selepas statusnya melaporkan completed; jika statusnya melaporkan failed, ikuti notis semakan cajnya.",
                "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 asal + X-Should-Retry:false; jangan sekali-kali ulang operasi asal"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Berikan prompt sebagai teks dan tempoh dalam saat bulat. Pilih resolusi dan nisbah bidang yang disokong, atau saiz tepat yang disenaraikan.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Prompt bertulis."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images ialah tatasusunan. Setiap objek bingkai mempunyai type, image_url dan frame_type; image_url mengandungi url. Tetapkan type kepada image_url. Gunakan first_frame dengan last_frame pilihan. Setiap peranan bingkai boleh muncul paling banyak sekali. Berikan URL imej HTTPS awam bagi setiap bingkai. Pilih resolusi dan nisbah bidang yang disokong, atau saiz tepat yang disenaraikan.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Prompt bertulis dan imej bingkai pertama."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Kedudukan video ini dalam senarai output dengan indeks bermula dari sifar.",
                  "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 muat turun HTTPS bertandatangan untuk video siap ini.",
                  "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": "Ringkasan SHA-256 bagi bait video asal; null jika tidak tersedia.",
                  "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": "Saiz fail video asal dalam bait; null jika tidak tersedia.",
                  "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": "Tempoh video yang diukur dalam milisaat; null jika tidak tersedia.",
                  "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": "Lebar video dalam piksel; null jika tidak tersedia.",
                  "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": "Ketinggian video dalam piksel; null jika tidak tersedia.",
                  "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": "Pengecam codec video; null jika tidak direkodkan.",
                  "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": "Sama ada video mengandungi trek audio; null jika tidak diukur.",
                  "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": "Pengecam codec audio; null apabila tiada pengecam direkodkan.",
                  "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": "pautan kandungan bertandatangan milik anda",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-1-5-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "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
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "9:21",
                  "4:3",
                  "16:9",
                  "21:9"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Menggugurkan pilihan ini memilih harga dengan audio. Tetapkan kepada false untuk memilih harga tanpa audio. Semak has_audio dalam hasil untuk mengetahui sama ada trek audio dikembalikan.",
                "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": "Kunci ini menerangkan setiap objek bingkai; image_url hanya mengandungi url. Gugurkan frame_images untuk permintaan teks sahaja.",
                "content": "Tatasusunan objek bingkai. Setiap objek mempunyai type=image_url, image_url yang mengandungi url dan frame_type. Gunakan URL imej HTTPS dan tetapkan frame_type kepada first_frame atau last_frame. Setiap peranan bingkai boleh muncul paling banyak sekali.",
                "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",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 0,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "480x1120",
                  "640x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "854x480",
                  "960x720",
                  "1080x1080",
                  "1080x1440",
                  "1080x1920",
                  "1080x2520",
                  "1120x480",
                  "1280x720",
                  "1440x1080",
                  "1680x720",
                  "1920x1080",
                  "2520x1080"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "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",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "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
                  ],
                  "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": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "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",
                    "1080p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "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"
            ],
            "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"
          ],
          "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": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0048000",
                "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.0000048",
                "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": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "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.0000024",
                "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": "Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Anggaran kos penjanaan",
            "units": [
              {
                "amount": "0.05184",
                "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.05184",
                "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('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"bytedance/seedance-1-5-pro\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', 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"
        ],
        "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.0048000",
                "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.0000048",
                "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": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "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.0000024",
                "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.05184",
                "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.05184",
                "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-1-5-pro",
        "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.0048000",
            "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.0000048",
            "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.0024000",
            "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.0000024",
            "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.05184",
            "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.05184",
            "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-1-5-pro",
        "request_model_id": "bytedance/seedance-1-5-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 1.5 Pro",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.05184,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.05184,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "draft_estimate_conversion_factor": "0.6",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": true,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000048",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.6",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": true,
              "quoted_unit": "1000000_video_tokens"
            },
            "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",
          "draft_estimate_conversion_factor": "0.7",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": false,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000024",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.7",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": false,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "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",
          "draft_estimate_conversion_factor": "0.6",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": true,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000024",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.6",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": true,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 2,
            "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",
          "draft_estimate_conversion_factor": "0.7",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": false,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000012",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.7",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": false,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 3,
            "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.0048000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video token",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000048",
            "key": "video_tokens",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000048",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000024",
            "key": "video_tokens_without_audio",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          }
        ]
      }
    ],
    "public_id": "bytedance/seedance-1-5-pro",
    "short": "ByteDance Seedance 1.5 Pro menjana video bersama dialog, kesan bunyi dan muzik yang terselaras. Arahkan penutur, emosi, kamera dan suasana bunyi untuk mengembangkan drama pendek, iklan bersuara dan adegan watak."
  },
  "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": "ByteDance Seedance 1.5 Pro menjana video bersama dialog, kesan bunyi dan muzik yang terselaras. Arahkan penutur, emosi, kamera dan suasana bunyi untuk mengembangkan drama pendek, iklan bersuara dan adegan watak.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_exact_canonical_sha256": "3ea34182ecfb83bd56c4e8094084557767e3e187f7ec45e7faab43f4aa985db0",
    "raw_model_js_projection_sha256": "40b90a3cb65f2cb045cd9d54381266a9dadb7a56833ca38a0e849f4e18973bba",
    "raw_model_json_sha256": "3ea34182ecfb83bd56c4e8094084557767e3e187f7ec45e7faab43f4aa985db0",
    "renderer_sha256": "1dab5ba62521e9568c8b7c82005622cabbf330a075df7cce1f83274a04009460"
  },
  "sourceRevision": "94905d1670a1a99435b96e4c582114eac591acc4f404125ec63904637b22574d"
}
