{
  "aboutHtml": "<p>Grok Imagine Video är den klassiska versionen i Grok Imagine-videofamiljen. Tillverkarens aktuella dokumentation omfattar generering av ett nytt klipp från en prompt, animering av en startbild, användning av visuella referenser och ändring eller fortsättning av en befintlig video. Arbetsflödena skapar olika leveranser: en ny scen, en redigerad version av angivet material eller en video som innehåller originalmaterialet följt av nytt innehåll. Välj arbetsflöde utifrån materialet som redan finns och den del av tagningen som behöver ändras.</p><p>Beskriv motiv, miljö, synlig handling, kamera och ljud för en ny text-till-video-tagning. Standardgenerering stöder klipp på 1–15 sekunder, med utdata i 480p eller 720p och genererat ljud. Kvadratiska, liggande, stående och bredare förhållanden dokumenteras, inklusive 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 och 5:2. Ett ursprungligt uppdrag kan be om en papperslykta som rör sig varsamt över en stillsam gård medan kameran åker i sidled. En användbar granskning kontrollerar om rörelse, bildutsnitt och atmosfärljud stödjer denna enda tagning.</p><p>I bild-till-video är den angivna stillbilden den första bildrutan. Förbered den med avsedd beskärning, motiv och synliga detaljer och beskriv sedan handlingen som följer. Utdata följer bildens bildförhållande. En startbild ger en exakt öppningskomposition, medan referens-till-video använder bilder för att vägleda personer, produkter eller miljö i en nykomponerad scen. Att hålla rollerna åtskilda hjälper till att undvika en oavsiktlig öppning när målet är att placera ett känt objekt i en annan miljö.</p><p>Den klassiska modellen accepterar upp till sju referensbilder per referensstyrd begäran. Läget är begränsat till tio sekunder och 720p. Ge varje referens en tydlig roll och identifiera den genom dess position i listan, med början på &lt;IMAGE_0&gt;. En referens kan identifiera objektet och en annan önskad plats för en produktvinjett. Håll uppdraget fokuserat på objektets placering och tagningens huvudhandling. Det klassiska referensläget använder sin egen konfiguration; fullständiga 1.5 erbjuder ytterligare kontroller för vald röst och fixerade bildrutor.</p><p>Videoredigering tar ett befintligt klipp och en prompt som beskriver förändringen. Tillverkaren accepterar MP4-källor med kodekar som stöds, till exempel H.264, H.265 eller AV1, på upp till 8,7 sekunder. Det redigerade resultatet behåller källans längd och bildförhållande och följer dess upplösning upp till ett tak på 720p. Anpassade kontroller för längd, bildförhållande och upplösning gäller inte i detta redigeringsarbetsflöde. Förbered en källa som redan har kompositionen och timingen som slutbruket behöver, så att prompten kan koncentrera sig på avsedd visuell ändring.</p><p>Ett ursprungligt redigeringsuppdrag kan ändra färgen på en halsduk samtidigt som personens ansikte, rörelse, bakgrund och kamera behålls. Ange de bevarade elementen uttryckligen tillsammans med ändringen. Tillverkaren beskriver att resten av källan ska behållas så nära som möjligt, vilket är ett användbart granskningsmål snarare än en garanti för att varje pixel förblir identisk. Jämför resultatet genom hela klippet, särskilt där objektet rör sig, korsar ett annat objekt eller blir delvis dolt. Slutleveransen är det redigerade klippet, inte enbart en stillbild som visar den nya färgen.</p><p>Videoförlängning fortsätter från den sista bildrutan i en befintlig MP4. Dokumenterad källängd är 2–15 sekunder; den tillagda delen är 2–10 sekunder, med sex sekunder som standard. Förlängningslängden gäller bara den nya delen. En källa på tio sekunder följd av fem sekunders fortsättning skapar en femtonsekunders video som innehåller båda delarna. Resultatet bevarar källans bildförhållande och upplösning inom ett tak på 720p. Förbered källans sista ögonblick och beskriv vad som ska hända sedan, till exempel att motivet vänder sig mot ett närmande objekt medan kameran fortsätter sin nuvarande rörelse.</p><p>Granska en förlängning runt gränsen mellan källan och det nya innehållet. Kontrollera motividentitet, rörelseriktning, kameratempo, ljus och ljud så att fortsättningen passar föregående handling. Om ett klipp slutar vid en visuellt besvärlig punkt gör du den gränsen till en uttrycklig del av planen för nästa tagning. Montering av längre scener är ett redigeringsbeslut: modellens längdgränser för generering, referens, redigering och förlängning är separata och ett totalt förlängningsresultat kan vara längre än ett vanligt nygenererat klipp.</p><p>Tillverkarens videoarbetsflöde är asynkront. En begäransidentifierare spårar jobbet tills ett färdigt resultat ger videoadress och längd; utdataadresser är tillfälliga. Spara det spelbara resultatet och dess källmaterial när en produktionsredigering förbereds. Fullständiga Grok Imagine Video 1.5 erbjuder direkt generering i 1080p och rikare förankring av visuellt innehåll, röst och bildrutor, medan Lite tjänar enkla uppdrag från prompt eller startbild. Den klassiska versionen förblir användbar när startmaterialet redan är en video som behöver en styrd ändring eller fortsättning.</p>",
  "aboutText": "Grok Imagine Video är den klassiska versionen i Grok Imagine-videofamiljen. Tillverkarens aktuella dokumentation omfattar generering av ett nytt klipp från en prompt, animering av en startbild, användning av visuella referenser och ändring eller fortsättning av en befintlig video. Arbetsflödena skapar olika leveranser: en ny scen, en redigerad version av angivet material eller en video som innehåller originalmaterialet följt av nytt innehåll. Välj arbetsflöde utifrån materialet som redan finns och den del av tagningen som behöver ändras.\n\nBeskriv motiv, miljö, synlig handling, kamera och ljud för en ny text-till-video-tagning. Standardgenerering stöder klipp på 1–15 sekunder, med utdata i 480p eller 720p och genererat ljud. Kvadratiska, liggande, stående och bredare förhållanden dokumenteras, inklusive 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 och 5:2. Ett ursprungligt uppdrag kan be om en papperslykta som rör sig varsamt över en stillsam gård medan kameran åker i sidled. En användbar granskning kontrollerar om rörelse, bildutsnitt och atmosfärljud stödjer denna enda tagning.\n\nI bild-till-video är den angivna stillbilden den första bildrutan. Förbered den med avsedd beskärning, motiv och synliga detaljer och beskriv sedan handlingen som följer. Utdata följer bildens bildförhållande. En startbild ger en exakt öppningskomposition, medan referens-till-video använder bilder för att vägleda personer, produkter eller miljö i en nykomponerad scen. Att hålla rollerna åtskilda hjälper till att undvika en oavsiktlig öppning när målet är att placera ett känt objekt i en annan miljö.\n\nDen klassiska modellen accepterar upp till sju referensbilder per referensstyrd begäran. Läget är begränsat till tio sekunder och 720p. Ge varje referens en tydlig roll och identifiera den genom dess position i listan, med början på <IMAGE_0>. En referens kan identifiera objektet och en annan önskad plats för en produktvinjett. Håll uppdraget fokuserat på objektets placering och tagningens huvudhandling. Det klassiska referensläget använder sin egen konfiguration; fullständiga 1.5 erbjuder ytterligare kontroller för vald röst och fixerade bildrutor.\n\nVideoredigering tar ett befintligt klipp och en prompt som beskriver förändringen. Tillverkaren accepterar MP4-källor med kodekar som stöds, till exempel H.264, H.265 eller AV1, på upp till 8,7 sekunder. Det redigerade resultatet behåller källans längd och bildförhållande och följer dess upplösning upp till ett tak på 720p. Anpassade kontroller för längd, bildförhållande och upplösning gäller inte i detta redigeringsarbetsflöde. Förbered en källa som redan har kompositionen och timingen som slutbruket behöver, så att prompten kan koncentrera sig på avsedd visuell ändring.\n\nEtt ursprungligt redigeringsuppdrag kan ändra färgen på en halsduk samtidigt som personens ansikte, rörelse, bakgrund och kamera behålls. Ange de bevarade elementen uttryckligen tillsammans med ändringen. Tillverkaren beskriver att resten av källan ska behållas så nära som möjligt, vilket är ett användbart granskningsmål snarare än en garanti för att varje pixel förblir identisk. Jämför resultatet genom hela klippet, särskilt där objektet rör sig, korsar ett annat objekt eller blir delvis dolt. Slutleveransen är det redigerade klippet, inte enbart en stillbild som visar den nya färgen.\n\nVideoförlängning fortsätter från den sista bildrutan i en befintlig MP4. Dokumenterad källängd är 2–15 sekunder; den tillagda delen är 2–10 sekunder, med sex sekunder som standard. Förlängningslängden gäller bara den nya delen. En källa på tio sekunder följd av fem sekunders fortsättning skapar en femtonsekunders video som innehåller båda delarna. Resultatet bevarar källans bildförhållande och upplösning inom ett tak på 720p. Förbered källans sista ögonblick och beskriv vad som ska hända sedan, till exempel att motivet vänder sig mot ett närmande objekt medan kameran fortsätter sin nuvarande rörelse.\n\nGranska en förlängning runt gränsen mellan källan och det nya innehållet. Kontrollera motividentitet, rörelseriktning, kameratempo, ljus och ljud så att fortsättningen passar föregående handling. Om ett klipp slutar vid en visuellt besvärlig punkt gör du den gränsen till en uttrycklig del av planen för nästa tagning. Montering av längre scener är ett redigeringsbeslut: modellens längdgränser för generering, referens, redigering och förlängning är separata och ett totalt förlängningsresultat kan vara längre än ett vanligt nygenererat klipp.\n\nTillverkarens videoarbetsflöde är asynkront. En begäransidentifierare spårar jobbet tills ett färdigt resultat ger videoadress och längd; utdataadresser är tillfälliga. Spara det spelbara resultatet och dess källmaterial när en produktionsredigering förbereds. Fullständiga Grok Imagine Video 1.5 erbjuder direkt generering i 1080p och rikare förankring av visuellt innehåll, röst och bildrutor, medan Lite tjänar enkla uppdrag från prompt eller startbild. Den klassiska versionen förblir användbar när startmaterialet redan är en video som behöver en styrd ändring eller fortsättning.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "51c091910d897e51449ec38c4f595351eeac39184c9e602268925fd02128c7af",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "sv",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">SpaceXAI: Grok Imagine Video</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Stäng\">×</button></div><div class=\"idline\"><span>SpaceXAI /</span><code>x-ai/grok-imagine-video</code><button type=\"button\" id=\"copy-id\">Kopiera ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modellkortets avsnitt\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Indata &amp; metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Exempel</button><button type=\"button\" data-card-jump=\"results\">Resultat</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|x-ai%2Fgrok-imagine-video\">Video</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Start</h3><p class=\"mdesc-full\">Grok Imagine Video genererar korta klipp från text, en startbild eller upp till sju visuella referenser. Den klassiska versionen redigerar också befintliga MP4-klipp och lägger till 2–10 sekunders fortsättning. Generering når 720p med ljud; redigering och förlängning bevarar källans bildutsnitt inom sina egna gränser.</p><dl class=\"card-io\" data-card-io><div><dt>Godkända indata</dt><dd>Text · Bilder</dd></div><div><dt>Resultat</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Den här beskrivningen omfattar modellens förmågor. Tillgängliga indata, utdata och alternativ i Ailoot anges nedan för den valda metoden.</p><div class=\"mabout\" id=\"m-about\"><p>Grok Imagine Video är den klassiska versionen i Grok Imagine-videofamiljen. Tillverkarens aktuella dokumentation omfattar generering av ett nytt klipp från en prompt, animering av en startbild, användning av visuella referenser och ändring eller fortsättning av en befintlig video. Arbetsflödena skapar olika leveranser: en ny scen, en redigerad version av angivet material eller en video som innehåller originalmaterialet följt av nytt innehåll. Välj arbetsflöde utifrån materialet som redan finns och den del av tagningen som behöver ändras.</p><p>Beskriv motiv, miljö, synlig handling, kamera och ljud för en ny text-till-video-tagning. Standardgenerering stöder klipp på 1–15 sekunder, med utdata i 480p eller 720p och genererat ljud. Kvadratiska, liggande, stående och bredare förhållanden dokumenteras, inklusive 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 och 5:2. Ett ursprungligt uppdrag kan be om en papperslykta som rör sig varsamt över en stillsam gård medan kameran åker i sidled. En användbar granskning kontrollerar om rörelse, bildutsnitt och atmosfärljud stödjer denna enda tagning.</p><p>I bild-till-video är den angivna stillbilden den första bildrutan. Förbered den med avsedd beskärning, motiv och synliga detaljer och beskriv sedan handlingen som följer. Utdata följer bildens bildförhållande. En startbild ger en exakt öppningskomposition, medan referens-till-video använder bilder för att vägleda personer, produkter eller miljö i en nykomponerad scen. Att hålla rollerna åtskilda hjälper till att undvika en oavsiktlig öppning när målet är att placera ett känt objekt i en annan miljö.</p><p>Den klassiska modellen accepterar upp till sju referensbilder per referensstyrd begäran. Läget är begränsat till tio sekunder och 720p. Ge varje referens en tydlig roll och identifiera den genom dess position i listan, med början på &lt;IMAGE_0&gt;. En referens kan identifiera objektet och en annan önskad plats för en produktvinjett. Håll uppdraget fokuserat på objektets placering och tagningens huvudhandling. Det klassiska referensläget använder sin egen konfiguration; fullständiga 1.5 erbjuder ytterligare kontroller för vald röst och fixerade bildrutor.</p><p>Videoredigering tar ett befintligt klipp och en prompt som beskriver förändringen. Tillverkaren accepterar MP4-källor med kodekar som stöds, till exempel H.264, H.265 eller AV1, på upp till 8,7 sekunder. Det redigerade resultatet behåller källans längd och bildförhållande och följer dess upplösning upp till ett tak på 720p. Anpassade kontroller för längd, bildförhållande och upplösning gäller inte i detta redigeringsarbetsflöde. Förbered en källa som redan har kompositionen och timingen som slutbruket behöver, så att prompten kan koncentrera sig på avsedd visuell ändring.</p><p>Ett ursprungligt redigeringsuppdrag kan ändra färgen på en halsduk samtidigt som personens ansikte, rörelse, bakgrund och kamera behålls. Ange de bevarade elementen uttryckligen tillsammans med ändringen. Tillverkaren beskriver att resten av källan ska behållas så nära som möjligt, vilket är ett användbart granskningsmål snarare än en garanti för att varje pixel förblir identisk. Jämför resultatet genom hela klippet, särskilt där objektet rör sig, korsar ett annat objekt eller blir delvis dolt. Slutleveransen är det redigerade klippet, inte enbart en stillbild som visar den nya färgen.</p><p>Videoförlängning fortsätter från den sista bildrutan i en befintlig MP4. Dokumenterad källängd är 2–15 sekunder; den tillagda delen är 2–10 sekunder, med sex sekunder som standard. Förlängningslängden gäller bara den nya delen. En källa på tio sekunder följd av fem sekunders fortsättning skapar en femtonsekunders video som innehåller båda delarna. Resultatet bevarar källans bildförhållande och upplösning inom ett tak på 720p. Förbered källans sista ögonblick och beskriv vad som ska hända sedan, till exempel att motivet vänder sig mot ett närmande objekt medan kameran fortsätter sin nuvarande rörelse.</p><p>Granska en förlängning runt gränsen mellan källan och det nya innehållet. Kontrollera motividentitet, rörelseriktning, kameratempo, ljus och ljud så att fortsättningen passar föregående handling. Om ett klipp slutar vid en visuellt besvärlig punkt gör du den gränsen till en uttrycklig del av planen för nästa tagning. Montering av längre scener är ett redigeringsbeslut: modellens längdgränser för generering, referens, redigering och förlängning är separata och ett totalt förlängningsresultat kan vara längre än ett vanligt nygenererat klipp.</p><p>Tillverkarens videoarbetsflöde är asynkront. En begäransidentifierare spårar jobbet tills ett färdigt resultat ger videoadress och längd; utdataadresser är tillfälliga. Spara det spelbara resultatet och dess källmaterial när en produktionsredigering förbereds. Fullständiga Grok Imagine Video 1.5 erbjuder direkt generering i 1080p och rikare förankring av visuellt innehåll, röst och bildrutor, medan Lite tjänar enkla uppdrag från prompt eller startbild. Den klassiska versionen förblir användbar när startmaterialet redan är en video som behöver en styrd ändring eller fortsättning.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tillgängligt i Ailoot · indata &amp; metoder</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Indatatyper</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Utdatatyper</dt><dd><code>video</code></dd></div><div><dt>Utdataformat</dt><dd>ursprungliga MP4-byte; ingen normalisering/omkodning</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Fält</th><th>Typ</th><th>Krav</th><th>Värden &amp; gränser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Obligatoriskt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>x-ai/grok-imagine-video</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">prompt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Obligatoriskt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">duration</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Obligatoriskt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15</div><div>Minimum: 1</div><div>Maximum: 600</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">resolution</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>480p, 720p</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">aspect_ratio</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>16:9, 9:16, 1:1, 4:3, 3:4, 3:2, 2:3</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">generate_audio</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>false</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>array</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>Minsta antal objekt: 1</div><div>Maximalt antal objekt: 1</div><div>Indatainnehåll: Array med bildruteobjekt. Varje objekt har type=image_url, image_url som innehåller url samt frame_type. Använd en HTTPS URL till en bild och sätt frame_type till first_frame. Varje bildruteroll förekommer högst en gång.</div><div>Exakta nycklar: type, image_url, frame_type</div><div>Villkor: Dessa nycklar beskriver varje bildruteobjekt; image_url innehåller endast url. Utelämna frame_images för en begäran med enbart text.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>array</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">size</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>854x480, 1280x720, 480x854, 720x1280, 480x480, 720x720, 640x480, 960x720, 480x640, 720x960, 720x480, 1080x720, 480x720, 720x1080</div><div>Mönster: ^[1-9][0-9]*x[1-9][0-9]*$</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">callback_url</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>Mönster: ^https://</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">session_id</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>object</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">user</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valfritt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationer av indatamaterial</summary><p class=\"note-s\"><b>Text till video</b> · En skriven prompt. · Krävs: model, prompt, duration</p><p class=\"note-s\"><code>Ange prompt som text och längd i hela sekunder. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Typ: string · x-ai/grok-imagine-video</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Typ: string · Maximalt antal UTF-8-byte: 10 000 · Minst ett tecken som inte är blanksteg krävs: Ja</p><p class=\"note-s\"><b>Bild till video</b> · En skriven prompt och en bild för den första bildrutan. · Krävs: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images är en array. Varje bildruteobjekt har type, image_url och frame_type; image_url innehåller url. Sätt type till image_url. Använd first_frame. Varje bildruteroll förekommer högst en gång. Ange en offentlig HTTPS URL till en bild för varje bildruta. Använd bildrutor eller bildreferenser i en begäran; kombinera inte båda. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.</code></p><p class=\"note-s\">Exakta nycklar: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Typ: string · x-ai/grok-imagine-video</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Typ: string · Maximalt antal UTF-8-byte: 10 000 · Minst ett tecken som inte är blanksteg krävs: Ja</p><p class=\"note-s\"><b>Reference to video</b> · En skriven prompt och bildreferenser som stöds. · Krävs: model, prompt, duration, input_references</p><p class=\"note-s\"><code>input_references är en array med objekt. Sätt type till image_url och använd motsvarande fält som innehåller url. Använd offentliga HTTPS-länkar. Utelämna frame_images för att välja referensläge. Kombinera inte bildreferenser med bildrutor. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Typ: string · x-ai/grok-imagine-video</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Typ: string · Maximalt antal UTF-8-byte: 10 000 · Minst ett tecken som inte är blanksteg krävs: Ja</p></details><details class=\"note-s\" data-method-contract><summary>Metodparametrar och livscykel</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Avtal</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=\"Avtal\"><span class=\"card-cell-label\">Avtal</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=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>text, image</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>additional_properties</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, size, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Livscykel: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><div class=\"card-result-process\" data-billing-basis><h5>Så beräknas slutavgiften</h5><p class=\"note-s\">De visade priserna används för att uppskatta kostnaden före genereringen. Den slutliga debiteringen beräknas utifrån den kostnad som registrerats för den ursprungliga genereringen. Uppmätt längd på resultatet och uppskattade mängder utgör inte den slutliga debiterbara mängden.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tariffuppgifter lägger inte till begäransalternativ. Parametrar som stöds anges för den valda metoden.</p><dl data-price-conditions><dt>Snabbt läge</dt><dd>Ej angivet <span class=\"note-s\">När snabbt läge är valt</span></dd><dt>Flex-läge</dt><dd>Ej angivet <span class=\"note-s\">När läget flex är valt</span></dd><dt>Högsta resonemangsnivå</dt><dd>Ej angivet <span class=\"note-s\">När den högsta resonemangsnivån använder standardjusteringen (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Uppskattade priser för jämförelse</h4><h4>Priser efter konfiguration</h4><p class=\"note-s\">Matcha varje avgift mot de visade villkoren. Använd ett pris för varje uppsättning alternativa konfigurationer.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguration</th><th>Prislista</th><th>Prognostiserad mängd</th><th>Debiteringsenhet</th><th>Debiteringsvillkor</th><th>Avgift</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Grundpriser för token</th><td data-cell-label=\"Prislista\"><span class=\"card-cell-label\">Prislista</span>Grundpris</td><td data-cell-label=\"Prognostiserad mängd\"><span class=\"card-cell-label\">Prognostiserad mängd</span>—</td><td data-cell-label=\"Debiteringsenhet\"><span class=\"card-cell-label\">Debiteringsenhet</span>—</td><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>—</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Indata · Indatatoken · Uppskattning endast för jämförelse</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Utdata · Utdatatoken · Uppskattning endast för jämförelse</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Indata · Cacheläsning · Uppskattning endast för jämförelse</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Indata · Skrivning till cache · Uppskattning endast för jämförelse</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Indata · Skrivning till cache, 1 tim · Uppskattning endast för jämförelse</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Indatabild</th><td data-cell-label=\"Prislista\"><span class=\"card-cell-label\">Prislista</span>—</td><td data-cell-label=\"Prognostiserad mängd\"><span class=\"card-cell-label\">Prognostiserad mängd</span>—</td><td data-cell-label=\"Debiteringsenhet\"><span class=\"card-cell-label\">Debiteringsenhet</span>per bild</td><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>Inget ytterligare villkor anges i denna prisnyckel.</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Indata · Indatabild · Uppskattning endast för jämförelse</span> <b>$0.004</b> <span class=\"price-unit\">per bild</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Videopris</th><td data-cell-label=\"Prislista\"><span class=\"card-cell-label\">Prislista</span>—</td><td data-cell-label=\"Prognostiserad mängd\"><span class=\"card-cell-label\">Prognostiserad mängd</span>—</td><td data-cell-label=\"Debiteringsenhet\"><span class=\"card-cell-label\">Debiteringsenhet</span>per videosekund</td><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>resolution: 480p</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Videopris · Uppskattning endast för jämförelse</span> <b>$0.1</b> <span class=\"price-unit\">per videosekund</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Videopris</th><td data-cell-label=\"Prislista\"><span class=\"card-cell-label\">Prislista</span>—</td><td data-cell-label=\"Prognostiserad mängd\"><span class=\"card-cell-label\">Prognostiserad mängd</span>—</td><td data-cell-label=\"Debiteringsenhet\"><span class=\"card-cell-label\">Debiteringsenhet</span>per videosekund</td><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>resolution: 720p</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Videopris · Uppskattning endast för jämförelse</span> <b>$0.14</b> <span class=\"price-unit\">per videosekund</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Uppskattad genereringskostnad</th><td data-cell-label=\"Prislista\"><span class=\"card-cell-label\">Prislista</span>—</td><td data-cell-label=\"Prognostiserad mängd\"><span class=\"card-cell-label\">Prognostiserad mängd</span>uppskattning för en generering</td><td data-cell-label=\"Debiteringsenhet\"><span class=\"card-cell-label\">Debiteringsenhet</span>—</td><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>—</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Uppskattad genereringskostnad · Uppskattning endast för jämförelse</span> <b>$0.1</b> <span class=\"price-unit\">uppskattning före generering</span></div><p class=\"note-s\">Denna uppskattning är varken en extra avgift eller ett fast pris för den slutförda genereringen.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserverar ett uppskattat belopp före en begäran. Efter resultatet slutregleras avgiften utifrån uppmätt förbrukning. Slutreglering för strömning använder den slutliga förbrukningsposten. <a href=\"/docs/sv/billing/reserve/\">Så fungerar reservation och slutreglering →</a></p><div data-declared-reference-pricing><h4>Detaljer om referenstariffen</h4><p class=\"note-s\">Referensprislistor på modellnivå ändrar inte metodval, prisuppgifter eller avgifter. Aktiva avgifter använder priserna för den valda Ailoot-metoden.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Prisreferenser för videokonfigurationer</summary><h4>Priser efter konfiguration</h4><p class=\"note-s\">Matcha varje avgift mot de visade villkoren. Använd ett pris för varje uppsättning alternativa konfigurationer.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguration</th><th>Debiteringsvillkor</th><th>Avgift</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Indatabild</th><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>Inget ytterligare villkor anges i denna prisnyckel.</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Indata · Indatabild</span> <b>$0.004</b> <span class=\"price-unit\">per bild</span></div><p class=\"note-s\">Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades.</p></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Videopris</th><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>resolution: 480p</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Videopris</span> <b>$0.1</b> <span class=\"price-unit\">per videosekund</span></div><p class=\"note-s\">Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades.</p></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Videopris</th><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>resolution: 720p</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Videopris</span> <b>$0.14</b> <span class=\"price-unit\">per videosekund</span></div><p class=\"note-s\">Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exempelbegäranden</h3><h4>Ailoot Ultra · Video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodvarianter\"><button class=\"cg-tab\" id=\"model-code-2720-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2720-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · skapa video</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiera kod\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2720-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2720-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;duration&quot;:8,&quot;model&quot;:&quot;x-ai/grok-imagine-video&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;resolution&quot;:&quot;720p&quot;}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Ta emot och spara resultat</h3><h4>Ailoot Ultra · Video</h4><p class=\"note-s\">signerade innehållslänkar som du äger</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>Kontrollera jobbstatus</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodvarianter\"><button class=\"cg-tab\" id=\"model-code-2721-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2721-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET status för ursprunglig åtgärd</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiera kod\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2721-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2721-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Andra innehållsläsningar</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodvarianter\"><button class=\"cg-tab\" id=\"model-code-2722-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2722-panel-0\" aria-selected=\"true\" tabindex=\"0\">Spara alla färdiga utdata som tillhör dig</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiera kod\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2722-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2722-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Behåll alla färdiga resultat</h5><p class=\"note-s\">Spara varje färdig video eller returnerad fil; hämta varje faktiskt returnerad resurs-URL.</p><p class=\"note-s\">Behåll varje faktiskt resultat som du äger och dess returnerade, uppmätta metadata.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Om det ursprungliga svaret behöver kontrolleras</h5><p class=\"note-s\">503 result_pending_check + ursprungligt id + X-Should-Retry:false; upprepa aldrig originalet</p></div><details class=\"card-about\" data-output-fields><summary>Svarsfält</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Fält</th><th>Typ</th><th>Betydelse</th></tr></thead><tbody><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Nollbaserad position för denna video i utdatalistan.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Signerad HTTPS URL för hämtning av denna färdiga video.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>SHA-256-kontrollsumma för den ursprungliga videons byte; null om den inte är tillgänglig.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Storleken på den ursprungliga videofilen i byte; null om den inte är tillgänglig.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Uppmätt videolängd i millisekunder; null om den inte är tillgänglig.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Videobredd i pixlar; null om den inte är tillgänglig.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Videohöjd i pixlar; null om den inte är tillgänglig.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Identifierare för videokodek; null om ingen har registrerats.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>boolean | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Om videon innehåller ett ljudspår; null om detta inte har mätts.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string | null</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>Identifierare för ljudkodek; null när ingen identifierare har registrerats.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fel och nästa steg</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Villkor</th><th>Nästa steg</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Videoåtkomst är inte tillgänglig eller detta video-ID hittades inte.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Kontrollera videoåtkomst. För en befintlig video använder du dess ursprungliga offentliga ID och samma API-nyckel.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>API-nyckeln motsvarar inte det autentiserade kontot.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Kontrollera din API-nyckel och kontoåtkomst innan du skickar in.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Begäran kunde inte läsas eller hämtningsindexet är ogiltigt.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Korrigera begäranskroppen. Vid hämtning väljer du ett utdataindex som returnerats av den ursprungliga uppgiften.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Den valda videokonfigurationen kan inte prissättas.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Välj en videokonfiguration som stöds och fyll i dess obligatoriska alternativ innan du skickar en korrigerad begäran.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Videoindata eller den ursprungliga fortsättningsuppgiften är ogiltig.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Använd giltiga HTTPS-indata. För fortsättning använder du det färdiga originalets offentliga video-ID med samma API-nyckel.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>402 · <code>billing_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Det tillgängliga saldot eller gränserna medger ingen reservation.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Kontrollera ditt tillgängliga saldo och dina gränser innan du skickar en ny begäran.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>503 · <code>server_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Videoverifiering, lagring eller tjänsteåtkomst är tillfälligt otillgänglig.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Vänta tills tjänsten är tillgänglig. Om du redan har ett video-ID kontrollerar du den ursprungliga uppgiften i stället för att skapa en ny generering.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Det ursprungliga videoresultatet och debiteringen behöver kontrolleras.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Behåll det returnerade video-ID:t och kontrollera den uppgiften. Skicka ingen ersättande genereringsbegäran medan den kontrolleras.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Hämtningen av den befintliga videon är tillfälligt otillgänglig.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Kontrollera samma videouppgift senare och hämta dess befintliga resultat. En ny generering skapar en separat operation.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Videoinnehållet har inte publicerats.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Kontrollera den ursprungliga uppgiftens status. Hämta när den rapporterar completed; om den rapporterar failed följer du dess meddelande om debiteringskontroll.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Modellalias</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=x-ai%2Fgrok-imagine-video&amp;route=Ultra&amp;caller=x-ai%2Fgrok-imagine-video&amp;fmt=videos\"><code>x-ai/grok-imagine-video</code></a></span></p><h4>Alias för metodsökvägar</h4><p class=\"note-s\">Använd metodsökvägarna som visas ovan.</p><h4>Relaterade anropar-ID:n</h4><p class=\"note-s\"><a href=\"#m=x-ai%2Fgrok-imagine-video&amp;route=Ultra&amp;caller=x-ai%2Fgrok-imagine-video&amp;fmt=videos\"><code>x-ai/grok-imagine-video</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "x-ai/grok-imagine-video",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "x-ai/grok-imagine-video",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|x-ai%2Fgrok-imagine-video",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "De visade priserna används för att uppskatta kostnaden före genereringen. Den slutliga debiteringen beräknas utifrån den kostnad som registrerats för den ursprungliga genereringen. Uppmätt längd på resultatet och uppskattade mängder utgör inte den slutliga debiterbara mängden.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Behåll varje faktiskt resultat som du äger och dess returnerade, uppmätta metadata.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Videoåtkomst är inte tillgänglig eller detta video-ID hittades inte.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera videoåtkomst. För en befintlig video använder du dess ursprungliga offentliga ID och samma API-nyckel.",
                "type": "not_found_error"
              },
              {
                "condition": "API-nyckeln motsvarar inte det autentiserade kontot.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera din API-nyckel och kontoåtkomst innan du skickar in.",
                "type": "authentication_error"
              },
              {
                "condition": "Begäran kunde inte läsas eller hämtningsindexet är ogiltigt.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Korrigera begäranskroppen. Vid hämtning väljer du ett utdataindex som returnerats av den ursprungliga uppgiften.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Den valda videokonfigurationen kan inte prissättas.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Välj en videokonfiguration som stöds och fyll i dess obligatoriska alternativ innan du skickar en korrigerad begäran.",
                "type": "price_unavailable"
              },
              {
                "condition": "Videoindata eller den ursprungliga fortsättningsuppgiften är ogiltig.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Använd giltiga HTTPS-indata. För fortsättning använder du det färdiga originalets offentliga video-ID med samma API-nyckel.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Det tillgängliga saldot eller gränserna medger ingen reservation.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera ditt tillgängliga saldo och dina gränser innan du skickar en ny begäran.",
                "type": "billing_error"
              },
              {
                "condition": "Videoverifiering, lagring eller tjänsteåtkomst är tillfälligt otillgänglig.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Vänta tills tjänsten är tillgänglig. Om du redan har ett video-ID kontrollerar du den ursprungliga uppgiften i stället för att skapa en ny generering.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Det ursprungliga videoresultatet och debiteringen behöver kontrolleras.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Behåll det returnerade video-ID:t och kontrollera den uppgiften. Skicka ingen ersättande genereringsbegäran medan den kontrolleras.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Hämtningen av den befintliga videon är tillfälligt otillgänglig.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Kontrollera samma videouppgift senare och hämta dess befintliga resultat. En ny generering skapar en separat operation.",
                "type": "server_error"
              },
              {
                "condition": "Videoinnehållet har inte publicerats.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera den ursprungliga uppgiftens status. Hämta när den rapporterar completed; om den rapporterar failed följer du dess meddelande om debiteringskontroll.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + ursprungligt id + X-Should-Retry:false; upprepa aldrig originalet"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-video"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Ange prompt som text och längd i hela sekunder. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "En skriven prompt."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-video"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images är en array. Varje bildruteobjekt har type, image_url och frame_type; image_url innehåller url. Sätt type till image_url. Använd first_frame. Varje bildruteroll förekommer högst en gång. Ange en offentlig HTTPS URL till en bild för varje bildruta. Använd bildrutor eller bildreferenser i en begäran; kombinera inte båda. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "En skriven prompt och en bild för den första bildrutan."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-video"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references är en array med objekt. Sätt type till image_url och använd motsvarande fält som innehåller url. Använd offentliga HTTPS-länkar. Utelämna frame_images för att välja referensläge. Kombinera inte bildreferenser med bildrutor. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "En skriven prompt och bildreferenser som stöds."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Nollbaserad position för denna video i utdatalistan.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "Signerad HTTPS URL för hämtning av denna färdiga video.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "SHA-256-kontrollsumma för den ursprungliga videons byte; null om den inte är tillgänglig.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Storleken på den ursprungliga videofilen i byte; null om den inte är tillgänglig.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Uppmätt videolängd i millisekunder; null om den inte är tillgänglig.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Videobredd i pixlar; null om den inte är tillgänglig.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Videohöjd i pixlar; null om den inte är tillgänglig.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Identifierare för videokodek; null om ingen har registrerats.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Om videon innehåller ett ljudspår; null om detta inte har mätts.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Identifierare för ljudkodek; null när ingen identifierare har registrerats.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "signerade innehållslänkar som du äger",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "x-ai/grok-imagine-video"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "x-ai/grok-imagine-video"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16",
                  "1:1",
                  "4:3",
                  "3:4",
                  "3:2",
                  "2:3"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "16:9",
                    "9:16",
                    "1:1",
                    "4:3",
                    "3:4",
                    "3:2",
                    "2:3"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Dessa nycklar beskriver varje bildruteobjekt; image_url innehåller endast url. Utelämna frame_images för en begäran med enbart text.",
                "content": "Array med bildruteobjekt. Varje objekt har type=image_url, image_url som innehåller url samt frame_type. Använd en HTTPS URL till en bild och sätt frame_type till first_frame. Varje bildruteroll förekommer högst en gång.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 1,
                "max_items": 1,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "854x480",
                  "1280x720",
                  "480x854",
                  "720x1280",
                  "480x480",
                  "720x720",
                  "640x480",
                  "960x720",
                  "480x640",
                  "720x960",
                  "720x480",
                  "1080x720",
                  "480x720",
                  "720x1080"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "854x480",
                    "1280x720",
                    "480x854",
                    "720x1280",
                    "480x480",
                    "720x720",
                    "640x480",
                    "960x720",
                    "480x640",
                    "720x960",
                    "720x480",
                    "1080x720",
                    "480x720",
                    "720x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "16:9",
                    "9:16",
                    "1:1",
                    "4:3",
                    "3:4",
                    "3:2",
                    "2:3"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "x-ai/grok-imagine-video"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": false,
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "854x480",
                    "1280x720",
                    "480x854",
                    "720x1280",
                    "480x480",
                    "720x720",
                    "640x480",
                    "960x720",
                    "480x640",
                    "720x960",
                    "720x480",
                    "1080x720",
                    "480x720",
                    "720x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Frame images plus image references are rejected because mixed additive input count is unproved; pure frame or pure reference mode remains separately priced."
              ]
            },
            "unsupported": [
              "seed",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per image"
            },
            "label": "Input image",
            "units": [
              {
                "amount": "0.004",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_image_input",
                "label": "Input image",
                "native_amount_usd_per_unit": "0.004",
                "native_quantity": 1,
                "public_unit_label": "per image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.14",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.14",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Denna uppskattning är varken en extra avgift eller ett fast pris för den slutförda genereringen.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Uppskattad genereringskostnad",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"x-ai/grok-imagine-video\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per image"
            },
            "label": "Input image",
            "units": [
              {
                "amount": "0.004",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_image_input",
                "label": "Input image",
                "native_amount_usd_per_unit": "0.004",
                "native_quantity": 1,
                "public_unit_label": "per image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.14",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.14",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "x-ai/grok-imagine-video",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.004",
            "amount_unit": "usd_per_image",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_image_input",
            "label": "Input image",
            "native_amount_usd_per_unit": "0.004",
            "native_quantity": 1,
            "public_unit_label": "per image",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "image"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_video_output_second_480p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.14",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_video_output_second_720p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.14",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "x-ai/grok-imagine-video",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "358f1b8c3b27f15d96f225929fa027881d0cfbbbeb251b4256f37298926d0d56",
    "input_html_sha256": "822c9b61d222185bf0dd0b1c856810714917e8695d9377de92cffca1aa37a334",
    "private_audit_sha256": "0a45239f4fe613a9b130265169138c37f35251015b95a85f8b60e76c88cebaaa",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/sv/x-ai-grok-imagine-video/",
    "description": "Grok Imagine Video genererar korta klipp från text, en startbild eller upp till sju visuella referenser. Den klassiska versionen redigerar också befintliga MP4-klipp och lägger till 2–10 sekunders fortsättning. Generering når 720p med ljud; redigering och förlängning bevarar källans bildutsnitt inom sina egna gränser.",
    "locale": "sv",
    "md_url": "https://ailoot.ai/models/sv/x-ai-grok-imagine-video/index.md",
    "title": "SpaceXAI: Grok Imagine Video — Ailoot",
    "url": "https://ailoot.ai/models/sv/x-ai-grok-imagine-video/"
  },
  "rawModel": {
    "about": "Grok Imagine Video är den klassiska versionen i Grok Imagine-videofamiljen. Tillverkarens aktuella dokumentation omfattar generering av ett nytt klipp från en prompt, animering av en startbild, användning av visuella referenser och ändring eller fortsättning av en befintlig video. Arbetsflödena skapar olika leveranser: en ny scen, en redigerad version av angivet material eller en video som innehåller originalmaterialet följt av nytt innehåll. Välj arbetsflöde utifrån materialet som redan finns och den del av tagningen som behöver ändras.\n\nBeskriv motiv, miljö, synlig handling, kamera och ljud för en ny text-till-video-tagning. Standardgenerering stöder klipp på 1–15 sekunder, med utdata i 480p eller 720p och genererat ljud. Kvadratiska, liggande, stående och bredare förhållanden dokumenteras, inklusive 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 och 5:2. Ett ursprungligt uppdrag kan be om en papperslykta som rör sig varsamt över en stillsam gård medan kameran åker i sidled. En användbar granskning kontrollerar om rörelse, bildutsnitt och atmosfärljud stödjer denna enda tagning.\n\nI bild-till-video är den angivna stillbilden den första bildrutan. Förbered den med avsedd beskärning, motiv och synliga detaljer och beskriv sedan handlingen som följer. Utdata följer bildens bildförhållande. En startbild ger en exakt öppningskomposition, medan referens-till-video använder bilder för att vägleda personer, produkter eller miljö i en nykomponerad scen. Att hålla rollerna åtskilda hjälper till att undvika en oavsiktlig öppning när målet är att placera ett känt objekt i en annan miljö.\n\nDen klassiska modellen accepterar upp till sju referensbilder per referensstyrd begäran. Läget är begränsat till tio sekunder och 720p. Ge varje referens en tydlig roll och identifiera den genom dess position i listan, med början på <IMAGE_0>. En referens kan identifiera objektet och en annan önskad plats för en produktvinjett. Håll uppdraget fokuserat på objektets placering och tagningens huvudhandling. Det klassiska referensläget använder sin egen konfiguration; fullständiga 1.5 erbjuder ytterligare kontroller för vald röst och fixerade bildrutor.\n\nVideoredigering tar ett befintligt klipp och en prompt som beskriver förändringen. Tillverkaren accepterar MP4-källor med kodekar som stöds, till exempel H.264, H.265 eller AV1, på upp till 8,7 sekunder. Det redigerade resultatet behåller källans längd och bildförhållande och följer dess upplösning upp till ett tak på 720p. Anpassade kontroller för längd, bildförhållande och upplösning gäller inte i detta redigeringsarbetsflöde. Förbered en källa som redan har kompositionen och timingen som slutbruket behöver, så att prompten kan koncentrera sig på avsedd visuell ändring.\n\nEtt ursprungligt redigeringsuppdrag kan ändra färgen på en halsduk samtidigt som personens ansikte, rörelse, bakgrund och kamera behålls. Ange de bevarade elementen uttryckligen tillsammans med ändringen. Tillverkaren beskriver att resten av källan ska behållas så nära som möjligt, vilket är ett användbart granskningsmål snarare än en garanti för att varje pixel förblir identisk. Jämför resultatet genom hela klippet, särskilt där objektet rör sig, korsar ett annat objekt eller blir delvis dolt. Slutleveransen är det redigerade klippet, inte enbart en stillbild som visar den nya färgen.\n\nVideoförlängning fortsätter från den sista bildrutan i en befintlig MP4. Dokumenterad källängd är 2–15 sekunder; den tillagda delen är 2–10 sekunder, med sex sekunder som standard. Förlängningslängden gäller bara den nya delen. En källa på tio sekunder följd av fem sekunders fortsättning skapar en femtonsekunders video som innehåller båda delarna. Resultatet bevarar källans bildförhållande och upplösning inom ett tak på 720p. Förbered källans sista ögonblick och beskriv vad som ska hända sedan, till exempel att motivet vänder sig mot ett närmande objekt medan kameran fortsätter sin nuvarande rörelse.\n\nGranska en förlängning runt gränsen mellan källan och det nya innehållet. Kontrollera motividentitet, rörelseriktning, kameratempo, ljus och ljud så att fortsättningen passar föregående handling. Om ett klipp slutar vid en visuellt besvärlig punkt gör du den gränsen till en uttrycklig del av planen för nästa tagning. Montering av längre scener är ett redigeringsbeslut: modellens längdgränser för generering, referens, redigering och förlängning är separata och ett totalt förlängningsresultat kan vara längre än ett vanligt nygenererat klipp.\n\nTillverkarens videoarbetsflöde är asynkront. En begäransidentifierare spårar jobbet tills ett färdigt resultat ger videoadress och längd; utdataadresser är tillfälliga. Spara det spelbara resultatet och dess källmaterial när en produktionsredigering förbereds. Fullständiga Grok Imagine Video 1.5 erbjuder direkt generering i 1080p och rikare förankring av visuellt innehåll, röst och bildrutor, medan Lite tjänar enkla uppdrag från prompt eller startbild. Den klassiska versionen förblir användbar när startmaterialet redan är en video som behöver en styrd ändring eller fortsättning.",
    "alias_of": null,
    "aliases": [],
    "author": "SpaceXAI",
    "available": null,
    "canonical_model": "x-ai/grok-imagine-video",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.1",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Fullständig prissättning för konfigurationen finns i detaljerna."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "5028ba460dfc0ba205d6f290",
        "label": "Prisreferenser för videokonfigurationer",
        "profiles": [
          {
            "basis": "Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades.",
            "dimensions": {
              "conditions": "Inget ytterligare villkor anges i denna prisnyckel."
            },
            "label": "Indatabild",
            "units": [
              {
                "amount": "0.004",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "key": "input_image",
                "label": "Input image",
                "public_unit_label": "per image",
                "quantity": 1,
                "rate_role": "typed_video_image_reference",
                "side": "in",
                "unit": "image"
              }
            ]
          },
          {
            "basis": "Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades.",
            "dimensions": {
              "conditions": "resolution: 480p"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades.",
            "dimensions": {
              "conditions": "resolution: 720p"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.14",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "x-ai/grok-imagine-video",
    "input": [
      "text",
      "image"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "De visade priserna används för att uppskatta kostnaden före genereringen. Den slutliga debiteringen beräknas utifrån den kostnad som registrerats för den ursprungliga genereringen. Uppmätt längd på resultatet och uppskattade mängder utgör inte den slutliga debiterbara mängden.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Behåll varje faktiskt resultat som du äger och dess returnerade, uppmätta metadata.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Videoåtkomst är inte tillgänglig eller detta video-ID hittades inte.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera videoåtkomst. För en befintlig video använder du dess ursprungliga offentliga ID och samma API-nyckel.",
                "type": "not_found_error"
              },
              {
                "condition": "API-nyckeln motsvarar inte det autentiserade kontot.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera din API-nyckel och kontoåtkomst innan du skickar in.",
                "type": "authentication_error"
              },
              {
                "condition": "Begäran kunde inte läsas eller hämtningsindexet är ogiltigt.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Korrigera begäranskroppen. Vid hämtning väljer du ett utdataindex som returnerats av den ursprungliga uppgiften.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Den valda videokonfigurationen kan inte prissättas.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Välj en videokonfiguration som stöds och fyll i dess obligatoriska alternativ innan du skickar en korrigerad begäran.",
                "type": "price_unavailable"
              },
              {
                "condition": "Videoindata eller den ursprungliga fortsättningsuppgiften är ogiltig.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Använd giltiga HTTPS-indata. För fortsättning använder du det färdiga originalets offentliga video-ID med samma API-nyckel.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Det tillgängliga saldot eller gränserna medger ingen reservation.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera ditt tillgängliga saldo och dina gränser innan du skickar en ny begäran.",
                "type": "billing_error"
              },
              {
                "condition": "Videoverifiering, lagring eller tjänsteåtkomst är tillfälligt otillgänglig.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Vänta tills tjänsten är tillgänglig. Om du redan har ett video-ID kontrollerar du den ursprungliga uppgiften i stället för att skapa en ny generering.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Det ursprungliga videoresultatet och debiteringen behöver kontrolleras.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Behåll det returnerade video-ID:t och kontrollera den uppgiften. Skicka ingen ersättande genereringsbegäran medan den kontrolleras.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Hämtningen av den befintliga videon är tillfälligt otillgänglig.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Kontrollera samma videouppgift senare och hämta dess befintliga resultat. En ny generering skapar en separat operation.",
                "type": "server_error"
              },
              {
                "condition": "Videoinnehållet har inte publicerats.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Kontrollera den ursprungliga uppgiftens status. Hämta när den rapporterar completed; om den rapporterar failed följer du dess meddelande om debiteringskontroll.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + ursprungligt id + X-Should-Retry:false; upprepa aldrig originalet"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-video"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Ange prompt som text och längd i hela sekunder. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "En skriven prompt."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-video"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images är en array. Varje bildruteobjekt har type, image_url och frame_type; image_url innehåller url. Sätt type till image_url. Använd first_frame. Varje bildruteroll förekommer högst en gång. Ange en offentlig HTTPS URL till en bild för varje bildruta. Använd bildrutor eller bildreferenser i en begäran; kombinera inte båda. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "En skriven prompt och en bild för den första bildrutan."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "x-ai/grok-imagine-video"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references är en array med objekt. Sätt type till image_url och använd motsvarande fält som innehåller url. Använd offentliga HTTPS-länkar. Utelämna frame_images för att välja referensläge. Kombinera inte bildreferenser med bildrutor. Välj en upplösning som stöds; lägg till ett bildförhållande eller använd en angiven storlek.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "En skriven prompt och bildreferenser som stöds."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Nollbaserad position för denna video i utdatalistan.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "Signerad HTTPS URL för hämtning av denna färdiga video.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "SHA-256-kontrollsumma för den ursprungliga videons byte; null om den inte är tillgänglig.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Storleken på den ursprungliga videofilen i byte; null om den inte är tillgänglig.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Uppmätt videolängd i millisekunder; null om den inte är tillgänglig.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Videobredd i pixlar; null om den inte är tillgänglig.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Videohöjd i pixlar; null om den inte är tillgänglig.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Identifierare för videokodek; null om ingen har registrerats.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Om videon innehåller ett ljudspår; null om detta inte har mätts.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Identifierare för ljudkodek; null när ingen identifierare har registrerats.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "signerade innehållslänkar som du äger",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "x-ai/grok-imagine-video"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "x-ai/grok-imagine-video"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16",
                  "1:1",
                  "4:3",
                  "3:4",
                  "3:2",
                  "2:3"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "16:9",
                    "9:16",
                    "1:1",
                    "4:3",
                    "3:4",
                    "3:2",
                    "2:3"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Dessa nycklar beskriver varje bildruteobjekt; image_url innehåller endast url. Utelämna frame_images för en begäran med enbart text.",
                "content": "Array med bildruteobjekt. Varje objekt har type=image_url, image_url som innehåller url samt frame_type. Använd en HTTPS URL till en bild och sätt frame_type till first_frame. Varje bildruteroll förekommer högst en gång.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 1,
                "max_items": 1,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "854x480",
                  "1280x720",
                  "480x854",
                  "720x1280",
                  "480x480",
                  "720x720",
                  "640x480",
                  "960x720",
                  "480x640",
                  "720x960",
                  "720x480",
                  "1080x720",
                  "480x720",
                  "720x1080"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "854x480",
                    "1280x720",
                    "480x854",
                    "720x1280",
                    "480x480",
                    "720x720",
                    "640x480",
                    "960x720",
                    "480x640",
                    "720x960",
                    "720x480",
                    "1080x720",
                    "480x720",
                    "720x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "16:9",
                    "9:16",
                    "1:1",
                    "4:3",
                    "3:4",
                    "3:2",
                    "2:3"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "x-ai/grok-imagine-video"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": false,
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "854x480",
                    "1280x720",
                    "480x854",
                    "720x1280",
                    "480x480",
                    "720x720",
                    "640x480",
                    "960x720",
                    "480x640",
                    "720x960",
                    "720x480",
                    "1080x720",
                    "480x720",
                    "720x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Frame images plus image references are rejected because mixed additive input count is unproved; pure frame or pure reference mode remains separately priced."
              ]
            },
            "unsupported": [
              "seed",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per image"
            },
            "label": "Input image",
            "units": [
              {
                "amount": "0.004",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_image_input",
                "label": "Input image",
                "native_amount_usd_per_unit": "0.004",
                "native_quantity": 1,
                "public_unit_label": "per image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.14",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.14",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Denna uppskattning är varken en extra avgift eller ett fast pris för den slutförda genereringen.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Uppskattad genereringskostnad",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"x-ai/grok-imagine-video\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per image"
            },
            "label": "Input image",
            "units": [
              {
                "amount": "0.004",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_image_input",
                "label": "Input image",
                "native_amount_usd_per_unit": "0.004",
                "native_quantity": 1,
                "public_unit_label": "per image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "image"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.14",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_video_output_second_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.14",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "x-ai/grok-imagine-video",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.004",
            "amount_unit": "usd_per_image",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_image_input",
            "label": "Input image",
            "native_amount_usd_per_unit": "0.004",
            "native_quantity": 1,
            "public_unit_label": "per image",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "image"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_video_output_second_480p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.14",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_video_output_second_720p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.14",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "x-ai/grok-imagine-video",
        "request_model_id": "x-ai/grok-imagine-video",
        "route_label": "Ultra"
      }
    ],
    "name": "SpaceXAI: Grok Imagine Video",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.1,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.1,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "input_assets_additive": true,
          "resolution": "480p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.10",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "input_assets_additive": true,
              "resolution": "480p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "input_assets_additive": true,
          "resolution": "720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.14",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "input_assets_additive": true,
              "resolution": "720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "start_frame_or_reference_image_charged": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.004",
            "amount_unit": "usd_per_input_image",
            "conditions": {
              "adds_to_output": true,
              "start_frame_or_reference_image_charged": true
            },
            "key": "input_image",
            "label": "input image",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output_seconds": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.02",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "adds_to_output_seconds": true
            },
            "key": "input_video",
            "label": "input video",
            "profile_index": 3,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.004",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "image input",
            "billing_original_currency": "USD_cent",
            "billing_original_rate": "0.4",
            "key": "cents_per_image_input",
            "label": "image input",
            "native_amount_usd_per_unit": "0.004",
            "native_quantity": 1,
            "quantity": 1,
            "side": "in",
            "unit": "image_input"
          },
          {
            "amount": "0.10",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=480p",
            "billing_original_currency": "USD_cent",
            "billing_original_rate": "10",
            "key": "cents_per_video_output_second_480p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.10",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.14",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=720p",
            "billing_original_currency": "USD_cent",
            "billing_original_rate": "14",
            "key": "cents_per_video_output_second_720p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.14",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          }
        ]
      }
    ],
    "public_id": "x-ai/grok-imagine-video",
    "short": "Grok Imagine Video genererar korta klipp från text, en startbild eller upp till sju visuella referenser. Den klassiska versionen redigerar också befintliga MP4-klipp och lägger till 2–10 sekunders fortsättning. Generering når 720p med ljud; redigering och förlängning bevarar källans bildutsnitt inom sina egna gränser."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Grok Imagine Video genererar korta klipp från text, en startbild eller upp till sju visuella referenser. Den klassiska versionen redigerar också befintliga MP4-klipp och lägger till 2–10 sekunders fortsättning. Generering når 720p med ljud; redigering och förlängning bevarar källans bildutsnitt inom sina egna gränser.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "f9e9f7d2342468c11e8be70cbc56d5177a685ac3a1be3789f3531591bd437438",
    "renderer_sha256": "8a45bb31b83d2551e6d975cf4683518c7cb445a54b9394a01947f4dd103f1051"
  },
  "sourceRevision": "fa6b24a8355d45f823ed3f7c5ce5e8ec825270a8c882fdce8fbf54cd6e53adfe"
}
