{
  "aboutHtml": "<p>Seedance 2.0 Mini on erikseen nimetty malli ByteDancen audiovisuaalisessa Seedance 2.0 -perheessä. Valmistaja dokumentoi tekstistä videoksi -tilan, ensimmäiseen ruutuun sekä ensimmäiseen ja viimeiseen ruutuun perustuvan kuvasta videoksi -tilan, multimodaalisen viitegeneroinnin, videomuokkauksen ja videon jatkamisen. Äänen voi generoida kuvan kanssa. Valitse luontitila olemassa olevan aineiston perusteella: kirjoitettu tehtävänanto, kiinteä avauskuva, kaksi rajakuvaa tai muokkausta tai jatkoa tarvitseva leike.</p><p>Minillä on oma tulosteprofiilinsa. Valmistaja luettelee 480p- ja 720p-videon 8-bittisellä värillä, 24 ruudulla sekunnissa ja MP4-tulosteella. Tuetut kuvasuhteet ovat 21:9, 16:9, 4:3, 1:1, 3:4 ja 9:16; dokumentoitu generoinnin kesto on 4–15 sekuntia. Valmistajan kestosäädin sallii myös automaattisen valinnan tällä alueella. Täyden Seedance 2.0 -mallin 1080p- ja 4K-vaihtoehdot ovat erillisiä; ne eivät ole Minin asetuksia. Perheen kykytaulukko luettelee viimeisen generoidun ruudun palauttamisen, mutta Draft-tilaa ei tueta.</p><p>Omni-viite luo uuden kohtauksen käyttäen valittuja tietoja annetusta aineistosta. Kuva voi määrittää kohteen ulkoasun, sommittelun tai visuaalisen käsittelyn. Video voi määrittää toiminnan, kameraliikkeen tai tehosteen; ääniviite voi määrittää äänen sointivärin, melodian tai puhutun sisällön. Kerro, mitä kustakin viitteestä tulee ottaa sen sijaan, että pyytäisit kopioimaan kaikki ominaisuudet. Käytä esimerkiksi tuotekuvaa muotoon ja väriin, lyhyttä kameraliikeleikettä lähestymiseen ja ääniviitettä tunnelmaan.</p><p>Perheen työnkulku sallii enintään yhdeksän viitekuvaa, kolme videoleikettä ja kolme äänileikettä. Videoviitteet ovat kukin 2–15 sekuntia ja yhteensä enintään 15 sekuntia; ääniviitteillä on samat leike- ja kokonaiskestorajat. Pelkkää ääntä tai tekstiä ja ääntä ilman visuaalista viitettä ei tueta viiteyhdistelminä. Pelkkään tekstiin perustuva luominen on erillinen tuettu tila. Anna sarjan aineistot tarkoitetussa järjestyksessä ja viittaa niihin johdonmukaisesti nimillä Image 1, Video 1 tai Audio 1 käyttäen järjestystä kunkin mediatyypin sisällä. Älä korvaa numeroitua viitettä aineistotunnisteella kirjoitetussa kehotteessa.</p><p>Ensimmäisen ruudun kuva määrittää kuvapohjaisen otoksen avauksen. Ensimmäisen ja viimeisen ruudun tila määrittää molemmat rajat. Jos täsmälliset rajakuvat ovat tärkeitä, valitse kyseinen tila sen sijaan, että kuvaisit viitteitä aloitukseksi ja lopuksi omni-viitekehotteessa. Jälkimmäinen on kehotteella ohjattu vaikutus eikä vastaa tarkkaa rajakuvavalintaa. Valmistele kuvat tulostesommitteluun ja määritä toiminta, joka yhdistää alku- ja lopputilanteen.</p><p>Videomuokkaus muuttaa olemassa olevaa leikettä sen sijaan, että käyttäisi sitä vain inspiraationa. Määritä muokattava video, muutettava esine tai alue, sen esiintymisaika ja sijainti sekä säilytettävät yksityiskohdat. Hyödyllinen tehtävänanto on: ”Korvaa Video 1:n muki Image 1:ssä näkyvällä astialla; säilytä käden liike, rajaus, valaistus ja pöytäjärjestys.” Nimeä poistettavaksi ei-toivottu esine ja säilytettävät ympäröivät elementit. Valmistaja neuvoo viittaamaan muokkauksessa tai jatkamisessa suoraan kohdevideoon; viitteeksi muotoilu voi sen sijaan välittää pyynnön uudesta generoidusta kohtauksesta.</p><p>Videon jatkaminen lisää tapahtumia olemassa olevan leikkeen eteen tai jälkeen. Kuvaa jatkamisen suunta ja seuraava tai edeltävä tapahtuma. Dokumentoitu työnkulku voi myös yhdistää kaksi tai kolme leikettä generoiduilla siirtymillä; kolmen syötevideon tulee silti mahtua yhdessä 15 sekunnin viitebudjettiin. Opas erottaa pääasiassa alkuperäisen leikkeen raja-aineistoa sisältävän jatkon pyynnöstä, joka nimenomaisesti säilyttää alkuperäisen sisällön. Kerro tuloksen haluttu koostumus: vain jatko tai annettu leike ja uusi toiminta sisältävä kohtaus.</p><p>Erota selkeässä ohjauksessa vakaa kohtauskuvaus tapahtumien sarjasta. Määritä jokaiselle kohteelle kaksi tai kolme erottavaa visuaalista piirrettä ja yhtenäinen tunniste. Kuvaa sitten toiminnot, ympäristö, valaistus, kameraliike, visuaalinen tyyli ja rajaukset. Yhdistä vuoropuhelun jokainen repliikki puhujaan ja olennaiseen toimintaan. Käytä järjestettyjä otostunnisteita tarkkojen aikaleimojen pitämisen sijaan luotettavina säätiminä: valmistaja huomauttaa tarkan ajoituksen voivan olla epävakaa. Vaiheistettu tuotetehtävänanto voisi olla: ”Image 1 määrittää Product A:n. Shot 1: lähesty hitaasti Product A:ta tasolla. Shot 2: käsi kääntää sitä kohti valoa. Shot 3: pysähdy etuetikettiin. Pehmeä huoneambienssi; säilytä painettu teksti.”</p><p>Valmistele viitteet perheen dokumentoitujen syötesääntöjen mukaan. Tuetut kuvamuodot sisältävät JPEG:n, PNG:n, WebP:n, BMP:n, TIFF:n, GIF:n, HEIC:n ja HEIF:n; jokainen kuva on alle 30 MB. Opas määrittää kuvan leveyden ja korkeuden aidosti välille 300–6 000 pikseliä ja kuvasuhteen aidosti välille 0.4–2.5. Videoviitteet käyttävät MP4:ää tai MOV:ia H.264- tai H.265-videolla ja AAC- tai MP3-äänellä, ovat kukin enintään 200 MB ja nopeudeltaan 24–60 ruutua sekunnissa. Niiden leveys ja korkeus ovat 300–6 000 pikseliä, kuvasuhde 0.4–2.5 ja kokonaispikselimäärä 407 696–8 295 044. Ääniviitteet käyttävät WAV:ia tai MP3:a ja ovat kukin enintään 15 MB. Nämä ovat valmistajan syötteen valmistelumäärityksiä, erillisiä tietyn sovelluksen lataussäätimistä.</p><p>Valmistajan muotokuvatyönkulku edellyttää erityistä valmistelua kuville tai videoille, joissa on todellisia ihmiskasvoja: suorat viitelataukset eivät ole tavallinen tuettu polku. Se dokumentoi luotetut mallitulosteet, valmiit digitaaliset hahmot ja luvallisen oikean henkilön aineistotyönkulun erillisinä ratkaisuina. Myös äänen vastaavuus, ääntäminen ja leikkeen rajan ääni täytyy tarkistaa. Kehoteopas suosittelee kuvaamaan tarkoitetut äänen ominaisuudet ja pitämään vuoropuhelutyylin lähellä ääniviitettä. Tarkista lopullisesta tuotoksesta kohteen yhtenäisyys, tarkat puhutut sanat, toiminnan ajoitus, ruutusiirtymät ja loppuääni; korjaa juuri tehtävänannosta eroava elementti.</p>",
  "aboutText": "Seedance 2.0 Mini on erikseen nimetty malli ByteDancen audiovisuaalisessa Seedance 2.0 -perheessä. Valmistaja dokumentoi tekstistä videoksi -tilan, ensimmäiseen ruutuun sekä ensimmäiseen ja viimeiseen ruutuun perustuvan kuvasta videoksi -tilan, multimodaalisen viitegeneroinnin, videomuokkauksen ja videon jatkamisen. Äänen voi generoida kuvan kanssa. Valitse luontitila olemassa olevan aineiston perusteella: kirjoitettu tehtävänanto, kiinteä avauskuva, kaksi rajakuvaa tai muokkausta tai jatkoa tarvitseva leike.\n\nMinillä on oma tulosteprofiilinsa. Valmistaja luettelee 480p- ja 720p-videon 8-bittisellä värillä, 24 ruudulla sekunnissa ja MP4-tulosteella. Tuetut kuvasuhteet ovat 21:9, 16:9, 4:3, 1:1, 3:4 ja 9:16; dokumentoitu generoinnin kesto on 4–15 sekuntia. Valmistajan kestosäädin sallii myös automaattisen valinnan tällä alueella. Täyden Seedance 2.0 -mallin 1080p- ja 4K-vaihtoehdot ovat erillisiä; ne eivät ole Minin asetuksia. Perheen kykytaulukko luettelee viimeisen generoidun ruudun palauttamisen, mutta Draft-tilaa ei tueta.\n\nOmni-viite luo uuden kohtauksen käyttäen valittuja tietoja annetusta aineistosta. Kuva voi määrittää kohteen ulkoasun, sommittelun tai visuaalisen käsittelyn. Video voi määrittää toiminnan, kameraliikkeen tai tehosteen; ääniviite voi määrittää äänen sointivärin, melodian tai puhutun sisällön. Kerro, mitä kustakin viitteestä tulee ottaa sen sijaan, että pyytäisit kopioimaan kaikki ominaisuudet. Käytä esimerkiksi tuotekuvaa muotoon ja väriin, lyhyttä kameraliikeleikettä lähestymiseen ja ääniviitettä tunnelmaan.\n\nPerheen työnkulku sallii enintään yhdeksän viitekuvaa, kolme videoleikettä ja kolme äänileikettä. Videoviitteet ovat kukin 2–15 sekuntia ja yhteensä enintään 15 sekuntia; ääniviitteillä on samat leike- ja kokonaiskestorajat. Pelkkää ääntä tai tekstiä ja ääntä ilman visuaalista viitettä ei tueta viiteyhdistelminä. Pelkkään tekstiin perustuva luominen on erillinen tuettu tila. Anna sarjan aineistot tarkoitetussa järjestyksessä ja viittaa niihin johdonmukaisesti nimillä Image 1, Video 1 tai Audio 1 käyttäen järjestystä kunkin mediatyypin sisällä. Älä korvaa numeroitua viitettä aineistotunnisteella kirjoitetussa kehotteessa.\n\nEnsimmäisen ruudun kuva määrittää kuvapohjaisen otoksen avauksen. Ensimmäisen ja viimeisen ruudun tila määrittää molemmat rajat. Jos täsmälliset rajakuvat ovat tärkeitä, valitse kyseinen tila sen sijaan, että kuvaisit viitteitä aloitukseksi ja lopuksi omni-viitekehotteessa. Jälkimmäinen on kehotteella ohjattu vaikutus eikä vastaa tarkkaa rajakuvavalintaa. Valmistele kuvat tulostesommitteluun ja määritä toiminta, joka yhdistää alku- ja lopputilanteen.\n\nVideomuokkaus muuttaa olemassa olevaa leikettä sen sijaan, että käyttäisi sitä vain inspiraationa. Määritä muokattava video, muutettava esine tai alue, sen esiintymisaika ja sijainti sekä säilytettävät yksityiskohdat. Hyödyllinen tehtävänanto on: ”Korvaa Video 1:n muki Image 1:ssä näkyvällä astialla; säilytä käden liike, rajaus, valaistus ja pöytäjärjestys.” Nimeä poistettavaksi ei-toivottu esine ja säilytettävät ympäröivät elementit. Valmistaja neuvoo viittaamaan muokkauksessa tai jatkamisessa suoraan kohdevideoon; viitteeksi muotoilu voi sen sijaan välittää pyynnön uudesta generoidusta kohtauksesta.\n\nVideon jatkaminen lisää tapahtumia olemassa olevan leikkeen eteen tai jälkeen. Kuvaa jatkamisen suunta ja seuraava tai edeltävä tapahtuma. Dokumentoitu työnkulku voi myös yhdistää kaksi tai kolme leikettä generoiduilla siirtymillä; kolmen syötevideon tulee silti mahtua yhdessä 15 sekunnin viitebudjettiin. Opas erottaa pääasiassa alkuperäisen leikkeen raja-aineistoa sisältävän jatkon pyynnöstä, joka nimenomaisesti säilyttää alkuperäisen sisällön. Kerro tuloksen haluttu koostumus: vain jatko tai annettu leike ja uusi toiminta sisältävä kohtaus.\n\nErota selkeässä ohjauksessa vakaa kohtauskuvaus tapahtumien sarjasta. Määritä jokaiselle kohteelle kaksi tai kolme erottavaa visuaalista piirrettä ja yhtenäinen tunniste. Kuvaa sitten toiminnot, ympäristö, valaistus, kameraliike, visuaalinen tyyli ja rajaukset. Yhdistä vuoropuhelun jokainen repliikki puhujaan ja olennaiseen toimintaan. Käytä järjestettyjä otostunnisteita tarkkojen aikaleimojen pitämisen sijaan luotettavina säätiminä: valmistaja huomauttaa tarkan ajoituksen voivan olla epävakaa. Vaiheistettu tuotetehtävänanto voisi olla: ”Image 1 määrittää Product A:n. Shot 1: lähesty hitaasti Product A:ta tasolla. Shot 2: käsi kääntää sitä kohti valoa. Shot 3: pysähdy etuetikettiin. Pehmeä huoneambienssi; säilytä painettu teksti.”\n\nValmistele viitteet perheen dokumentoitujen syötesääntöjen mukaan. Tuetut kuvamuodot sisältävät JPEG:n, PNG:n, WebP:n, BMP:n, TIFF:n, GIF:n, HEIC:n ja HEIF:n; jokainen kuva on alle 30 MB. Opas määrittää kuvan leveyden ja korkeuden aidosti välille 300–6 000 pikseliä ja kuvasuhteen aidosti välille 0.4–2.5. Videoviitteet käyttävät MP4:ää tai MOV:ia H.264- tai H.265-videolla ja AAC- tai MP3-äänellä, ovat kukin enintään 200 MB ja nopeudeltaan 24–60 ruutua sekunnissa. Niiden leveys ja korkeus ovat 300–6 000 pikseliä, kuvasuhde 0.4–2.5 ja kokonaispikselimäärä 407 696–8 295 044. Ääniviitteet käyttävät WAV:ia tai MP3:a ja ovat kukin enintään 15 MB. Nämä ovat valmistajan syötteen valmistelumäärityksiä, erillisiä tietyn sovelluksen lataussäätimistä.\n\nValmistajan muotokuvatyönkulku edellyttää erityistä valmistelua kuville tai videoille, joissa on todellisia ihmiskasvoja: suorat viitelataukset eivät ole tavallinen tuettu polku. Se dokumentoi luotetut mallitulosteet, valmiit digitaaliset hahmot ja luvallisen oikean henkilön aineistotyönkulun erillisinä ratkaisuina. Myös äänen vastaavuus, ääntäminen ja leikkeen rajan ääni täytyy tarkistaa. Kehoteopas suosittelee kuvaamaan tarkoitetut äänen ominaisuudet ja pitämään vuoropuhelutyylin lähellä ääniviitettä. Tarkista lopullisesta tuotoksesta kohteen yhtenäisyys, tarkat puhutut sanat, toiminnan ajoitus, ruutusiirtymät ja loppuääni; korjaa juuri tehtävänannosta eroava elementti.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "a21a87a57499b3c2d1ea000333f218672dc6dcc5f4b9205555da78475f85e6b8",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 2.0 Mini</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>bytedance/seedance-2.0-mini</code><button type=\"button\" id=\"copy-id\">Kopioi ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Mallikortin osiot\"><button type=\"button\" data-card-jump=\"overview\">Aloitus</button><button type=\"button\" data-card-jump=\"methods\">Syötteet &amp; menetelmät</button><button type=\"button\" data-card-jump=\"pricing\">Hinnoittelu</button><button type=\"button\" data-card-jump=\"examples\">Esimerkit</button><button type=\"button\" data-card-jump=\"results\">Tulokset</button><button type=\"button\" data-card-jump=\"aliases\">Aliakset</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-menetelmät\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|bytedance%2Fseedance-2.0-mini\">Video</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Aloitus</h3><p class=\"mdesc-full\">Seedance 2.0 Mini luo lyhyitä videoita tekstistä sekä kuva-, video- ja ääniviitteistä valinnaisella generoidulla äänellä. Se tukee kohtausten luomista, kohdennettuja videomuokkauksia ja jatkamista dokumentoidulla 480p- tai 720p-tulosteprofiililla.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Teksti · Kuvat · Ääni</dd></div><div><dt>Tulokset</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Tietoa mallista</summary><p class=\"note-s\" data-model-method-boundary>Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.</p><div class=\"mabout\" id=\"m-about\"><p>Seedance 2.0 Mini on erikseen nimetty malli ByteDancen audiovisuaalisessa Seedance 2.0 -perheessä. Valmistaja dokumentoi tekstistä videoksi -tilan, ensimmäiseen ruutuun sekä ensimmäiseen ja viimeiseen ruutuun perustuvan kuvasta videoksi -tilan, multimodaalisen viitegeneroinnin, videomuokkauksen ja videon jatkamisen. Äänen voi generoida kuvan kanssa. Valitse luontitila olemassa olevan aineiston perusteella: kirjoitettu tehtävänanto, kiinteä avauskuva, kaksi rajakuvaa tai muokkausta tai jatkoa tarvitseva leike.</p><p>Minillä on oma tulosteprofiilinsa. Valmistaja luettelee 480p- ja 720p-videon 8-bittisellä värillä, 24 ruudulla sekunnissa ja MP4-tulosteella. Tuetut kuvasuhteet ovat 21:9, 16:9, 4:3, 1:1, 3:4 ja 9:16; dokumentoitu generoinnin kesto on 4–15 sekuntia. Valmistajan kestosäädin sallii myös automaattisen valinnan tällä alueella. Täyden Seedance 2.0 -mallin 1080p- ja 4K-vaihtoehdot ovat erillisiä; ne eivät ole Minin asetuksia. Perheen kykytaulukko luettelee viimeisen generoidun ruudun palauttamisen, mutta Draft-tilaa ei tueta.</p><p>Omni-viite luo uuden kohtauksen käyttäen valittuja tietoja annetusta aineistosta. Kuva voi määrittää kohteen ulkoasun, sommittelun tai visuaalisen käsittelyn. Video voi määrittää toiminnan, kameraliikkeen tai tehosteen; ääniviite voi määrittää äänen sointivärin, melodian tai puhutun sisällön. Kerro, mitä kustakin viitteestä tulee ottaa sen sijaan, että pyytäisit kopioimaan kaikki ominaisuudet. Käytä esimerkiksi tuotekuvaa muotoon ja väriin, lyhyttä kameraliikeleikettä lähestymiseen ja ääniviitettä tunnelmaan.</p><p>Perheen työnkulku sallii enintään yhdeksän viitekuvaa, kolme videoleikettä ja kolme äänileikettä. Videoviitteet ovat kukin 2–15 sekuntia ja yhteensä enintään 15 sekuntia; ääniviitteillä on samat leike- ja kokonaiskestorajat. Pelkkää ääntä tai tekstiä ja ääntä ilman visuaalista viitettä ei tueta viiteyhdistelminä. Pelkkään tekstiin perustuva luominen on erillinen tuettu tila. Anna sarjan aineistot tarkoitetussa järjestyksessä ja viittaa niihin johdonmukaisesti nimillä Image 1, Video 1 tai Audio 1 käyttäen järjestystä kunkin mediatyypin sisällä. Älä korvaa numeroitua viitettä aineistotunnisteella kirjoitetussa kehotteessa.</p><p>Ensimmäisen ruudun kuva määrittää kuvapohjaisen otoksen avauksen. Ensimmäisen ja viimeisen ruudun tila määrittää molemmat rajat. Jos täsmälliset rajakuvat ovat tärkeitä, valitse kyseinen tila sen sijaan, että kuvaisit viitteitä aloitukseksi ja lopuksi omni-viitekehotteessa. Jälkimmäinen on kehotteella ohjattu vaikutus eikä vastaa tarkkaa rajakuvavalintaa. Valmistele kuvat tulostesommitteluun ja määritä toiminta, joka yhdistää alku- ja lopputilanteen.</p><p>Videomuokkaus muuttaa olemassa olevaa leikettä sen sijaan, että käyttäisi sitä vain inspiraationa. Määritä muokattava video, muutettava esine tai alue, sen esiintymisaika ja sijainti sekä säilytettävät yksityiskohdat. Hyödyllinen tehtävänanto on: ”Korvaa Video 1:n muki Image 1:ssä näkyvällä astialla; säilytä käden liike, rajaus, valaistus ja pöytäjärjestys.” Nimeä poistettavaksi ei-toivottu esine ja säilytettävät ympäröivät elementit. Valmistaja neuvoo viittaamaan muokkauksessa tai jatkamisessa suoraan kohdevideoon; viitteeksi muotoilu voi sen sijaan välittää pyynnön uudesta generoidusta kohtauksesta.</p><p>Videon jatkaminen lisää tapahtumia olemassa olevan leikkeen eteen tai jälkeen. Kuvaa jatkamisen suunta ja seuraava tai edeltävä tapahtuma. Dokumentoitu työnkulku voi myös yhdistää kaksi tai kolme leikettä generoiduilla siirtymillä; kolmen syötevideon tulee silti mahtua yhdessä 15 sekunnin viitebudjettiin. Opas erottaa pääasiassa alkuperäisen leikkeen raja-aineistoa sisältävän jatkon pyynnöstä, joka nimenomaisesti säilyttää alkuperäisen sisällön. Kerro tuloksen haluttu koostumus: vain jatko tai annettu leike ja uusi toiminta sisältävä kohtaus.</p><p>Erota selkeässä ohjauksessa vakaa kohtauskuvaus tapahtumien sarjasta. Määritä jokaiselle kohteelle kaksi tai kolme erottavaa visuaalista piirrettä ja yhtenäinen tunniste. Kuvaa sitten toiminnot, ympäristö, valaistus, kameraliike, visuaalinen tyyli ja rajaukset. Yhdistä vuoropuhelun jokainen repliikki puhujaan ja olennaiseen toimintaan. Käytä järjestettyjä otostunnisteita tarkkojen aikaleimojen pitämisen sijaan luotettavina säätiminä: valmistaja huomauttaa tarkan ajoituksen voivan olla epävakaa. Vaiheistettu tuotetehtävänanto voisi olla: ”Image 1 määrittää Product A:n. Shot 1: lähesty hitaasti Product A:ta tasolla. Shot 2: käsi kääntää sitä kohti valoa. Shot 3: pysähdy etuetikettiin. Pehmeä huoneambienssi; säilytä painettu teksti.”</p><p>Valmistele viitteet perheen dokumentoitujen syötesääntöjen mukaan. Tuetut kuvamuodot sisältävät JPEG:n, PNG:n, WebP:n, BMP:n, TIFF:n, GIF:n, HEIC:n ja HEIF:n; jokainen kuva on alle 30 MB. Opas määrittää kuvan leveyden ja korkeuden aidosti välille 300–6 000 pikseliä ja kuvasuhteen aidosti välille 0.4–2.5. Videoviitteet käyttävät MP4:ää tai MOV:ia H.264- tai H.265-videolla ja AAC- tai MP3-äänellä, ovat kukin enintään 200 MB ja nopeudeltaan 24–60 ruutua sekunnissa. Niiden leveys ja korkeus ovat 300–6 000 pikseliä, kuvasuhde 0.4–2.5 ja kokonaispikselimäärä 407 696–8 295 044. Ääniviitteet käyttävät WAV:ia tai MP3:a ja ovat kukin enintään 15 MB. Nämä ovat valmistajan syötteen valmistelumäärityksiä, erillisiä tietyn sovelluksen lataussäätimistä.</p><p>Valmistajan muotokuvatyönkulku edellyttää erityistä valmistelua kuville tai videoille, joissa on todellisia ihmiskasvoja: suorat viitelataukset eivät ole tavallinen tuettu polku. Se dokumentoi luotetut mallitulosteet, valmiit digitaaliset hahmot ja luvallisen oikean henkilön aineistotyönkulun erillisinä ratkaisuina. Myös äänen vastaavuus, ääntäminen ja leikkeen rajan ääni täytyy tarkistaa. Kehoteopas suosittelee kuvaamaan tarkoitetut äänen ominaisuudet ja pitämään vuoropuhelutyylin lähellä ääniviitettä. Tarkista lopullisesta tuotoksesta kohteen yhtenäisyys, tarkat puhutut sanat, toiminnan ajoitus, ruutusiirtymät ja loppuääni; korjaa juuri tehtävänannosta eroava elementti.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Saatavilla Ailootissa · syötteet &amp; menetelmät</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>text</code>, <code>image</code>, <code>audio</code></dd></div><div><dt>Tulostyypit</dt><dd><code>video</code></dd></div><div><dt>Tulosteen muoto</dt><dd>alkuperäiset MP4-tavut; ei normalisointia eikä uudelleenkoodausta</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Kenttä</th><th>Tyyppi</th><th>Vaatimus</th><th>Arvot &amp; rajat</th><th>Oletus</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>bytedance/seedance-2.0-mini</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>integer</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15</div><div>Vähimmäismäärä: 1</div><div>Enimmäismäärä: 600</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>480p, 720p</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>1:1, 3:4, 9:16, 4:3, 16:9, 21:9, 9:21</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>boolean</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>false, true</div><div>Ehdot: generate_audio-kentän pois jättäminen valitsee äänen sisältävän hinnan; false valitsee äänettömän hinnan. Tarkista tuloksen has_audio-kentästä, palautettiinko ääniraita.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>array</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Kohteiden vähimmäismäärä: 1</div><div>Kohteiden enimmäismäärä: 2</div><div>Syötteen sisältö: Kuvaolioiden taulukko. Jokaisessa on type=image_url, url-kentän sisältävä image_url ja frame_type=first_frame tai last_frame. Kukin rooli esiintyy enintään kerran. Käytä julkisia HTTPS-kuvan URL-osoitteita.</div><div>Tarkat avaimet: type, image_url, frame_type</div><div>Ehdot: Nämä avaimet koskevat jokaista kuvaoliota. Jätä frame_images pois pelkkää tekstiä sisältävästä pyynnöstä.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>array</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Syötteen sisältö: Kuva- tai ääniviiteolioiden taulukko. Aseta type-kentän arvoksi image_url tai audio_url ja anna vastaava url-kentän sisältävä URL-olio. Videoviitteitä ei edelleenkään voida hinnoitella.</div><div>Ehdot: Jätä frame_images pois käyttääksesi viitetilaa. Käytä julkisia HTTPS-osoitteita.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">size</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>480x480, 480x640, 480x854, 640x480, 854x480, 1120x480, 720x720, 720x960, 720x1280, 720x1680, 960x720, 1280x720, 1680x720</div><div>Merkkijonomalli: ^[1-9][0-9]*x[1-9][0-9]*$</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>integer</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Vähimmäismäärä: −9 223 372 036 854 775 808</div><div>Enimmäismäärä: 9 223 372 036 854 775 807</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Merkkijonomalli: ^https://</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>object</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Syöteaineistojen yhdistelmät</summary><p class=\"note-s\"><b>Tekstistä videoksi</b> · Kirjoitettu kehote. · Pakollinen: model, prompt, duration</p><p class=\"note-s\"><code>Anna tekstikehote ja tuettu kesto kokonaisina sekunteina. Käytä täsmälleen lueteltua kokoa tai resoluutiota ja kuvasuhdetta, jotka muodostavat luetellut mitat.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Tyyppi: string · bytedance/seedance-2.0-mini</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Tyyppi: string · UTF-8-tavujen enimmäismäärä: 10 000 · Vaaditaan muu merkki kuin tyhjämerkki: Kyllä</p><p class=\"note-s\"><b>Kuvasta videoksi</b> · Kirjoitettu kehote ja ruutukuva. · Pakollinen: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images on oliotaulukko, jossa on type=image_url, url-kentän sisältävä image_url ja frame_type. Käytä julkista HTTPS-kuvan URL-osoitetta; first_frame ja last_frame saavat kumpikin esiintyä kerran. Käytä lueteltua tuloskokoa tai yhteensopivia mittoja. Älä lisää videoviitteitä.</code></p><p class=\"note-s\">Tarkat avaimet: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Tyyppi: string · bytedance/seedance-2.0-mini</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Tyyppi: string · UTF-8-tavujen enimmäismäärä: 10 000 · Vaaditaan muu merkki kuin tyhjämerkki: Kyllä</p><p class=\"note-s\"><b>Reference to video</b> · Kirjoitettu kehote sekä kuva- tai ääniviitteet. · Pakollinen: model, prompt, duration, input_references</p><p class=\"note-s\"><code>input_references on taulukko. Jokaisessa oliossa on type=image_url tai type=audio_url sekä vastaava url-kentän sisältävä URL-olio. Käytä julkisia HTTPS-linkkejä. Jätä frame_images pois valitaksesi viitetilan. Videoviitteitä ei voida hinnoitella.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Tyyppi: string · bytedance/seedance-2.0-mini</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Tyyppi: string · UTF-8-tavujen enimmäismäärä: 10 000 · Vaaditaan muu merkki kuin tyhjämerkki: Kyllä</p></details><details class=\"note-s\" data-method-contract><summary>Menetelmän parametrit ja elinkaari</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametri</th><th>Sopimus</th></tr></thead><tbody><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>content_type</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>application/json</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>required</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>material_types</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>text, image, audio</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>additional_properties</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>false</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>optional_controls</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, size, seed, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Elinkaari: <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\">Hinnoittelu</h3><div class=\"card-result-process\" data-billing-basis><h5>Lopullisen veloituksen laskenta</h5><p class=\"note-s\">Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.</p><dl data-price-conditions><dt>Nopea tila</dt><dd>Ei määritetty <span class=\"note-s\">Kun nopea tila on valittu</span></dd><dt>Flex-tila</dt><dd>Ei määritetty <span class=\"note-s\">Kun flex-tila on valittu</span></dd><dt>Päättelyn enimmäisteho</dt><dd>Ei määritetty <span class=\"note-s\">Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä</span></dd></dl></div><div data-declared-tariff-pricing><h4>Arvioidut vertailuhinnat</h4><h4>Hinnat asetusten mukaan</h4><p class=\"note-s\">Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Asetukset</th><th>Hinnasto</th><th>Ennustettu määrä</th><th>Laskutusyksikkö</th><th>Laskutusehdot</th><th>Veloitus</th></tr></thead><tbody><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Tokenien perushinnat</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>Perushinta</td><td data-cell-label=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>—</td><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>—</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · Syötetokenit · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Tuloste · Tulostokenit · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistin luku · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus, 1 tunti · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Videotokenin hinta</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>1K videotokenia kohden</td><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>Tässä hinnoitteluavaimessa ei ole ilmoitettu lisäehtoa.</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · Videotokenin hinta · Arvio vain vertailua varten</span> <b>$0.007</b> <span class=\"price-unit\">1K videotokenia kohden</span></div><p class=\"note-s\">Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.</p></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Videotokenin hinta</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>1K videotokenia kohden</td><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>syöte: with_video_input</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>reference · Videotokenin hinta · Arvio vain vertailua varten</span> <b>$0.0042</b> <span class=\"price-unit\">1K videotokenia kohden</span></div><p class=\"note-s\">Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.</p></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Videotokenin hinta</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>1K videotokenia kohden</td><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>ääni: without_audio</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · Videotokenin hinta · Arvio vain vertailua varten</span> <b>$0.007</b> <span class=\"price-unit\">1K videotokenia kohden</span></div><p class=\"note-s\">Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.</p></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Arvioitu luontikustannus</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>yhden generoinnin arvio</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>—</td><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>—</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · Arvioidut generointikustannukset · Arvio vain vertailua varten</span> <b>$0.1512</b> <span class=\"price-unit\">arvio ennen generointia</span></div><p class=\"note-s\">Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. <a href=\"/docs/fi/billing/reserve/\">Varauksen ja lopullisen veloituksen toiminta →</a></p><div data-declared-reference-pricing><h4>Viitehinnaston tiedot</h4><p class=\"note-s\">Mallitason viitehinnastot eivät muuta menetelmän valintaa, hinta-arvioita tai veloituksia. Käytössä olevat veloitukset käyttävät valitun Ailoot-menetelmän hintoja.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Videokokoonpanojen hintaviitteet</summary><h4>Hinnat asetusten mukaan</h4><p class=\"note-s\">Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Asetukset</th><th>Laskutusehdot</th><th>Veloitus</th></tr></thead><tbody><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Videotokenin hinta</th><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>Tässä hinnoitteluavaimessa ei ole ilmoitettu lisäehtoa.</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · Videotokenin hinta</span> <b>$0.007</b> <span class=\"price-unit\">1K videotokenia kohden</span></div><p class=\"note-s\">Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.</p></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Videotokenin hinta</th><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>ääni: without_audio</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · Videotokenin hinta</span> <b>$0.007</b> <span class=\"price-unit\">1K videotokenia kohden</span></div><p class=\"note-s\">Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.</p></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Videotokenin hinta</th><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>syöte: with_video_input</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>reference · Videotokenin hinta</span> <b>$0.0042</b> <span class=\"price-unit\">1K videotokenia kohden</span></div><p class=\"note-s\">Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esimerkkipyynnöt</h3><h4>Ailoot Ultra · Video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-1137-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1137-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · luo video</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1137-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1137-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;model&quot;:&quot;bytedance/seedance-2.0-mini&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;duration&quot;:4,&quot;resolution&quot;:&quot;480p&quot;,&quot;size&quot;:&quot;480x480&quot;,&quot;generate_audio&quot;:false}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Vastaanota ja tallenna tulokset</h3><h4>Ailoot Ultra · Video</h4><p class=\"note-s\">allekirjoitetut käyttäjälle kuuluvan sisällön osoitteet</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>Tarkista työn tila</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-1138-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1138-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET alkuperäisen toiminnon tila</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1138-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1138-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Muut sisällön lukukerrat</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-1139-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1139-panel-0\" aria-selected=\"true\" tabindex=\"0\">Tallenna jokainen valmistunut omistamasi tuloste</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1139-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1139-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Säilytä kaikki valmistuneet tulokset</h5><p class=\"note-s\">Tallenna jokainen valmistunut video tai palautettu tiedosto; nouda jokainen todellinen palautettu aineiston URL.</p><p class=\"note-s\">Säilytä jokainen todellinen käyttäjälle kuuluva tulos ja sen mukana palautetut mitatut metatiedot.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jos alkuperäinen vastaus on tarkistettava</h5><p class=\"note-s\">503 result_pending_check + alkuperäinen id + X-Should-Retry:false; älä koskaan toista alkuperäistä pyyntöä</p></div><details class=\"card-about\" data-output-fields><summary>Vastauksen kentät</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kenttä</th><th>Tyyppi</th><th>Merkitys</th></tr></thead><tbody><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>integer</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Tämän videon nollasta alkava sijainti tulosluettelossa.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Allekirjoitettu HTTPS-latauksen URL-osoite tälle valmistuneelle videolle.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Alkuperäisten videotavujen SHA-256-tiiviste; null, jos tietoa ei ole saatavilla.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>integer | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Alkuperäisen videotiedoston koko tavuina; null, jos tietoa ei ole saatavilla.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>integer | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Videon mitattu kesto millisekunteina; null, jos tietoa ei ole saatavilla.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>integer | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Videon leveys pikseleinä; null, jos tietoa ei ole saatavilla.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>integer | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Videon korkeus pikseleinä; null, jos tietoa ei ole saatavilla.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Videokoodekin tunniste; null, jos sitä ei ole kirjattu.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>boolean | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Sisältääkö video ääniraidan; null, jos asiaa ei ole mitattu.</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string | null</td><td data-cell-label=\"Merkitys\"><span class=\"card-cell-label\">Merkitys</span>Äänikoodekin tunniste; null, jos tunnistetta ei ole kirjattu.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Virheet ja seuraavat vaiheet</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Vastaus</th><th>Ehto</th><th>Seuraava vaihe</th></tr></thead><tbody><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Videoon ei päästä käsiksi tai tätä videon tunnistetta ei löytynyt.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Tarkista videon käyttöoikeus. Käytä olemassa olevan videon alkuperäistä julkista tunnistetta ja samaa API-avainta.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>API-avain ei vastaa todennettua tiliä.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Tarkista API-avaimesi ja tilisi käyttöoikeus ennen lähettämistä.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Pyyntöä ei voitu lukea tai latausindeksi on virheellinen.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Korjaa pyyntösisältö. Valitse latausta varten alkuperäisen tehtävän palauttama tulosindeksi.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Valittua videokokoonpanoa ei voida hinnoitella.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Valitse tuettu videokokoonpano ja täytä sen pakolliset asetukset ennen korjatun pyynnön lähettämistä.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Videosyöte tai alkuperäinen jatkotehtävä on virheellinen.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Käytä kelvollisia HTTPS-syötteitä. Käytä jatkamiseen valmistuneen alkuperäisen videosi julkista tunnistetta samalla API-avaimella.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>402 · <code>billing_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Käytettävissä oleva saldo tai rajoitukset eivät salli katevarausta.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Tarkista käytettävissä oleva saldosi ja rajoitukset ennen uuden pyynnön lähettämistä.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>503 · <code>server_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Videon tarkistus, tallennus tai palvelun käyttö ei ole tilapäisesti saatavilla.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Odota palvelun saatavuutta. Jos sinulla on jo videon tunniste, tarkista alkuperäinen tehtävä uuden luontipyynnön lähettämisen sijaan.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Alkuperäinen videotulos ja veloitus on tarkistettava.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Säilytä palautettu videon tunniste ja tarkista kyseinen tehtävä. Älä lähetä korvaavaa videon luontipyyntöä tarkistuksen aikana.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Olemassa olevan videon lataus ei ole tilapäisesti saatavilla.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Tarkista sama videotehtävä myöhemmin ja lataa sen olemassa oleva tulos. Uusi luontipyyntö luo erillisen operaation.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Videosisältöä ei ole julkaistu.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Tarkista alkuperäisen tehtävän tila. Lataa, kun tila on completed; jos tila on failed, noudata sen veloituksen tarkistusilmoitusta.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliakset</h3><h4>Mallin aliakset</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=bytedance%2Fseedance-2.0-mini&amp;route=Ultra&amp;caller=bytedance%2Fseedance-2.0-mini&amp;fmt=videos\"><code>bytedance/seedance-2.0-mini</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\">Käytä yllä näytettyjä menetelmäpolkuja.</p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=bytedance%2Fseedance-2.0-mini&amp;route=Ultra&amp;caller=bytedance%2Fseedance-2.0-mini&amp;fmt=videos\"><code>bytedance/seedance-2.0-mini</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "bytedance/seedance-2.0-mini",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|bytedance%2Fseedance-2.0-mini",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.",
          "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": "Säilytä jokainen todellinen käyttäjälle kuuluva tulos ja sen mukana palautetut mitatut metatiedot.",
            "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": "Videoon ei päästä käsiksi tai tätä videon tunnistetta ei löytynyt.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista videon käyttöoikeus. Käytä olemassa olevan videon alkuperäistä julkista tunnistetta ja samaa API-avainta.",
                "type": "not_found_error"
              },
              {
                "condition": "API-avain ei vastaa todennettua tiliä.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista API-avaimesi ja tilisi käyttöoikeus ennen lähettämistä.",
                "type": "authentication_error"
              },
              {
                "condition": "Pyyntöä ei voitu lukea tai latausindeksi on virheellinen.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Korjaa pyyntösisältö. Valitse latausta varten alkuperäisen tehtävän palauttama tulosindeksi.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Valittua videokokoonpanoa ei voida hinnoitella.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Valitse tuettu videokokoonpano ja täytä sen pakolliset asetukset ennen korjatun pyynnön lähettämistä.",
                "type": "price_unavailable"
              },
              {
                "condition": "Videosyöte tai alkuperäinen jatkotehtävä on virheellinen.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Käytä kelvollisia HTTPS-syötteitä. Käytä jatkamiseen valmistuneen alkuperäisen videosi julkista tunnistetta samalla API-avaimella.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Käytettävissä oleva saldo tai rajoitukset eivät salli katevarausta.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista käytettävissä oleva saldosi ja rajoitukset ennen uuden pyynnön lähettämistä.",
                "type": "billing_error"
              },
              {
                "condition": "Videon tarkistus, tallennus tai palvelun käyttö ei ole tilapäisesti saatavilla.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Odota palvelun saatavuutta. Jos sinulla on jo videon tunniste, tarkista alkuperäinen tehtävä uuden luontipyynnön lähettämisen sijaan.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Alkuperäinen videotulos ja veloitus on tarkistettava.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Säilytä palautettu videon tunniste ja tarkista kyseinen tehtävä. Älä lähetä korvaavaa videon luontipyyntöä tarkistuksen aikana.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Olemassa olevan videon lataus ei ole tilapäisesti saatavilla.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Tarkista sama videotehtävä myöhemmin ja lataa sen olemassa oleva tulos. Uusi luontipyyntö luo erillisen operaation.",
                "type": "server_error"
              },
              {
                "condition": "Videosisältöä ei ole julkaistu.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista alkuperäisen tehtävän tila. Lataa, kun tila on completed; jos tila on failed, noudata sen veloituksen tarkistusilmoitusta.",
                "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 + alkuperäinen id + X-Should-Retry:false; älä koskaan toista alkuperäistä pyyntöä"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Anna tekstikehote ja tuettu kesto kokonaisina sekunteina. Käytä täsmälleen lueteltua kokoa tai resoluutiota ja kuvasuhdetta, jotka muodostavat luetellut mitat.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Kirjoitettu kehote."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images on oliotaulukko, jossa on type=image_url, url-kentän sisältävä image_url ja frame_type. Käytä julkista HTTPS-kuvan URL-osoitetta; first_frame ja last_frame saavat kumpikin esiintyä kerran. Käytä lueteltua tuloskokoa tai yhteensopivia mittoja. Älä lisää videoviitteitä.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Kirjoitettu kehote ja ruutukuva."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references on taulukko. Jokaisessa oliossa on type=image_url tai type=audio_url sekä vastaava url-kentän sisältävä URL-olio. Käytä julkisia HTTPS-linkkejä. Jätä frame_images pois valitaksesi viitetilan. Videoviitteitä ei voida hinnoitella.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Kirjoitettu kehote sekä kuva- tai ääniviitteet."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Tämän videon nollasta alkava sijainti tulosluettelossa.",
                  "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": "Allekirjoitettu HTTPS-latauksen URL-osoite tälle valmistuneelle videolle.",
                  "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": "Alkuperäisten videotavujen SHA-256-tiiviste; null, jos tietoa ei ole saatavilla.",
                  "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": "Alkuperäisen videotiedoston koko tavuina; null, jos tietoa ei ole saatavilla.",
                  "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": "Videon mitattu kesto millisekunteina; null, jos tietoa ei ole saatavilla.",
                  "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": "Videon leveys pikseleinä; null, jos tietoa ei ole saatavilla.",
                  "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": "Videon korkeus pikseleinä; null, jos tietoa ei ole saatavilla.",
                  "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": "Videokoodekin tunniste; null, jos sitä ei ole kirjattu.",
                  "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": "Sisältääkö video ääniraidan; null, jos asiaa ei ole mitattu.",
                  "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": "Äänikoodekin tunniste; null, jos tunnistetta ei ole kirjattu.",
                  "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": "allekirjoitetut käyttäjälle kuuluvan sisällön osoitteet",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-2.0-mini"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "4:3",
                  "16:9",
                  "21:9",
                  "9:21"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "generate_audio-kentän pois jättäminen valitsee äänen sisältävän hinnan; false valitsee äänettömän hinnan. Tarkista tuloksen has_audio-kentästä, palautettiinko ääniraita.",
                "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": "Nämä avaimet koskevat jokaista kuvaoliota. Jätä frame_images pois pelkkää tekstiä sisältävästä pyynnöstä.",
                "content": "Kuvaolioiden taulukko. Jokaisessa on type=image_url, url-kentän sisältävä image_url ja frame_type=first_frame tai last_frame. Kukin rooli esiintyy enintään kerran. Käytä julkisia HTTPS-kuvan URL-osoitteita.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Jätä frame_images pois käyttääksesi viitetilaa. Käytä julkisia HTTPS-osoitteita.",
                "content": "Kuva- tai ääniviiteolioiden taulukko. Aseta type-kentän arvoksi image_url tai audio_url ja anna vastaava url-kentän sisältävä URL-olio. Videoviitteitä ei edelleenkään voida hinnoitella.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "640x480",
                  "854x480",
                  "1120x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "960x720",
                  "1280x720",
                  "1680x720"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "syöte: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Arvioitu luontikustannus",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"model\":\"bytedance/seedance-2.0-mini\",\"prompt\":\"A serene mountain landscape at sunset\",\"duration\":4,\"resolution\":\"480p\",\"size\":\"480x480\",\"generate_audio\":false}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0042000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_with_video_input",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000042",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "reference",
            "unit": "video_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.1512",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1512",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "bytedance/seedance-2.0-mini",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "b17118645607ff777500539812b523bbf887c5433729c72739be13b92a46675d",
    "input_html_sha256": "a6a843e339300ad82ecea914554d91af54d4db1ec72edb91b27527a0352b2510",
    "private_audit_sha256": "1fa264e11e99223d91fbe5e9a7fa9db246337f8b8f9ecc9565b56a40497a4c5a",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/bytedance-seedance-2-0-mini/",
    "description": "Seedance 2.0 Mini luo lyhyitä videoita tekstistä sekä kuva-, video- ja ääniviitteistä valinnaisella generoidulla äänellä. Se tukee kohtausten luomista, kohdennettuja videomuokkauksia ja jatkamista dokumentoidulla 480p- tai 720p-tulosteprofiililla.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/bytedance-seedance-2-0-mini/index.md",
    "title": "ByteDance: Seedance 2.0 Mini — Ailoot",
    "url": "https://ailoot.ai/models/fi/bytedance-seedance-2-0-mini/"
  },
  "rawModel": {
    "about": "Seedance 2.0 Mini on erikseen nimetty malli ByteDancen audiovisuaalisessa Seedance 2.0 -perheessä. Valmistaja dokumentoi tekstistä videoksi -tilan, ensimmäiseen ruutuun sekä ensimmäiseen ja viimeiseen ruutuun perustuvan kuvasta videoksi -tilan, multimodaalisen viitegeneroinnin, videomuokkauksen ja videon jatkamisen. Äänen voi generoida kuvan kanssa. Valitse luontitila olemassa olevan aineiston perusteella: kirjoitettu tehtävänanto, kiinteä avauskuva, kaksi rajakuvaa tai muokkausta tai jatkoa tarvitseva leike.\n\nMinillä on oma tulosteprofiilinsa. Valmistaja luettelee 480p- ja 720p-videon 8-bittisellä värillä, 24 ruudulla sekunnissa ja MP4-tulosteella. Tuetut kuvasuhteet ovat 21:9, 16:9, 4:3, 1:1, 3:4 ja 9:16; dokumentoitu generoinnin kesto on 4–15 sekuntia. Valmistajan kestosäädin sallii myös automaattisen valinnan tällä alueella. Täyden Seedance 2.0 -mallin 1080p- ja 4K-vaihtoehdot ovat erillisiä; ne eivät ole Minin asetuksia. Perheen kykytaulukko luettelee viimeisen generoidun ruudun palauttamisen, mutta Draft-tilaa ei tueta.\n\nOmni-viite luo uuden kohtauksen käyttäen valittuja tietoja annetusta aineistosta. Kuva voi määrittää kohteen ulkoasun, sommittelun tai visuaalisen käsittelyn. Video voi määrittää toiminnan, kameraliikkeen tai tehosteen; ääniviite voi määrittää äänen sointivärin, melodian tai puhutun sisällön. Kerro, mitä kustakin viitteestä tulee ottaa sen sijaan, että pyytäisit kopioimaan kaikki ominaisuudet. Käytä esimerkiksi tuotekuvaa muotoon ja väriin, lyhyttä kameraliikeleikettä lähestymiseen ja ääniviitettä tunnelmaan.\n\nPerheen työnkulku sallii enintään yhdeksän viitekuvaa, kolme videoleikettä ja kolme äänileikettä. Videoviitteet ovat kukin 2–15 sekuntia ja yhteensä enintään 15 sekuntia; ääniviitteillä on samat leike- ja kokonaiskestorajat. Pelkkää ääntä tai tekstiä ja ääntä ilman visuaalista viitettä ei tueta viiteyhdistelminä. Pelkkään tekstiin perustuva luominen on erillinen tuettu tila. Anna sarjan aineistot tarkoitetussa järjestyksessä ja viittaa niihin johdonmukaisesti nimillä Image 1, Video 1 tai Audio 1 käyttäen järjestystä kunkin mediatyypin sisällä. Älä korvaa numeroitua viitettä aineistotunnisteella kirjoitetussa kehotteessa.\n\nEnsimmäisen ruudun kuva määrittää kuvapohjaisen otoksen avauksen. Ensimmäisen ja viimeisen ruudun tila määrittää molemmat rajat. Jos täsmälliset rajakuvat ovat tärkeitä, valitse kyseinen tila sen sijaan, että kuvaisit viitteitä aloitukseksi ja lopuksi omni-viitekehotteessa. Jälkimmäinen on kehotteella ohjattu vaikutus eikä vastaa tarkkaa rajakuvavalintaa. Valmistele kuvat tulostesommitteluun ja määritä toiminta, joka yhdistää alku- ja lopputilanteen.\n\nVideomuokkaus muuttaa olemassa olevaa leikettä sen sijaan, että käyttäisi sitä vain inspiraationa. Määritä muokattava video, muutettava esine tai alue, sen esiintymisaika ja sijainti sekä säilytettävät yksityiskohdat. Hyödyllinen tehtävänanto on: ”Korvaa Video 1:n muki Image 1:ssä näkyvällä astialla; säilytä käden liike, rajaus, valaistus ja pöytäjärjestys.” Nimeä poistettavaksi ei-toivottu esine ja säilytettävät ympäröivät elementit. Valmistaja neuvoo viittaamaan muokkauksessa tai jatkamisessa suoraan kohdevideoon; viitteeksi muotoilu voi sen sijaan välittää pyynnön uudesta generoidusta kohtauksesta.\n\nVideon jatkaminen lisää tapahtumia olemassa olevan leikkeen eteen tai jälkeen. Kuvaa jatkamisen suunta ja seuraava tai edeltävä tapahtuma. Dokumentoitu työnkulku voi myös yhdistää kaksi tai kolme leikettä generoiduilla siirtymillä; kolmen syötevideon tulee silti mahtua yhdessä 15 sekunnin viitebudjettiin. Opas erottaa pääasiassa alkuperäisen leikkeen raja-aineistoa sisältävän jatkon pyynnöstä, joka nimenomaisesti säilyttää alkuperäisen sisällön. Kerro tuloksen haluttu koostumus: vain jatko tai annettu leike ja uusi toiminta sisältävä kohtaus.\n\nErota selkeässä ohjauksessa vakaa kohtauskuvaus tapahtumien sarjasta. Määritä jokaiselle kohteelle kaksi tai kolme erottavaa visuaalista piirrettä ja yhtenäinen tunniste. Kuvaa sitten toiminnot, ympäristö, valaistus, kameraliike, visuaalinen tyyli ja rajaukset. Yhdistä vuoropuhelun jokainen repliikki puhujaan ja olennaiseen toimintaan. Käytä järjestettyjä otostunnisteita tarkkojen aikaleimojen pitämisen sijaan luotettavina säätiminä: valmistaja huomauttaa tarkan ajoituksen voivan olla epävakaa. Vaiheistettu tuotetehtävänanto voisi olla: ”Image 1 määrittää Product A:n. Shot 1: lähesty hitaasti Product A:ta tasolla. Shot 2: käsi kääntää sitä kohti valoa. Shot 3: pysähdy etuetikettiin. Pehmeä huoneambienssi; säilytä painettu teksti.”\n\nValmistele viitteet perheen dokumentoitujen syötesääntöjen mukaan. Tuetut kuvamuodot sisältävät JPEG:n, PNG:n, WebP:n, BMP:n, TIFF:n, GIF:n, HEIC:n ja HEIF:n; jokainen kuva on alle 30 MB. Opas määrittää kuvan leveyden ja korkeuden aidosti välille 300–6 000 pikseliä ja kuvasuhteen aidosti välille 0.4–2.5. Videoviitteet käyttävät MP4:ää tai MOV:ia H.264- tai H.265-videolla ja AAC- tai MP3-äänellä, ovat kukin enintään 200 MB ja nopeudeltaan 24–60 ruutua sekunnissa. Niiden leveys ja korkeus ovat 300–6 000 pikseliä, kuvasuhde 0.4–2.5 ja kokonaispikselimäärä 407 696–8 295 044. Ääniviitteet käyttävät WAV:ia tai MP3:a ja ovat kukin enintään 15 MB. Nämä ovat valmistajan syötteen valmistelumäärityksiä, erillisiä tietyn sovelluksen lataussäätimistä.\n\nValmistajan muotokuvatyönkulku edellyttää erityistä valmistelua kuville tai videoille, joissa on todellisia ihmiskasvoja: suorat viitelataukset eivät ole tavallinen tuettu polku. Se dokumentoi luotetut mallitulosteet, valmiit digitaaliset hahmot ja luvallisen oikean henkilön aineistotyönkulun erillisinä ratkaisuina. Myös äänen vastaavuus, ääntäminen ja leikkeen rajan ääni täytyy tarkistaa. Kehoteopas suosittelee kuvaamaan tarkoitetut äänen ominaisuudet ja pitämään vuoropuhelutyylin lähellä ääniviitettä. Tarkista lopullisesta tuotoksesta kohteen yhtenäisyys, tarkat puhutut sanat, toiminnan ajoitus, ruutusiirtymät ja loppuääni; korjaa juuri tehtävänannosta eroava elementti.",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "available": null,
    "canonical_model": "bytedance/seedance-2.0-mini",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image",
        "video",
        "audio"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.1512",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1512",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Konfiguraation täydet hintatiedot lisätiedoissa."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "0b52dda4bb8d8eb2776e0f56",
        "label": "Videokokoonpanojen hintaviitteet",
        "profiles": [
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "Tässä hinnoitteluavaimessa ei ole ilmoitettu lisäehtoa."
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.007",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "ääni: without_audio"
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.007",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "syöte: with_video_input"
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.0042",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "bytedance/seedance-2.0-mini",
    "input": [
      "text",
      "image",
      "audio"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.",
          "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": "Säilytä jokainen todellinen käyttäjälle kuuluva tulos ja sen mukana palautetut mitatut metatiedot.",
            "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": "Videoon ei päästä käsiksi tai tätä videon tunnistetta ei löytynyt.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista videon käyttöoikeus. Käytä olemassa olevan videon alkuperäistä julkista tunnistetta ja samaa API-avainta.",
                "type": "not_found_error"
              },
              {
                "condition": "API-avain ei vastaa todennettua tiliä.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista API-avaimesi ja tilisi käyttöoikeus ennen lähettämistä.",
                "type": "authentication_error"
              },
              {
                "condition": "Pyyntöä ei voitu lukea tai latausindeksi on virheellinen.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Korjaa pyyntösisältö. Valitse latausta varten alkuperäisen tehtävän palauttama tulosindeksi.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Valittua videokokoonpanoa ei voida hinnoitella.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Valitse tuettu videokokoonpano ja täytä sen pakolliset asetukset ennen korjatun pyynnön lähettämistä.",
                "type": "price_unavailable"
              },
              {
                "condition": "Videosyöte tai alkuperäinen jatkotehtävä on virheellinen.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Käytä kelvollisia HTTPS-syötteitä. Käytä jatkamiseen valmistuneen alkuperäisen videosi julkista tunnistetta samalla API-avaimella.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Käytettävissä oleva saldo tai rajoitukset eivät salli katevarausta.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista käytettävissä oleva saldosi ja rajoitukset ennen uuden pyynnön lähettämistä.",
                "type": "billing_error"
              },
              {
                "condition": "Videon tarkistus, tallennus tai palvelun käyttö ei ole tilapäisesti saatavilla.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Odota palvelun saatavuutta. Jos sinulla on jo videon tunniste, tarkista alkuperäinen tehtävä uuden luontipyynnön lähettämisen sijaan.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Alkuperäinen videotulos ja veloitus on tarkistettava.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Säilytä palautettu videon tunniste ja tarkista kyseinen tehtävä. Älä lähetä korvaavaa videon luontipyyntöä tarkistuksen aikana.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Olemassa olevan videon lataus ei ole tilapäisesti saatavilla.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Tarkista sama videotehtävä myöhemmin ja lataa sen olemassa oleva tulos. Uusi luontipyyntö luo erillisen operaation.",
                "type": "server_error"
              },
              {
                "condition": "Videosisältöä ei ole julkaistu.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Tarkista alkuperäisen tehtävän tila. Lataa, kun tila on completed; jos tila on failed, noudata sen veloituksen tarkistusilmoitusta.",
                "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 + alkuperäinen id + X-Should-Retry:false; älä koskaan toista alkuperäistä pyyntöä"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Anna tekstikehote ja tuettu kesto kokonaisina sekunteina. Käytä täsmälleen lueteltua kokoa tai resoluutiota ja kuvasuhdetta, jotka muodostavat luetellut mitat.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Kirjoitettu kehote."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images on oliotaulukko, jossa on type=image_url, url-kentän sisältävä image_url ja frame_type. Käytä julkista HTTPS-kuvan URL-osoitetta; first_frame ja last_frame saavat kumpikin esiintyä kerran. Käytä lueteltua tuloskokoa tai yhteensopivia mittoja. Älä lisää videoviitteitä.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Kirjoitettu kehote ja ruutukuva."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-mini"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references on taulukko. Jokaisessa oliossa on type=image_url tai type=audio_url sekä vastaava url-kentän sisältävä URL-olio. Käytä julkisia HTTPS-linkkejä. Jätä frame_images pois valitaksesi viitetilan. Videoviitteitä ei voida hinnoitella.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Kirjoitettu kehote sekä kuva- tai ääniviitteet."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Tämän videon nollasta alkava sijainti tulosluettelossa.",
                  "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": "Allekirjoitettu HTTPS-latauksen URL-osoite tälle valmistuneelle videolle.",
                  "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": "Alkuperäisten videotavujen SHA-256-tiiviste; null, jos tietoa ei ole saatavilla.",
                  "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": "Alkuperäisen videotiedoston koko tavuina; null, jos tietoa ei ole saatavilla.",
                  "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": "Videon mitattu kesto millisekunteina; null, jos tietoa ei ole saatavilla.",
                  "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": "Videon leveys pikseleinä; null, jos tietoa ei ole saatavilla.",
                  "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": "Videon korkeus pikseleinä; null, jos tietoa ei ole saatavilla.",
                  "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": "Videokoodekin tunniste; null, jos sitä ei ole kirjattu.",
                  "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": "Sisältääkö video ääniraidan; null, jos asiaa ei ole mitattu.",
                  "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": "Äänikoodekin tunniste; null, jos tunnistetta ei ole kirjattu.",
                  "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": "allekirjoitetut käyttäjälle kuuluvan sisällön osoitteet",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-2.0-mini"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "4:3",
                  "16:9",
                  "21:9",
                  "9:21"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "generate_audio-kentän pois jättäminen valitsee äänen sisältävän hinnan; false valitsee äänettömän hinnan. Tarkista tuloksen has_audio-kentästä, palautettiinko ääniraita.",
                "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": "Nämä avaimet koskevat jokaista kuvaoliota. Jätä frame_images pois pelkkää tekstiä sisältävästä pyynnöstä.",
                "content": "Kuvaolioiden taulukko. Jokaisessa on type=image_url, url-kentän sisältävä image_url ja frame_type=first_frame tai last_frame. Kukin rooli esiintyy enintään kerran. Käytä julkisia HTTPS-kuvan URL-osoitteita.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Jätä frame_images pois käyttääksesi viitetilaa. Käytä julkisia HTTPS-osoitteita.",
                "content": "Kuva- tai ääniviiteolioiden taulukko. Aseta type-kentän arvoksi image_url tai audio_url ja anna vastaava url-kentän sisältävä URL-olio. Videoviitteitä ei edelleenkään voida hinnoitella.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "640x480",
                  "854x480",
                  "1120x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "960x720",
                  "1280x720",
                  "1680x720"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-2.0-mini"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Videotokenin hinta on ensisijainen hintaviite. Otsikossa esitetyt sekuntikohtaiset hinta-arviot ovat erillisiä viitearvoja, eivät lisämaksu.",
            "dimensions": {
              "conditions": "syöte: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Videotokenin hinta",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Arvioitu luontikustannus",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"model\":\"bytedance/seedance-2.0-mini\",\"prompt\":\"A serene mountain landscape at sunset\",\"duration\":4,\"resolution\":\"480p\",\"size\":\"480x480\",\"generate_audio\":false}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0042000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000042",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.007000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.000007",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1512",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1512",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0042000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_with_video_input",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000042",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "reference",
            "unit": "video_token"
          },
          {
            "amount": "0.007000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.000007",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.1512",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1512",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "bytedance/seedance-2.0-mini",
        "request_model_id": "bytedance/seedance-2.0-mini",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 2.0 Mini",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.1512,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.1512,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
          "image_audio_ref_independent_charge": "not listed separately in this tariff",
          "input_includes_video": false,
          "maker_model_id": "dreamina-seedance-2-0-mini-260615",
          "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
          "minimum_tokens_when_video_input": false,
          "offline_not_supported": true,
          "quoted_unit": "1000000_video_tokens",
          "resolution": "480p/720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000070",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
              "image_audio_ref_independent_charge": "not listed separately in this tariff",
              "input_includes_video": false,
              "maker_model_id": "dreamina-seedance-2-0-mini-260615",
              "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
              "minimum_tokens_when_video_input": false,
              "offline_not_supported": true,
              "quoted_unit": "1000000_video_tokens",
              "resolution": "480p/720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
          "image_audio_ref_independent_charge": "not listed separately in this tariff",
          "input_includes_video": true,
          "maker_model_id": "dreamina-seedance-2-0-mini-260615",
          "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
          "minimum_tokens_when_video_input": true,
          "offline_not_supported": true,
          "quoted_unit": "1000000_video_tokens",
          "resolution": "480p/720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000042",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
              "image_audio_ref_independent_charge": "not listed separately in this tariff",
              "input_includes_video": true,
              "maker_model_id": "dreamina-seedance-2-0-mini-260615",
              "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
              "minimum_tokens_when_video_input": true,
              "offline_not_supported": true,
              "quoted_unit": "1000000_video_tokens",
              "resolution": "480p/720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.0070000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video token",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000070",
            "key": "video_tokens",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000070",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0070000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000070",
            "key": "video_tokens_without_audio",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000070",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0042000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video_reference_present Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000042",
            "key": "video_tokens_with_video_input",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000042",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          }
        ]
      }
    ],
    "public_id": "bytedance/seedance-2.0-mini",
    "short": "Seedance 2.0 Mini luo lyhyitä videoita tekstistä sekä kuva-, video- ja ääniviitteistä valinnaisella generoidulla äänellä. Se tukee kohtausten luomista, kohdennettuja videomuokkauksia ja jatkamista dokumentoidulla 480p- tai 720p-tulosteprofiililla."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Seedance 2.0 Mini luo lyhyitä videoita tekstistä sekä kuva-, video- ja ääniviitteistä valinnaisella generoidulla äänellä. Se tukee kohtausten luomista, kohdennettuja videomuokkauksia ja jatkamista dokumentoidulla 480p- tai 720p-tulosteprofiililla.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_exact_canonical_sha256": "183e85a2d2b68a05250eb0feb80ff8ed56ecaa3d0cf2589f912f87ee1b54caf7",
    "raw_model_js_projection_sha256": "6fdea827d229dc95c09e7d73d733ec3dec3a1aa3200932413ba56faf8920ec81",
    "raw_model_json_sha256": "183e85a2d2b68a05250eb0feb80ff8ed56ecaa3d0cf2589f912f87ee1b54caf7",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "0c732f4d98421b216e92e641dffec21d0ee060df94fc22a36ff533116b4b7f6f"
}
