{
  "aboutHtml": "<p>Veo 3.1 Lite är Googles Lite-medlem i videogenereringsserien Veo 3. Den syntetiserar en video med ljud från en beskrivning på naturligt språk eller en indatabild. Utdata är ett genererat klipp, inte en textanalys av en befintlig inspelning. Tillverkarens modellkort för Lite hänvisar till Veo 3 för underliggande arkitektur, träningsmaterial och kända begränsningar, medan den Lite-specifika dokumentationen definierar egna genereringsfunktioner och gränser.</p><p>Den refererade arkitekturen använder latent diffusion över temporala ljudrepresentationer och rumstidsliga videorepresentationer. Basmodellen tränades på ljud, video och bilder, med bildtexter på olika detaljnivåer samt filtrerat och deduplicerat träningsmaterial. Detta förklarar syftet att generera bild och ljud gemensamt. Det avslöjar inget Lite-specifikt parameterantal och fastställer inte att varje genererad rörelse följer fysisk verklighet. För en praktisk scen bestämmer du synlig handling och motsvarande ljud tillsammans.</p><p>Den specifika Lite-dokumentationen anger en textindatagräns på 1 024 token och en utdatavideo. Lite-kolumnen i genereringsguiden listar längder på 4, 6 och 8 sekunder, med 720p som standard och 1080p som kräver ett klipp på 8 sekunder. Liggande 16:9 är standardförhållandet och stående 9:16 listas också; utdata dokumenteras med 24 bilder per sekund. Inbyggt ljud är alltid aktiverat i det flödet. Dessa värden hör till tillverkarens namngivna Lite-flöde, inte till en orelaterad Veo-utgåva eller ett separat uppmätt applikationssvar.</p><p>Lite stöder inte 4K-utdata eller videoförlängning. Parametertabellen markerar även funktionen referenceImages för flera referenser och videoindata för förlängning som otillgängliga i Lite-kolumnen. En startbild kan fastställa första bildrutan; tabellen listar en lastFrame-bild tillsammans med startbilden för en övergång. Håll denna bildrutekontroll åtskild från att blanda flera stil- eller motivreferenser. Tillverkarens inställningar för persongenerering är lägesspecifika: Lite-tabellen listar allow_all för text-till-video och allow_adult för bild-till-video och interpolering, medan regionala regler kan begränsa den dokumenterade profilen ytterligare. Välj en startbild som motsvarar den första scen du faktiskt vill ha, med motiv, bildutsnitt och synliga detaljer förberedda innan du begär rörelse.</p><p>För text-till-video beskriver du motivet, dess handling, miljön och avsedd stil. Lägg till kameraposition och rörelse, bildutsnitt, fokus och ljus när de spelar roll. En egen produktscen kan hålla föremålet centrerat medan kameran närmar sig en materialdetalj och omgivande ljus ändras mjukt. Ange starttillståndet, huvudhandlingen och slutögonblicket så att det korta klippet fullföljer en sammanhängande idé. En lång samling orelaterade handlingar är en annan uppgift än en fokuserad tagning.</p><p>För bild-till-video anger du en tydlig startbildruta och förklarar vad som ska röra sig och vad som ska förbli stabilt. Ange motivets rörelse och eventuell kamerarörelse separat. Om du använder en slutbild som begränsning förbereder du en förenlig slutkomposition och beskriver övergången mellan dem. Granska resultatet i stället för att anta att begärd identitet, position eller form förblir identisk genom hela klippet. Det refererade modellkortet identifierar fullständig konsekvens i komplexa scener och komplex rörelse som en fortsatt utmaning.</p><p>Promptguiden stöder uttryckliga signaler för dialog, ljudeffekter och atmosfär. Sätt exakt tal inom citattecken, identifiera talaren och beskriv ljud i relation till den synliga handlingen. En ljudeffekt och bakgrundsatmosfär ska inte förväxlas med en talad replik. Engelska dokumenteras som fullt stödd för promptskrivning, medan andra språk inte har utvärderats i den guiden. Granska hörbara ord, tajmning och ljudkvalitet som delar av samma leverans som videon i stället för att behandla ljudet som en garanterat trogen uppläsning av prompten.</p><p>Tillverkarflödet är asynkront: en genereringsförfrågan returnerar en operation och det färdiga resultatet hämtas när dess status rapporterar att den är klar. Behåll operationsidentiteten och granska det returnerade klippet. Guiden beskriver två dagars lagring hos tillverkaren och SynthID-märkning, så ett sparat material bör omfatta det nedladdade resultatet, prompten, källbilderna och valda inställningar. Ett seed kan förbättra upprepbarheten men garanterar inte determinism. Kontrollera motivkontinuitet, handling, bildutsnitt, ljud och scenens avsedda ändpunkt innan klippet används i en redigering; avslutad bearbetning bevisar inte ensamt att de kreativa kraven uppfylldes.</p>",
  "aboutText": "Veo 3.1 Lite är Googles Lite-medlem i videogenereringsserien Veo 3. Den syntetiserar en video med ljud från en beskrivning på naturligt språk eller en indatabild. Utdata är ett genererat klipp, inte en textanalys av en befintlig inspelning. Tillverkarens modellkort för Lite hänvisar till Veo 3 för underliggande arkitektur, träningsmaterial och kända begränsningar, medan den Lite-specifika dokumentationen definierar egna genereringsfunktioner och gränser.\n\nDen refererade arkitekturen använder latent diffusion över temporala ljudrepresentationer och rumstidsliga videorepresentationer. Basmodellen tränades på ljud, video och bilder, med bildtexter på olika detaljnivåer samt filtrerat och deduplicerat träningsmaterial. Detta förklarar syftet att generera bild och ljud gemensamt. Det avslöjar inget Lite-specifikt parameterantal och fastställer inte att varje genererad rörelse följer fysisk verklighet. För en praktisk scen bestämmer du synlig handling och motsvarande ljud tillsammans.\n\nDen specifika Lite-dokumentationen anger en textindatagräns på 1 024 token och en utdatavideo. Lite-kolumnen i genereringsguiden listar längder på 4, 6 och 8 sekunder, med 720p som standard och 1080p som kräver ett klipp på 8 sekunder. Liggande 16:9 är standardförhållandet och stående 9:16 listas också; utdata dokumenteras med 24 bilder per sekund. Inbyggt ljud är alltid aktiverat i det flödet. Dessa värden hör till tillverkarens namngivna Lite-flöde, inte till en orelaterad Veo-utgåva eller ett separat uppmätt applikationssvar.\n\nLite stöder inte 4K-utdata eller videoförlängning. Parametertabellen markerar även funktionen referenceImages för flera referenser och videoindata för förlängning som otillgängliga i Lite-kolumnen. En startbild kan fastställa första bildrutan; tabellen listar en lastFrame-bild tillsammans med startbilden för en övergång. Håll denna bildrutekontroll åtskild från att blanda flera stil- eller motivreferenser. Tillverkarens inställningar för persongenerering är lägesspecifika: Lite-tabellen listar allow_all för text-till-video och allow_adult för bild-till-video och interpolering, medan regionala regler kan begränsa den dokumenterade profilen ytterligare. Välj en startbild som motsvarar den första scen du faktiskt vill ha, med motiv, bildutsnitt och synliga detaljer förberedda innan du begär rörelse.\n\nFör text-till-video beskriver du motivet, dess handling, miljön och avsedd stil. Lägg till kameraposition och rörelse, bildutsnitt, fokus och ljus när de spelar roll. En egen produktscen kan hålla föremålet centrerat medan kameran närmar sig en materialdetalj och omgivande ljus ändras mjukt. Ange starttillståndet, huvudhandlingen och slutögonblicket så att det korta klippet fullföljer en sammanhängande idé. En lång samling orelaterade handlingar är en annan uppgift än en fokuserad tagning.\n\nFör bild-till-video anger du en tydlig startbildruta och förklarar vad som ska röra sig och vad som ska förbli stabilt. Ange motivets rörelse och eventuell kamerarörelse separat. Om du använder en slutbild som begränsning förbereder du en förenlig slutkomposition och beskriver övergången mellan dem. Granska resultatet i stället för att anta att begärd identitet, position eller form förblir identisk genom hela klippet. Det refererade modellkortet identifierar fullständig konsekvens i komplexa scener och komplex rörelse som en fortsatt utmaning.\n\nPromptguiden stöder uttryckliga signaler för dialog, ljudeffekter och atmosfär. Sätt exakt tal inom citattecken, identifiera talaren och beskriv ljud i relation till den synliga handlingen. En ljudeffekt och bakgrundsatmosfär ska inte förväxlas med en talad replik. Engelska dokumenteras som fullt stödd för promptskrivning, medan andra språk inte har utvärderats i den guiden. Granska hörbara ord, tajmning och ljudkvalitet som delar av samma leverans som videon i stället för att behandla ljudet som en garanterat trogen uppläsning av prompten.\n\nTillverkarflödet är asynkront: en genereringsförfrågan returnerar en operation och det färdiga resultatet hämtas när dess status rapporterar att den är klar. Behåll operationsidentiteten och granska det returnerade klippet. Guiden beskriver två dagars lagring hos tillverkaren och SynthID-märkning, så ett sparat material bör omfatta det nedladdade resultatet, prompten, källbilderna och valda inställningar. Ett seed kan förbättra upprepbarheten men garanterar inte determinism. Kontrollera motivkontinuitet, handling, bildutsnitt, ljud och scenens avsedda ändpunkt innan klippet används i en redigering; avslutad bearbetning bevisar inte ensamt att de kreativa kraven uppfylldes.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "3334f2b31b75d7318f8997f5e5f707c693fa8c06791b23454ab1c3be0cd1cb50",
    "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\">G</span><h2 id=\"sheet-title\">Google: Veo 3.1 Lite</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Stäng\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/veo-3.1-lite</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|google%2Fveo-3.1-lite\">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\">Omvandla en scenbeskrivning till en 4, 6 eller 8 sekunder lång video i 720p.</p><ul class=\"card-best-for\"><li>Visa en produkt i rörelse</li><li>Skapa en scen som etablerar miljön</li><li>Prova en kort kamerarörelse</li></ul><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>Veo 3.1 Lite är Googles Lite-medlem i videogenereringsserien Veo 3. Den syntetiserar en video med ljud från en beskrivning på naturligt språk eller en indatabild. Utdata är ett genererat klipp, inte en textanalys av en befintlig inspelning. Tillverkarens modellkort för Lite hänvisar till Veo 3 för underliggande arkitektur, träningsmaterial och kända begränsningar, medan den Lite-specifika dokumentationen definierar egna genereringsfunktioner och gränser.</p><p>Den refererade arkitekturen använder latent diffusion över temporala ljudrepresentationer och rumstidsliga videorepresentationer. Basmodellen tränades på ljud, video och bilder, med bildtexter på olika detaljnivåer samt filtrerat och deduplicerat träningsmaterial. Detta förklarar syftet att generera bild och ljud gemensamt. Det avslöjar inget Lite-specifikt parameterantal och fastställer inte att varje genererad rörelse följer fysisk verklighet. För en praktisk scen bestämmer du synlig handling och motsvarande ljud tillsammans.</p><p>Den specifika Lite-dokumentationen anger en textindatagräns på 1 024 token och en utdatavideo. Lite-kolumnen i genereringsguiden listar längder på 4, 6 och 8 sekunder, med 720p som standard och 1080p som kräver ett klipp på 8 sekunder. Liggande 16:9 är standardförhållandet och stående 9:16 listas också; utdata dokumenteras med 24 bilder per sekund. Inbyggt ljud är alltid aktiverat i det flödet. Dessa värden hör till tillverkarens namngivna Lite-flöde, inte till en orelaterad Veo-utgåva eller ett separat uppmätt applikationssvar.</p><p>Lite stöder inte 4K-utdata eller videoförlängning. Parametertabellen markerar även funktionen referenceImages för flera referenser och videoindata för förlängning som otillgängliga i Lite-kolumnen. En startbild kan fastställa första bildrutan; tabellen listar en lastFrame-bild tillsammans med startbilden för en övergång. Håll denna bildrutekontroll åtskild från att blanda flera stil- eller motivreferenser. Tillverkarens inställningar för persongenerering är lägesspecifika: Lite-tabellen listar allow_all för text-till-video och allow_adult för bild-till-video och interpolering, medan regionala regler kan begränsa den dokumenterade profilen ytterligare. Välj en startbild som motsvarar den första scen du faktiskt vill ha, med motiv, bildutsnitt och synliga detaljer förberedda innan du begär rörelse.</p><p>För text-till-video beskriver du motivet, dess handling, miljön och avsedd stil. Lägg till kameraposition och rörelse, bildutsnitt, fokus och ljus när de spelar roll. En egen produktscen kan hålla föremålet centrerat medan kameran närmar sig en materialdetalj och omgivande ljus ändras mjukt. Ange starttillståndet, huvudhandlingen och slutögonblicket så att det korta klippet fullföljer en sammanhängande idé. En lång samling orelaterade handlingar är en annan uppgift än en fokuserad tagning.</p><p>För bild-till-video anger du en tydlig startbildruta och förklarar vad som ska röra sig och vad som ska förbli stabilt. Ange motivets rörelse och eventuell kamerarörelse separat. Om du använder en slutbild som begränsning förbereder du en förenlig slutkomposition och beskriver övergången mellan dem. Granska resultatet i stället för att anta att begärd identitet, position eller form förblir identisk genom hela klippet. Det refererade modellkortet identifierar fullständig konsekvens i komplexa scener och komplex rörelse som en fortsatt utmaning.</p><p>Promptguiden stöder uttryckliga signaler för dialog, ljudeffekter och atmosfär. Sätt exakt tal inom citattecken, identifiera talaren och beskriv ljud i relation till den synliga handlingen. En ljudeffekt och bakgrundsatmosfär ska inte förväxlas med en talad replik. Engelska dokumenteras som fullt stödd för promptskrivning, medan andra språk inte har utvärderats i den guiden. Granska hörbara ord, tajmning och ljudkvalitet som delar av samma leverans som videon i stället för att behandla ljudet som en garanterat trogen uppläsning av prompten.</p><p>Tillverkarflödet är asynkront: en genereringsförfrågan returnerar en operation och det färdiga resultatet hämtas när dess status rapporterar att den är klar. Behåll operationsidentiteten och granska det returnerade klippet. Guiden beskriver två dagars lagring hos tillverkaren och SynthID-märkning, så ett sparat material bör omfatta det nedladdade resultatet, prompten, källbilderna och valda inställningar. Ett seed kan förbättra upprepbarheten men garanterar inte determinism. Kontrollera motivkontinuitet, handling, bildutsnitt, ljud och scenens avsedda ändpunkt innan klippet används i en redigering; avslutad bearbetning bevisar inte ensamt att de kreativa kraven uppfylldes.</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>mp4</dd></div><div><dt>Antal utdata</dt><dd>Upp till 4 utdatas</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>google/veo-3.1-lite</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><div>Minsta längd: 1</div><div>Maximalt antal byte: 10 000</div><div>Enhet: UTF8-byte</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\">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>4, 6, 8</div><div>Enhet: sekunder</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>Obligatoriskt</td><td data-cell-label=\"Värden &amp; gränser\"><span class=\"card-cell-label\">Värden &amp; gränser</span><div>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>Obligatoriskt</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</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>Obligatoriskt</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>Villkor: Utelämna för text_to_video. Om fältet anges: exakt en post {&quot;type&quot;:&quot;image_url&quot;,&quot;image_url&quot;:{&quot;url&quot;:&quot;&lt;faktisk HTTPS URL&gt;&quot;},&quot;frame_type&quot;:&quot;first_frame&quot;}; posten har exakt type,image_url,frame_type; image_url har exakt url. Inga extra eller dubblerade nycklar. Endast duration=4,resolution=&quot;720p&quot;,aspect_ratio=&quot;16:9&quot;,generate_audio=false. URL måste kunna tolkas med schemat https, ett icke-tomt värdnamn, utan userinfo och utan ett bokstavligt #; signerad frågesträng och kodad sökväg bevaras. Källkoden kontrollerar varken indatans MIME, filstorlek eller pixeldimensioner.</div></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> · Krävs: prompt</p><p class=\"note-s\"><b>Bild till video</b> · Krävs: prompt, frame_images</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, resolution, aspect_ratio, generate_audio</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>other_options</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>resolution</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>720p</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>prompt_max_bytes</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>10000</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>duration</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>4, 6, 8</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>aspect_ratio</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>16:9, 9:16</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>generate_audio</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>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>parameters</code></th><td data-cell-label=\"Avtal\"><span class=\"card-cell-label\">Avtal</span>{&quot;name&quot;:&quot;model&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:true,&quot;enum&quot;:[&quot;google/veo-3.1-lite&quot;],&quot;availability&quot;:&quot;source_interface&quot;}, {&quot;name&quot;:&quot;prompt&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:false,&quot;enum&quot;:null,&quot;availability&quot;:&quot;source_interface&quot;,&quot;min_length&quot;:1,&quot;maximum_bytes&quot;:10000,&quot;maximum_length&quot;:null,&quot;unit&quot;:&quot;UTF8-byte&quot;}, {&quot;name&quot;:&quot;duration&quot;,&quot;type&quot;:&quot;integer&quot;,&quot;required&quot;:true,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:true,&quot;enum&quot;:[4,6,8],&quot;availability&quot;:&quot;source_interface&quot;,&quot;unit&quot;:&quot;sekunder&quot;}, {&quot;name&quot;:&quot;resolution&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:true,&quot;enum&quot;:[&quot;720p&quot;],&quot;availability&quot;:&quot;source_interface&quot;}, {&quot;name&quot;:&quot;aspect_ratio&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:true,&quot;enum&quot;:[&quot;16:9&quot;,&quot;9:16&quot;],&quot;availability&quot;:&quot;source_interface&quot;}, {&quot;name&quot;:&quot;generate_audio&quot;,&quot;type&quot;:&quot;boolean&quot;,&quot;required&quot;:true,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:true,&quot;enum&quot;:[false],&quot;availability&quot;:&quot;source_interface&quot;}, {&quot;name&quot;:&quot;frame_images&quot;,&quot;type&quot;:&quot;array&quot;,&quot;required&quot;:false,&quot;default_known&quot;:false,&quot;default&quot;:null,&quot;enum_known&quot;:false,&quot;enum&quot;:null,&quot;availability&quot;:&quot;source_interface&quot;,&quot;conditions&quot;:&quot;Utelämna för text_to_video. Om fältet anges: exakt en post {\\&quot;type\\&quot;:\\&quot;image_url\\&quot;,\\&quot;image_url\\&quot;:{\\&quot;url\\&quot;:\\&quot;&lt;faktisk HTTPS URL&gt;\\&quot;},\\&quot;frame_type\\&quot;:\\&quot;first_frame\\&quot;}; posten har exakt type,image_url,frame_type; image_url har exakt url. Inga extra eller dubblerade nycklar. Endast duration=4,resolution=\\&quot;720p\\&quot;,aspect_ratio=\\&quot;16:9\\&quot;,generate_audio=false. URL måste kunna tolkas med schemat https, ett icke-tomt värdnamn, utan userinfo och utan ett bokstavligt #; signerad frågesträng och kodad sökväg bevaras. Källkoden kontrollerar varken indatans MIME, filstorlek eller pixeldimensioner.&quot;}</td></tr></tbody></table></div><p>Metodalias: <code>/v1/videos/generations</code>, <code>/videos</code>, <code>/videos/generations</code></p><p>Livscykel: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}/content</code></p><p class=\"note-s\">Skapa en gång och spara returnerat ID.</p><p class=\"note-s\">Kontrollera den ursprungliga statusen; behåll varje färdig tillgång och dess längd.</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>Generera ljud</th><th>Upplösning</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=\"Generera ljud\"><span class=\"card-cell-label\">Generera ljud</span>—</td><td data-cell-label=\"Upplösning\"><span class=\"card-cell-label\">Upplösning</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>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=\"Generera ljud\"><span class=\"card-cell-label\">Generera ljud</span>—</td><td data-cell-label=\"Upplösning\"><span class=\"card-cell-label\">Upplösning</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>ljud: with_audio</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.16</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=\"Generera ljud\"><span class=\"card-cell-label\">Generera ljud</span>—</td><td data-cell-label=\"Upplösning\"><span class=\"card-cell-label\">Upplösning</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>ljud: with_audio; upplösning: 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.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=\"Generera ljud\"><span class=\"card-cell-label\">Generera ljud</span>—</td><td data-cell-label=\"Upplösning\"><span class=\"card-cell-label\">Upplösning</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>ljud: without_audio</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>Ultra</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>Begärd konfiguration; endast en uppskattning.</td><td data-cell-label=\"Generera ljud\"><span class=\"card-cell-label\">Generera ljud</span>Utan ljud</td><td data-cell-label=\"Upplösning\"><span class=\"card-cell-label\">Upplösning</span>720p</td><td data-cell-label=\"Debiteringsenhet\"><span class=\"card-cell-label\">Debiteringsenhet</span>per sekund utdatavideo</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 sekund av utgående video · Uppskattning endast för jämförelse</span> <b>$0.06</b> <span class=\"price-unit\">per sekund utdatavideo</span></div><p class=\"note-s\">Det visade priset uppskattar kostnaden före generering. Slutdebiteringen beräknas utifrån kostnaden som registrerats för den ursprungliga genereringen. Den fysiska videolängden är inte den debiterbara mängden.</p></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=\"Generera ljud\"><span class=\"card-cell-label\">Generera ljud</span>—</td><td data-cell-label=\"Upplösning\"><span class=\"card-cell-label\">Upplösning</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>Utdata · Uppskattad genereringskostnad · Uppskattning endast för jämförelse</span> <b>$0.24</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>Videopris</th><td data-cell-label=\"Debiteringsvillkor\"><span class=\"card-cell-label\">Debiteringsvillkor</span>ljud: with_audio</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Videopris</span> <b>$0.16</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>ljud: without_audio</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>ljud: with_audio; upplösning: 720p</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>ljud: without_audio; upplösning: 720p</td><td data-cell-label=\"Avgift\"><span class=\"card-cell-label\">Avgift</span><div><span>Utdata · Videopris</span> <b>$0.06</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-1511-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1511-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button><button class=\"cg-tab\" id=\"model-code-1511-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1511-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · animera din första bildruta</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-1511-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1511-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;google/veo-3.1-lite&quot;, &quot;prompt&quot;: &quot;A cat in a spacesuit walking on the Moon&quot;, &quot;duration&quot;: 4, &quot;resolution&quot;: &quot;720p&quot;, &quot;aspect_ratio&quot;: &quot;16:9&quot;, &quot;generate_audio&quot;: false}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/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\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1511-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1511-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_IMAGE_URL:?Set the actual HTTPS URL of your first-frame image}&quot;\nexport AILOOT_IMAGE_URL\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os,re\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nimage=os.environ[&quot;AILOOT_IMAGE_URL&quot;]\ntry:\n    parsed=urlsplit(image)\n    valid=(image.startswith(&quot;https://&quot;) and parsed.scheme==&quot;https&quot; and bool(parsed.hostname)\n           and parsed.username is None and parsed.password is None and &quot;#&quot; not in image\n           and not any(ord(c)&lt;32 or ord(c)==127 for c in image)\n           and re.search(r&quot;%(?![0-9A-Fa-f]{2})&quot;,image) is None)\nexcept ValueError:\n    valid=False\nif not valid:\n    raise SystemExit(&quot;Use your actual HTTPS image URL with a hostname, no userinfo and no fragment&quot;)\np={&quot;model&quot;:&quot;google/veo-3.1-lite&quot;,&quot;prompt&quot;:&quot;The subject makes a slow, natural movement. Keep the opening composition.&quot;,&quot;duration&quot;:4,&quot;resolution&quot;:&quot;720p&quot;,&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;generate_audio&quot;:False,&quot;frame_images&quot;:[{&quot;type&quot;:&quot;image_url&quot;,&quot;image_url&quot;:{&quot;url&quot;:image},&quot;frame_type&quot;:&quot;first_frame&quot;}]}\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False),encoding=&quot;utf-8&quot;)\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(&quot;result.json&quot;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&quot;Keep the complete JSON, headers and original returned id. Use the existing GET status tab for that original operation, then save every completed owned output. Never resubmit an unknown generation.&quot;)\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\">mp4</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/generations/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li><li><code>GET /v1/videos/generations/{request_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-1512-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1512-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET status</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-1512-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1512-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}&quot;\nexport AILOOT_OPERATION_ID\noperation_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_OPERATION_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/videos/$operation_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o status.json\npython3 - &lt;&lt;&#39;PY_STATUS&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&quot;status.json&quot;).read_text())\nprint(json.dumps(r))\nif r.get(&quot;status&quot;)==&quot;completed&quot;:\n    for x in r.get(&quot;data&quot;,[]):print(x)\nPY_STATUS\n</code></pre></div></div></div><h5>Spara alla färdiga resurser</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-1513-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1513-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET alla färdiga resurser</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-1513-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1513-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}&quot;\nexport AILOOT_STATUS_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[&quot;AILOOT_STATUS_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose the actual completed status file&quot;)\nr=json.loads(f.read_text())\nif r.get(&quot;status&quot;)!=&quot;completed&quot; or not isinstance(r.get(&quot;data&quot;),list) or not r[&quot;data&quot;]:raise SystemExit(&quot;Wait for a completed status with asset paths&quot;)\nurls=[]\nfor x in r[&quot;data&quot;]:\n    if not isinstance(x,str) or &quot;\\n&quot; in x or &quot;\\r&quot; in x:raise SystemExit(&quot;Invalid asset path&quot;)\n    u=urljoin(&quot;https://api.ailoot.ai&quot;,x)\n    z=urlsplit(u)\n    if z.scheme!=&quot;https&quot; or z.netloc!=&quot;api.ailoot.ai&quot; or z.username or z.password:raise SystemExit(&quot;Use the actual Ailoot asset paths from status&quot;)\n    urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; \\\n    -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o &quot;video-${index}.mp4&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\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-1514-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1514-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET innehåll</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-1514-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1514-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}&quot;\nexport AILOOT_OPERATION_ID\noperation_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_OPERATION_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/videos/$operation_id/content&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o video.mp4\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\">Färdigt data[] innehåller alla signerade URL till innehåll som du äger. Hämta varje returnerad URL eller använd innehållsändpunkten med index satt till ett faktiskt utdataindex. Ett misslyckat ursprungligt jobb kan returnera charge_pending_check; kontrollera det ursprungliga jobbet i stället för att skapa det igen. Ett giltigt AAC-ljudspår kan finnas även med generate_audio=false; behåll hela den ursprungliga MP4-filen inklusive ljudet.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Om det ursprungliga svaret behöver kontrolleras</h5><p class=\"note-s\">Läs det befintliga ursprungliga jobbet; skicka aldrig en oklar sändning igen.</p></div><p class=\"note-s\">Maximalt antal utdata: 4.</p><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\">id</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>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">object</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>—</td></tr><tr><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>string</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">status</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>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">data[]</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>signed content URL</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">charge_pending_check</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>boolean</td><td data-cell-label=\"Betydelse\"><span class=\"card-cell-label\">Betydelse</span>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">error.code</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>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">error.message</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>—</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">operation_id</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>HTTP503 result_pending_check i det ursprungliga status- eller innehållssvaret: samma ursprungliga offentliga video-ID som id.</td></tr><tr><th data-cell-label=\"Fält\" scope=\"row\"><span class=\"card-cell-label\">Fält</span><code class=\"card-field-name\">error.type</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>server_error vid HTTP503 result_pending_check.</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>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Ogiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Korrigera de angivna fälten före en ny begäran om att skapa.</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>Det ursprungliga resultatinnehållet är ännu inte tillgängligt</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Kontrollera det ursprungliga returnerade ID:t och följ Retry-After.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Villkor\"><span class=\"card-cell-label\">Villkor</span>Det returnerade svaret anger att operationen eller resultatet behöver kontrolleras</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Spara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen.</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>GET av ursprunglig status/innehåll: uppgiften är inte publicerad, det ursprungliga jobbet har inte misslyckats, avbrutits eller löpt ut, och det lokala tillståndet är unknown eller det ursprungliga jobbets status är completed.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Behåll ursprungliga id och operation_id (samma offentliga video-ID), svar och svarshuvuden; läs endast ursprunglig status/innehåll. Skicka aldrig en ny genereringsbegäran.</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>Ett angivet frame_images-objekt eller dess villkorliga profil kan inte tolkas, eller den fullständigt tolkade profilen saknar ett färdigt exakt priskort.</td><td data-cell-label=\"Nästa steg\"><span class=\"card-cell-label\">Nästa steg</span>Behåll model, prompt, duration, resolution, aspect_ratio och generate_audio. Lägg till frame_images som innehåller exakt en first_frame-post i det angivna objektformatet. Sätt duration=4, resolution=&quot;720p&quot;, aspect_ratio=&quot;16:9&quot; och generate_audio=false. Denna validering körs innan begäran skickas.</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=google%2Fveo-3.1-lite&amp;route=Ultra&amp;caller=google%2Fveo-3.1-lite&amp;fmt=videos\"><code>google/veo-3.1-lite</code></a></span></p><h4>Alias för metodsökvägar</h4><p class=\"note-s\"><code>/v1/videos/generations</code>, <code>/videos</code>, <code>/videos/generations</code></p><h4>Relaterade anropar-ID:n</h4><p class=\"note-s\"><a href=\"#m=google%2Fveo-3.1-lite&amp;route=Ultra&amp;caller=google%2Fveo-3.1-lite&amp;fmt=videos\"><code>google/veo-3.1-lite</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/veo-3.1-lite",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "google/veo-3.1-lite",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|google%2Fveo-3.1-lite",
      "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": "Completeddata[] contains all owned signedcontentURLs. FetcheachactualURL,orusecontent?index=actualindex. Failedoriginaljobs maycarrycharge_pending_check; do not recreate.",
            "errors": [
              {
                "code": null,
                "condition": "Ogiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde",
                "http_status": 400,
                "recovery": "Korrigera de angivna fälten före en ny begäran om att skapa.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det ursprungliga resultatinnehållet är ännu inte tillgängligt",
                "http_status": 409,
                "recovery": "Kontrollera det ursprungliga returnerade ID:t och följ Retry-After.",
                "type": "video_not_ready"
              },
              {
                "code": null,
                "condition": "Det returnerade svaret anger att operationen eller resultatet behöver kontrolleras",
                "http_status": null,
                "recovery": "Spara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen.",
                "type": "server_error"
              },
              {
                "absent_fields": [
                  "status",
                  "object",
                  "model",
                  "data"
                ],
                "code": "result_pending_check",
                "condition": "GET av ursprunglig status/innehåll: uppgiften är inte publicerad, det ursprungliga jobbet har inte misslyckats, avbrutits eller löpt ut, och det lokala tillståndet är unknown eller det ursprungliga jobbets status är completed.",
                "friendly_fields": "error.reason=result_pending_check,error.param=null; error.operation_id and error.request_id when the existing context supplies them. error.message is rewritten/localized.",
                "headers": {
                  "Retry-After": null,
                  "X-Should-Retry": "false"
                },
                "http_status": 503,
                "recovery": "Behåll ursprungliga id och operation_id (samma offentliga video-ID), svar och svarshuvuden; läs endast ursprunglig status/innehåll. Skicka aldrig en ny genereringsbegäran.",
                "response_fields": {
                  "charge_pending_check": true,
                  "error.code": "result_pending_check",
                  "error.type": "server_error",
                  "id": "original public video ID",
                  "operation_id": "same as id"
                },
                "type": "server_error"
              },
              {
                "code": null,
                "condition": "Ett angivet frame_images-objekt eller dess villkorliga profil kan inte tolkas, eller den fullständigt tolkade profilen saknar ett färdigt exakt priskort.",
                "http_status": 422,
                "message": "The complete video request cannot be priced",
                "recovery": "Behåll model, prompt, duration, resolution, aspect_ratio och generate_audio. Lägg till frame_images som innehåller exakt en first_frame-post i det angivna objektformatet. Sätt duration=4, resolution=\"720p\", aspect_ratio=\"16:9\" och generate_audio=false. Denna validering körs innan begäran skickas.",
                "type": "price_unavailable"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "content": [
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default0"
                  }
                },
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/generations/{request_id}/content"
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
              "mode": "submit_once_poll_original",
              "multioutputs": "retain every completed data output; index0 alone is not all outputs",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 202,
              "unknown": "Läs det befintliga ursprungliga jobbet; skicka aldrig en oklar sändning igen.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_video",
                "required": [
                  "prompt"
                ]
              },
              {
                "conditions": "The required fields are model, prompt, duration, resolution, aspect_ratio and generate_audio. For image_to_video, also provide frame_images and use duration=4, resolution=\"720p\", aspect_ratio=\"16:9\" and generate_audio=false.",
                "content_type": "application/json",
                "mode": "image_to_video",
                "required": [
                  "prompt",
                  "frame_images"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "Use actual returned task_id or original public video id from response/media library. On HTTP503 result_pending_check from original video status/content GET, operation_id equals that original public video id. Do not assume unrelated operation IDs name media tasks.",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_video",
              "image_to_video"
            ],
            "outputs": {
              "all_results": "Färdigt data[] innehåller alla signerade URL till innehåll som du äger. Hämta varje returnerad URL eller använd innehållsändpunkten med index satt till ett faktiskt utdataindex. Ett misslyckat ursprungligt jobb kan returnera charge_pending_check; kontrollera det ursprungliga jobbet i stället för att skapa det igen. Ett giltigt AAC-ljudspår kan finnas även med generate_audio=false; behåll hela den ursprungliga MP4-filen inklusive ljudet.",
              "create_status": 202,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": "signed content URL"
                },
                {
                  "description": null,
                  "name": "charge_pending_check",
                  "type": "boolean"
                },
                {
                  "description": null,
                  "name": "error.code",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "error.message",
                  "type": "string"
                },
                {
                  "description": "HTTP503 result_pending_check i det ursprungliga status- eller innehållssvaret: samma ursprungliga offentliga video-ID som id.",
                  "name": "operation_id",
                  "type": "string"
                },
                {
                  "description": "server_error vid HTTP503 result_pending_check.",
                  "name": "error.type",
                  "type": "string"
                }
              ],
              "format": "mp4",
              "maximum_outputs": 4,
              "status_enum": [
                "in_progress",
                "completed",
                "failed"
              ]
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/veo-3.1-lite"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_bytes": 10000,
                "maximum_length": null,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string",
                "unit": "UTF8-byte"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  6,
                  8
                ],
                "enum_known": true,
                "name": "duration",
                "required": true,
                "type": "integer",
                "unit": "sekunder"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Utelämna för text_to_video. Om fältet anges: exakt en post {\"type\":\"image_url\",\"image_url\":{\"url\":\"<faktisk HTTPS URL>\"},\"frame_type\":\"first_frame\"}; posten har exakt type,image_url,frame_type; image_url har exakt url. Inga extra eller dubblerade nycklar. Endast duration=4,resolution=\"720p\",aspect_ratio=\"16:9\",generate_audio=false. URL måste kunna tolkas med schemat https, ett icke-tomt värdnamn, utan userinfo och utan ett bokstavligt #; signerad frågesträng och kodad sökväg bevaras. Källkoden kontrollerar varken indatans MIME, filstorlek eller pixeldimensioner.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "frame_images",
                "required": false,
                "type": "array"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "Every field outside the original six required fields plus optional frame_images; last_frame, reference frames, multiple frames, non-HTTPS URLs, URL userinfo, URL fragments and other first-frame profiles are rejected."
            ]
          },
          "hints": [
            "Skapa en gång och spara returnerat ID.",
            "Kontrollera den ursprungliga statusen; behåll varje färdig tillgång och dess längd."
          ],
          "input": {
            "aspect_ratio": [
              "16:9",
              "9:16"
            ],
            "content_type": "application/json",
            "duration": [
              4,
              6,
              8
            ],
            "generate_audio": [
              false
            ],
            "material_types": [
              "text",
              "image"
            ],
            "other_options": false,
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/veo-3.1-lite"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_bytes": 10000,
                "maximum_length": null,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string",
                "unit": "UTF8-byte"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  6,
                  8
                ],
                "enum_known": true,
                "name": "duration",
                "required": true,
                "type": "integer",
                "unit": "sekunder"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Utelämna för text_to_video. Om fältet anges: exakt en post {\"type\":\"image_url\",\"image_url\":{\"url\":\"<faktisk HTTPS URL>\"},\"frame_type\":\"first_frame\"}; posten har exakt type,image_url,frame_type; image_url har exakt url. Inga extra eller dubblerade nycklar. Endast duration=4,resolution=\"720p\",aspect_ratio=\"16:9\",generate_audio=false. URL måste kunna tolkas med schemat https, ett icke-tomt värdnamn, utan userinfo och utan ett bokstavligt #; signerad frågesträng och kodad sökväg bevaras. Källkoden kontrollerar varken indatans MIME, filstorlek eller pixeldimensioner.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "frame_images",
                "required": false,
                "type": "array"
              }
            ],
            "prompt_max_bytes": 10000,
            "required": [
              "model",
              "prompt",
              "duration",
              "resolution",
              "aspect_ratio",
              "generate_audio"
            ],
            "resolution": [
              "720p"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content"
              }
            ],
            "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
            "mode": "submit_once_poll_original",
            "multioutputs": "retain every completed data output; index0 alone is not all outputs",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 202,
            "unknown": "Read existing original job; never resubmit unknown send."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations",
            "/videos",
            "/videos/generations"
          ],
          "operation_modes": [
            "text_to_video",
            "image_to_video"
          ],
          "output": {
            "family": "video",
            "format": "mp4",
            "max_outputs": 4,
            "result": "all actual owned validated complete MP4 outputs"
          }
        },
        "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": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "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": "ljud: with_audio; upplösning: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_720p",
                "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": "audio: without_audio",
              "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": "duration_seconds_without_audio",
                "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"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_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.24",
                "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.24",
                "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'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/veo-3.1-lite\", \"prompt\": \"A cat in a spacesuit walking on the Moon\", \"duration\": 4, \"resolution\": \"720p\", \"aspect_ratio\": \"16:9\", \"generate_audio\": false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/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\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_IMAGE_URL:?Set the actual HTTPS URL of your first-frame image}\"\nexport AILOOT_IMAGE_URL\npython3 - <<'PY_REQUEST'\nimport json,os,re\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nimage=os.environ[\"AILOOT_IMAGE_URL\"]\ntry:\n    parsed=urlsplit(image)\n    valid=(image.startswith(\"https://\") and parsed.scheme==\"https\" and bool(parsed.hostname)\n           and parsed.username is None and parsed.password is None and \"#\" not in image\n           and not any(ord(c)<32 or ord(c)==127 for c in image)\n           and re.search(r\"%(?![0-9A-Fa-f]{2})\",image) is None)\nexcept ValueError:\n    valid=False\nif not valid:\n    raise SystemExit(\"Use your actual HTTPS image URL with a hostname, no userinfo and no fragment\")\np={\"model\":\"google/veo-3.1-lite\",\"prompt\":\"The subject makes a slow, natural movement. Keep the opening composition.\",\"duration\":4,\"resolution\":\"720p\",\"aspect_ratio\":\"16:9\",\"generate_audio\":False,\"frame_images\":[{\"type\":\"image_url\",\"image_url\":{\"url\":image},\"frame_type\":\"first_frame\"}]}\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False),encoding=\"utf-8\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(\"Keep the complete JSON, headers and original returned id. Use the existing GET status tab for that original operation, then save every completed owned output. Never resubmit an unknown generation.\")\nPY_RESULT\n",
            "label": "curl · animate your first frame",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}\"\nexport AILOOT_OPERATION_ID\noperation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_OPERATION_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/videos/$operation_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o status.json\npython3 - <<'PY_STATUS'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"status.json\").read_text())\nprint(json.dumps(r))\nif r.get(\"status\")==\"completed\":\n    for x in r.get(\"data\",[]):print(x)\nPY_STATUS\n",
            "label": "GET status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}\"\nexport AILOOT_OPERATION_ID\noperation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_OPERATION_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/videos/$operation_id/content\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o video.mp4\n",
            "label": "GET content",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    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 Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and save returned ID.",
          "Poll original status; retain every completed asset and duration."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations",
          "/videos",
          "/videos/generations"
        ],
        "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": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "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": "audio: with_audio; resolution: 720p",
              "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": "duration_seconds_with_audio_720p",
                "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": "audio: without_audio",
              "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": "duration_seconds_without_audio",
                "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"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_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.24",
                "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.24",
                "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": "google/veo-3.1-lite",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_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.16",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.16",
            "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_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio_720p",
            "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.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio",
            "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.06",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio_720p",
            "label": "Estimated output video second",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "per output video second",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_video_second"
          },
          {
            "amount": "0.24",
            "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.24",
            "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": "google/veo-3.1-lite",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "1e66927240e806821f8088e4b0ef0a74679a63d88309d2becaff66e181170a17",
    "input_html_sha256": "66b52216f17e52b29f442f1f9f322f82e8c2aa273c9f49310a0ce246592543fc",
    "private_audit_sha256": "38019bd1c89291edb12e482ae1c9babfbcf67db12fd1920c237ab309a6d7d46d",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/sv/google-veo-3-1-lite/",
    "description": "Veo 3.1 Lite genererar video med inbyggt ljud från en textbeskrivning eller en startbild. Det dokumenterade Lite-flödet producerar ett klipp, med längder på 4, 6 eller 8 sekunder, liggande eller stående bildutsnitt och specifika begränsningar som skiljer sig från Veo 3.1 och Fast.",
    "locale": "sv",
    "md_url": "https://ailoot.ai/models/sv/google-veo-3-1-lite/index.md",
    "title": "Google: Veo 3.1 Lite — Ailoot",
    "url": "https://ailoot.ai/models/sv/google-veo-3-1-lite/"
  },
  "rawModel": {
    "about": "Veo 3.1 Lite är Googles Lite-medlem i videogenereringsserien Veo 3. Den syntetiserar en video med ljud från en beskrivning på naturligt språk eller en indatabild. Utdata är ett genererat klipp, inte en textanalys av en befintlig inspelning. Tillverkarens modellkort för Lite hänvisar till Veo 3 för underliggande arkitektur, träningsmaterial och kända begränsningar, medan den Lite-specifika dokumentationen definierar egna genereringsfunktioner och gränser.\n\nDen refererade arkitekturen använder latent diffusion över temporala ljudrepresentationer och rumstidsliga videorepresentationer. Basmodellen tränades på ljud, video och bilder, med bildtexter på olika detaljnivåer samt filtrerat och deduplicerat träningsmaterial. Detta förklarar syftet att generera bild och ljud gemensamt. Det avslöjar inget Lite-specifikt parameterantal och fastställer inte att varje genererad rörelse följer fysisk verklighet. För en praktisk scen bestämmer du synlig handling och motsvarande ljud tillsammans.\n\nDen specifika Lite-dokumentationen anger en textindatagräns på 1 024 token och en utdatavideo. Lite-kolumnen i genereringsguiden listar längder på 4, 6 och 8 sekunder, med 720p som standard och 1080p som kräver ett klipp på 8 sekunder. Liggande 16:9 är standardförhållandet och stående 9:16 listas också; utdata dokumenteras med 24 bilder per sekund. Inbyggt ljud är alltid aktiverat i det flödet. Dessa värden hör till tillverkarens namngivna Lite-flöde, inte till en orelaterad Veo-utgåva eller ett separat uppmätt applikationssvar.\n\nLite stöder inte 4K-utdata eller videoförlängning. Parametertabellen markerar även funktionen referenceImages för flera referenser och videoindata för förlängning som otillgängliga i Lite-kolumnen. En startbild kan fastställa första bildrutan; tabellen listar en lastFrame-bild tillsammans med startbilden för en övergång. Håll denna bildrutekontroll åtskild från att blanda flera stil- eller motivreferenser. Tillverkarens inställningar för persongenerering är lägesspecifika: Lite-tabellen listar allow_all för text-till-video och allow_adult för bild-till-video och interpolering, medan regionala regler kan begränsa den dokumenterade profilen ytterligare. Välj en startbild som motsvarar den första scen du faktiskt vill ha, med motiv, bildutsnitt och synliga detaljer förberedda innan du begär rörelse.\n\nFör text-till-video beskriver du motivet, dess handling, miljön och avsedd stil. Lägg till kameraposition och rörelse, bildutsnitt, fokus och ljus när de spelar roll. En egen produktscen kan hålla föremålet centrerat medan kameran närmar sig en materialdetalj och omgivande ljus ändras mjukt. Ange starttillståndet, huvudhandlingen och slutögonblicket så att det korta klippet fullföljer en sammanhängande idé. En lång samling orelaterade handlingar är en annan uppgift än en fokuserad tagning.\n\nFör bild-till-video anger du en tydlig startbildruta och förklarar vad som ska röra sig och vad som ska förbli stabilt. Ange motivets rörelse och eventuell kamerarörelse separat. Om du använder en slutbild som begränsning förbereder du en förenlig slutkomposition och beskriver övergången mellan dem. Granska resultatet i stället för att anta att begärd identitet, position eller form förblir identisk genom hela klippet. Det refererade modellkortet identifierar fullständig konsekvens i komplexa scener och komplex rörelse som en fortsatt utmaning.\n\nPromptguiden stöder uttryckliga signaler för dialog, ljudeffekter och atmosfär. Sätt exakt tal inom citattecken, identifiera talaren och beskriv ljud i relation till den synliga handlingen. En ljudeffekt och bakgrundsatmosfär ska inte förväxlas med en talad replik. Engelska dokumenteras som fullt stödd för promptskrivning, medan andra språk inte har utvärderats i den guiden. Granska hörbara ord, tajmning och ljudkvalitet som delar av samma leverans som videon i stället för att behandla ljudet som en garanterat trogen uppläsning av prompten.\n\nTillverkarflödet är asynkront: en genereringsförfrågan returnerar en operation och det färdiga resultatet hämtas när dess status rapporterar att den är klar. Behåll operationsidentiteten och granska det returnerade klippet. Guiden beskriver två dagars lagring hos tillverkaren och SynthID-märkning, så ett sparat material bör omfatta det nedladdade resultatet, prompten, källbilderna och valda inställningar. Ett seed kan förbättra upprepbarheten men garanterar inte determinism. Kontrollera motivkontinuitet, handling, bildutsnitt, ljud och scenens avsedda ändpunkt innan klippet används i en redigering; avslutad bearbetning bevisar inte ensamt att de kreativa kraven uppfylldes.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "available": null,
    "canonical_model": "google/veo-3.1-lite",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.24",
            "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.24",
            "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": "0cef71ecc22628ae52e06dd5",
        "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": "ljud: with_audio"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.16",
                "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": "ljud: without_audio"
            },
            "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": "ljud: with_audio; upplösning: 720p"
            },
            "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": "ljud: without_audio; upplösning: 720p"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.06",
                "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": "google/veo-3.1-lite",
    "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": "Completeddata[] contains all owned signedcontentURLs. FetcheachactualURL,orusecontent?index=actualindex. Failedoriginaljobs maycarrycharge_pending_check; do not recreate.",
            "errors": [
              {
                "code": null,
                "condition": "Ogiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde",
                "http_status": 400,
                "recovery": "Korrigera de angivna fälten före en ny begäran om att skapa.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det ursprungliga resultatinnehållet är ännu inte tillgängligt",
                "http_status": 409,
                "recovery": "Kontrollera det ursprungliga returnerade ID:t och följ Retry-After.",
                "type": "video_not_ready"
              },
              {
                "code": null,
                "condition": "Det returnerade svaret anger att operationen eller resultatet behöver kontrolleras",
                "http_status": null,
                "recovery": "Spara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen.",
                "type": "server_error"
              },
              {
                "absent_fields": [
                  "status",
                  "object",
                  "model",
                  "data"
                ],
                "code": "result_pending_check",
                "condition": "GET av ursprunglig status/innehåll: uppgiften är inte publicerad, det ursprungliga jobbet har inte misslyckats, avbrutits eller löpt ut, och det lokala tillståndet är unknown eller det ursprungliga jobbets status är completed.",
                "friendly_fields": "error.reason=result_pending_check,error.param=null; error.operation_id and error.request_id when the existing context supplies them. error.message is rewritten/localized.",
                "headers": {
                  "Retry-After": null,
                  "X-Should-Retry": "false"
                },
                "http_status": 503,
                "recovery": "Behåll ursprungliga id och operation_id (samma offentliga video-ID), svar och svarshuvuden; läs endast ursprunglig status/innehåll. Skicka aldrig en ny genereringsbegäran.",
                "response_fields": {
                  "charge_pending_check": true,
                  "error.code": "result_pending_check",
                  "error.type": "server_error",
                  "id": "original public video ID",
                  "operation_id": "same as id"
                },
                "type": "server_error"
              },
              {
                "code": null,
                "condition": "Ett angivet frame_images-objekt eller dess villkorliga profil kan inte tolkas, eller den fullständigt tolkade profilen saknar ett färdigt exakt priskort.",
                "http_status": 422,
                "message": "The complete video request cannot be priced",
                "recovery": "Behåll model, prompt, duration, resolution, aspect_ratio och generate_audio. Lägg till frame_images som innehåller exakt en first_frame-post i det angivna objektformatet. Sätt duration=4, resolution=\"720p\", aspect_ratio=\"16:9\" och generate_audio=false. Denna validering körs innan begäran skickas.",
                "type": "price_unavailable"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "content": [
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default0"
                  }
                },
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/generations/{request_id}/content"
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
              "mode": "submit_once_poll_original",
              "multioutputs": "retain every completed data output; index0 alone is not all outputs",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 202,
              "unknown": "Läs det befintliga ursprungliga jobbet; skicka aldrig en oklar sändning igen.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_video",
                "required": [
                  "prompt"
                ]
              },
              {
                "conditions": "The required fields are model, prompt, duration, resolution, aspect_ratio and generate_audio. For image_to_video, also provide frame_images and use duration=4, resolution=\"720p\", aspect_ratio=\"16:9\" and generate_audio=false.",
                "content_type": "application/json",
                "mode": "image_to_video",
                "required": [
                  "prompt",
                  "frame_images"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "Use actual returned task_id or original public video id from response/media library. On HTTP503 result_pending_check from original video status/content GET, operation_id equals that original public video id. Do not assume unrelated operation IDs name media tasks.",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_video",
              "image_to_video"
            ],
            "outputs": {
              "all_results": "Färdigt data[] innehåller alla signerade URL till innehåll som du äger. Hämta varje returnerad URL eller använd innehållsändpunkten med index satt till ett faktiskt utdataindex. Ett misslyckat ursprungligt jobb kan returnera charge_pending_check; kontrollera det ursprungliga jobbet i stället för att skapa det igen. Ett giltigt AAC-ljudspår kan finnas även med generate_audio=false; behåll hela den ursprungliga MP4-filen inklusive ljudet.",
              "create_status": 202,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": "signed content URL"
                },
                {
                  "description": null,
                  "name": "charge_pending_check",
                  "type": "boolean"
                },
                {
                  "description": null,
                  "name": "error.code",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "error.message",
                  "type": "string"
                },
                {
                  "description": "HTTP503 result_pending_check i det ursprungliga status- eller innehållssvaret: samma ursprungliga offentliga video-ID som id.",
                  "name": "operation_id",
                  "type": "string"
                },
                {
                  "description": "server_error vid HTTP503 result_pending_check.",
                  "name": "error.type",
                  "type": "string"
                }
              ],
              "format": "mp4",
              "maximum_outputs": 4,
              "status_enum": [
                "in_progress",
                "completed",
                "failed"
              ]
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/veo-3.1-lite"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_bytes": 10000,
                "maximum_length": null,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string",
                "unit": "UTF8-byte"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  6,
                  8
                ],
                "enum_known": true,
                "name": "duration",
                "required": true,
                "type": "integer",
                "unit": "sekunder"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Utelämna för text_to_video. Om fältet anges: exakt en post {\"type\":\"image_url\",\"image_url\":{\"url\":\"<faktisk HTTPS URL>\"},\"frame_type\":\"first_frame\"}; posten har exakt type,image_url,frame_type; image_url har exakt url. Inga extra eller dubblerade nycklar. Endast duration=4,resolution=\"720p\",aspect_ratio=\"16:9\",generate_audio=false. URL måste kunna tolkas med schemat https, ett icke-tomt värdnamn, utan userinfo och utan ett bokstavligt #; signerad frågesträng och kodad sökväg bevaras. Källkoden kontrollerar varken indatans MIME, filstorlek eller pixeldimensioner.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "frame_images",
                "required": false,
                "type": "array"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "Every field outside the original six required fields plus optional frame_images; last_frame, reference frames, multiple frames, non-HTTPS URLs, URL userinfo, URL fragments and other first-frame profiles are rejected."
            ]
          },
          "hints": [
            "Skapa en gång och spara returnerat ID.",
            "Kontrollera den ursprungliga statusen; behåll varje färdig tillgång och dess längd."
          ],
          "input": {
            "aspect_ratio": [
              "16:9",
              "9:16"
            ],
            "content_type": "application/json",
            "duration": [
              4,
              6,
              8
            ],
            "generate_audio": [
              false
            ],
            "material_types": [
              "text",
              "image"
            ],
            "other_options": false,
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/veo-3.1-lite"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_bytes": 10000,
                "maximum_length": null,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string",
                "unit": "UTF8-byte"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  6,
                  8
                ],
                "enum_known": true,
                "name": "duration",
                "required": true,
                "type": "integer",
                "unit": "sekunder"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Utelämna för text_to_video. Om fältet anges: exakt en post {\"type\":\"image_url\",\"image_url\":{\"url\":\"<faktisk HTTPS URL>\"},\"frame_type\":\"first_frame\"}; posten har exakt type,image_url,frame_type; image_url har exakt url. Inga extra eller dubblerade nycklar. Endast duration=4,resolution=\"720p\",aspect_ratio=\"16:9\",generate_audio=false. URL måste kunna tolkas med schemat https, ett icke-tomt värdnamn, utan userinfo och utan ett bokstavligt #; signerad frågesträng och kodad sökväg bevaras. Källkoden kontrollerar varken indatans MIME, filstorlek eller pixeldimensioner.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "frame_images",
                "required": false,
                "type": "array"
              }
            ],
            "prompt_max_bytes": 10000,
            "required": [
              "model",
              "prompt",
              "duration",
              "resolution",
              "aspect_ratio",
              "generate_audio"
            ],
            "resolution": [
              "720p"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content"
              }
            ],
            "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
            "mode": "submit_once_poll_original",
            "multioutputs": "retain every completed data output; index0 alone is not all outputs",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 202,
            "unknown": "Read existing original job; never resubmit unknown send."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations",
            "/videos",
            "/videos/generations"
          ],
          "operation_modes": [
            "text_to_video",
            "image_to_video"
          ],
          "output": {
            "family": "video",
            "format": "mp4",
            "max_outputs": 4,
            "result": "all actual owned validated complete MP4 outputs"
          }
        },
        "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": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "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": "ljud: with_audio; upplösning: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Videopris",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_720p",
                "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": "audio: without_audio",
              "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": "duration_seconds_without_audio",
                "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"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_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.24",
                "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.24",
                "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'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/veo-3.1-lite\", \"prompt\": \"A cat in a spacesuit walking on the Moon\", \"duration\": 4, \"resolution\": \"720p\", \"aspect_ratio\": \"16:9\", \"generate_audio\": false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/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\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_IMAGE_URL:?Set the actual HTTPS URL of your first-frame image}\"\nexport AILOOT_IMAGE_URL\npython3 - <<'PY_REQUEST'\nimport json,os,re\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nimage=os.environ[\"AILOOT_IMAGE_URL\"]\ntry:\n    parsed=urlsplit(image)\n    valid=(image.startswith(\"https://\") and parsed.scheme==\"https\" and bool(parsed.hostname)\n           and parsed.username is None and parsed.password is None and \"#\" not in image\n           and not any(ord(c)<32 or ord(c)==127 for c in image)\n           and re.search(r\"%(?![0-9A-Fa-f]{2})\",image) is None)\nexcept ValueError:\n    valid=False\nif not valid:\n    raise SystemExit(\"Use your actual HTTPS image URL with a hostname, no userinfo and no fragment\")\np={\"model\":\"google/veo-3.1-lite\",\"prompt\":\"The subject makes a slow, natural movement. Keep the opening composition.\",\"duration\":4,\"resolution\":\"720p\",\"aspect_ratio\":\"16:9\",\"generate_audio\":False,\"frame_images\":[{\"type\":\"image_url\",\"image_url\":{\"url\":image},\"frame_type\":\"first_frame\"}]}\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False),encoding=\"utf-8\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(\"Keep the complete JSON, headers and original returned id. Use the existing GET status tab for that original operation, then save every completed owned output. Never resubmit an unknown generation.\")\nPY_RESULT\n",
            "label": "curl · animate your first frame",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}\"\nexport AILOOT_OPERATION_ID\noperation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_OPERATION_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/videos/$operation_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o status.json\npython3 - <<'PY_STATUS'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"status.json\").read_text())\nprint(json.dumps(r))\nif r.get(\"status\")==\"completed\":\n    for x in r.get(\"data\",[]):print(x)\nPY_STATUS\n",
            "label": "GET status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}\"\nexport AILOOT_OPERATION_ID\noperation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_OPERATION_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/videos/$operation_id/content\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o video.mp4\n",
            "label": "GET content",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    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 Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and save returned ID.",
          "Poll original status; retain every completed asset and duration."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations",
          "/videos",
          "/videos/generations"
        ],
        "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": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.16",
                "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": "audio: with_audio; resolution: 720p",
              "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": "duration_seconds_with_audio_720p",
                "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": "audio: without_audio",
              "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": "duration_seconds_without_audio",
                "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"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_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.24",
                "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.24",
                "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": "google/veo-3.1-lite",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_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.16",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.16",
            "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_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio_720p",
            "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.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio",
            "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.06",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio_720p",
            "label": "Estimated output video second",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "per output video second",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_video_second"
          },
          {
            "amount": "0.24",
            "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.24",
            "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": "google/veo-3.1-lite",
        "request_model_id": "google/veo-3.1-lite",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Veo 3.1 Lite",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.24,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.24,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "audio": true,
          "native_model_id": "veo-3.1-lite-generate-preview",
          "resolution": "720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.10",
            "amount_unit": "usd_per_output_second",
            "conditions": {
              "audio": true,
              "native_model_id": "veo-3.1-lite-generate-preview",
              "resolution": "720p"
            },
            "key": "output_video_audio",
            "label": "output video audio",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "audio": true,
          "native_model_id": "veo-3.1-lite-generate-preview",
          "resolution": "1080p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_second",
            "conditions": {
              "audio": true,
              "native_model_id": "veo-3.1-lite-generate-preview",
              "resolution": "1080p"
            },
            "key": "output_video_audio",
            "label": "output video audio",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "audio=true Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.16",
            "key": "duration_seconds_with_audio",
            "label": "output second",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.10",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "audio=false Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.10",
            "key": "duration_seconds_without_audio",
            "label": "output second",
            "native_amount_usd_per_unit": "0.10",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.10",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=720p · audio=true Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.10",
            "key": "duration_seconds_with_audio_720p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.10",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.06",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=720p · audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.06",
            "key": "duration_seconds_without_audio_720p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          }
        ]
      }
    ],
    "public_id": "google/veo-3.1-lite",
    "short": "Veo 3.1 Lite genererar video med inbyggt ljud från en textbeskrivning eller en startbild. Det dokumenterade Lite-flödet producerar ett klipp, med längder på 4, 6 eller 8 sekunder, liggande eller stående bildutsnitt och specifika begränsningar som skiljer sig från Veo 3.1 och Fast."
  },
  "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": "Veo 3.1 Lite genererar video med inbyggt ljud från en textbeskrivning eller en startbild. Det dokumenterade Lite-flödet producerar ett klipp, med längder på 4, 6 eller 8 sekunder, liggande eller stående bildutsnitt och specifika begränsningar som skiljer sig från Veo 3.1 och Fast.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "e51a5b02e3b2a0ba9405839e75b00c6d5ea8511f06702cb08aadc9ea756cbbe7",
    "renderer_sha256": "8a45bb31b83d2551e6d975cf4683518c7cb445a54b9394a01947f4dd103f1051"
  },
  "sourceRevision": "1d4144cc8be81333643c4692a0514197c5773afd9fe142d18518601300fb96d4"
}
