{
  "aboutHtml": "<p>Veo 3.1 Fast es el perfil rápido de generación de video de Google para una escena corta descrita en texto o establecida por una imagen. Combina la toma visual con sonido generado y admite fotogramas iniciales y finales guiados. Úsalo para desarrollar un concepto de escena, preparar variaciones creativas cortas o crear un segmento audiovisual compacto con una acción y una dirección visual claras.</p><p>Construye el brief alrededor del sujeto, la acción y el entorno. Después añade el encuadre, el movimiento de cámara, la iluminación y el tratamiento visual que hacen útil la toma. Un brief original de producto podría mostrar una lámpara pequeña de cerámica sobre un escritorio de madera, con la cámara acercándose lentamente mientras la luz se enciende y un sonido discreto de interruptor acompaña la acción. El sujeto y el evento visible describen la imagen; la dirección del sonido describe la experiencia auditiva.</p><p>Escribe la dirección de escena en inglés, como especifica el perfil de prompts del fabricante. Mantén la acción principal proporcionada a la duración del clip y distingue el movimiento de cámara del movimiento del sujeto. Una vista general de establecimiento, un primer plano de una textura y una toma que sigue un objeto en movimiento responden a preguntas creativas distintas. Elige la vista que comunique el detalle previsto en lugar de combinar indicaciones de cámara sin relación en una sola toma corta.</p><p>Para una escena basada en imagen, prepara una imagen inicial clara que ya establezca la apariencia y la composición. El brief de movimiento puede entonces concentrarse en el evento que sigue. Un fotograma final puede proporcionar un destino visual para la transición. Mantén coherentes los detalles importantes del sujeto y el estilo entre los fotogramas, o describe explícitamente la transformación prevista. Revisa la transición misma, además de su imagen inicial y final.</p><p>El perfil de producción del fabricante admite clips de cuatro, seis u ocho segundos, encuadre horizontal 16:9 o vertical 9:16 y hasta cuatro videos de salida por prompt. La salida Fast es 720p o 1080p, a 24 fotogramas por segundo, en formato MP4. El perfil basado en imagen admite JPEG o PNG, incluye un tamaño máximo de imagen de entrada de 20 MB y admite configuraciones de entrada de 720p/1080p. Prepara la composición para su orientación prevista y mantén la entrada dentro de ese límite de imagen.</p><p>El sonido puede formar parte de la escena generada. Describe cualquier línea hablada, sonido ambiental o efecto pertinente junto con la acción visible, identificando al sujeto que debe hablar y al evento que debe producir el sonido. Mantén el diálogo lo bastante corto para la interpretación prevista y distínguelo del ambiente o la música. La generación de audio sigue el brief escrito de escena; una grabación de audio no está entre las entradas normales documentadas para este perfil.</p><p>El perfil de producción actual también incluye generación con referencias de recursos y extensión de video. Las referencias guían la apariencia de un sujeto u objeto, mientras que los fotogramas de inicio y fin guían la composición de apertura y cierre. Selecciona material de referencia cuya función sea clara en la escena en lugar de tratar todas las imágenes como controles intercambiables. Para continuar un clip, elige el flujo de extensión independiente y describe qué debe ocurrir después de la acción existente; su manejo de entradas es distinto del de una toma nueva basada en texto.</p><p>Una descripción negativa puede identificar contenido o tratamientos visuales que quieres evitar. Mantén el prompt principal enfocado en la escena que quieres y haz que las exclusiones sean específicas de la tarea. Para una variación de producto, conserva el sujeto y el encuadre mientras cambias un detalle, como la dirección de la luz o el tratamiento de un material. Conserva la configuración y el conjunto de referencias al comparar resultados para que la diferencia creativa siga siendo clara.</p><p>Veo 3.1 Fast y el perfil regular Veo 3.1 siguen siendo opciones distintas. La salida de producción documentada de Fast es 720p/1080p; el perfil regular también incluye 4K. Conserva la edición seleccionada y su configuración de salida junto con el recurso, en lugar de tratar un identificador Preview u otra versión de Veo como sinónimo automático de este perfil de producción.</p><p>El flujo crea una operación de generación y expone los archivos de video devueltos cuando termina. Conserva cada salida real seleccionada para revisión junto con su brief, fotogramas de origen y configuración pertinente. Un identificador de operación es un registro de la generación; el recurso MP4 terminado es lo que puede reproducirse y usarse en la edición. Conserva con el video cualquier metadato de procedencia del contenido que se proporcione.</p><p>Revisa la apariencia del sujeto, la acción solicitada, el tratamiento de cámara y el sonido a lo largo de todo el clip. Comprueba la inteligibilidad del diálogo y la relación entre sonido y eventos visibles antes de usarlo en una composición más larga. El resultado útil puede ser una toma conceptual, una presentación de producto o un segmento narrativo corto, con títulos, transiciones y otras ediciones añadidos después en el flujo de producción que lo rodea.</p>",
  "aboutText": "Veo 3.1 Fast es el perfil rápido de generación de video de Google para una escena corta descrita en texto o establecida por una imagen. Combina la toma visual con sonido generado y admite fotogramas iniciales y finales guiados. Úsalo para desarrollar un concepto de escena, preparar variaciones creativas cortas o crear un segmento audiovisual compacto con una acción y una dirección visual claras.\n\nConstruye el brief alrededor del sujeto, la acción y el entorno. Después añade el encuadre, el movimiento de cámara, la iluminación y el tratamiento visual que hacen útil la toma. Un brief original de producto podría mostrar una lámpara pequeña de cerámica sobre un escritorio de madera, con la cámara acercándose lentamente mientras la luz se enciende y un sonido discreto de interruptor acompaña la acción. El sujeto y el evento visible describen la imagen; la dirección del sonido describe la experiencia auditiva.\n\nEscribe la dirección de escena en inglés, como especifica el perfil de prompts del fabricante. Mantén la acción principal proporcionada a la duración del clip y distingue el movimiento de cámara del movimiento del sujeto. Una vista general de establecimiento, un primer plano de una textura y una toma que sigue un objeto en movimiento responden a preguntas creativas distintas. Elige la vista que comunique el detalle previsto en lugar de combinar indicaciones de cámara sin relación en una sola toma corta.\n\nPara una escena basada en imagen, prepara una imagen inicial clara que ya establezca la apariencia y la composición. El brief de movimiento puede entonces concentrarse en el evento que sigue. Un fotograma final puede proporcionar un destino visual para la transición. Mantén coherentes los detalles importantes del sujeto y el estilo entre los fotogramas, o describe explícitamente la transformación prevista. Revisa la transición misma, además de su imagen inicial y final.\n\nEl perfil de producción del fabricante admite clips de cuatro, seis u ocho segundos, encuadre horizontal 16:9 o vertical 9:16 y hasta cuatro videos de salida por prompt. La salida Fast es 720p o 1080p, a 24 fotogramas por segundo, en formato MP4. El perfil basado en imagen admite JPEG o PNG, incluye un tamaño máximo de imagen de entrada de 20 MB y admite configuraciones de entrada de 720p/1080p. Prepara la composición para su orientación prevista y mantén la entrada dentro de ese límite de imagen.\n\nEl sonido puede formar parte de la escena generada. Describe cualquier línea hablada, sonido ambiental o efecto pertinente junto con la acción visible, identificando al sujeto que debe hablar y al evento que debe producir el sonido. Mantén el diálogo lo bastante corto para la interpretación prevista y distínguelo del ambiente o la música. La generación de audio sigue el brief escrito de escena; una grabación de audio no está entre las entradas normales documentadas para este perfil.\n\nEl perfil de producción actual también incluye generación con referencias de recursos y extensión de video. Las referencias guían la apariencia de un sujeto u objeto, mientras que los fotogramas de inicio y fin guían la composición de apertura y cierre. Selecciona material de referencia cuya función sea clara en la escena en lugar de tratar todas las imágenes como controles intercambiables. Para continuar un clip, elige el flujo de extensión independiente y describe qué debe ocurrir después de la acción existente; su manejo de entradas es distinto del de una toma nueva basada en texto.\n\nUna descripción negativa puede identificar contenido o tratamientos visuales que quieres evitar. Mantén el prompt principal enfocado en la escena que quieres y haz que las exclusiones sean específicas de la tarea. Para una variación de producto, conserva el sujeto y el encuadre mientras cambias un detalle, como la dirección de la luz o el tratamiento de un material. Conserva la configuración y el conjunto de referencias al comparar resultados para que la diferencia creativa siga siendo clara.\n\nVeo 3.1 Fast y el perfil regular Veo 3.1 siguen siendo opciones distintas. La salida de producción documentada de Fast es 720p/1080p; el perfil regular también incluye 4K. Conserva la edición seleccionada y su configuración de salida junto con el recurso, en lugar de tratar un identificador Preview u otra versión de Veo como sinónimo automático de este perfil de producción.\n\nEl flujo crea una operación de generación y expone los archivos de video devueltos cuando termina. Conserva cada salida real seleccionada para revisión junto con su brief, fotogramas de origen y configuración pertinente. Un identificador de operación es un registro de la generación; el recurso MP4 terminado es lo que puede reproducirse y usarse en la edición. Conserva con el video cualquier metadato de procedencia del contenido que se proporcione.\n\nRevisa la apariencia del sujeto, la acción solicitada, el tratamiento de cámara y el sonido a lo largo de todo el clip. Comprueba la inteligibilidad del diálogo y la relación entre sonido y eventos visibles antes de usarlo en una composición más larga. El resultado útil puede ser una toma conceptual, una presentación de producto o un segmento narrativo corto, con títulos, transiciones y otras ediciones añadidos después en el flujo de producción que lo rodea.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "a5aa9a804e5fc06007eb8e15b38b498e06f4c3d7ca535231f62302bdc317ad41",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "es-mx",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Veo 3.1 Fast</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/veo-3.1-fast</code><button type=\"button\" id=\"copy-id\">Copiar ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Secciones de la ficha del modelo\"><button type=\"button\" data-card-jump=\"overview\">Inicio</button><button type=\"button\" data-card-jump=\"methods\">Entradas y métodos</button><button type=\"button\" data-card-jump=\"pricing\">Tarifas</button><button type=\"button\" data-card-jump=\"examples\">Ejemplos</button><button type=\"button\" data-card-jump=\"results\">Resultados</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Métodos de 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|google%2Fveo-3.1-fast\">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\">Inicio</h3><p class=\"mdesc-full\">Veo 3.1 Fast es el modelo de video de Google para escenas cortas a partir de texto o imágenes con sonido generado. Su perfil de producción devuelve clips MP4 de cuatro, seis u ocho segundos a 24 fps, con salida 720p o 1080p y fotogramas iniciales o finales guiados.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceptadas</dt><dd>Texto</dd></div><div><dt>Resultados</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Sobre el modelo</summary><p class=\"note-s\" data-model-method-boundary>Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.</p><div class=\"mabout\" id=\"m-about\"><p>Veo 3.1 Fast es el perfil rápido de generación de video de Google para una escena corta descrita en texto o establecida por una imagen. Combina la toma visual con sonido generado y admite fotogramas iniciales y finales guiados. Úsalo para desarrollar un concepto de escena, preparar variaciones creativas cortas o crear un segmento audiovisual compacto con una acción y una dirección visual claras.</p><p>Construye el brief alrededor del sujeto, la acción y el entorno. Después añade el encuadre, el movimiento de cámara, la iluminación y el tratamiento visual que hacen útil la toma. Un brief original de producto podría mostrar una lámpara pequeña de cerámica sobre un escritorio de madera, con la cámara acercándose lentamente mientras la luz se enciende y un sonido discreto de interruptor acompaña la acción. El sujeto y el evento visible describen la imagen; la dirección del sonido describe la experiencia auditiva.</p><p>Escribe la dirección de escena en inglés, como especifica el perfil de prompts del fabricante. Mantén la acción principal proporcionada a la duración del clip y distingue el movimiento de cámara del movimiento del sujeto. Una vista general de establecimiento, un primer plano de una textura y una toma que sigue un objeto en movimiento responden a preguntas creativas distintas. Elige la vista que comunique el detalle previsto en lugar de combinar indicaciones de cámara sin relación en una sola toma corta.</p><p>Para una escena basada en imagen, prepara una imagen inicial clara que ya establezca la apariencia y la composición. El brief de movimiento puede entonces concentrarse en el evento que sigue. Un fotograma final puede proporcionar un destino visual para la transición. Mantén coherentes los detalles importantes del sujeto y el estilo entre los fotogramas, o describe explícitamente la transformación prevista. Revisa la transición misma, además de su imagen inicial y final.</p><p>El perfil de producción del fabricante admite clips de cuatro, seis u ocho segundos, encuadre horizontal 16:9 o vertical 9:16 y hasta cuatro videos de salida por prompt. La salida Fast es 720p o 1080p, a 24 fotogramas por segundo, en formato MP4. El perfil basado en imagen admite JPEG o PNG, incluye un tamaño máximo de imagen de entrada de 20 MB y admite configuraciones de entrada de 720p/1080p. Prepara la composición para su orientación prevista y mantén la entrada dentro de ese límite de imagen.</p><p>El sonido puede formar parte de la escena generada. Describe cualquier línea hablada, sonido ambiental o efecto pertinente junto con la acción visible, identificando al sujeto que debe hablar y al evento que debe producir el sonido. Mantén el diálogo lo bastante corto para la interpretación prevista y distínguelo del ambiente o la música. La generación de audio sigue el brief escrito de escena; una grabación de audio no está entre las entradas normales documentadas para este perfil.</p><p>El perfil de producción actual también incluye generación con referencias de recursos y extensión de video. Las referencias guían la apariencia de un sujeto u objeto, mientras que los fotogramas de inicio y fin guían la composición de apertura y cierre. Selecciona material de referencia cuya función sea clara en la escena en lugar de tratar todas las imágenes como controles intercambiables. Para continuar un clip, elige el flujo de extensión independiente y describe qué debe ocurrir después de la acción existente; su manejo de entradas es distinto del de una toma nueva basada en texto.</p><p>Una descripción negativa puede identificar contenido o tratamientos visuales que quieres evitar. Mantén el prompt principal enfocado en la escena que quieres y haz que las exclusiones sean específicas de la tarea. Para una variación de producto, conserva el sujeto y el encuadre mientras cambias un detalle, como la dirección de la luz o el tratamiento de un material. Conserva la configuración y el conjunto de referencias al comparar resultados para que la diferencia creativa siga siendo clara.</p><p>Veo 3.1 Fast y el perfil regular Veo 3.1 siguen siendo opciones distintas. La salida de producción documentada de Fast es 720p/1080p; el perfil regular también incluye 4K. Conserva la edición seleccionada y su configuración de salida junto con el recurso, en lugar de tratar un identificador Preview u otra versión de Veo como sinónimo automático de este perfil de producción.</p><p>El flujo crea una operación de generación y expone los archivos de video devueltos cuando termina. Conserva cada salida real seleccionada para revisión junto con su brief, fotogramas de origen y configuración pertinente. Un identificador de operación es un registro de la generación; el recurso MP4 terminado es lo que puede reproducirse y usarse en la edición. Conserva con el video cualquier metadato de procedencia del contenido que se proporcione.</p><p>Revisa la apariencia del sujeto, la acción solicitada, el tratamiento de cámara y el sonido a lo largo de todo el clip. Comprueba la inteligibilidad del diálogo y la relación entre sonido y eventos visibles antes de usarlo en una composición más larga. El resultado útil puede ser una toma conceptual, una presentación de producto o un segmento narrativo corto, con títulos, transiciones y otras ediciones añadidos después en el flujo de producción que lo rodea.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible en Ailoot · entradas y métodos</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Entrada</dt><dd><code>text</code></dd></div><div><dt>Salida</dt><dd><code>video</code></dd></div><div><dt>Formato de salida</dt><dd>mp4</dd></div><div><dt>Número de salidas</dt><dd>Hasta 4 salidas</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>Valores y límites</th><th>Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>google/veo-3.1-fast</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>Máximo de bytes UTF-8: 10,000</div><div>Se requiere contenido distinto de espacios en blanco: Sí</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>4, 6, 8</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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\">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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>720p</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>16:9, 9:16</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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\">generate_audio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>boolean</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>false, true</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaciones de materiales de entrada</summary><p class=\"note-s\"><b>Texto a video</b> · Obligatorio: prompt</p></details><details class=\"note-s\" data-method-contract><summary>Parámetros del método y ciclo de vida</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parámetro</th><th>Contrato</th></tr></thead><tbody><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>content_type</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>application/json</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>required</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>model, prompt, duration, resolution, aspect_ratio, generate_audio</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>additional_properties</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>false</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>parameters</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>{&quot;name&quot;:&quot;model&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;enum&quot;:[&quot;google/veo-3.1-fast&quot;]}, {&quot;name&quot;:&quot;prompt&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;non_whitespace&quot;:true,&quot;max_utf8_bytes&quot;:10000}, {&quot;name&quot;:&quot;duration&quot;,&quot;type&quot;:&quot;integer&quot;,&quot;required&quot;:true,&quot;enum&quot;:[4,6,8]}, {&quot;name&quot;:&quot;resolution&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;enum&quot;:[&quot;720p&quot;]}, {&quot;name&quot;:&quot;aspect_ratio&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;enum&quot;:[&quot;16:9&quot;,&quot;9:16&quot;]}, {&quot;name&quot;:&quot;generate_audio&quot;,&quot;type&quot;:&quot;boolean&quot;,&quot;required&quot;:true,&quot;enum&quot;:[false,true]}</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_types</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>text</td></tr></tbody></table></div><p>Alias de método: <code>/v1/videos/generations</code>, <code>/videos</code>, <code>/videos/generations</code></p><p>Ciclo de vida: <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\">Conserva la respuesta completa y los ID originales devueltos.</p><p class=\"note-s\">Nunca vuelvas a enviar una creación de resultado desconocido.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifas</h3><div class=\"card-result-process\" data-billing-basis><h5>Cómo se calcula el cargo definitivo</h5><p class=\"note-s\">Las tarifas mostradas permiten estimar el costo antes de la generación. El cargo final se calcula a partir del costo registrado para la generación original. La duración medida de la salida y las cantidades estimadas no son la cantidad facturable final.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.</p><dl data-price-conditions><dt>Modo fast</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo fast</span></dd><dt>Modo flex</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo flex</span></dd><dt>Esfuerzo máximo de razonamiento</dt><dd>Sin especificar <span class=\"note-s\">Cuando el esfuerzo máximo de razonamiento usa el ajuste default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifas estimadas para comparar</h4><h4>Precios por configuración</h4><p class=\"note-s\">Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuración</th><th>Tabla de tarifas</th><th>Cantidad prevista</th><th>Generar audio</th><th>Resolución</th><th>Unidad de facturación</th><th>Condiciones de facturación</th><th>Cargo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Tarifas base por token</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>Tarifa base</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>—</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>—</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Entrada · Tokens de entrada · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Salida · Tokens de salida · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Lectura de caché · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escritura en caché · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escritura en caché, 1 hora · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>—</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de video</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: with_audio</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video · Estimación solo para comparar</span> <b>$0.24</b> <span class=\"price-unit\">por segundo de video</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>—</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de video</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: with_audio; resolución: 4k</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video · Estimación solo para comparar</span> <b>$0.6</b> <span class=\"price-unit\">por segundo de video</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Ultra</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>Configuración solicitada; solo una estimación.</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>Con audio</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>720p</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de video de salida</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Segundo estimado de video de salida · Estimación solo para comparar</span> <b>$0.2</b> <span class=\"price-unit\">por segundo de video de salida</span></div><p class=\"note-s\">La tarifa mostrada estima el costo antes de generar. El cargo definitivo se calcula a partir del costo registrado para la generación original. La duración física del video no es la cantidad facturable.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>—</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de video</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: without_audio</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video · Estimación solo para comparar</span> <b>$0.2</b> <span class=\"price-unit\">por segundo de video</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>—</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de video</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: without_audio; resolución: 4k</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video · Estimación solo para comparar</span> <b>$0.5</b> <span class=\"price-unit\">por segundo de video</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Ultra</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>Configuración solicitada; solo una estimación.</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>Sin audio</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>720p</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de video de salida</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Segundo estimado de video de salida · Estimación solo para comparar</span> <b>$0.16</b> <span class=\"price-unit\">por segundo de video de salida</span></div><p class=\"note-s\">La tarifa mostrada estima el costo antes de generar. El cargo final se calcula a partir del costo registrado para la generación original. La duración física del video no es la cantidad facturable.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Costo estimado de generación</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>estimación para una generación</td><td data-cell-label=\"Generar audio\"><span class=\"card-cell-label\">Generar audio</span>—</td><td data-cell-label=\"Resolución\"><span class=\"card-cell-label\">Resolución</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>—</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Costo estimado de generación · Estimación solo para comparar</span> <b>$0.64</b> <span class=\"price-unit\">estimación previa a la generación</span></div><p class=\"note-s\">Esta estimación no es un cargo adicional ni una tarifa fija por la generación completada.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserva un monto estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. <a href=\"/docs/es-mx/billing/reserve/\">Cómo funcionan la reserva y la liquidación →</a></p><div data-declared-reference-pricing><h4>Detalles de la tarifa de referencia</h4><p class=\"note-s\">Las tablas de referencia del modelo no cambian la selección del método, las cotizaciones ni los cargos. Los cargos aplicados usan las tarifas del método Ailoot seleccionado.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Referencias de precios por configuración de video</summary><h4>Precios por configuración</h4><p class=\"note-s\">Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuración</th><th>Condiciones de facturación</th><th>Cargo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: with_audio</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video</span> <b>$0.24</b> <span class=\"price-unit\">por segundo de video</span></div><p class=\"note-s\">Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: with_audio; resolución: 4k</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video</span> <b>$0.6</b> <span class=\"price-unit\">por segundo de video</span></div><p class=\"note-s\">Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: without_audio</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video</span> <b>$0.2</b> <span class=\"price-unit\">por segundo de video</span></div><p class=\"note-s\">Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: with_audio; resolución: 720p</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video</span> <b>$0.2</b> <span class=\"price-unit\">por segundo de video</span></div><p class=\"note-s\">Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: without_audio; resolución: 4k</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video</span> <b>$0.5</b> <span class=\"price-unit\">por segundo de video</span></div><p class=\"note-s\">Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.</p></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del video</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>configuración de audio: without_audio; resolución: 720p</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del video</span> <b>$0.16</b> <span class=\"price-unit\">por segundo de video</span></div><p class=\"note-s\">Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Solicitudes de ejemplo</h3><h4>Ailoot Ultra · Video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1508-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1508-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · perfil configurado exacto</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><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-1508-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1508-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;google/veo-3.1-fast&quot;, &quot;prompt&quot;: &quot;a calm greenhouse&quot;, &quot;duration&quot;: 6, &quot;resolution&quot;: &quot;720p&quot;, &quot;aspect_ratio&quot;: &quot;16:9&quot;, &quot;generate_audio&quot;: true}&#39;)\nPath(&#39;request.json&#39;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recibir y guardar resultados</h3><h4>Ailoot Ultra · Video</h4><p class=\"note-s\">mp4</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/generations/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li><li><code>GET /v1/videos/generations/{request_id}/content</code></li></ul><h5>Consultar el estado de la tarea</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1509-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1509-panel-0\" aria-selected=\"true\" tabindex=\"0\">Obtener el estado de la operación original con GET</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><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-1509-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1509-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Otras consultas de contenido</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1510-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1510-panel-0\" aria-selected=\"true\" tabindex=\"0\">Guarda todos los resultados completados que te pertenecen</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><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-1510-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1510-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Conserva todos los resultados completados</h5><p class=\"note-s\">Guarda todos los videos completados o archivos recibidos; descarga cada URL de archivo que se haya devuelto.</p><p class=\"note-s\">Conserva cada URL firmada de data[] completado que te pertenezca y todos los metadatos de estado. Guarda todas las salidas, incluido su audio generado. Puede haber una pista AAC válida incluso con generate_audio=false; conserva el MP4 original completo, incluido ese audio.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si es necesario revisar la respuesta original</h5><p class=\"note-s\">Consulta el trabajo original existente; nunca repitas un envío de resultado desconocido.</p></div><p class=\"note-s\">Máximo de salidas: 4.</p><details class=\"card-about\" data-output-fields><summary>Campos de respuesta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th><th>Significado</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=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">object</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><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>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">status</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">data[]</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>signed content URL</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">charge_pending_check</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>boolean</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">error.code</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">error.message</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">operation_id</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>Respuesta HTTP503 result_pending_check del estado o contenido original: el mismo ID público del video original como id.</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">error.type</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td><td data-cell-label=\"Significado\"><span class=\"card-cell-label\">Significado</span>server_error en HTTP503 result_pending_check.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errores y siguientes pasos</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respuesta</th><th>Condición</th><th>Siguiente paso</th></tr></thead><tbody><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>Falla la lectura del cuerpo sin procesar de la solicitud antes de analizar el perfil de video</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva la respuesta devuelta y corrige el cuerpo ilegible de la solicitud.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>Falla el análisis del perfil exacto de video o el perfil completo analizado no tiene una ficha exacta de precios lista</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva la respuesta; usa el perfil completo y exacto admitido y su ficha publicada. Esta rama se ejecuta antes de enviar al proveedor.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>El contenido del resultado original todavía no está disponible</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Consulta periódicamente el ID original devuelto y respeta Retry-After.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span><code>server_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>La respuesta devuelta indica que la operación o el resultado requiere una revisión</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva el ID original de operación o tarea devuelto, los encabezados de la solicitud y la respuesta; continúa con las consultas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>GET del estado o contenido original: la tarea no está publicada, el trabajo original no tiene estado failed/cancelled/expired y el estado local es unknown o el estado del trabajo original es completed.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva el id y operation_id originales (el mismo ID público de video), la respuesta y los encabezados; consulta únicamente el estado o contenido original. Nunca envíes una solicitud nueva de generación.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modelo</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=google%2Fveo-3.1-fast&amp;route=Ultra&amp;caller=google%2Fveo-3.1-fast&amp;fmt=videos\"><code>google/veo-3.1-fast</code></a></span></p><h4>Alias de rutas de métodos</h4><p class=\"note-s\"><code>/v1/videos/generations</code>, <code>/videos</code>, <code>/videos/generations</code></p><h4>ID de modelo relacionados</h4><p class=\"note-s\"><a href=\"#m=google%2Fveo-3.1-fast&amp;route=Ultra&amp;caller=google%2Fveo-3.1-fast&amp;fmt=videos\"><code>google/veo-3.1-fast</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/veo-3.1-fast",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "google/veo-3.1-fast",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|google%2Fveo-3.1-fast",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Las tarifas mostradas permiten estimar el costo antes de la generación. El cargo final se calcula a partir del costo registrado para la generación original. La duración medida de la salida y las cantidades estimadas no son la cantidad facturable final.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every completed data[] signed owned URL and the full status metadata. Save every output, including its generated audio.",
            "errors": [
              {
                "code": null,
                "condition": "Falla la lectura del cuerpo sin procesar de la solicitud antes de analizar el perfil de video",
                "http_status": 400,
                "recovery": "Conserva la respuesta devuelta y corrige el cuerpo ilegible de la solicitud.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Falla el análisis del perfil exacto de video o el perfil completo analizado no tiene una ficha exacta de precios lista",
                "http_status": 422,
                "message": "The complete video request cannot be priced",
                "recovery": "Conserva la respuesta; usa el perfil completo y exacto admitido y su ficha publicada. Esta rama se ejecuta antes de enviar al proveedor.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "El contenido del resultado original todavía no está disponible",
                "http_status": 409,
                "recovery": "Consulta periódicamente el ID original devuelto y respeta Retry-After.",
                "type": "video_not_ready"
              },
              {
                "code": null,
                "condition": "La respuesta devuelta indica que la operación o el resultado requiere una revisión",
                "http_status": null,
                "recovery": "Conserva el ID original de operación o tarea devuelto, los encabezados de la solicitud y la respuesta; continúa con las consultas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación.",
                "type": "server_error"
              },
              {
                "absent_fields": [
                  "status",
                  "object",
                  "model",
                  "data"
                ],
                "code": "result_pending_check",
                "condition": "GET del estado o contenido original: la tarea no está publicada, el trabajo original no tiene estado failed/cancelled/expired y el estado local es unknown o el estado del trabajo original es completed.",
                "friendly_fields": "error.reason=result_pending_check,error.param=null; error.operation_id and error.request_id when the existing context supplies them. error.message is rewritten/localized.",
                "headers": {
                  "Retry-After": null,
                  "X-Should-Retry": "false"
                },
                "http_status": 503,
                "recovery": "Conserva el id y operation_id originales (el mismo ID público de video), la respuesta y los encabezados; consulta únicamente el estado o contenido original. Nunca envíes una solicitud nueva de generación.",
                "response_fields": {
                  "charge_pending_check": true,
                  "error.code": "result_pending_check",
                  "error.type": "server_error",
                  "id": "original public video ID",
                  "operation_id": "same as id"
                },
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "content": [
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default0"
                  }
                },
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/generations/{request_id}/content"
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
              "mode": "submit_once_poll_original",
              "multioutputs": "retain every completed data output; index0 alone is not all outputs",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 202,
              "unknown": "Consulta el trabajo original existente; nunca repitas un envío de resultado desconocido.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_video",
                "required": [
                  "prompt"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "Use actual returned task_id or original public video id from response/media library. On HTTP503 result_pending_check from original video status/content GET, operation_id equals that original public video id. Do not assume unrelated operation IDs name media tasks.",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "all_results": "Conserva cada URL firmada de data[] completado que te pertenezca y todos los metadatos de estado. Guarda todas las salidas, incluido su audio generado. Puede haber una pista AAC válida incluso con generate_audio=false; conserva el MP4 original completo, incluido ese audio.",
              "create_status": 202,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": "signed content URL"
                },
                {
                  "description": null,
                  "name": "charge_pending_check",
                  "type": "boolean"
                },
                {
                  "description": null,
                  "name": "error.code",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "error.message",
                  "type": "string"
                },
                {
                  "description": "Respuesta HTTP503 result_pending_check del estado o contenido original: el mismo ID público del video original como id.",
                  "name": "operation_id",
                  "type": "string"
                },
                {
                  "description": "server_error en HTTP503 result_pending_check.",
                  "name": "error.type",
                  "type": "string"
                }
              ],
              "format": "mp4",
              "maximum_outputs": 4,
              "status_enum": [
                "in_progress",
                "completed",
                "failed"
              ]
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/veo-3.1-fast"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "max_utf8_bytes": 10000,
                "name": "prompt",
                "non_whitespace": true,
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  6,
                  8
                ],
                "enum_known": true,
                "name": "duration",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "all fields outside the exact required six-key profile",
              "image or reference inputs",
              "1080p or 4K"
            ]
          },
          "hints": [
            "Conserva la respuesta completa y los ID originales devueltos.",
            "Nunca vuelvas a enviar una creación de resultado desconocido."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "parameters": [
              {
                "enum": [
                  "google/veo-3.1-fast"
                ],
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "max_utf8_bytes": 10000,
                "name": "prompt",
                "non_whitespace": true,
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  4,
                  6,
                  8
                ],
                "name": "duration",
                "required": true,
                "type": "integer"
              },
              {
                "enum": [
                  "720p"
                ],
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  false,
                  true
                ],
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              }
            ],
            "required": [
              "model",
              "prompt",
              "duration",
              "resolution",
              "aspect_ratio",
              "generate_audio"
            ]
          },
          "lifecycle": {
            "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
            "content": [
              {
                "http": "GET",
                "parameters": [
                  {
                    "availability": "source_interface",
                    "conditions": "Must be less than the actual returned output count.",
                    "default": 0,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": null,
                    "maximum_known": false,
                    "minimum": 0,
                    "name": "index",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default0"
                }
              },
              {
                "http": "GET",
                "parameters": [
                  {
                    "availability": "source_interface",
                    "conditions": "Must be less than the actual returned output count.",
                    "default": 0,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": null,
                    "maximum_known": false,
                    "minimum": 0,
                    "name": "index",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/videos/generations/{request_id}/content"
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
            "mode": "submit_once_poll_original",
            "multioutputs": "retain every completed data output; index0 alone is not all outputs",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 202,
            "unknown": "Read existing original job; never resubmit unknown send.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations",
            "/videos",
            "/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "family": "video",
            "format": "mp4",
            "max_outputs": 4,
            "priced_duration": "Video-file duration is not the billing quantity; final charge follows the actual billed configuration."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.24",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.24",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.6",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.6",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "La tarifa mostrada estima el costo antes de generar. El cargo definitivo se calcula a partir del costo registrado para la generación original. La duración física del video no es la cantidad facturable.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": true,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per video second"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "basis": "Esta estimación no es un cargo adicional ni una tarifa fija por la generación completada.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Costo estimado de generación",
            "units": [
              {
                "amount": "0.64",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.64",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/veo-3.1-fast\", \"prompt\": \"a calm greenhouse\", \"duration\": 6, \"resolution\": \"720p\", \"aspect_ratio\": \"16:9\", \"generate_audio\": true}')\nPath('request.json').write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · exact configured profile",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Keep the complete response and the original returned IDs.",
          "Never resubmit an unknown creation."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations",
          "/videos",
          "/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.24",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.24",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.6",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.6",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": true,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.64",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.64",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "google/veo-3.1-fast",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.24",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.24",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.6",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio_4k",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.6",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio_720p",
            "label": "Estimated output video second",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "per output video second",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.5",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio_4k",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.5",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio_720p",
            "label": "Estimated output video second",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "public_unit_label": "per output video second",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_video_second"
          },
          {
            "amount": "0.64",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.64",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "google/veo-3.1-fast",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "cda661f283bb8abfb73626ad7aa1b5bee29aa5151be22d2808ad1c7e188e4400",
    "input_html_sha256": "62e30829204bcfffa4b839d87c78451e3a87996f6cbcc49bbef59a332a49151a",
    "private_audit_sha256": "465049c7f5ecfeacb8b00d5d38fed61c3cee9a52f46ada12bb212fb535753106",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es-mx/google-veo-3-1-fast/",
    "description": "Veo 3.1 Fast es el modelo de video de Google para escenas cortas a partir de texto o imágenes con sonido generado. Su perfil de producción devuelve clips MP4 de cuatro, seis u ocho segundos a 24 fps, con salida 720p o 1080p y fotogramas iniciales o finales guiados.",
    "locale": "es-mx",
    "md_url": "https://ailoot.ai/models/es-mx/google-veo-3-1-fast/index.md",
    "title": "Google: Veo 3.1 Fast — Ailoot",
    "url": "https://ailoot.ai/models/es-mx/google-veo-3-1-fast/"
  },
  "rawModel": {
    "about": "Veo 3.1 Fast es el perfil rápido de generación de video de Google para una escena corta descrita en texto o establecida por una imagen. Combina la toma visual con sonido generado y admite fotogramas iniciales y finales guiados. Úsalo para desarrollar un concepto de escena, preparar variaciones creativas cortas o crear un segmento audiovisual compacto con una acción y una dirección visual claras.\n\nConstruye el brief alrededor del sujeto, la acción y el entorno. Después añade el encuadre, el movimiento de cámara, la iluminación y el tratamiento visual que hacen útil la toma. Un brief original de producto podría mostrar una lámpara pequeña de cerámica sobre un escritorio de madera, con la cámara acercándose lentamente mientras la luz se enciende y un sonido discreto de interruptor acompaña la acción. El sujeto y el evento visible describen la imagen; la dirección del sonido describe la experiencia auditiva.\n\nEscribe la dirección de escena en inglés, como especifica el perfil de prompts del fabricante. Mantén la acción principal proporcionada a la duración del clip y distingue el movimiento de cámara del movimiento del sujeto. Una vista general de establecimiento, un primer plano de una textura y una toma que sigue un objeto en movimiento responden a preguntas creativas distintas. Elige la vista que comunique el detalle previsto en lugar de combinar indicaciones de cámara sin relación en una sola toma corta.\n\nPara una escena basada en imagen, prepara una imagen inicial clara que ya establezca la apariencia y la composición. El brief de movimiento puede entonces concentrarse en el evento que sigue. Un fotograma final puede proporcionar un destino visual para la transición. Mantén coherentes los detalles importantes del sujeto y el estilo entre los fotogramas, o describe explícitamente la transformación prevista. Revisa la transición misma, además de su imagen inicial y final.\n\nEl perfil de producción del fabricante admite clips de cuatro, seis u ocho segundos, encuadre horizontal 16:9 o vertical 9:16 y hasta cuatro videos de salida por prompt. La salida Fast es 720p o 1080p, a 24 fotogramas por segundo, en formato MP4. El perfil basado en imagen admite JPEG o PNG, incluye un tamaño máximo de imagen de entrada de 20 MB y admite configuraciones de entrada de 720p/1080p. Prepara la composición para su orientación prevista y mantén la entrada dentro de ese límite de imagen.\n\nEl sonido puede formar parte de la escena generada. Describe cualquier línea hablada, sonido ambiental o efecto pertinente junto con la acción visible, identificando al sujeto que debe hablar y al evento que debe producir el sonido. Mantén el diálogo lo bastante corto para la interpretación prevista y distínguelo del ambiente o la música. La generación de audio sigue el brief escrito de escena; una grabación de audio no está entre las entradas normales documentadas para este perfil.\n\nEl perfil de producción actual también incluye generación con referencias de recursos y extensión de video. Las referencias guían la apariencia de un sujeto u objeto, mientras que los fotogramas de inicio y fin guían la composición de apertura y cierre. Selecciona material de referencia cuya función sea clara en la escena en lugar de tratar todas las imágenes como controles intercambiables. Para continuar un clip, elige el flujo de extensión independiente y describe qué debe ocurrir después de la acción existente; su manejo de entradas es distinto del de una toma nueva basada en texto.\n\nUna descripción negativa puede identificar contenido o tratamientos visuales que quieres evitar. Mantén el prompt principal enfocado en la escena que quieres y haz que las exclusiones sean específicas de la tarea. Para una variación de producto, conserva el sujeto y el encuadre mientras cambias un detalle, como la dirección de la luz o el tratamiento de un material. Conserva la configuración y el conjunto de referencias al comparar resultados para que la diferencia creativa siga siendo clara.\n\nVeo 3.1 Fast y el perfil regular Veo 3.1 siguen siendo opciones distintas. La salida de producción documentada de Fast es 720p/1080p; el perfil regular también incluye 4K. Conserva la edición seleccionada y su configuración de salida junto con el recurso, en lugar de tratar un identificador Preview u otra versión de Veo como sinónimo automático de este perfil de producción.\n\nEl flujo crea una operación de generación y expone los archivos de video devueltos cuando termina. Conserva cada salida real seleccionada para revisión junto con su brief, fotogramas de origen y configuración pertinente. Un identificador de operación es un registro de la generación; el recurso MP4 terminado es lo que puede reproducirse y usarse en la edición. Conserva con el video cualquier metadato de procedencia del contenido que se proporcione.\n\nRevisa la apariencia del sujeto, la acción solicitada, el tratamiento de cámara y el sonido a lo largo de todo el clip. Comprueba la inteligibilidad del diálogo y la relación entre sonido y eventos visibles antes de usarlo en una composición más larga. El resultado útil puede ser una toma conceptual, una presentación de producto o un segmento narrativo corto, con títulos, transiciones y otras ediciones añadidos después en el flujo de producción que lo rodea.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "available": null,
    "canonical_model": "google/veo-3.1-fast",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.64",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.64",
            "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": "Consulta los precios completos de la configuración en los detalles."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "2d7f2a21e3339bbaa27b9ff1",
        "label": "Referencias de precios por configuración de video",
        "profiles": [
          {
            "basis": "Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.",
            "dimensions": {
              "conditions": "configuración de audio: with_audio"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.24",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.",
            "dimensions": {
              "conditions": "configuración de audio: with_audio; resolución: 4k"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.6",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.",
            "dimensions": {
              "conditions": "configuración de audio: without_audio"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.",
            "dimensions": {
              "conditions": "configuración de audio: with_audio; resolución: 720p"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.",
            "dimensions": {
              "conditions": "configuración de audio: without_audio; resolución: 4k"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Referencia de precio publicada para la configuración mostrada. Los cargos finales corresponden a la configuración realmente facturada.",
            "dimensions": {
              "conditions": "configuración de audio: without_audio; resolución: 720p"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "google/veo-3.1-fast",
    "input": [
      "text"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Las tarifas mostradas permiten estimar el costo antes de la generación. El cargo final se calcula a partir del costo registrado para la generación original. La duración medida de la salida y las cantidades estimadas no son la cantidad facturable final.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every completed data[] signed owned URL and the full status metadata. Save every output, including its generated audio.",
            "errors": [
              {
                "code": null,
                "condition": "Falla la lectura del cuerpo sin procesar de la solicitud antes de analizar el perfil de video",
                "http_status": 400,
                "recovery": "Conserva la respuesta devuelta y corrige el cuerpo ilegible de la solicitud.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Falla el análisis del perfil exacto de video o el perfil completo analizado no tiene una ficha exacta de precios lista",
                "http_status": 422,
                "message": "The complete video request cannot be priced",
                "recovery": "Conserva la respuesta; usa el perfil completo y exacto admitido y su ficha publicada. Esta rama se ejecuta antes de enviar al proveedor.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "El contenido del resultado original todavía no está disponible",
                "http_status": 409,
                "recovery": "Consulta periódicamente el ID original devuelto y respeta Retry-After.",
                "type": "video_not_ready"
              },
              {
                "code": null,
                "condition": "La respuesta devuelta indica que la operación o el resultado requiere una revisión",
                "http_status": null,
                "recovery": "Conserva el ID original de operación o tarea devuelto, los encabezados de la solicitud y la respuesta; continúa con las consultas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación.",
                "type": "server_error"
              },
              {
                "absent_fields": [
                  "status",
                  "object",
                  "model",
                  "data"
                ],
                "code": "result_pending_check",
                "condition": "GET del estado o contenido original: la tarea no está publicada, el trabajo original no tiene estado failed/cancelled/expired y el estado local es unknown o el estado del trabajo original es completed.",
                "friendly_fields": "error.reason=result_pending_check,error.param=null; error.operation_id and error.request_id when the existing context supplies them. error.message is rewritten/localized.",
                "headers": {
                  "Retry-After": null,
                  "X-Should-Retry": "false"
                },
                "http_status": 503,
                "recovery": "Conserva el id y operation_id originales (el mismo ID público de video), la respuesta y los encabezados; consulta únicamente el estado o contenido original. Nunca envíes una solicitud nueva de generación.",
                "response_fields": {
                  "charge_pending_check": true,
                  "error.code": "result_pending_check",
                  "error.type": "server_error",
                  "id": "original public video ID",
                  "operation_id": "same as id"
                },
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "content": [
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default0"
                  }
                },
                {
                  "http": "GET",
                  "parameters": [
                    {
                      "availability": "source_interface",
                      "conditions": "Must be less than the actual returned output count.",
                      "default": 0,
                      "default_known": true,
                      "enum": null,
                      "enum_known": false,
                      "maximum": null,
                      "maximum_known": false,
                      "minimum": 0,
                      "name": "index",
                      "required": false,
                      "type": "integer"
                    }
                  ],
                  "path": "/v1/videos/generations/{request_id}/content"
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
              "mode": "submit_once_poll_original",
              "multioutputs": "retain every completed data output; index0 alone is not all outputs",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 202,
              "unknown": "Consulta el trabajo original existente; nunca repitas un envío de resultado desconocido.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_video",
                "required": [
                  "prompt"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "Use actual returned task_id or original public video id from response/media library. On HTTP503 result_pending_check from original video status/content GET, operation_id equals that original public video id. Do not assume unrelated operation IDs name media tasks.",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "all_results": "Conserva cada URL firmada de data[] completado que te pertenezca y todos los metadatos de estado. Guarda todas las salidas, incluido su audio generado. Puede haber una pista AAC válida incluso con generate_audio=false; conserva el MP4 original completo, incluido ese audio.",
              "create_status": 202,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": "signed content URL"
                },
                {
                  "description": null,
                  "name": "charge_pending_check",
                  "type": "boolean"
                },
                {
                  "description": null,
                  "name": "error.code",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "error.message",
                  "type": "string"
                },
                {
                  "description": "Respuesta HTTP503 result_pending_check del estado o contenido original: el mismo ID público del video original como id.",
                  "name": "operation_id",
                  "type": "string"
                },
                {
                  "description": "server_error en HTTP503 result_pending_check.",
                  "name": "error.type",
                  "type": "string"
                }
              ],
              "format": "mp4",
              "maximum_outputs": 4,
              "status_enum": [
                "in_progress",
                "completed",
                "failed"
              ]
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/veo-3.1-fast"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "max_utf8_bytes": 10000,
                "name": "prompt",
                "non_whitespace": true,
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  6,
                  8
                ],
                "enum_known": true,
                "name": "duration",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "all fields outside the exact required six-key profile",
              "image or reference inputs",
              "1080p or 4K"
            ]
          },
          "hints": [
            "Conserva la respuesta completa y los ID originales devueltos.",
            "Nunca vuelvas a enviar una creación de resultado desconocido."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "parameters": [
              {
                "enum": [
                  "google/veo-3.1-fast"
                ],
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "max_utf8_bytes": 10000,
                "name": "prompt",
                "non_whitespace": true,
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  4,
                  6,
                  8
                ],
                "name": "duration",
                "required": true,
                "type": "integer"
              },
              {
                "enum": [
                  "720p"
                ],
                "name": "resolution",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "16:9",
                  "9:16"
                ],
                "name": "aspect_ratio",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  false,
                  true
                ],
                "name": "generate_audio",
                "required": true,
                "type": "boolean"
              }
            ],
            "required": [
              "model",
              "prompt",
              "duration",
              "resolution",
              "aspect_ratio",
              "generate_audio"
            ]
          },
          "lifecycle": {
            "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
            "content": [
              {
                "http": "GET",
                "parameters": [
                  {
                    "availability": "source_interface",
                    "conditions": "Must be less than the actual returned output count.",
                    "default": 0,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": null,
                    "maximum_known": false,
                    "minimum": 0,
                    "name": "index",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default0"
                }
              },
              {
                "http": "GET",
                "parameters": [
                  {
                    "availability": "source_interface",
                    "conditions": "Must be less than the actual returned output count.",
                    "default": 0,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": null,
                    "maximum_known": false,
                    "minimum": 0,
                    "name": "index",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/videos/generations/{request_id}/content"
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "id_source": "Actualreturnedpublicid; opaque URLencodeit forGET. On HTTP503 result_pending_check from original status/content GET, operation_id equals id: use that same original public video ID for polling. Do not substitute unrelated operation IDs from other responses.",
            "mode": "submit_once_poll_original",
            "multioutputs": "retain every completed data output; index0 alone is not all outputs",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 202,
            "unknown": "Read existing original job; never resubmit unknown send.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations",
            "/videos",
            "/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "family": "video",
            "format": "mp4",
            "max_outputs": 4,
            "priced_duration": "Video-file duration is not the billing quantity; final charge follows the actual billed configuration."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.24",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.24",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.6",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.6",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "La tarifa mostrada estima el costo antes de generar. El cargo definitivo se calcula a partir del costo registrado para la generación original. La duración física del video no es la cantidad facturable.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": true,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per video second"
            },
            "label": "Precio del video",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "basis": "Esta estimación no es un cargo adicional ni una tarifa fija por la generación completada.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Costo estimado de generación",
            "units": [
              {
                "amount": "0.64",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.64",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/veo-3.1-fast\", \"prompt\": \"a calm greenhouse\", \"duration\": 6, \"resolution\": \"720p\", \"aspect_ratio\": \"16:9\", \"generate_audio\": true}')\nPath('request.json').write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · exact configured profile",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Keep the complete response and the original returned IDs.",
          "Never resubmit an unknown creation."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations",
          "/videos",
          "/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.24",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.24",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: with_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.6",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.6",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": true,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_with_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "audio: without_audio; resolution: 4k",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.5",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_4k",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.5",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "The displayed rate estimates the cost before generation. The final charge is calculated from the cost recorded for the original generation. Physical video duration is not the billable quantity.",
            "dimensions": {
              "forecast_quantity": "Requested configuration; estimate only.",
              "generate_audio": false,
              "quoted_unit": "per output video second",
              "resolution": "720p"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.16",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_without_audio_720p",
                "label": "Estimated output video second",
                "native_amount_usd_per_unit": "0.16",
                "native_quantity": 1,
                "public_unit_label": "per output video second",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.64",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.64",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "google/veo-3.1-fast",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.24",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.24",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.6",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio_4k",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.6",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_with_audio_720p",
            "label": "Estimated output video second",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "per output video second",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.5",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio_4k",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.5",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_without_audio_720p",
            "label": "Estimated output video second",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "public_unit_label": "per output video second",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_video_second"
          },
          {
            "amount": "0.64",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.64",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/veo-3.1-fast",
        "request_model_id": "google/veo-3.1-fast",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Veo 3.1 Fast",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.64,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.64,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "audio": true,
          "native_model_id": "veo-3.1-fast-generate-preview",
          "resolution": "720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.20",
            "amount_unit": "usd_per_output_second",
            "conditions": {
              "audio": true,
              "native_model_id": "veo-3.1-fast-generate-preview",
              "resolution": "720p"
            },
            "key": "output_video_audio",
            "label": "output video audio",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "audio": true,
          "native_model_id": "veo-3.1-fast-generate-preview",
          "resolution": "1080p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.24",
            "amount_unit": "usd_per_output_second",
            "conditions": {
              "audio": true,
              "native_model_id": "veo-3.1-fast-generate-preview",
              "resolution": "1080p"
            },
            "key": "output_video_audio",
            "label": "output video audio",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "audio": true,
          "native_model_id": "veo-3.1-fast-generate-preview",
          "resolution": "4k"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.60",
            "amount_unit": "usd_per_output_second",
            "conditions": {
              "audio": true,
              "native_model_id": "veo-3.1-fast-generate-preview",
              "resolution": "4k"
            },
            "key": "output_video_audio",
            "label": "output video audio",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.24",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "audio=true Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.24",
            "key": "duration_seconds_with_audio",
            "label": "output second",
            "native_amount_usd_per_unit": "0.24",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.6",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=4k · audio=true Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.60",
            "key": "duration_seconds_with_audio_4k",
            "label": "output second",
            "native_amount_usd_per_unit": "0.6",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "audio=false Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.20",
            "key": "duration_seconds_without_audio",
            "label": "output second",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=720p · audio=true",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.20",
            "key": "duration_seconds_with_audio_720p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.50",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=4k · audio=false Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.50",
            "key": "duration_seconds_without_audio_4k",
            "label": "output second",
            "native_amount_usd_per_unit": "0.50",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.16",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=720p · audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.16",
            "key": "duration_seconds_without_audio_720p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.16",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          }
        ]
      }
    ],
    "public_id": "google/veo-3.1-fast",
    "short": "Veo 3.1 Fast es el modelo de video de Google para escenas cortas a partir de texto o imágenes con sonido generado. Su perfil de producción devuelve clips MP4 de cuatro, seis u ocho segundos a 24 fps, con salida 720p o 1080p y fotogramas iniciales o finales guiados."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Veo 3.1 Fast es el modelo de video de Google para escenas cortas a partir de texto o imágenes con sonido generado. Su perfil de producción devuelve clips MP4 de cuatro, seis u ocho segundos a 24 fps, con salida 720p o 1080p y fotogramas iniciales o finales guiados.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "24085b5fa8ba61964c60b043548ef4f7421073c70e55463a886ebd33b2561354",
    "renderer_sha256": "50c5984577eac7205687c05e1c36de5d3ba7a0afdff02194efad3a88143581e8"
  },
  "sourceRevision": "fe8f5c316b43259787afb90268012486bedc81989d8b98699311217dc11780e8"
}
