{
  "aboutHtml": "<p>Sora 2 je model spoločnosti OpenAI na generovanie videa a zvuku pre dynamické klipy vytvárané z písomného opisu scény alebo referenčného obrázka. Vizuálnu sekvenciu generuje spolu so synchronizovanou rečou, efektmi a zvukom pozadia. Štandardný profil Sora 2 je určený na vizuálne skúmanie, rozvíjanie konceptov, prototypy a hrubé zostrihy. Sora 2 Pro je samostatná edícia zameraná na vyššiu vizuálnu vernosť a dokončovanie vo vyššom rozlíšení.</p><h4>Opíšte záber, ktorý možno vidieť aj počuť</h4><p>Príručka výrobcu k zadávaniu pokynov stavia užitočné zadanie na kompozícii záberu, objekte, akcii, prostredí a svetle. Dajte scéne jednotný vizuálny štýl a potom opíšte pohyb v jasných krokoch. Pôvodný produktový koncept môže zobrazovať malý mechanický predmet, ktorý sa raz otočí na pracovnom stole, zatiaľ čo sa kamera pomaly približuje, s mäkkým svetlom z okna a jemným zvukom motora. Určte, čo si má divák všimnúť a ako sa akcia končí.</p><p>Pohyb kamery a akciu objektu udržte v každom zábere zrozumiteľné. Zložitú sekvenciu možno rozdeliť na samostatné bloky záberov, z ktorých každý má vlastnú kompozíciu, akciu a osvetlenie. Ak má viacero klipov tvoriť jednu sekvenciu, zachovajte rovnaké detaily objektu a paletu. Príručka zdôrazňuje, že kratšie zábery sa spravidla spoľahlivejšie riadia pokynmi a že opakované generovanie s rovnakým zadaním vytvára odlišné verzie.</p><p>Pri uvedení modelu výrobca opisuje zlepšené fyzikálne správanie a kontinuitu medzi zábermi vrátane realistického, filmového a anime štýlu. Ide o zamýšľané schopnosti, ktoré treba usmerňovať a kontrolovať. Kontrolujte pohyb, kontakt medzi predmetmi, proporcie a kontinuitu; nepredpokladajte, že vierohodná prvá snímka zaručuje súdržnú sekvenciu. Ak je akcia nejasná, zjednodušte ju a dajte jej viditeľný začiatok a koniec.</p><h4>Režírujte dialóg a zvuk samostatne</h4><p>Hovorené repliky určte oddelene od vizuálneho opisu a hovoriacich označujte jednotne. Dialóg musí byť dostatočne krátky, aby sa zmestil do akcie a zamýšľanej dĺžky klipu. Pri animácii s dvoma postavami striedajte krátku otázku a odpoveď, namiesto toho, aby ste do krátkeho záberu žiadali dlhý prejav. Príručka upozorňuje, že zložitý a dlhý dialóg môže narušiť tempo a synchronizáciu.</p><p>Opíšte zvukové prostredie, ktoré patrí k scéne: zvuk drobného pohybu, atmosféru miestnosti alebo rytmus zvukového efektu prostredia. Vysvetlite, ktorý zvuk má sprevádzať danú akciu v rovnakom okamihu. Výslednú reč a efekty si vypočujte spolu s obrazom a skontrolujte priradenie hovoriacich, znenie a načasovanie. Synchronizovaný zvuk je súčasťou vygenerovaného klipu, nie samostatnou textovou odpoveďou.</p><h4>Rozmery, trvanie a úvod vedený obrázkom</h4><p>Zdokumentované výstupné rozmery štandardného modelu sú 720×1280 na výšku a 1280×720 na šírku. Rozmery s vyšším rozlíšením z profilu Pro sa nemajú pripisovať štandardnému modelu Sora 2. Rozmery a trvanie sú výslovné nastavenia požiadavky; uvedenie iných rozmerov alebo požiadavka na dlhší film v zadaní tieto nastavenia nemení. Referencia pre vytváranie uvádza nastavenia klipov s dĺžkou 4, 8 a 12 sekúnd, preto pri príprave záberu vyberte krátky, jasne vymedzený dejový úsek. Rozšírený postup výrobcu dokumentuje aj nastavenia klipov s dĺžkou 16 a 20 sekúnd.</p><p>Referenčný obrázok ukotvuje prvú snímku a text opisuje, čo nasleduje. Výrobca podporuje referencie JPEG, PNG a WebP a vyžaduje zhodu obrázka s cieľovými rozmermi videa. Objekt, prostredie a kompozíciu pripravte v tomto úvodnom obrázku a potom požiadajte o konkrétny pohyb. Ide o referenciu pre úvodnú snímku, nie o záruku zachovania každého detailu počas celého klipu.</p><h4>Opakovane použiteľné neľudské postavy</h4><p>Rozšírený postup výrobcu môže vytvoriť opakovane použiteľný asset postavy z krátkeho referenčného videa zvieraťa, maskota alebo predmetu. Pokyny na prípravu požadujú klip MP4 s dĺžkou približne dve až štyri sekundy, v rozlíšení 720p až 1080p a pomere strán 16:9 alebo 9:16. Zhoda pomeru strán zdroja a výstupu pomáha predísť natiahnutému vzhľadu. Generovanie môže odkazovať najviac na dve postavy.</p><p>Uchovajte identifikátor postavy a v zadaní uveďte jej meno; samotné odovzdanie identifikátora nie je podľa príručky úplnou prípravou. Assety postáv môžu sprevádzať generovanie vedené obrázkom, ale predĺženia videa ich neprijímajú. Výrobca predvolene blokuje nahrávanie postáv podobných ľuďom a v zdokumentovanom postupe API odmieta referenčné obrázky obsahujúce ľudské tváre. Funkcie osobných postáv v aplikácii Sora predstavujú samostatný produktový postup.</p><h4>Pokračujte v dokončenom klipe alebo ho upravte</h4><p>Predĺženie prijíma dokončené zdrojové video a zadanie pokračovania, pričom celý zdrojový klip používa ako kontext pre pohyb, smerovanie kamery a kontinuitu scény. Príručka opisuje pridanie najviac 20 sekúnd pri každom predĺžení. Zdokumentovaným vstupom predĺženia je zdrojové video a text; ďalšie referencie postáv alebo obrázkov sú z tohto režimu vylúčené. Opíšte, ako existujúca akcia pokračuje, namiesto zavedenia nesúvisiacej scény bez prechodu.</p><p>Úprava videa sa zameriava na jasnú zmenu existujúceho klipu. Cielená revízia môže zmeniť farbu predmetu alebo paletu scény a pritom zachovať zvyšok záberu. Príručka výrobcu odporúča vždy jednu dobre definovanú zmenu a odlišuje úpravu vygenerovaného videa od nahrávania ľubovoľných záberov, pre ktoré platí samostatná podmienka oprávnenosti. Pred ďalšou úpravou uchovajte dokončený zdroj a určte presnú požadovanú zmenu.</p><h4>Renderovacie úlohy a hotové video</h4><p>Zdokumentovaný postup výrobcu pre video je asynchrónny: odoslaná úloha môže čakať vo fronte alebo prebiehať, kým sa dokončí alebo zlyhá. Dokončená úloha poskytuje video MP4; miniatúra a sprite sheet slúžia na náhľady a prehliadanie. Identitu úlohy uchovajte spolu so zadaním, referenciami a vrátenými assetmi. Úvodná odpoveď úlohy nie je konečným prehrateľným videom.</p><p>Bežný postup sťahovania opisuje hodinovú platnosť URL na stiahnutie. Rozšírený dávkový postup pripravuje nezávislé renderovacie požiadavky JSON so stabilnými identifikátormi položiek, nahranými referenciami a výsledkom priradeným späť ku každému záberu; jeho dokončené assety majú samostatnú lehotu na stiahnutie do 24 hodín. Hotový klip bezodkladne uchovajte a pred jeho prijatím ako vybranej verzie skontrolujte skutočný obraz aj zvuk.</p><p>Zdokumentované obmedzenia obsahu API výrobcu vyžadujú materiál vhodný pre publikum mladšie ako 18 rokov a odmietajú postavy či hudbu chránené autorskými právami a generovanie skutočných ľudí. Scénu a referencie pripravte podľa toho. Priamym výsledkom modelu je video so zvukom, nie generované statické obrázky, odpoveď konverzačného nástroja ani neobmedzene dlhý film. Pri pokračovaní vizuálneho konceptu zachovajte presnú identitu štandardného modelu a prijatý zdrojový klip.</p>",
  "aboutText": "Sora 2 je model spoločnosti OpenAI na generovanie videa a zvuku pre dynamické klipy vytvárané z písomného opisu scény alebo referenčného obrázka. Vizuálnu sekvenciu generuje spolu so synchronizovanou rečou, efektmi a zvukom pozadia. Štandardný profil Sora 2 je určený na vizuálne skúmanie, rozvíjanie konceptov, prototypy a hrubé zostrihy. Sora 2 Pro je samostatná edícia zameraná na vyššiu vizuálnu vernosť a dokončovanie vo vyššom rozlíšení.\n\n### Opíšte záber, ktorý možno vidieť aj počuť\n\nPríručka výrobcu k zadávaniu pokynov stavia užitočné zadanie na kompozícii záberu, objekte, akcii, prostredí a svetle. Dajte scéne jednotný vizuálny štýl a potom opíšte pohyb v jasných krokoch. Pôvodný produktový koncept môže zobrazovať malý mechanický predmet, ktorý sa raz otočí na pracovnom stole, zatiaľ čo sa kamera pomaly približuje, s mäkkým svetlom z okna a jemným zvukom motora. Určte, čo si má divák všimnúť a ako sa akcia končí.\n\nPohyb kamery a akciu objektu udržte v každom zábere zrozumiteľné. Zložitú sekvenciu možno rozdeliť na samostatné bloky záberov, z ktorých každý má vlastnú kompozíciu, akciu a osvetlenie. Ak má viacero klipov tvoriť jednu sekvenciu, zachovajte rovnaké detaily objektu a paletu. Príručka zdôrazňuje, že kratšie zábery sa spravidla spoľahlivejšie riadia pokynmi a že opakované generovanie s rovnakým zadaním vytvára odlišné verzie.\n\nPri uvedení modelu výrobca opisuje zlepšené fyzikálne správanie a kontinuitu medzi zábermi vrátane realistického, filmového a anime štýlu. Ide o zamýšľané schopnosti, ktoré treba usmerňovať a kontrolovať. Kontrolujte pohyb, kontakt medzi predmetmi, proporcie a kontinuitu; nepredpokladajte, že vierohodná prvá snímka zaručuje súdržnú sekvenciu. Ak je akcia nejasná, zjednodušte ju a dajte jej viditeľný začiatok a koniec.\n\n### Režírujte dialóg a zvuk samostatne\n\nHovorené repliky určte oddelene od vizuálneho opisu a hovoriacich označujte jednotne. Dialóg musí byť dostatočne krátky, aby sa zmestil do akcie a zamýšľanej dĺžky klipu. Pri animácii s dvoma postavami striedajte krátku otázku a odpoveď, namiesto toho, aby ste do krátkeho záberu žiadali dlhý prejav. Príručka upozorňuje, že zložitý a dlhý dialóg môže narušiť tempo a synchronizáciu.\n\nOpíšte zvukové prostredie, ktoré patrí k scéne: zvuk drobného pohybu, atmosféru miestnosti alebo rytmus zvukového efektu prostredia. Vysvetlite, ktorý zvuk má sprevádzať danú akciu v rovnakom okamihu. Výslednú reč a efekty si vypočujte spolu s obrazom a skontrolujte priradenie hovoriacich, znenie a načasovanie. Synchronizovaný zvuk je súčasťou vygenerovaného klipu, nie samostatnou textovou odpoveďou.\n\n### Rozmery, trvanie a úvod vedený obrázkom\n\nZdokumentované výstupné rozmery štandardného modelu sú 720×1280 na výšku a 1280×720 na šírku. Rozmery s vyšším rozlíšením z profilu Pro sa nemajú pripisovať štandardnému modelu Sora 2. Rozmery a trvanie sú výslovné nastavenia požiadavky; uvedenie iných rozmerov alebo požiadavka na dlhší film v zadaní tieto nastavenia nemení. Referencia pre vytváranie uvádza nastavenia klipov s dĺžkou 4, 8 a 12 sekúnd, preto pri príprave záberu vyberte krátky, jasne vymedzený dejový úsek. Rozšírený postup výrobcu dokumentuje aj nastavenia klipov s dĺžkou 16 a 20 sekúnd.\n\nReferenčný obrázok ukotvuje prvú snímku a text opisuje, čo nasleduje. Výrobca podporuje referencie JPEG, PNG a WebP a vyžaduje zhodu obrázka s cieľovými rozmermi videa. Objekt, prostredie a kompozíciu pripravte v tomto úvodnom obrázku a potom požiadajte o konkrétny pohyb. Ide o referenciu pre úvodnú snímku, nie o záruku zachovania každého detailu počas celého klipu.\n\n### Opakovane použiteľné neľudské postavy\n\nRozšírený postup výrobcu môže vytvoriť opakovane použiteľný asset postavy z krátkeho referenčného videa zvieraťa, maskota alebo predmetu. Pokyny na prípravu požadujú klip MP4 s dĺžkou približne dve až štyri sekundy, v rozlíšení 720p až 1080p a pomere strán 16:9 alebo 9:16. Zhoda pomeru strán zdroja a výstupu pomáha predísť natiahnutému vzhľadu. Generovanie môže odkazovať najviac na dve postavy.\n\nUchovajte identifikátor postavy a v zadaní uveďte jej meno; samotné odovzdanie identifikátora nie je podľa príručky úplnou prípravou. Assety postáv môžu sprevádzať generovanie vedené obrázkom, ale predĺženia videa ich neprijímajú. Výrobca predvolene blokuje nahrávanie postáv podobných ľuďom a v zdokumentovanom postupe API odmieta referenčné obrázky obsahujúce ľudské tváre. Funkcie osobných postáv v aplikácii Sora predstavujú samostatný produktový postup.\n\n### Pokračujte v dokončenom klipe alebo ho upravte\n\nPredĺženie prijíma dokončené zdrojové video a zadanie pokračovania, pričom celý zdrojový klip používa ako kontext pre pohyb, smerovanie kamery a kontinuitu scény. Príručka opisuje pridanie najviac 20 sekúnd pri každom predĺžení. Zdokumentovaným vstupom predĺženia je zdrojové video a text; ďalšie referencie postáv alebo obrázkov sú z tohto režimu vylúčené. Opíšte, ako existujúca akcia pokračuje, namiesto zavedenia nesúvisiacej scény bez prechodu.\n\nÚprava videa sa zameriava na jasnú zmenu existujúceho klipu. Cielená revízia môže zmeniť farbu predmetu alebo paletu scény a pritom zachovať zvyšok záberu. Príručka výrobcu odporúča vždy jednu dobre definovanú zmenu a odlišuje úpravu vygenerovaného videa od nahrávania ľubovoľných záberov, pre ktoré platí samostatná podmienka oprávnenosti. Pred ďalšou úpravou uchovajte dokončený zdroj a určte presnú požadovanú zmenu.\n\n### Renderovacie úlohy a hotové video\n\nZdokumentovaný postup výrobcu pre video je asynchrónny: odoslaná úloha môže čakať vo fronte alebo prebiehať, kým sa dokončí alebo zlyhá. Dokončená úloha poskytuje video MP4; miniatúra a sprite sheet slúžia na náhľady a prehliadanie. Identitu úlohy uchovajte spolu so zadaním, referenciami a vrátenými assetmi. Úvodná odpoveď úlohy nie je konečným prehrateľným videom.\n\nBežný postup sťahovania opisuje hodinovú platnosť URL na stiahnutie. Rozšírený dávkový postup pripravuje nezávislé renderovacie požiadavky JSON so stabilnými identifikátormi položiek, nahranými referenciami a výsledkom priradeným späť ku každému záberu; jeho dokončené assety majú samostatnú lehotu na stiahnutie do 24 hodín. Hotový klip bezodkladne uchovajte a pred jeho prijatím ako vybranej verzie skontrolujte skutočný obraz aj zvuk.\n\nZdokumentované obmedzenia obsahu API výrobcu vyžadujú materiál vhodný pre publikum mladšie ako 18 rokov a odmietajú postavy či hudbu chránené autorskými právami a generovanie skutočných ľudí. Scénu a referencie pripravte podľa toho. Priamym výsledkom modelu je video so zvukom, nie generované statické obrázky, odpoveď konverzačného nástroja ani neobmedzene dlhý film. Pri pokračovaní vizuálneho konceptu zachovajte presnú identitu štandardného modelu a prijatý zdrojový klip.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "55c71f7ecab044fc990080ddfe4e4062d53fd11d12e96269557474bcc5cab3e5",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "sk",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">sora-2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Zavrieť\">×</button></div><div class=\"idline\"><span>Ostatné /</span><code>sora-2</code><button type=\"button\" id=\"copy-id\">Skopírovať ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sekcie karty modelu\"><button type=\"button\" data-card-jump=\"overview\">Úvod</button><button type=\"button\" data-card-jump=\"methods\">Vstupy a metódy</button><button type=\"button\" data-card-jump=\"pricing\">Cenník</button><button type=\"button\" data-card-jump=\"examples\">Príklady</button><button type=\"button\" data-card-jump=\"results\">Výsledky</button><button type=\"button\" data-card-jump=\"aliases\">Aliasy</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metódy API\"><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-0\" data-card-method=\"Ultra|messages|/v1/messages|sora-2\">Messages</button><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-1\" data-card-method=\"Ultra|chat_completions|/v1/chat/completions|sora-2\">Chat Completions</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-1\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Úvod</h3><p class=\"mdesc-full\">Sora 2 vytvára z textu alebo referenčného obrázka video so synchronizovanými dialógmi, zvukovými efektmi a zvukom pozadia. Štandardný profil podporuje vizuálne skúmanie a koncepčné klipy; výrobca ponúka samostatné postupy pre opakovane použiteľné neľudské postavy, pokračovanie a cielené úpravy videa.</p><dl class=\"card-io\" data-card-io><div><dt>Povolené vstupy</dt><dd>Text</dd></div><div><dt>Výsledky</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>O modeli</summary><p class=\"note-s\" data-model-method-boundary>Tento opis pokrýva možnosti modelu. Dostupné vstupy, výstupy a voľby v Ailoot sú uvedené nižšie pre vybranú metódu.</p><div class=\"mabout\" id=\"m-about\"><p>Sora 2 je model spoločnosti OpenAI na generovanie videa a zvuku pre dynamické klipy vytvárané z písomného opisu scény alebo referenčného obrázka. Vizuálnu sekvenciu generuje spolu so synchronizovanou rečou, efektmi a zvukom pozadia. Štandardný profil Sora 2 je určený na vizuálne skúmanie, rozvíjanie konceptov, prototypy a hrubé zostrihy. Sora 2 Pro je samostatná edícia zameraná na vyššiu vizuálnu vernosť a dokončovanie vo vyššom rozlíšení.</p><h4>Opíšte záber, ktorý možno vidieť aj počuť</h4><p>Príručka výrobcu k zadávaniu pokynov stavia užitočné zadanie na kompozícii záberu, objekte, akcii, prostredí a svetle. Dajte scéne jednotný vizuálny štýl a potom opíšte pohyb v jasných krokoch. Pôvodný produktový koncept môže zobrazovať malý mechanický predmet, ktorý sa raz otočí na pracovnom stole, zatiaľ čo sa kamera pomaly približuje, s mäkkým svetlom z okna a jemným zvukom motora. Určte, čo si má divák všimnúť a ako sa akcia končí.</p><p>Pohyb kamery a akciu objektu udržte v každom zábere zrozumiteľné. Zložitú sekvenciu možno rozdeliť na samostatné bloky záberov, z ktorých každý má vlastnú kompozíciu, akciu a osvetlenie. Ak má viacero klipov tvoriť jednu sekvenciu, zachovajte rovnaké detaily objektu a paletu. Príručka zdôrazňuje, že kratšie zábery sa spravidla spoľahlivejšie riadia pokynmi a že opakované generovanie s rovnakým zadaním vytvára odlišné verzie.</p><p>Pri uvedení modelu výrobca opisuje zlepšené fyzikálne správanie a kontinuitu medzi zábermi vrátane realistického, filmového a anime štýlu. Ide o zamýšľané schopnosti, ktoré treba usmerňovať a kontrolovať. Kontrolujte pohyb, kontakt medzi predmetmi, proporcie a kontinuitu; nepredpokladajte, že vierohodná prvá snímka zaručuje súdržnú sekvenciu. Ak je akcia nejasná, zjednodušte ju a dajte jej viditeľný začiatok a koniec.</p><h4>Režírujte dialóg a zvuk samostatne</h4><p>Hovorené repliky určte oddelene od vizuálneho opisu a hovoriacich označujte jednotne. Dialóg musí byť dostatočne krátky, aby sa zmestil do akcie a zamýšľanej dĺžky klipu. Pri animácii s dvoma postavami striedajte krátku otázku a odpoveď, namiesto toho, aby ste do krátkeho záberu žiadali dlhý prejav. Príručka upozorňuje, že zložitý a dlhý dialóg môže narušiť tempo a synchronizáciu.</p><p>Opíšte zvukové prostredie, ktoré patrí k scéne: zvuk drobného pohybu, atmosféru miestnosti alebo rytmus zvukového efektu prostredia. Vysvetlite, ktorý zvuk má sprevádzať danú akciu v rovnakom okamihu. Výslednú reč a efekty si vypočujte spolu s obrazom a skontrolujte priradenie hovoriacich, znenie a načasovanie. Synchronizovaný zvuk je súčasťou vygenerovaného klipu, nie samostatnou textovou odpoveďou.</p><h4>Rozmery, trvanie a úvod vedený obrázkom</h4><p>Zdokumentované výstupné rozmery štandardného modelu sú 720×1280 na výšku a 1280×720 na šírku. Rozmery s vyšším rozlíšením z profilu Pro sa nemajú pripisovať štandardnému modelu Sora 2. Rozmery a trvanie sú výslovné nastavenia požiadavky; uvedenie iných rozmerov alebo požiadavka na dlhší film v zadaní tieto nastavenia nemení. Referencia pre vytváranie uvádza nastavenia klipov s dĺžkou 4, 8 a 12 sekúnd, preto pri príprave záberu vyberte krátky, jasne vymedzený dejový úsek. Rozšírený postup výrobcu dokumentuje aj nastavenia klipov s dĺžkou 16 a 20 sekúnd.</p><p>Referenčný obrázok ukotvuje prvú snímku a text opisuje, čo nasleduje. Výrobca podporuje referencie JPEG, PNG a WebP a vyžaduje zhodu obrázka s cieľovými rozmermi videa. Objekt, prostredie a kompozíciu pripravte v tomto úvodnom obrázku a potom požiadajte o konkrétny pohyb. Ide o referenciu pre úvodnú snímku, nie o záruku zachovania každého detailu počas celého klipu.</p><h4>Opakovane použiteľné neľudské postavy</h4><p>Rozšírený postup výrobcu môže vytvoriť opakovane použiteľný asset postavy z krátkeho referenčného videa zvieraťa, maskota alebo predmetu. Pokyny na prípravu požadujú klip MP4 s dĺžkou približne dve až štyri sekundy, v rozlíšení 720p až 1080p a pomere strán 16:9 alebo 9:16. Zhoda pomeru strán zdroja a výstupu pomáha predísť natiahnutému vzhľadu. Generovanie môže odkazovať najviac na dve postavy.</p><p>Uchovajte identifikátor postavy a v zadaní uveďte jej meno; samotné odovzdanie identifikátora nie je podľa príručky úplnou prípravou. Assety postáv môžu sprevádzať generovanie vedené obrázkom, ale predĺženia videa ich neprijímajú. Výrobca predvolene blokuje nahrávanie postáv podobných ľuďom a v zdokumentovanom postupe API odmieta referenčné obrázky obsahujúce ľudské tváre. Funkcie osobných postáv v aplikácii Sora predstavujú samostatný produktový postup.</p><h4>Pokračujte v dokončenom klipe alebo ho upravte</h4><p>Predĺženie prijíma dokončené zdrojové video a zadanie pokračovania, pričom celý zdrojový klip používa ako kontext pre pohyb, smerovanie kamery a kontinuitu scény. Príručka opisuje pridanie najviac 20 sekúnd pri každom predĺžení. Zdokumentovaným vstupom predĺženia je zdrojové video a text; ďalšie referencie postáv alebo obrázkov sú z tohto režimu vylúčené. Opíšte, ako existujúca akcia pokračuje, namiesto zavedenia nesúvisiacej scény bez prechodu.</p><p>Úprava videa sa zameriava na jasnú zmenu existujúceho klipu. Cielená revízia môže zmeniť farbu predmetu alebo paletu scény a pritom zachovať zvyšok záberu. Príručka výrobcu odporúča vždy jednu dobre definovanú zmenu a odlišuje úpravu vygenerovaného videa od nahrávania ľubovoľných záberov, pre ktoré platí samostatná podmienka oprávnenosti. Pred ďalšou úpravou uchovajte dokončený zdroj a určte presnú požadovanú zmenu.</p><h4>Renderovacie úlohy a hotové video</h4><p>Zdokumentovaný postup výrobcu pre video je asynchrónny: odoslaná úloha môže čakať vo fronte alebo prebiehať, kým sa dokončí alebo zlyhá. Dokončená úloha poskytuje video MP4; miniatúra a sprite sheet slúžia na náhľady a prehliadanie. Identitu úlohy uchovajte spolu so zadaním, referenciami a vrátenými assetmi. Úvodná odpoveď úlohy nie je konečným prehrateľným videom.</p><p>Bežný postup sťahovania opisuje hodinovú platnosť URL na stiahnutie. Rozšírený dávkový postup pripravuje nezávislé renderovacie požiadavky JSON so stabilnými identifikátormi položiek, nahranými referenciami a výsledkom priradeným späť ku každému záberu; jeho dokončené assety majú samostatnú lehotu na stiahnutie do 24 hodín. Hotový klip bezodkladne uchovajte a pred jeho prijatím ako vybranej verzie skontrolujte skutočný obraz aj zvuk.</p><p>Zdokumentované obmedzenia obsahu API výrobcu vyžadujú materiál vhodný pre publikum mladšie ako 18 rokov a odmietajú postavy či hudbu chránené autorskými právami a generovanie skutočných ľudí. Scénu a referencie pripravte podľa toho. Priamym výsledkom modelu je video so zvukom, nie generované statické obrázky, odpoveď konverzačného nástroja ani neobmedzene dlhý film. Pri pokračovaní vizuálneho konceptu zachovajte presnú identitu štandardného modelu a prijatý zdrojový klip.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Dostupné v Ailoot · vstupy a metódy</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Chat Completions</b> <code>POST /v1/chat/completions</code></summary><dl class=\"method-capabilities\"><div><dt>Vstup</dt><dd><code>text</code></dd></div><div><dt>Výstup</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>Výstupný formát</dt><dd>JSON alebo text/event-stream</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Pole</th><th>Typ</th><th>Požiadavka</th><th>Hodnoty a limity</th><th>Predvolené</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span><div>sora-2</div></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>message[]</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>boolean</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Voliteľné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"known\"><span class=\"card-cell-label\">Predvolené</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinácie vstupných podkladov</summary><p class=\"note-s\"><b>owned_text_messages</b></p></details><details class=\"note-s\" data-method-contract><summary>Parametre a životný cyklus metódy</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Špecifikácia</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>model, messages</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>messages</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>pole správ s role a doslovným reťazcom content</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>file_material</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>Skutočný materiál UTF-8 možno vložiť ako doslovný reťazec content; nevyvodzuje sa z neho odkaz na súbor.</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>stream</td></tr></tbody></table></div><p>Životný cyklus: <code>synchronous_json_or_sse</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Cenník</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.</p><dl data-price-conditions><dt>Rýchly režim</dt><dd>Neuvedené <span class=\"note-s\">Keď je zvolený rýchly režim</span></dd><dt>Režim Flex</dt><dd>Neuvedené <span class=\"note-s\">Keď je zvolený režim flex</span></dd><dt>Maximálna úroveň uvažovania</dt><dd>Neuvedené <span class=\"note-s\">Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Sadzby Ailoot</h4><h4>Ceny podľa konfigurácie</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurácia</th><th>Sadzobník</th><th>Poplatok</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurácia\" scope=\"row\"><span class=\"card-cell-label\">Konfigurácia</span>Základné sadzby za tokeny</th><td data-cell-label=\"Sadzobník\"><span class=\"card-cell-label\">Sadzobník</span>Základná sadzba</td><td data-cell-label=\"Poplatok\"><span class=\"card-cell-label\">Poplatok</span><div><span>Vstup · Vstupné tokeny</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Výstup · Výstupné tokeny</span> <b>$0.2</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Vstup · Čítanie cache</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Vstup · Zápis do cache</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Vstup · Zápis do cache, 1 hod</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenov</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. <a href=\"/docs/sk/billing/reserve/\">Ako funguje rezervácia a vyúčtovanie →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Príklady požiadaviek</h3><h4>Ailoot Ultra · Chat Completions</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Varianty kódu\"><button class=\"cg-tab\" id=\"model-code-2605-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · úplná odpoveď JSON</button><button class=\"cg-tab\" id=\"model-code-2605-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK · úplná odpoveď JSON</button><button class=\"cg-tab\" id=\"model-code-2605-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · zachovať tok SSE</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Skopírovať kód\"><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-2605-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-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;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;:&quot;sora-2&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}],&quot;stream&quot;:false}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\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;\nfrom pathlib import Path\nprint(Path(&quot;result.json&quot;).read_text(encoding=&quot;utf-8&quot;))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2605-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\n\nif not os.environ.get(&quot;AILOOT_API_KEY&quot;, &quot;&quot;).strip(): raise SystemExit(&quot;Set AILOOT_API_KEY before making a request&quot;)\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.chat.completions.create(model=&quot;sora-2&quot;, messages=[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=&quot;json&quot;)\nPath(&quot;result.json&quot;).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=&quot;utf-8&quot;)\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2605-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-2\" hidden><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;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;:&quot;sora-2&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}],&quot;stream&quot;:true}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\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.sse\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Prijať a uložiť výsledky</h3><h4>Ailoot Ultra · Chat Completions</h4><p class=\"note-s\">JSON alebo text/event-stream</p><div class=\"card-result-process\" data-all-results><h5>Uchovať všetky dokončené výsledky</h5><p class=\"note-s\">Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.</p><p class=\"note-s\">Zachovajte celý JSON alebo bajty SSE, hlavičky odpovede, vrátenú spotrebu a všetky poskytnuté polia výsledku. Netvrdí sa žiadna rodina výstupov špecifická pre model.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Ak treba overiť pôvodnú odpoveď</h5><p class=\"note-s\">Zachovajte pôvodnú odpoveď a identitu pokusu; nevyvodzuje sa žiadne nové zisťovanie stavu úlohy ani opätovné odoslanie.</p></div><details class=\"card-about\" data-output-fields><summary>Polia odpovede</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Pole</th><th>Typ</th><th>Význam</th></tr></thead><tbody><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">complete response JSON</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>object</td><td data-cell-label=\"Význam\"><span class=\"card-cell-label\">Význam</span>Zachovajte každé vrátené pole bez predpokladania rodiny výsledkov špecifickej pre model.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">SSE data events</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>stream</td><td data-cell-label=\"Význam\"><span class=\"card-cell-label\">Význam</span>Zachovajte každú vrátenú udalosť a koncovú značku bez výberu iba textových polí.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasy</h3><h4>Aliasy modelov</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=chat_completions\"><code>sora-2</code></a></span></p><h4>Aliasy ciest metód</h4><p class=\"note-s\">Použite cesty metód uvedené vyššie.</p><h4>Súvisiace ID na volanie</h4><p class=\"note-s\"><a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=chat_completions\"><code>sora-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "sora-2",
        "fmt": "chat_completions",
        "http": "POST",
        "path": "/v1/chat/completions",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|chat_completions|/v1/chat/completions|sora-2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "example_body": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "hints": [
              "Supply owned text as messages[].content.",
              "Use stream:false for JSON or stream:true for SSE; keep the complete response."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_json_or_sse",
              "status_poll": null,
              "unknown": "Zachovajte pôvodnú odpoveď a identitu pokusu; nevyvodzuje sa žiadne nové zisťovanie stavu úlohy ani opätovné odoslanie."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "message[] with literal string content"
                ],
                "mode": "owned_text_messages"
              }
            ],
            "outputs": {
              "all_results": "Zachovajte celý JSON alebo bajty SSE, hlavičky odpovede, vrátenú spotrebu a všetky poskytnuté polia výsledku. Netvrdí sa žiadna rodina výstupov špecifická pre model.",
              "family": "protocol",
              "fields": [
                {
                  "description": "Zachovajte každé vrátené pole bez predpokladania rodiny výsledkov špecifickej pre model.",
                  "name": "complete response JSON",
                  "type": "object"
                },
                {
                  "description": "Zachovajte každú vrátenú udalosť a koncovú značku bez výberu iba textových polí.",
                  "name": "SSE data events",
                  "type": "stream"
                }
              ],
              "format": "JSON alebo text/event-stream"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Current d09 shared client interface only; model-specific provider output and acceptance are not claimed.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "Model-specific optional tools or structured-output controls are not part of this minimal profile.",
              "No image/audio/video request controls, dimensions or foreign model limits are inherited.",
              "No asynchronous media job route or manufacturer output capability is inferred."
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "Skutočný materiál UTF-8 možno vložiť ako doslovný reťazec content; nevyvodzuje sa z neho odkaz na súbor.",
            "material_types": [
              "text"
            ],
            "messages": "pole správ s role a doslovným reťazcom content",
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "job_read": null,
            "mode": "synchronous_json_or_sse",
            "status_poll": null,
            "unknown": "Preserve the original response and attempt identity; no new job polling or resubmission is inferred."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "operation_modes": [
            "request_response",
            "response_stream"
          ],
          "output": {
            "all_results": "Retain the complete JSON or SSE bytes, response headers, returned usage and all supplied result fields. No model-specific output family is asserted.",
            "family": "protocol",
            "format": "JSON or text/event-stream",
            "manufacturer_output_family": null
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Základné sadzby za tokeny",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\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'\nfrom pathlib import Path\nprint(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nPY_RESULT\n",
            "label": "curl · complete JSON response",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model=\"sora-2\", messages=[{\"role\":\"user\",\"content\":\"hello\"}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=\"json\")\nPath(\"result.json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n",
            "label": "Python SDK · complete JSON response",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":true}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n",
            "label": "curl · preserve SSE stream",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "chat_completions",
        "hints": [
          "Supply owned text as messages[].content.",
          "Use stream:false for JSON or stream:true for SSE; keep the complete response."
        ],
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Chat Completions",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/chat/completions",
        "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": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">sora-2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Zavrieť\">×</button></div><div class=\"idline\"><span>Ostatné /</span><code>sora-2</code><button type=\"button\" id=\"copy-id\">Skopírovať ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sekcie karty modelu\"><button type=\"button\" data-card-jump=\"overview\">Úvod</button><button type=\"button\" data-card-jump=\"methods\">Vstupy a metódy</button><button type=\"button\" data-card-jump=\"pricing\">Cenník</button><button type=\"button\" data-card-jump=\"examples\">Príklady</button><button type=\"button\" data-card-jump=\"results\">Výsledky</button><button type=\"button\" data-card-jump=\"aliases\">Aliasy</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metódy API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|messages|/v1/messages|sora-2\">Messages</button><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-1\" data-card-method=\"Ultra|chat_completions|/v1/chat/completions|sora-2\">Chat Completions</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\">Úvod</h3><p class=\"mdesc-full\">Sora 2 vytvára z textu alebo referenčného obrázka video so synchronizovanými dialógmi, zvukovými efektmi a zvukom pozadia. Štandardný profil podporuje vizuálne skúmanie a koncepčné klipy; výrobca ponúka samostatné postupy pre opakovane použiteľné neľudské postavy, pokračovanie a cielené úpravy videa.</p><dl class=\"card-io\" data-card-io><div><dt>Povolené vstupy</dt><dd>Text</dd></div><div><dt>Výsledky</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>O modeli</summary><p class=\"note-s\" data-model-method-boundary>Tento opis pokrýva možnosti modelu. Dostupné vstupy, výstupy a voľby v Ailoot sú uvedené nižšie pre vybranú metódu.</p><div class=\"mabout\" id=\"m-about\"><p>Sora 2 je model spoločnosti OpenAI na generovanie videa a zvuku pre dynamické klipy vytvárané z písomného opisu scény alebo referenčného obrázka. Vizuálnu sekvenciu generuje spolu so synchronizovanou rečou, efektmi a zvukom pozadia. Štandardný profil Sora 2 je určený na vizuálne skúmanie, rozvíjanie konceptov, prototypy a hrubé zostrihy. Sora 2 Pro je samostatná edícia zameraná na vyššiu vizuálnu vernosť a dokončovanie vo vyššom rozlíšení.</p><h4>Opíšte záber, ktorý možno vidieť aj počuť</h4><p>Príručka výrobcu k zadávaniu pokynov stavia užitočné zadanie na kompozícii záberu, objekte, akcii, prostredí a svetle. Dajte scéne jednotný vizuálny štýl a potom opíšte pohyb v jasných krokoch. Pôvodný produktový koncept môže zobrazovať malý mechanický predmet, ktorý sa raz otočí na pracovnom stole, zatiaľ čo sa kamera pomaly približuje, s mäkkým svetlom z okna a jemným zvukom motora. Určte, čo si má divák všimnúť a ako sa akcia končí.</p><p>Pohyb kamery a akciu objektu udržte v každom zábere zrozumiteľné. Zložitú sekvenciu možno rozdeliť na samostatné bloky záberov, z ktorých každý má vlastnú kompozíciu, akciu a osvetlenie. Ak má viacero klipov tvoriť jednu sekvenciu, zachovajte rovnaké detaily objektu a paletu. Príručka zdôrazňuje, že kratšie zábery sa spravidla spoľahlivejšie riadia pokynmi a že opakované generovanie s rovnakým zadaním vytvára odlišné verzie.</p><p>Pri uvedení modelu výrobca opisuje zlepšené fyzikálne správanie a kontinuitu medzi zábermi vrátane realistického, filmového a anime štýlu. Ide o zamýšľané schopnosti, ktoré treba usmerňovať a kontrolovať. Kontrolujte pohyb, kontakt medzi predmetmi, proporcie a kontinuitu; nepredpokladajte, že vierohodná prvá snímka zaručuje súdržnú sekvenciu. Ak je akcia nejasná, zjednodušte ju a dajte jej viditeľný začiatok a koniec.</p><h4>Režírujte dialóg a zvuk samostatne</h4><p>Hovorené repliky určte oddelene od vizuálneho opisu a hovoriacich označujte jednotne. Dialóg musí byť dostatočne krátky, aby sa zmestil do akcie a zamýšľanej dĺžky klipu. Pri animácii s dvoma postavami striedajte krátku otázku a odpoveď, namiesto toho, aby ste do krátkeho záberu žiadali dlhý prejav. Príručka upozorňuje, že zložitý a dlhý dialóg môže narušiť tempo a synchronizáciu.</p><p>Opíšte zvukové prostredie, ktoré patrí k scéne: zvuk drobného pohybu, atmosféru miestnosti alebo rytmus zvukového efektu prostredia. Vysvetlite, ktorý zvuk má sprevádzať danú akciu v rovnakom okamihu. Výslednú reč a efekty si vypočujte spolu s obrazom a skontrolujte priradenie hovoriacich, znenie a načasovanie. Synchronizovaný zvuk je súčasťou vygenerovaného klipu, nie samostatnou textovou odpoveďou.</p><h4>Rozmery, trvanie a úvod vedený obrázkom</h4><p>Zdokumentované výstupné rozmery štandardného modelu sú 720×1280 na výšku a 1280×720 na šírku. Rozmery s vyšším rozlíšením z profilu Pro sa nemajú pripisovať štandardnému modelu Sora 2. Rozmery a trvanie sú výslovné nastavenia požiadavky; uvedenie iných rozmerov alebo požiadavka na dlhší film v zadaní tieto nastavenia nemení. Referencia pre vytváranie uvádza nastavenia klipov s dĺžkou 4, 8 a 12 sekúnd, preto pri príprave záberu vyberte krátky, jasne vymedzený dejový úsek. Rozšírený postup výrobcu dokumentuje aj nastavenia klipov s dĺžkou 16 a 20 sekúnd.</p><p>Referenčný obrázok ukotvuje prvú snímku a text opisuje, čo nasleduje. Výrobca podporuje referencie JPEG, PNG a WebP a vyžaduje zhodu obrázka s cieľovými rozmermi videa. Objekt, prostredie a kompozíciu pripravte v tomto úvodnom obrázku a potom požiadajte o konkrétny pohyb. Ide o referenciu pre úvodnú snímku, nie o záruku zachovania každého detailu počas celého klipu.</p><h4>Opakovane použiteľné neľudské postavy</h4><p>Rozšírený postup výrobcu môže vytvoriť opakovane použiteľný asset postavy z krátkeho referenčného videa zvieraťa, maskota alebo predmetu. Pokyny na prípravu požadujú klip MP4 s dĺžkou približne dve až štyri sekundy, v rozlíšení 720p až 1080p a pomere strán 16:9 alebo 9:16. Zhoda pomeru strán zdroja a výstupu pomáha predísť natiahnutému vzhľadu. Generovanie môže odkazovať najviac na dve postavy.</p><p>Uchovajte identifikátor postavy a v zadaní uveďte jej meno; samotné odovzdanie identifikátora nie je podľa príručky úplnou prípravou. Assety postáv môžu sprevádzať generovanie vedené obrázkom, ale predĺženia videa ich neprijímajú. Výrobca predvolene blokuje nahrávanie postáv podobných ľuďom a v zdokumentovanom postupe API odmieta referenčné obrázky obsahujúce ľudské tváre. Funkcie osobných postáv v aplikácii Sora predstavujú samostatný produktový postup.</p><h4>Pokračujte v dokončenom klipe alebo ho upravte</h4><p>Predĺženie prijíma dokončené zdrojové video a zadanie pokračovania, pričom celý zdrojový klip používa ako kontext pre pohyb, smerovanie kamery a kontinuitu scény. Príručka opisuje pridanie najviac 20 sekúnd pri každom predĺžení. Zdokumentovaným vstupom predĺženia je zdrojové video a text; ďalšie referencie postáv alebo obrázkov sú z tohto režimu vylúčené. Opíšte, ako existujúca akcia pokračuje, namiesto zavedenia nesúvisiacej scény bez prechodu.</p><p>Úprava videa sa zameriava na jasnú zmenu existujúceho klipu. Cielená revízia môže zmeniť farbu predmetu alebo paletu scény a pritom zachovať zvyšok záberu. Príručka výrobcu odporúča vždy jednu dobre definovanú zmenu a odlišuje úpravu vygenerovaného videa od nahrávania ľubovoľných záberov, pre ktoré platí samostatná podmienka oprávnenosti. Pred ďalšou úpravou uchovajte dokončený zdroj a určte presnú požadovanú zmenu.</p><h4>Renderovacie úlohy a hotové video</h4><p>Zdokumentovaný postup výrobcu pre video je asynchrónny: odoslaná úloha môže čakať vo fronte alebo prebiehať, kým sa dokončí alebo zlyhá. Dokončená úloha poskytuje video MP4; miniatúra a sprite sheet slúžia na náhľady a prehliadanie. Identitu úlohy uchovajte spolu so zadaním, referenciami a vrátenými assetmi. Úvodná odpoveď úlohy nie je konečným prehrateľným videom.</p><p>Bežný postup sťahovania opisuje hodinovú platnosť URL na stiahnutie. Rozšírený dávkový postup pripravuje nezávislé renderovacie požiadavky JSON so stabilnými identifikátormi položiek, nahranými referenciami a výsledkom priradeným späť ku každému záberu; jeho dokončené assety majú samostatnú lehotu na stiahnutie do 24 hodín. Hotový klip bezodkladne uchovajte a pred jeho prijatím ako vybranej verzie skontrolujte skutočný obraz aj zvuk.</p><p>Zdokumentované obmedzenia obsahu API výrobcu vyžadujú materiál vhodný pre publikum mladšie ako 18 rokov a odmietajú postavy či hudbu chránené autorskými právami a generovanie skutočných ľudí. Scénu a referencie pripravte podľa toho. Priamym výsledkom modelu je video so zvukom, nie generované statické obrázky, odpoveď konverzačného nástroja ani neobmedzene dlhý film. Pri pokračovaní vizuálneho konceptu zachovajte presnú identitu štandardného modelu a prijatý zdrojový klip.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Dostupné v Ailoot · vstupy a metódy</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Anthropic Messages</b> <code>POST /v1/messages</code></summary><dl class=\"method-capabilities\"><div><dt>Vstup</dt><dd><code>text</code></dd></div><div><dt>Výstup</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>Výstupný formát</dt><dd>JSON alebo SSE</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Pole</th><th>Typ</th><th>Požiadavka</th><th>Hodnoty a limity</th><th>Predvolené</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span><div>sora-2</div></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>message[]</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span><div>user, assistant</div></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">max_tokens</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>integer</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Povinné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predvolené</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>boolean</code></td><td data-cell-label=\"Požiadavka\"><span class=\"card-cell-label\">Požiadavka</span>Voliteľné</td><td data-cell-label=\"Hodnoty a limity\"><span class=\"card-cell-label\">Hodnoty a limity</span></td><td data-cell-label=\"Predvolené\" data-default=\"known\"><span class=\"card-cell-label\">Predvolené</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinácie vstupných podkladov</summary><p class=\"note-s\"><b>Text</b> · Text UTF-8</p><p class=\"note-s\"><code>reťazec messages[].content</code></p></details><details class=\"note-s\" data-method-contract><summary>Parametre a životný cyklus metódy</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Špecifikácia</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>model, messages, max_tokens</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>stream</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>text_file_material</code></th><td data-cell-label=\"Špecifikácia\"><span class=\"card-cell-label\">Špecifikácia</span>Prečítajte skutočný dokument UTF-8 a vložte jeho text do uvedeného vstupného reťazca alebo reťazca obsahu správy.</td></tr></tbody></table></div><p>Životný cyklus: <code>synchronous_or_streamed</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Cenník</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.</p><dl data-price-conditions><dt>Rýchly režim</dt><dd>Neuvedené <span class=\"note-s\">Keď je zvolený rýchly režim</span></dd><dt>Režim Flex</dt><dd>Neuvedené <span class=\"note-s\">Keď je zvolený režim flex</span></dd><dt>Maximálna úroveň uvažovania</dt><dd>Neuvedené <span class=\"note-s\">Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Sadzby Ailoot</h4><h4>Ceny podľa konfigurácie</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurácia</th><th>Sadzobník</th><th>Poplatok</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurácia\" scope=\"row\"><span class=\"card-cell-label\">Konfigurácia</span>Základné sadzby za tokeny</th><td data-cell-label=\"Sadzobník\"><span class=\"card-cell-label\">Sadzobník</span>Základná sadzba</td><td data-cell-label=\"Poplatok\"><span class=\"card-cell-label\">Poplatok</span><div><span>Vstup · Vstupné tokeny</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Výstup · Výstupné tokeny</span> <b>$0.2</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Vstup · Čítanie cache</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Vstup · Zápis do cache</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenov</span></div><div><span>Vstup · Zápis do cache, 1 hod</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenov</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. <a href=\"/docs/sk/billing/reserve/\">Ako funguje rezervácia a vyúčtovanie →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Príklady požiadaviek</h3><h4>Ailoot Ultra · Anthropic Messages</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Varianty kódu\"><button class=\"cg-tab\" id=\"model-code-2606-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-0\" aria-selected=\"true\" tabindex=\"0\">Úplné minimálne telo požiadavky vo formáte JSON</button><button class=\"cg-tab\" id=\"model-code-2606-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · použite svoj dokument UTF-8</button><button class=\"cg-tab\" id=\"model-code-2606-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Python · uložte úplný výsledok</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Skopírovať kód\"><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-2606-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-0\"><pre data-lang=\"json\"><code>{\n  &quot;model&quot;: &quot;sora-2&quot;,\n  &quot;max_tokens&quot;: 128,\n  &quot;messages&quot;: [\n    {\n      &quot;role&quot;: &quot;user&quot;,\n      &quot;content&quot;: &quot;Summarize the incident report.&quot;\n    }\n  ],\n  &quot;stream&quot;: false\n}</code></pre></div><div class=\"cg-pane\" id=\"model-code-2606-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;sora-2&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nPath(&#39;request.json&#39;).write_text(json.dumps(payload, ensure_ascii=False), encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H &quot;x-api-key: $AILOOT_API_KEY&quot; -H &#39;anthropic-version: 2023-06-01&#39; -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\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2606-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-2\" hidden><pre data-lang=\"python\"><code>import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;sora-2&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ[&#39;AILOOT_API_KEY&#39;]\nif not api_key.strip():\n    raise SystemExit(&#39;Set AILOOT_API_KEY before making a request&#39;)\nheaders = {&#39;x-api-key&#39;: &#39;PLACEHOLDER_KEY&#39;, &#39;anthropic-version&#39;: &#39;2023-06-01&#39;, &#39;Content-Type&#39;: &#39;application/json&#39;}\nheaders[&#39;x-api-key&#39;] = api_key\nrequest = Request(&#39;https://api.ailoot.ai/v1/messages&#39;, data=json.dumps(payload, ensure_ascii=False).encode(&#39;utf-8&#39;), headers=headers, method=&#39;POST&#39;)\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path(&#39;response-headers.txt&#39;).write_text(str(response.headers), encoding=&#39;utf-8&#39;)\nexcept HTTPError as error:\n    Path(&#39;result.json&#39;).write_bytes(error.read())\n    Path(&#39;response-headers.txt&#39;).write_text(str(error.headers), encoding=&#39;utf-8&#39;)\n    raise\nPath(&#39;result.json&#39;).write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Prijať a uložiť výsledky</h3><h4>Ailoot Ultra · Anthropic Messages</h4><p class=\"note-s\">JSON alebo SSE</p><div class=\"card-result-process\" data-all-results><h5>Uchovať všetky dokončené výsledky</h5><p class=\"note-s\">Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.</p><p class=\"note-s\">Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Ak treba overiť pôvodnú odpoveď</h5><p class=\"note-s\">Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.</p></div><details class=\"card-about\" data-output-fields><summary>Polia odpovede</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Pole</th><th>Typ</th></tr></thead><tbody><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">content[]</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>text|thinking|tool_use|other content block</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">stop_reason</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string|null</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Chyby a ďalšie kroky</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Odpoveď</th><th>Podmienka</th><th>Ďalší krok</th></tr></thead><tbody><tr><th data-cell-label=\"Odpoveď\" scope=\"row\"><span class=\"card-cell-label\">Odpoveď</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Podmienka\"><span class=\"card-cell-label\">Podmienka</span>Neplatné povinné polia, reprezentácia materiálu alebo hodnota parametra</td><td data-cell-label=\"Ďalší krok\"><span class=\"card-cell-label\">Ďalší krok</span>Pred novou požiadavkou na vytvorenie opravte uvedené polia.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasy</h3><h4>Aliasy modelov</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=messages\"><code>sora-2</code></a></span></p><h4>Aliasy ciest metód</h4><p class=\"note-s\">Použite cesty metód uvedené vyššie.</p><h4>Súvisiace ID na volanie</h4><p class=\"note-s\"><a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=messages\"><code>sora-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "sora-2",
        "fmt": "messages",
        "http": "POST",
        "path": "/v1/messages",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|messages|/v1/messages|sora-2",
      "ordinal": 1,
      "rawMethod": {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "Neplatné povinné polia, reprezentácia materiálu alebo hodnota parametra",
                "http_status": 400,
                "recovery": "Pred novou požiadavkou na vytvorenie opravte uvedené polia.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "reťazec messages[].content",
                "required_material": "Text UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON alebo SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "Prečítajte skutočný dokument UTF-8 a vložte jeho text do uvedeného vstupného reťazca alebo reťazca obsahu správy."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Základné sadzby za tokeny",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"sora-2\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -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\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "messages",
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Anthropic Messages",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "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": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "sora-2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "b8402154981c7633333b042815af5714a544c95d4f49da556918d750931d7e3f",
    "input_html_sha256": "aaf9ecdccb1a62409ae24f4c66eaf9e0f2d6a52657dddb27ce653393f2f71ae9",
    "private_audit_sha256": "72babcc26be3bec4fbf8c1ca071db91eb4399980679b5883d0dc4d49a4e1f2d0",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/sk/sora-2/",
    "description": "Sora 2 vytvára z textu alebo referenčného obrázka video so synchronizovanými dialógmi, zvukovými efektmi a zvukom pozadia. Štandardný profil podporuje vizuálne skúmanie a koncepčné klipy; výrobca ponúka samostatné postupy pre opakovane použiteľné neľudské postavy, pokračovanie a cielené úpravy videa.",
    "locale": "sk",
    "md_url": "https://ailoot.ai/models/sk/sora-2/index.md",
    "title": "sora-2 — Ailoot",
    "url": "https://ailoot.ai/models/sk/sora-2/"
  },
  "rawModel": {
    "about": "Sora 2 je model spoločnosti OpenAI na generovanie videa a zvuku pre dynamické klipy vytvárané z písomného opisu scény alebo referenčného obrázka. Vizuálnu sekvenciu generuje spolu so synchronizovanou rečou, efektmi a zvukom pozadia. Štandardný profil Sora 2 je určený na vizuálne skúmanie, rozvíjanie konceptov, prototypy a hrubé zostrihy. Sora 2 Pro je samostatná edícia zameraná na vyššiu vizuálnu vernosť a dokončovanie vo vyššom rozlíšení.\n\n### Opíšte záber, ktorý možno vidieť aj počuť\n\nPríručka výrobcu k zadávaniu pokynov stavia užitočné zadanie na kompozícii záberu, objekte, akcii, prostredí a svetle. Dajte scéne jednotný vizuálny štýl a potom opíšte pohyb v jasných krokoch. Pôvodný produktový koncept môže zobrazovať malý mechanický predmet, ktorý sa raz otočí na pracovnom stole, zatiaľ čo sa kamera pomaly približuje, s mäkkým svetlom z okna a jemným zvukom motora. Určte, čo si má divák všimnúť a ako sa akcia končí.\n\nPohyb kamery a akciu objektu udržte v každom zábere zrozumiteľné. Zložitú sekvenciu možno rozdeliť na samostatné bloky záberov, z ktorých každý má vlastnú kompozíciu, akciu a osvetlenie. Ak má viacero klipov tvoriť jednu sekvenciu, zachovajte rovnaké detaily objektu a paletu. Príručka zdôrazňuje, že kratšie zábery sa spravidla spoľahlivejšie riadia pokynmi a že opakované generovanie s rovnakým zadaním vytvára odlišné verzie.\n\nPri uvedení modelu výrobca opisuje zlepšené fyzikálne správanie a kontinuitu medzi zábermi vrátane realistického, filmového a anime štýlu. Ide o zamýšľané schopnosti, ktoré treba usmerňovať a kontrolovať. Kontrolujte pohyb, kontakt medzi predmetmi, proporcie a kontinuitu; nepredpokladajte, že vierohodná prvá snímka zaručuje súdržnú sekvenciu. Ak je akcia nejasná, zjednodušte ju a dajte jej viditeľný začiatok a koniec.\n\n### Režírujte dialóg a zvuk samostatne\n\nHovorené repliky určte oddelene od vizuálneho opisu a hovoriacich označujte jednotne. Dialóg musí byť dostatočne krátky, aby sa zmestil do akcie a zamýšľanej dĺžky klipu. Pri animácii s dvoma postavami striedajte krátku otázku a odpoveď, namiesto toho, aby ste do krátkeho záberu žiadali dlhý prejav. Príručka upozorňuje, že zložitý a dlhý dialóg môže narušiť tempo a synchronizáciu.\n\nOpíšte zvukové prostredie, ktoré patrí k scéne: zvuk drobného pohybu, atmosféru miestnosti alebo rytmus zvukového efektu prostredia. Vysvetlite, ktorý zvuk má sprevádzať danú akciu v rovnakom okamihu. Výslednú reč a efekty si vypočujte spolu s obrazom a skontrolujte priradenie hovoriacich, znenie a načasovanie. Synchronizovaný zvuk je súčasťou vygenerovaného klipu, nie samostatnou textovou odpoveďou.\n\n### Rozmery, trvanie a úvod vedený obrázkom\n\nZdokumentované výstupné rozmery štandardného modelu sú 720×1280 na výšku a 1280×720 na šírku. Rozmery s vyšším rozlíšením z profilu Pro sa nemajú pripisovať štandardnému modelu Sora 2. Rozmery a trvanie sú výslovné nastavenia požiadavky; uvedenie iných rozmerov alebo požiadavka na dlhší film v zadaní tieto nastavenia nemení. Referencia pre vytváranie uvádza nastavenia klipov s dĺžkou 4, 8 a 12 sekúnd, preto pri príprave záberu vyberte krátky, jasne vymedzený dejový úsek. Rozšírený postup výrobcu dokumentuje aj nastavenia klipov s dĺžkou 16 a 20 sekúnd.\n\nReferenčný obrázok ukotvuje prvú snímku a text opisuje, čo nasleduje. Výrobca podporuje referencie JPEG, PNG a WebP a vyžaduje zhodu obrázka s cieľovými rozmermi videa. Objekt, prostredie a kompozíciu pripravte v tomto úvodnom obrázku a potom požiadajte o konkrétny pohyb. Ide o referenciu pre úvodnú snímku, nie o záruku zachovania každého detailu počas celého klipu.\n\n### Opakovane použiteľné neľudské postavy\n\nRozšírený postup výrobcu môže vytvoriť opakovane použiteľný asset postavy z krátkeho referenčného videa zvieraťa, maskota alebo predmetu. Pokyny na prípravu požadujú klip MP4 s dĺžkou približne dve až štyri sekundy, v rozlíšení 720p až 1080p a pomere strán 16:9 alebo 9:16. Zhoda pomeru strán zdroja a výstupu pomáha predísť natiahnutému vzhľadu. Generovanie môže odkazovať najviac na dve postavy.\n\nUchovajte identifikátor postavy a v zadaní uveďte jej meno; samotné odovzdanie identifikátora nie je podľa príručky úplnou prípravou. Assety postáv môžu sprevádzať generovanie vedené obrázkom, ale predĺženia videa ich neprijímajú. Výrobca predvolene blokuje nahrávanie postáv podobných ľuďom a v zdokumentovanom postupe API odmieta referenčné obrázky obsahujúce ľudské tváre. Funkcie osobných postáv v aplikácii Sora predstavujú samostatný produktový postup.\n\n### Pokračujte v dokončenom klipe alebo ho upravte\n\nPredĺženie prijíma dokončené zdrojové video a zadanie pokračovania, pričom celý zdrojový klip používa ako kontext pre pohyb, smerovanie kamery a kontinuitu scény. Príručka opisuje pridanie najviac 20 sekúnd pri každom predĺžení. Zdokumentovaným vstupom predĺženia je zdrojové video a text; ďalšie referencie postáv alebo obrázkov sú z tohto režimu vylúčené. Opíšte, ako existujúca akcia pokračuje, namiesto zavedenia nesúvisiacej scény bez prechodu.\n\nÚprava videa sa zameriava na jasnú zmenu existujúceho klipu. Cielená revízia môže zmeniť farbu predmetu alebo paletu scény a pritom zachovať zvyšok záberu. Príručka výrobcu odporúča vždy jednu dobre definovanú zmenu a odlišuje úpravu vygenerovaného videa od nahrávania ľubovoľných záberov, pre ktoré platí samostatná podmienka oprávnenosti. Pred ďalšou úpravou uchovajte dokončený zdroj a určte presnú požadovanú zmenu.\n\n### Renderovacie úlohy a hotové video\n\nZdokumentovaný postup výrobcu pre video je asynchrónny: odoslaná úloha môže čakať vo fronte alebo prebiehať, kým sa dokončí alebo zlyhá. Dokončená úloha poskytuje video MP4; miniatúra a sprite sheet slúžia na náhľady a prehliadanie. Identitu úlohy uchovajte spolu so zadaním, referenciami a vrátenými assetmi. Úvodná odpoveď úlohy nie je konečným prehrateľným videom.\n\nBežný postup sťahovania opisuje hodinovú platnosť URL na stiahnutie. Rozšírený dávkový postup pripravuje nezávislé renderovacie požiadavky JSON so stabilnými identifikátormi položiek, nahranými referenciami a výsledkom priradeným späť ku každému záberu; jeho dokončené assety majú samostatnú lehotu na stiahnutie do 24 hodín. Hotový klip bezodkladne uchovajte a pred jeho prijatím ako vybranej verzie skontrolujte skutočný obraz aj zvuk.\n\nZdokumentované obmedzenia obsahu API výrobcu vyžadujú materiál vhodný pre publikum mladšie ako 18 rokov a odmietajú postavy či hudbu chránené autorskými právami a generovanie skutočných ľudí. Scénu a referencie pripravte podľa toho. Priamym výsledkom modelu je video so zvukom, nie generované statické obrázky, odpoveď konverzačného nástroja ani neobmedzene dlhý film. Pri pokračovaní vizuálneho konceptu zachovajte presnú identitu štandardného modelu a prijatý zdrojový klip.",
    "alias_of": null,
    "aliases": [],
    "author": "Other",
    "capabilities": {
      "context_length": 60000,
      "manufacturer_input": [],
      "manufacturer_output": []
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "Úplný cenník konfigurácie nájdete v podrobnostiach."
      }
    ],
    "ctx": null,
    "formats": [
      "chat_completions",
      "messages"
    ],
    "id": "sora-2",
    "input": [
      "text"
    ],
    "kind": "text",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "example_body": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "hints": [
              "Supply owned text as messages[].content.",
              "Use stream:false for JSON or stream:true for SSE; keep the complete response."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_json_or_sse",
              "status_poll": null,
              "unknown": "Zachovajte pôvodnú odpoveď a identitu pokusu; nevyvodzuje sa žiadne nové zisťovanie stavu úlohy ani opätovné odoslanie."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "message[] with literal string content"
                ],
                "mode": "owned_text_messages"
              }
            ],
            "outputs": {
              "all_results": "Zachovajte celý JSON alebo bajty SSE, hlavičky odpovede, vrátenú spotrebu a všetky poskytnuté polia výsledku. Netvrdí sa žiadna rodina výstupov špecifická pre model.",
              "family": "protocol",
              "fields": [
                {
                  "description": "Zachovajte každé vrátené pole bez predpokladania rodiny výsledkov špecifickej pre model.",
                  "name": "complete response JSON",
                  "type": "object"
                },
                {
                  "description": "Zachovajte každú vrátenú udalosť a koncovú značku bez výberu iba textových polí.",
                  "name": "SSE data events",
                  "type": "stream"
                }
              ],
              "format": "JSON alebo text/event-stream"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Current d09 shared client interface only; model-specific provider output and acceptance are not claimed.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "Model-specific optional tools or structured-output controls are not part of this minimal profile.",
              "No image/audio/video request controls, dimensions or foreign model limits are inherited.",
              "No asynchronous media job route or manufacturer output capability is inferred."
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "Skutočný materiál UTF-8 možno vložiť ako doslovný reťazec content; nevyvodzuje sa z neho odkaz na súbor.",
            "material_types": [
              "text"
            ],
            "messages": "pole správ s role a doslovným reťazcom content",
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "job_read": null,
            "mode": "synchronous_json_or_sse",
            "status_poll": null,
            "unknown": "Preserve the original response and attempt identity; no new job polling or resubmission is inferred."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "operation_modes": [
            "request_response",
            "response_stream"
          ],
          "output": {
            "all_results": "Retain the complete JSON or SSE bytes, response headers, returned usage and all supplied result fields. No model-specific output family is asserted.",
            "family": "protocol",
            "format": "JSON or text/event-stream",
            "manufacturer_output_family": null
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Základné sadzby za tokeny",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\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'\nfrom pathlib import Path\nprint(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nPY_RESULT\n",
            "label": "curl · complete JSON response",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model=\"sora-2\", messages=[{\"role\":\"user\",\"content\":\"hello\"}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=\"json\")\nPath(\"result.json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n",
            "label": "Python SDK · complete JSON response",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":true}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n",
            "label": "curl · preserve SSE stream",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "chat_completions",
        "hints": [
          "Supply owned text as messages[].content.",
          "Use stream:false for JSON or stream:true for SSE; keep the complete response."
        ],
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Chat Completions",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/chat/completions",
        "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": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      },
      {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "Neplatné povinné polia, reprezentácia materiálu alebo hodnota parametra",
                "http_status": 400,
                "recovery": "Pred novou požiadavkou na vytvorenie opravte uvedené polia.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "reťazec messages[].content",
                "required_material": "Text UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON alebo SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "Prečítajte skutočný dokument UTF-8 a vložte jeho text do uvedeného vstupného reťazca alebo reťazca obsahu správy."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Základné sadzby za tokeny",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"sora-2\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -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\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "messages",
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Anthropic Messages",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "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": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "sora-2",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      }
    ],
    "name": "sora-2",
    "price": {
      "in": 0,
      "in_label": null,
      "out": 200,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0,
      "sort_out": 200,
      "varies": false
    },
    "short": "Sora 2 vytvára z textu alebo referenčného obrázka video so synchronizovanými dialógmi, zvukovými efektmi a zvukom pozadia. Štandardný profil podporuje vizuálne skúmanie a koncepčné klipy; výrobca ponúka samostatné postupy pre opakovane použiteľné neľudské postavy, pokračovanie a cielené úpravy videa."
  },
  "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
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Sora 2 vytvára z textu alebo referenčného obrázka video so synchronizovanými dialógmi, zvukovými efektmi a zvukom pozadia. Štandardný profil podporuje vizuálne skúmanie a koncepčné klipy; výrobca ponúka samostatné postupy pre opakovane použiteľné neľudské postavy, pokračovanie a cielené úpravy videa.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "648fbcb3d23af9217631c8241e0688e93cad1ea8e92c3071bcbec5a41c709f7b",
    "renderer_sha256": "94893ba0fa4d7b7d32370787b705f436a4c2569f84ec7b33063549adc74b07e0"
  },
  "sourceRevision": "244ba1084431d8b6036f48aea367fa5dd0fdd5ad17c40131803b39a626fde448"
}
