{
  "aboutHtml": "<p>Vidu Q2 crea video da una scena scritta tramite il profilo di generazione video da testo selezionato con viduq2. Gli ingressi obbligatori sono l’identificatore esatto del modello e un prompt che descrive la scena. Usatelo per un breve concetto di prodotto, una veduta d’insieme o un’azione di un personaggio il cui aspetto e movimento siano specificabili a parole. Questo metodo configurato genera video da testo; la sua descrizione non assegna al selettore una modalità separata con immagine di riferimento o di modifica video.</p><p>Costruite la richiesta intorno a una sequenza visibile. Identificate soggetto, luogo, azione, ampiezza dell’inquadratura, movimento della camera e composizione finale. Per un concetto di prodotto, descrivete un oggetto su un tavolo, la luce che si sposta sul materiale e un lento avvicinamento della camera che termina su un dettaglio riconoscibile. Per una scena di un luogo, presentate l’ambiente prima di avvicinarvi al punto focale. Mantenete l’azione adeguata alla durata scelta della clip, affinché la scena abbia spazio per il finale desiderato.</p><p>Il limite del prompt è di 2 000 caratteri. Mettete prima il soggetto e l’azione essenziali, poi aggiungete i dettagli di illuminazione, materiale, ambiente e camera che cambiano il risultato desiderato. Specificate lo stile visivo nel prompt. La guida specifica di Q2 afferma che i parametri separati style e movement_amplitude non hanno effetto per questo modello, quindi le impostazioni predefinite general o anime e le opzioni di ampiezza del movimento non sostituiscono una descrizione chiara della scena.</p><p>L’impostazione di durata specifica del modello accetta secondi interi da uno a dieci. Le scelte di risoluzione specifiche di Q2 sono 540p, 720p e 1080p, con 720p come valore predefinito documentato. Scegliete insieme durata e risoluzione in base all’azione e alla destinazione. Una breve presentazione e un movimento più lungo richiedono tempi diversi; aumentare la durata richiesta deve servire la sequenza visibile, non semplicemente allungare una descrizione invariata. Esaminate le dimensioni e la durata effettive della clip restituita quando preparate il posizionamento finale.</p><p>Le scelte documentate di aspect_ratio sono 16:9, 9:16, 3:4, 4:3 e 1:1, con 16:9 come valore predefinito. La guida include esplicitamente 3:4 e 4:3 per la famiglia Q2. Scegliete il formato prima della generazione e descrivete una composizione adatta: mantenete leggibile il soggetto principale in una vista verticale oppure usate la larghezza di un’inquadratura orizzontale per l’ambiente circostante. Lasciate la vista finale abbastanza chiara per la pagina, la presentazione o il successivo inserimento di didascalie previsti.</p><p>Il campo seed controlla la variazione. Ometterlo o fornire 0 seleziona un valore casuale; un valore diverso da zero seleziona l’opzione documentata di seed fisso per una generazione ripetibile. Preservate il seed restituito insieme al prompt e alle impostazioni quando confrontate le versioni. L’operazione condivisa documenta anche i controlli audio e off_peak specificamente per i modelli Q3. Queste opzioni Q3 non sono capacità assegnate a questo profilo Q2; pianificate la richiesta in base al suo ingresso testuale e alla sua uscita video documentati.</p><p>La generazione è asincrona. L’invio restituisce task_id e uno stato iniziale, con created usato per un’attività appena creata. Conservate l’identità dell’attività mentre seguite l’elaborazione. La consultazione documentata del risultato usa state=success per un risultato riuscito e restituisce un array creations. Ogni elemento ha l’URL del video in creations[].url; salvate tutti i video restituiti anziché presumere che l’attività contenga sempre esattamente una creazione.</p><p>La documentazione del risultato riporta anche durata, fps e larghezza e altezza della risoluzione del video effettivo. Conservate questi valori riportati con la clip completata anziché trattare la frequenza dei fotogrammi o le dimensioni di un esempio come una specifica fissa di Q2. La risposta di creazione dell’attività include un valore credits insieme alla configurazione della richiesta. Conservate questi metadati riportati dell’attività e l’identità dell’attività completata insieme al risultato, affinché ogni video resti collegato alle proprie impostazioni di generazione.</p><p>Verificate l’intera sequenza rispetto alla richiesta originale: aspetto del soggetto, forma dell’oggetto, direzione del movimento, continuità della camera e vista finale desiderata. Per una revisione, identificate il dettaglio concreto che non rispetta la richiesta e preservate le parti riuscite della scena. Tenete insieme il prompt, il selettore esatto, le impostazioni, l’identità dell’attività e i video completati, affinché un confronto successivo si basi sugli artefatti reali.</p>",
  "aboutText": "Vidu Q2 crea video da una scena scritta tramite il profilo di generazione video da testo selezionato con viduq2. Gli ingressi obbligatori sono l’identificatore esatto del modello e un prompt che descrive la scena. Usatelo per un breve concetto di prodotto, una veduta d’insieme o un’azione di un personaggio il cui aspetto e movimento siano specificabili a parole. Questo metodo configurato genera video da testo; la sua descrizione non assegna al selettore una modalità separata con immagine di riferimento o di modifica video.\n\nCostruite la richiesta intorno a una sequenza visibile. Identificate soggetto, luogo, azione, ampiezza dell’inquadratura, movimento della camera e composizione finale. Per un concetto di prodotto, descrivete un oggetto su un tavolo, la luce che si sposta sul materiale e un lento avvicinamento della camera che termina su un dettaglio riconoscibile. Per una scena di un luogo, presentate l’ambiente prima di avvicinarvi al punto focale. Mantenete l’azione adeguata alla durata scelta della clip, affinché la scena abbia spazio per il finale desiderato.\n\nIl limite del prompt è di 2 000 caratteri. Mettete prima il soggetto e l’azione essenziali, poi aggiungete i dettagli di illuminazione, materiale, ambiente e camera che cambiano il risultato desiderato. Specificate lo stile visivo nel prompt. La guida specifica di Q2 afferma che i parametri separati style e movement_amplitude non hanno effetto per questo modello, quindi le impostazioni predefinite general o anime e le opzioni di ampiezza del movimento non sostituiscono una descrizione chiara della scena.\n\nL’impostazione di durata specifica del modello accetta secondi interi da uno a dieci. Le scelte di risoluzione specifiche di Q2 sono 540p, 720p e 1080p, con 720p come valore predefinito documentato. Scegliete insieme durata e risoluzione in base all’azione e alla destinazione. Una breve presentazione e un movimento più lungo richiedono tempi diversi; aumentare la durata richiesta deve servire la sequenza visibile, non semplicemente allungare una descrizione invariata. Esaminate le dimensioni e la durata effettive della clip restituita quando preparate il posizionamento finale.\n\nLe scelte documentate di aspect_ratio sono 16:9, 9:16, 3:4, 4:3 e 1:1, con 16:9 come valore predefinito. La guida include esplicitamente 3:4 e 4:3 per la famiglia Q2. Scegliete il formato prima della generazione e descrivete una composizione adatta: mantenete leggibile il soggetto principale in una vista verticale oppure usate la larghezza di un’inquadratura orizzontale per l’ambiente circostante. Lasciate la vista finale abbastanza chiara per la pagina, la presentazione o il successivo inserimento di didascalie previsti.\n\nIl campo seed controlla la variazione. Ometterlo o fornire 0 seleziona un valore casuale; un valore diverso da zero seleziona l’opzione documentata di seed fisso per una generazione ripetibile. Preservate il seed restituito insieme al prompt e alle impostazioni quando confrontate le versioni. L’operazione condivisa documenta anche i controlli audio e off_peak specificamente per i modelli Q3. Queste opzioni Q3 non sono capacità assegnate a questo profilo Q2; pianificate la richiesta in base al suo ingresso testuale e alla sua uscita video documentati.\n\nLa generazione è asincrona. L’invio restituisce task_id e uno stato iniziale, con created usato per un’attività appena creata. Conservate l’identità dell’attività mentre seguite l’elaborazione. La consultazione documentata del risultato usa state=success per un risultato riuscito e restituisce un array creations. Ogni elemento ha l’URL del video in creations[].url; salvate tutti i video restituiti anziché presumere che l’attività contenga sempre esattamente una creazione.\n\nLa documentazione del risultato riporta anche durata, fps e larghezza e altezza della risoluzione del video effettivo. Conservate questi valori riportati con la clip completata anziché trattare la frequenza dei fotogrammi o le dimensioni di un esempio come una specifica fissa di Q2. La risposta di creazione dell’attività include un valore credits insieme alla configurazione della richiesta. Conservate questi metadati riportati dell’attività e l’identità dell’attività completata insieme al risultato, affinché ogni video resti collegato alle proprie impostazioni di generazione.\n\nVerificate l’intera sequenza rispetto alla richiesta originale: aspetto del soggetto, forma dell’oggetto, direzione del movimento, continuità della camera e vista finale desiderata. Per una revisione, identificate il dettaglio concreto che non rispetta la richiesta e preservate le parti riuscite della scena. Tenete insieme il prompt, il selettore esatto, le impostazioni, l’identità dell’attività e i video completati, affinché un confronto successivo si basi sugli artefatti reali.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "322cb397562b8fb802ba5cb9e4cfd8cf83b19038dbef1d7803155dea5e5ea047",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "it",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Vidu: Q2 Text-to-Video</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Chiudi\">×</button></div><div class=\"idline\"><span>Vidu /</span><code>viduq2</code><button type=\"button\" id=\"copy-id\">Copia ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sezioni della scheda del modello\"><button type=\"button\" data-card-jump=\"overview\">Introduzione</button><button type=\"button\" data-card-jump=\"methods\">Input e metodi</button><button type=\"button\" data-card-jump=\"pricing\">Tariffe</button><button type=\"button\" data-card-jump=\"examples\">Esempi</button><button type=\"button\" data-card-jump=\"results\">Risultati</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metodi API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|viduq2\">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\">Introduzione</h3><p class=\"mdesc-full\">Vidu Q2 crea video da una descrizione testuale della scena, con durata di 1–10 secondi, uscita 540p, 720p o 1080p e cinque rapporti d’aspetto. Questo specifico profilo viduq2 usa il prompt per stile e movimento e restituisce il risultato tramite un’attività asincrona.</p><dl class=\"card-io\" data-card-io><div><dt>Input accettati</dt><dd>Testo</dd></div><div><dt>Risultati</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Informazioni sul modello</summary><p class=\"note-s\" data-model-method-boundary>Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.</p><div class=\"mabout\" id=\"m-about\"><p>Vidu Q2 crea video da una scena scritta tramite il profilo di generazione video da testo selezionato con viduq2. Gli ingressi obbligatori sono l’identificatore esatto del modello e un prompt che descrive la scena. Usatelo per un breve concetto di prodotto, una veduta d’insieme o un’azione di un personaggio il cui aspetto e movimento siano specificabili a parole. Questo metodo configurato genera video da testo; la sua descrizione non assegna al selettore una modalità separata con immagine di riferimento o di modifica video.</p><p>Costruite la richiesta intorno a una sequenza visibile. Identificate soggetto, luogo, azione, ampiezza dell’inquadratura, movimento della camera e composizione finale. Per un concetto di prodotto, descrivete un oggetto su un tavolo, la luce che si sposta sul materiale e un lento avvicinamento della camera che termina su un dettaglio riconoscibile. Per una scena di un luogo, presentate l’ambiente prima di avvicinarvi al punto focale. Mantenete l’azione adeguata alla durata scelta della clip, affinché la scena abbia spazio per il finale desiderato.</p><p>Il limite del prompt è di 2 000 caratteri. Mettete prima il soggetto e l’azione essenziali, poi aggiungete i dettagli di illuminazione, materiale, ambiente e camera che cambiano il risultato desiderato. Specificate lo stile visivo nel prompt. La guida specifica di Q2 afferma che i parametri separati style e movement_amplitude non hanno effetto per questo modello, quindi le impostazioni predefinite general o anime e le opzioni di ampiezza del movimento non sostituiscono una descrizione chiara della scena.</p><p>L’impostazione di durata specifica del modello accetta secondi interi da uno a dieci. Le scelte di risoluzione specifiche di Q2 sono 540p, 720p e 1080p, con 720p come valore predefinito documentato. Scegliete insieme durata e risoluzione in base all’azione e alla destinazione. Una breve presentazione e un movimento più lungo richiedono tempi diversi; aumentare la durata richiesta deve servire la sequenza visibile, non semplicemente allungare una descrizione invariata. Esaminate le dimensioni e la durata effettive della clip restituita quando preparate il posizionamento finale.</p><p>Le scelte documentate di aspect_ratio sono 16:9, 9:16, 3:4, 4:3 e 1:1, con 16:9 come valore predefinito. La guida include esplicitamente 3:4 e 4:3 per la famiglia Q2. Scegliete il formato prima della generazione e descrivete una composizione adatta: mantenete leggibile il soggetto principale in una vista verticale oppure usate la larghezza di un’inquadratura orizzontale per l’ambiente circostante. Lasciate la vista finale abbastanza chiara per la pagina, la presentazione o il successivo inserimento di didascalie previsti.</p><p>Il campo seed controlla la variazione. Ometterlo o fornire 0 seleziona un valore casuale; un valore diverso da zero seleziona l’opzione documentata di seed fisso per una generazione ripetibile. Preservate il seed restituito insieme al prompt e alle impostazioni quando confrontate le versioni. L’operazione condivisa documenta anche i controlli audio e off_peak specificamente per i modelli Q3. Queste opzioni Q3 non sono capacità assegnate a questo profilo Q2; pianificate la richiesta in base al suo ingresso testuale e alla sua uscita video documentati.</p><p>La generazione è asincrona. L’invio restituisce task_id e uno stato iniziale, con created usato per un’attività appena creata. Conservate l’identità dell’attività mentre seguite l’elaborazione. La consultazione documentata del risultato usa state=success per un risultato riuscito e restituisce un array creations. Ogni elemento ha l’URL del video in creations[].url; salvate tutti i video restituiti anziché presumere che l’attività contenga sempre esattamente una creazione.</p><p>La documentazione del risultato riporta anche durata, fps e larghezza e altezza della risoluzione del video effettivo. Conservate questi valori riportati con la clip completata anziché trattare la frequenza dei fotogrammi o le dimensioni di un esempio come una specifica fissa di Q2. La risposta di creazione dell’attività include un valore credits insieme alla configurazione della richiesta. Conservate questi metadati riportati dell’attività e l’identità dell’attività completata insieme al risultato, affinché ogni video resti collegato alle proprie impostazioni di generazione.</p><p>Verificate l’intera sequenza rispetto alla richiesta originale: aspetto del soggetto, forma dell’oggetto, direzione del movimento, continuità della camera e vista finale desiderata. Per una revisione, identificate il dettaglio concreto che non rispetta la richiesta e preservate le parti riuscite della scena. Tenete insieme il prompt, il selettore esatto, le impostazioni, l’identità dell’attività e i video completati, affinché un confronto successivo si basi sugli artefatti reali.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponibile in Ailoot · input e metodi</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Generazione video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Tipi di input</dt><dd><code>text</code></dd></div><div><dt>Tipi di output</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valori e limiti</th><th>Predefinito</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>viduq2</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Condizioni: Descrivi la scena da generare. Il limite documentato è di 2000 caratteri; Ailoot verifica che la stringa non sia vuota e conserva il testo.</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>integer</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Minimo: 1</div><div>Massimo: 10</div><div>Condizioni: La descrizione specifica di viduq2 indica 1–10 secondi interi. Non è documentata una durata predefinita specifica del modello.</div><div>Unità: secondi</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Condizioni: Ometti oppure invia la stringa &quot;0&quot; per la casualità. Un seed non nullo fornito seleziona il comportamento documentato con seed fisso; non è specificato alcun intervallo numerico.</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>16:9, 9:16, 3:4, 4:3, 1:1</div></td><td data-cell-label=\"Predefinito\" data-default=\"known\"><span class=\"card-cell-label\">Predefinito</span>16:9</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>540p, 720p, 1080p</div><div>Condizioni: L&#39;elenco specifico di viduq2 documenta queste fasce per 1–10 secondi. Un&#39;enumerazione e una tabella condivise menzionano anche 360p; la sua applicabilità contraddice quell&#39;elenco e non viene dichiarata qui.</div></td><td data-cell-label=\"Predefinito\" data-default=\"known\"><span class=\"card-cell-label\">Predefinito</span>720p</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">style</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>general, anime</div><div>Condizioni: La richiesta condivisa accetta questo campo, ma la documentazione specifica esplicitamente che non ha effetto per viduq2.</div></td><td data-cell-label=\"Predefinito\" data-default=\"known\"><span class=\"card-cell-label\">Predefinito</span>general</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">movement_amplitude</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>auto, small, medium, large</div><div>Condizioni: La richiesta condivisa accetta questo campo, ma la documentazione specifica esplicitamente che non ha effetto per i modelli q2.</div></td><td data-cell-label=\"Predefinito\" data-default=\"known\"><span class=\"card-cell-label\">Predefinito</span>auto</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinazioni di materiali in input</summary><p class=\"note-s\"><b></b></p></details><details class=\"note-s\" data-method-contract><summary>Parametri e ciclo di vita del metodo</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametro</th><th>Contratto</th></tr></thead><tbody><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>content_type</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>application/json</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>required</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>model, prompt</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>optional</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>duration, seed, aspect_ratio, resolution, style, movement_amplitude</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>material_types</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>text</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>additional_properties</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>true</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>validation_scope</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>Ailoot convalida le stringhe model/prompt non vuote. I tipi e i limiti facoltativi riportati sotto costituiscono il contratto documentato della richiesta; gli altri campi vengono conservati per il modello selezionato.</td></tr></tbody></table></div><p>Alias del metodo: <code>/v1/videos/generations</code></p><p>Ciclo di vita: <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\">Crea una sola volta e conserva l&#39;id pubblico e polling_url restituiti.</p><p class=\"note-s\">Interroga periodicamente l&#39;operazione originale e leggi state; il completamento richiede success e un risultato creations[].url di tua proprietà.</p><p class=\"note-s\">Scarica ogni URL video restituito di tua proprietà; dall&#39;esempio non dedurre un numero fisso di risultati, una durata o una frequenza dei fotogrammi.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tariffe</h3><div class=\"card-result-process\" data-billing-basis><h5>Calcolo del costo finale</h5><p class=\"note-s\">Le tariffe visualizzate stimano il costo prima della generazione. L&#39;addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell&#39;output e le quantità previste non costituiscono la quantità finale fatturabile.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.</p><dl data-price-conditions><dt>Modalità rapida</dt><dd>Non specificato <span class=\"note-s\">Quando è selezionata la modalità rapida</span></dd><dt>Modalità flex</dt><dd>Non specificato <span class=\"note-s\">Quando è selezionata la modalità flex</span></dd><dt>Sforzo massimo di ragionamento</dt><dd>Non specificato <span class=\"note-s\">Quando lo sforzo massimo di ragionamento usa l&#39;adeguamento predefinito (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tariffe stimate per il confronto</h4><h4>Prezzi per configurazione</h4><p class=\"note-s\">Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configurazione</th><th>Listino delle tariffe</th><th>Quantità prevista</th><th>Costo</th></tr></thead><tbody><tr><th data-cell-label=\"Configurazione\" scope=\"row\"><span class=\"card-cell-label\">Configurazione</span>Tariffe base dei token</th><td data-cell-label=\"Listino delle tariffe\"><span class=\"card-cell-label\">Listino delle tariffe</span>Tariffa base</td><td data-cell-label=\"Quantità prevista\"><span class=\"card-cell-label\">Quantità prevista</span>—</td><td data-cell-label=\"Costo\"><span class=\"card-cell-label\">Costo</span><div><span>Input · Token in input · Stima solo a fini di confronto</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token in output · Stima solo a fini di confronto</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Lettura dalla cache · Stima solo a fini di confronto</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Scrittura nella cache · Stima solo a fini di confronto</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Scrittura nella cache, 1 ora · Stima solo a fini di confronto</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Configurazione\" scope=\"row\"><span class=\"card-cell-label\">Configurazione</span>Costo stimato della generazione</th><td data-cell-label=\"Listino delle tariffe\"><span class=\"card-cell-label\">Listino delle tariffe</span>—</td><td data-cell-label=\"Quantità prevista\"><span class=\"card-cell-label\">Quantità prevista</span>stima per una generazione</td><td data-cell-label=\"Costo\"><span class=\"card-cell-label\">Costo</span><div><span>Output · Costo di generazione stimato · Stima solo a fini di confronto</span> <b>$5.12</b> <span class=\"price-unit\">stima prima della generazione</span></div><p class=\"note-s\">Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. <a href=\"/docs/it/billing/reserve/\">Come funzionano la prenotazione e l’addebito finale →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esempi di richieste</h3><h4>Ailoot Ultra · Generazione video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Varianti di codice\"><button class=\"cg-tab\" id=\"model-code-2782-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · crea un video</button><button class=\"cg-tab\" id=\"model-code-2782-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · leggi il task originale</button><button class=\"cg-tab\" id=\"model-code-2782-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · scarica ogni video di tua proprietà</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copia il codice\"><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-2782-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON_REQUEST&#39;\n{&quot;model&quot;:&quot;viduq2&quot;,&quot;prompt&quot;:&quot;In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.&quot;}\nJSON_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-2782-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_POLL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(&quot;result.json&quot;).read_text())\ni=r.get(&quot;id&quot;)\nif not isinstance(i,str) or not i:raise SystemExit(&quot;Keep original response/headers/id; do not resubmit creation.&quot;)\nu=urljoin(&quot;https://api.ailoot.ai&quot;,r.get(&quot;polling_url&quot;) or &quot;/v1/videos/&quot;+quote(i,safe=&quot;&quot;))\np=urlsplit(u)\nif p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/videos/&quot;):raise SystemExit(&quot;Use the actual Ailoot lookup path.&quot;)\nPath(&quot;poll-url.txt&quot;).write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error &quot;$(cat poll-url.txt)&quot; -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2782-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(&quot;status.json&quot;).read_text())\nif r.get(&quot;state&quot;)!=&quot;success&quot;:raise SystemExit(&quot;Poll the same original job until its owned result is returned.&quot;)\ncreations=r.get(&quot;creations&quot;)\nif not isinstance(creations,list) or not creations:raise SystemExit(&quot;No completed video creations.&quot;)\nurls=[]\nfor item in creations:\n    value=item.get(&quot;url&quot;) if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(&quot;No completed video URL.&quot;)\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(&quot;Invalid returned URL.&quot;)\n        p=urlsplit(u)\n        if p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/media/assets/&quot;) or not p.path.endswith(&quot;/content&quot;) or not p.query:raise SystemExit(&quot;Wait for the actual Ailoot-owned signed result.&quot;)\n        urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; -o &quot;video-${index}.bin&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Ricevi e salva i risultati</h3><h4>Ailoot Ultra · Generazione video</h4><p class=\"note-s\">Il JSON conserva lo stato nativo e l&#39;array creations, aggiungendo id/provider_task_id/polling_url pubblici. Gli URL video selezionati sono vuoti prima della pubblicazione e diventano URL firmati di proprietà di Ailoot dopo il completamento.</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><div class=\"card-result-process\" data-all-results><h5>Conserva tutti i risultati completati</h5><p class=\"note-s\">Salva ogni video completato o file restituito; recupera ogni URL di risorsa effettivamente restituito.</p><p class=\"note-s\">Scarica ogni URL effettivamente restituito in creations[].url; un indice del contenuto identifica un risultato reale restituito.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Se occorre verificare la risposta originale</h5><p class=\"note-s\">La dichiarazione fissata non elenca stati finali di errore. Conserva risposta, intestazioni e id originali e verifica quella stessa operazione per qualsiasi stato non riconosciuto o errore result_pending_check; non inviare mai nuovamente una creazione dall&#39;esito sconosciuto.</p></div><details class=\"card-about\" data-output-fields><summary>Campi della risposta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th><th>Significato</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Identificatore pubblico dell&#39;attività o dell&#39;operazione Ailoot restituito.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Identificatore dell&#39;attività originale, distinto dall&#39;id pubblico.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Percorso di consultazione Ailoot restituito per l&#39;attività originale.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Identificatore originale presente nella risposta di creazione.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Stato nativo dell&#39;attività: created per lo stato in attesa fissato e success per il completamento.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">err_code</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Diagnostica dell&#39;attività; la specifica salvata non dichiara un elenco enumerato di codici di errore.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">creations[].url</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string|string[]</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Ogni URL video completato selezionato viene sostituito con un URL firmato di proprietà di Ailoot.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">creations[].video.duration</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>number when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Durata del video restituita; verifica il risultato effettivo completato.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">creations[].video.fps</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Frequenza dei fotogrammi restituita; non viene promessa una frequenza fissa.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">creations[].video.resolution.width</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Larghezza del risultato restituita in pixel.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">creations[].video.resolution.height</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>integer when supplied</td><td data-cell-label=\"Significato\"><span class=\"card-cell-label\">Significato</span>Altezza del risultato restituita in pixel.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errori e passaggi successivi</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Risposta</th><th>Condizione</th><th>Passaggio successivo</th></tr></thead><tbody><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>JSON o modello non valido, stringhe obbligatorie mancanti o vuote oppure indice del contenuto non valido.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>Chiave API Ailoot non valida.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>403 · <code>permission_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>Il gruppo della chiave API non è autorizzato a utilizzare questa rotta multimediale.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>L&#39;attività originale o il risultato richiesto è assente oppure non appartiene allo stesso utente, alla stessa chiave API o allo stesso gruppo.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>502 · <code>result_pending_check</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>L&#39;invio o lo stato originale è incompleto oppure non può essere riconciliato; conserva l&#39;ID originale e non inviare nuovamente la richiesta.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>Il collegamento originale, la rotta o il contenuto multimediale di tua proprietà è ancora in verifica; continua a verificare quell&#39;operazione originale.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>503 · <code>server_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>Il servizio multimediale o l&#39;archivio delle attività originali non è disponibile.</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modello</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></span></p><h4>Alias dei percorsi dei metodi</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>ID di chiamata correlati</h4><p class=\"note-s\"><a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "viduq2",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|viduq2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Le tariffe visualizzate stimano il costo prima della generazione. L'addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell'output e le quantità previste non costituiscono la quantità finale fatturabile.",
          "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": {
            "errors": [
              {
                "condition": "JSON o modello non valido, stringhe obbligatorie mancanti o vuote oppure indice del contenuto non valido.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Chiave API Ailoot non valida.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Il gruppo della chiave API non è autorizzato a utilizzare questa rotta multimediale.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "L'attività originale o il risultato richiesto è assente oppure non appartiene allo stesso utente, alla stessa chiave API o allo stesso gruppo.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "L'invio o lo stato originale è incompleto oppure non può essere riconciliato; conserva l'ID originale e non inviare nuovamente la richiesta.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Il collegamento originale, la rotta o il contenuto multimediale di tua proprietà è ancora in verifica; continua a verificare quell'operazione originale.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Il servizio multimediale o l'archivio delle attività originali non è disponibile.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "La dichiarazione fissata non elenca stati finali di errore. Conserva risposta, intestazioni e id originali e verifica quella stessa operazione per qualsiasi stato non riconosciuto o errore result_pending_check; non inviare mai nuovamente una creazione dall'esito sconosciuto.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "Scarica ogni URL effettivamente restituito in creations[].url; un indice del contenuto identifica un risultato reale restituito.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Identificatore pubblico dell'attività o dell'operazione Ailoot restituito.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Identificatore dell'attività originale, distinto dall'id pubblico.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Percorso di consultazione Ailoot restituito per l'attività originale.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Identificatore originale presente nella risposta di creazione.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Stato nativo dell'attività: created per lo stato in attesa fissato e success per il completamento.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Diagnostica dell'attività; la specifica salvata non dichiara un elenco enumerato di codici di errore.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Ogni URL video completato selezionato viene sostituito con un URL firmato di proprietà di Ailoot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Durata del video restituita; verifica il risultato effettivo completato.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Frequenza dei fotogrammi restituita; non viene promessa una frequenza fissa.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Larghezza del risultato restituita in pixel.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Altezza del risultato restituita in pixel.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "Il JSON conserva lo stato nativo e l'array creations, aggiungendo id/provider_task_id/polling_url pubblici. Gli URL video selezionati sono vuoti prima della pubblicazione e diventano URL firmati di proprietà di Ailoot dopo il completamento."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Descrivi la scena da generare. Il limite documentato è di 2000 caratteri; Ailoot verifica che la stringa non sia vuota e conserva il testo.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "La descrizione specifica di viduq2 indica 1–10 secondi interi. Non è documentata una durata predefinita specifica del modello.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "secondi"
              },
              {
                "availability": "source_interface",
                "conditions": "Ometti oppure invia la stringa \"0\" per la casualità. Un seed non nullo fornito seleziona il comportamento documentato con seed fisso; non è specificato alcun intervallo numerico.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "L'elenco specifico di viduq2 documenta queste fasce per 1–10 secondi. Un'enumerazione e una tabella condivise menzionano anche 360p; la sua applicabilità contraddice quell'elenco e non viene dichiarata qui.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "La richiesta condivisa accetta questo campo, ma la documentazione specifica esplicitamente che non ha effetto per viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "La richiesta condivisa accetta questo campo, ma la documentazione specifica esplicitamente che non ha effetto per i modelli q2.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "Crea una sola volta e conserva l'id pubblico e polling_url restituiti.",
            "Interroga periodicamente l'operazione originale e leggi state; il completamento richiede success e un risultato creations[].url di tua proprietà.",
            "Scarica ogni URL video restituito di tua proprietà; dall'esempio non dedurre un numero fisso di risultati, una durata o una frequenza dei fotogrammi."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "Ailoot convalida le stringhe model/prompt non vuote. I tipi e i limiti facoltativi riportati sotto costituiscono il contratto documentato della richiesta; gli altri campi vengono conservati per il modello selezionato."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Costo stimato della generazione",
            "units": [
              {
                "amount": "5.12",
                "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": "5.12",
                "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}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_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 · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Generazione video",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/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"
              }
            ]
          },
          {
            "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": "5.12",
                "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": "5.12",
                "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": "viduq2",
        "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": "5.12",
            "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": "5.12",
            "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": "viduq2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "8ce7eab1266e64f8e47cb1d039857779ce4fba6fbda4fdeac87e62fee712cec2",
    "input_html_sha256": "f0bbbb684ad00c03d28d03354f6cae7bd2f86785579974705c504f647b9fa95e",
    "private_audit_sha256": "89a2f23029808153b9ad0abd6e4bba2f6263a478012f1d7c35363af3168e68d6",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/it/viduq2/",
    "description": "Vidu Q2 crea video da una descrizione testuale della scena, con durata di 1–10 secondi, uscita 540p, 720p o 1080p e cinque rapporti d’aspetto. Questo specifico profilo viduq2 usa il prompt per stile e movimento e restituisce il risultato tramite un’attività asincrona.",
    "locale": "it",
    "md_url": "https://ailoot.ai/models/it/viduq2/index.md",
    "title": "Vidu: Q2 Text-to-Video — Ailoot",
    "url": "https://ailoot.ai/models/it/viduq2/"
  },
  "rawModel": {
    "about": "Vidu Q2 crea video da una scena scritta tramite il profilo di generazione video da testo selezionato con viduq2. Gli ingressi obbligatori sono l’identificatore esatto del modello e un prompt che descrive la scena. Usatelo per un breve concetto di prodotto, una veduta d’insieme o un’azione di un personaggio il cui aspetto e movimento siano specificabili a parole. Questo metodo configurato genera video da testo; la sua descrizione non assegna al selettore una modalità separata con immagine di riferimento o di modifica video.\n\nCostruite la richiesta intorno a una sequenza visibile. Identificate soggetto, luogo, azione, ampiezza dell’inquadratura, movimento della camera e composizione finale. Per un concetto di prodotto, descrivete un oggetto su un tavolo, la luce che si sposta sul materiale e un lento avvicinamento della camera che termina su un dettaglio riconoscibile. Per una scena di un luogo, presentate l’ambiente prima di avvicinarvi al punto focale. Mantenete l’azione adeguata alla durata scelta della clip, affinché la scena abbia spazio per il finale desiderato.\n\nIl limite del prompt è di 2 000 caratteri. Mettete prima il soggetto e l’azione essenziali, poi aggiungete i dettagli di illuminazione, materiale, ambiente e camera che cambiano il risultato desiderato. Specificate lo stile visivo nel prompt. La guida specifica di Q2 afferma che i parametri separati style e movement_amplitude non hanno effetto per questo modello, quindi le impostazioni predefinite general o anime e le opzioni di ampiezza del movimento non sostituiscono una descrizione chiara della scena.\n\nL’impostazione di durata specifica del modello accetta secondi interi da uno a dieci. Le scelte di risoluzione specifiche di Q2 sono 540p, 720p e 1080p, con 720p come valore predefinito documentato. Scegliete insieme durata e risoluzione in base all’azione e alla destinazione. Una breve presentazione e un movimento più lungo richiedono tempi diversi; aumentare la durata richiesta deve servire la sequenza visibile, non semplicemente allungare una descrizione invariata. Esaminate le dimensioni e la durata effettive della clip restituita quando preparate il posizionamento finale.\n\nLe scelte documentate di aspect_ratio sono 16:9, 9:16, 3:4, 4:3 e 1:1, con 16:9 come valore predefinito. La guida include esplicitamente 3:4 e 4:3 per la famiglia Q2. Scegliete il formato prima della generazione e descrivete una composizione adatta: mantenete leggibile il soggetto principale in una vista verticale oppure usate la larghezza di un’inquadratura orizzontale per l’ambiente circostante. Lasciate la vista finale abbastanza chiara per la pagina, la presentazione o il successivo inserimento di didascalie previsti.\n\nIl campo seed controlla la variazione. Ometterlo o fornire 0 seleziona un valore casuale; un valore diverso da zero seleziona l’opzione documentata di seed fisso per una generazione ripetibile. Preservate il seed restituito insieme al prompt e alle impostazioni quando confrontate le versioni. L’operazione condivisa documenta anche i controlli audio e off_peak specificamente per i modelli Q3. Queste opzioni Q3 non sono capacità assegnate a questo profilo Q2; pianificate la richiesta in base al suo ingresso testuale e alla sua uscita video documentati.\n\nLa generazione è asincrona. L’invio restituisce task_id e uno stato iniziale, con created usato per un’attività appena creata. Conservate l’identità dell’attività mentre seguite l’elaborazione. La consultazione documentata del risultato usa state=success per un risultato riuscito e restituisce un array creations. Ogni elemento ha l’URL del video in creations[].url; salvate tutti i video restituiti anziché presumere che l’attività contenga sempre esattamente una creazione.\n\nLa documentazione del risultato riporta anche durata, fps e larghezza e altezza della risoluzione del video effettivo. Conservate questi valori riportati con la clip completata anziché trattare la frequenza dei fotogrammi o le dimensioni di un esempio come una specifica fissa di Q2. La risposta di creazione dell’attività include un valore credits insieme alla configurazione della richiesta. Conservate questi metadati riportati dell’attività e l’identità dell’attività completata insieme al risultato, affinché ogni video resti collegato alle proprie impostazioni di generazione.\n\nVerificate l’intera sequenza rispetto alla richiesta originale: aspetto del soggetto, forma dell’oggetto, direzione del movimento, continuità della camera e vista finale desiderata. Per una revisione, identificate il dettaglio concreto che non rispetta la richiesta e preservate le parti riuscite della scena. Tenete insieme il prompt, il selettore esatto, le impostazioni, l’identità dell’attività e i video completati, affinché un confronto successivo si basi sugli artefatti reali.",
    "alias_of": null,
    "aliases": [],
    "author": "Vidu",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "5.12",
            "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": "5.12",
            "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": "Tutte le tariffe della configurazione sono riportate nei dettagli."
      }
    ],
    "ctx": null,
    "display_name": "Vidu: Q2 Text-to-Video",
    "formats": [
      "videos"
    ],
    "id": "viduq2",
    "input": [
      "text"
    ],
    "kind": "video",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Le tariffe visualizzate stimano il costo prima della generazione. L'addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell'output e le quantità previste non costituiscono la quantità finale fatturabile.",
          "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": {
            "errors": [
              {
                "condition": "JSON o modello non valido, stringhe obbligatorie mancanti o vuote oppure indice del contenuto non valido.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Chiave API Ailoot non valida.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Il gruppo della chiave API non è autorizzato a utilizzare questa rotta multimediale.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "L'attività originale o il risultato richiesto è assente oppure non appartiene allo stesso utente, alla stessa chiave API o allo stesso gruppo.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "L'invio o lo stato originale è incompleto oppure non può essere riconciliato; conserva l'ID originale e non inviare nuovamente la richiesta.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Il collegamento originale, la rotta o il contenuto multimediale di tua proprietà è ancora in verifica; continua a verificare quell'operazione originale.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Il servizio multimediale o l'archivio delle attività originali non è disponibile.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "La dichiarazione fissata non elenca stati finali di errore. Conserva risposta, intestazioni e id originali e verifica quella stessa operazione per qualsiasi stato non riconosciuto o errore result_pending_check; non inviare mai nuovamente una creazione dall'esito sconosciuto.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "Scarica ogni URL effettivamente restituito in creations[].url; un indice del contenuto identifica un risultato reale restituito.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Identificatore pubblico dell'attività o dell'operazione Ailoot restituito.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Identificatore dell'attività originale, distinto dall'id pubblico.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Percorso di consultazione Ailoot restituito per l'attività originale.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Identificatore originale presente nella risposta di creazione.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Stato nativo dell'attività: created per lo stato in attesa fissato e success per il completamento.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Diagnostica dell'attività; la specifica salvata non dichiara un elenco enumerato di codici di errore.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Ogni URL video completato selezionato viene sostituito con un URL firmato di proprietà di Ailoot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Durata del video restituita; verifica il risultato effettivo completato.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Frequenza dei fotogrammi restituita; non viene promessa una frequenza fissa.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Larghezza del risultato restituita in pixel.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Altezza del risultato restituita in pixel.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "Il JSON conserva lo stato nativo e l'array creations, aggiungendo id/provider_task_id/polling_url pubblici. Gli URL video selezionati sono vuoti prima della pubblicazione e diventano URL firmati di proprietà di Ailoot dopo il completamento."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Descrivi la scena da generare. Il limite documentato è di 2000 caratteri; Ailoot verifica che la stringa non sia vuota e conserva il testo.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "La descrizione specifica di viduq2 indica 1–10 secondi interi. Non è documentata una durata predefinita specifica del modello.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "secondi"
              },
              {
                "availability": "source_interface",
                "conditions": "Ometti oppure invia la stringa \"0\" per la casualità. Un seed non nullo fornito seleziona il comportamento documentato con seed fisso; non è specificato alcun intervallo numerico.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "L'elenco specifico di viduq2 documenta queste fasce per 1–10 secondi. Un'enumerazione e una tabella condivise menzionano anche 360p; la sua applicabilità contraddice quell'elenco e non viene dichiarata qui.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "La richiesta condivisa accetta questo campo, ma la documentazione specifica esplicitamente che non ha effetto per viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "La richiesta condivisa accetta questo campo, ma la documentazione specifica esplicitamente che non ha effetto per i modelli q2.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "Crea una sola volta e conserva l'id pubblico e polling_url restituiti.",
            "Interroga periodicamente l'operazione originale e leggi state; il completamento richiede success e un risultato creations[].url di tua proprietà.",
            "Scarica ogni URL video restituito di tua proprietà; dall'esempio non dedurre un numero fisso di risultati, una durata o una frequenza dei fotogrammi."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "Ailoot convalida le stringhe model/prompt non vuote. I tipi e i limiti facoltativi riportati sotto costituiscono il contratto documentato della richiesta; gli altri campi vengono conservati per il modello selezionato."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Costo stimato della generazione",
            "units": [
              {
                "amount": "5.12",
                "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": "5.12",
                "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}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_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 · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Generazione video",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/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"
              }
            ]
          },
          {
            "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": "5.12",
                "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": "5.12",
                "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": "viduq2",
        "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": "5.12",
            "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": "5.12",
            "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": "viduq2",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      }
    ],
    "name": "Vidu: Q2 Text-to-Video",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 5.12,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 5.12,
      "varies": false
    },
    "short": "Vidu Q2 crea video da una descrizione testuale della scena, con durata di 1–10 secondi, uscita 540p, 720p o 1080p e cinque rapporti d’aspetto. Questo specifico profilo viduq2 usa il prompt per stile e movimento e restituisce il risultato tramite un’attività asincrona."
  },
  "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": "Vidu Q2 crea video da una descrizione testuale della scena, con durata di 1–10 secondi, uscita 540p, 720p o 1080p e cinque rapporti d’aspetto. Questo specifico profilo viduq2 usa il prompt per stile e movimento e restituisce il risultato tramite un’attività asincrona.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "8a9f95f8f6c8634c330967e64978e32322bf6d5d466f9dd259c589eb74b0b2e5",
    "renderer_sha256": "3be1a96012c3c76b38a7b9bea6a57c0def38c56103737bee6a5e77aaa75e488a"
  },
  "sourceRevision": "078ba247a82abd5b698679b855d1af5ae4b17fcf013b5906c224222ce32dac8f"
}
