{
  "aboutHtml": "<p>Avatar IV es el motor de avatares de HeyGen para transformar una imagen fija en un vídeo hablado expresivo. Su diseño de audio a expresión, inspirado en difusión, utiliza el tono vocal, el ritmo y la emoción para orientar el movimiento facial, las inclinaciones de cabeza, las pausas y las microexpresiones. Su finalidad es que un presentador o personaje transmita contenido hablado con sincronización labial y gestos, en lugar de ser un generador general de escenas que crea todo un escenario y una banda sonora a partir de una instrucción cinematográfica.</p><p>El fabricante describe compatibilidad con personajes realistas y estilizados, incluidas imágenes en ángulo o de perfil, rostros de estilo anime y mascotas. Los personajes basados en fotografías funcionan mejor cuando sus ojos, boca y estructura facial son fáciles de identificar. HeyGen recomienda una imagen clara y bien iluminada, con postura natural y manos visibles cuando importen los gestos. Un rostro muy pequeño, labios ocultos, máscaras grandes, un pico pronunciado o proporciones muy exageradas pueden debilitar el movimiento facial y la sincronización labial. Mantenga el encuadre de origen adecuado para la interpretación prevista.</p><p>El fabricante proporciona dos vías de entrada de voz. Un guion escrito se empareja con una voz seleccionada; una pista de audio pregrabada aporta directamente la voz y la sincronización. Utilice la vía de audio grabado cuando la interpretación ya esté establecida y la vía de guion cuando la voz deba sintetizarse. Estas entradas son alternativas en la interfaz documentada. Prepare la redacción final, los nombres y la pronunciación antes de animar y conserve el audio o el guion junto al vídeo devuelto para comprobar el resultado hablado.</p><p>El perfil del modelo Avatar IV de HeyGen abarca avatares de estudio, Digital Twins, Photo Avatars, imágenes directas y sujetos creados mediante instrucciones. Un Photo Avatar reutilizable proporciona un sujeto estable para vídeos posteriores, mientras que un flujo de imagen directa parte de la imagen suministrada. El perfil Photo Avatar del fabricante ofrece instrucciones de movimiento en texto libre y opciones de expresividad high, medium o low, con low como valor predeterminado. Conserve el aspecto de avatar y el motor elegidos al crear una serie, para que una imagen de origen o modelo de renderizado diferentes no se conviertan en un cambio inadvertido del presentador.</p><p>Para dirigir el movimiento, describa una acción corporal visible y su cualidad emocional. «Asiente suavemente con una sonrisa cálida» aporta un gesto y una expresión; un saludo breve puede utilizar un movimiento amistoso de la mano. El fabricante recomienda un gesto principal, opcionalmente acompañado de una expresión facial, y no más de dos cláusulas breves para una secuencia. Avatar IV gestiona el ritmo a partir de la interpretación, por lo que la guía de Studio no exige un calendario de gestos segundo a segundo. Una redacción específica y concisa es más fácil de examinar que varias acciones enfrentadas en una instrucción.</p><p>El perfil de audio a vídeo del fabricante renderiza hasta treinta minutos de audio proporcionado por solicitud, y los recursos MP3 o WAV cargados tienen un límite de 32 MB. Para una lección o grabación más larga, divida el material en límites coherentes del habla y conserve el orden original. La sincronización hablada del vídeo final debe seguir el audio seleccionado, en lugar de una estimación ajena de duración de clip.</p><p>Los ajustes documentados de salida del fabricante incluyen 720p o 1080p y formas 16:9, 9:16, 4:5, 5:4 o 1:1, con una opción automática que sigue las proporciones de origen. El ajuste cover puede recortar el sujeto; contain encaja todo el sujeto y puede dejar visible fondo circundante. Su flujo de audio a vídeo devuelve MP4 de forma predeterminada. Para avatares de vídeo, la salida WebM transparente exige compatibilidad con extracción de máscara y el fabricante aplica eliminación de fondo para esa salida, en lugar de combinarla con un fondo nuevo. Examine el encuadre y el archivo reales antes de colocar al presentador en una composición mayor.</p><p>Una introducción formativa puede utilizar una imagen de presentador legible, una explicación concisa y un gesto contenido en la instrucción clave. Una explicación de producto puede conservar el mismo aspecto de avatar y cambiar el guion hablado para distintas funciones. El fabricante también documenta archivos opcionales de subtítulos y subtítulos incrustados en la imagen; revise su redacción y sincronización junto con la voz. El renderizado es asíncrono en la interfaz del fabricante, por lo que una respuesta de creación y el vídeo completado son recursos diferentes. Conserve la grabación terminada y su estado de finalización con el resultado de la tarea.</p><p>Avatar IV sigue siendo distinto del movimiento guiado por referencias de Avatar V y de sus controles independientes de preajustes de Studio. También es distinto de la generación de escenas de propósito general de HeyGen Video y de una conversación interactiva con un avatar en directo. Revise el movimiento de boca renderizado, las manos visibles, la expresión facial, las pausas y la redacción hablada frente al material de origen y el tono previsto. La imagen, la pose, la iluminación y las instrucciones de movimiento afectan al resultado; una animación basada en fotografía debe revisarse como una interpretación generada y conservar las entradas elegidas para revisiones posteriores.</p>",
  "aboutText": "Avatar IV es el motor de avatares de HeyGen para transformar una imagen fija en un vídeo hablado expresivo. Su diseño de audio a expresión, inspirado en difusión, utiliza el tono vocal, el ritmo y la emoción para orientar el movimiento facial, las inclinaciones de cabeza, las pausas y las microexpresiones. Su finalidad es que un presentador o personaje transmita contenido hablado con sincronización labial y gestos, en lugar de ser un generador general de escenas que crea todo un escenario y una banda sonora a partir de una instrucción cinematográfica.\n\nEl fabricante describe compatibilidad con personajes realistas y estilizados, incluidas imágenes en ángulo o de perfil, rostros de estilo anime y mascotas. Los personajes basados en fotografías funcionan mejor cuando sus ojos, boca y estructura facial son fáciles de identificar. HeyGen recomienda una imagen clara y bien iluminada, con postura natural y manos visibles cuando importen los gestos. Un rostro muy pequeño, labios ocultos, máscaras grandes, un pico pronunciado o proporciones muy exageradas pueden debilitar el movimiento facial y la sincronización labial. Mantenga el encuadre de origen adecuado para la interpretación prevista.\n\nEl fabricante proporciona dos vías de entrada de voz. Un guion escrito se empareja con una voz seleccionada; una pista de audio pregrabada aporta directamente la voz y la sincronización. Utilice la vía de audio grabado cuando la interpretación ya esté establecida y la vía de guion cuando la voz deba sintetizarse. Estas entradas son alternativas en la interfaz documentada. Prepare la redacción final, los nombres y la pronunciación antes de animar y conserve el audio o el guion junto al vídeo devuelto para comprobar el resultado hablado.\n\nEl perfil del modelo Avatar IV de HeyGen abarca avatares de estudio, Digital Twins, Photo Avatars, imágenes directas y sujetos creados mediante instrucciones. Un Photo Avatar reutilizable proporciona un sujeto estable para vídeos posteriores, mientras que un flujo de imagen directa parte de la imagen suministrada. El perfil Photo Avatar del fabricante ofrece instrucciones de movimiento en texto libre y opciones de expresividad high, medium o low, con low como valor predeterminado. Conserve el aspecto de avatar y el motor elegidos al crear una serie, para que una imagen de origen o modelo de renderizado diferentes no se conviertan en un cambio inadvertido del presentador.\n\nPara dirigir el movimiento, describa una acción corporal visible y su cualidad emocional. «Asiente suavemente con una sonrisa cálida» aporta un gesto y una expresión; un saludo breve puede utilizar un movimiento amistoso de la mano. El fabricante recomienda un gesto principal, opcionalmente acompañado de una expresión facial, y no más de dos cláusulas breves para una secuencia. Avatar IV gestiona el ritmo a partir de la interpretación, por lo que la guía de Studio no exige un calendario de gestos segundo a segundo. Una redacción específica y concisa es más fácil de examinar que varias acciones enfrentadas en una instrucción.\n\nEl perfil de audio a vídeo del fabricante renderiza hasta treinta minutos de audio proporcionado por solicitud, y los recursos MP3 o WAV cargados tienen un límite de 32 MB. Para una lección o grabación más larga, divida el material en límites coherentes del habla y conserve el orden original. La sincronización hablada del vídeo final debe seguir el audio seleccionado, en lugar de una estimación ajena de duración de clip.\n\nLos ajustes documentados de salida del fabricante incluyen 720p o 1080p y formas 16:9, 9:16, 4:5, 5:4 o 1:1, con una opción automática que sigue las proporciones de origen. El ajuste cover puede recortar el sujeto; contain encaja todo el sujeto y puede dejar visible fondo circundante. Su flujo de audio a vídeo devuelve MP4 de forma predeterminada. Para avatares de vídeo, la salida WebM transparente exige compatibilidad con extracción de máscara y el fabricante aplica eliminación de fondo para esa salida, en lugar de combinarla con un fondo nuevo. Examine el encuadre y el archivo reales antes de colocar al presentador en una composición mayor.\n\nUna introducción formativa puede utilizar una imagen de presentador legible, una explicación concisa y un gesto contenido en la instrucción clave. Una explicación de producto puede conservar el mismo aspecto de avatar y cambiar el guion hablado para distintas funciones. El fabricante también documenta archivos opcionales de subtítulos y subtítulos incrustados en la imagen; revise su redacción y sincronización junto con la voz. El renderizado es asíncrono en la interfaz del fabricante, por lo que una respuesta de creación y el vídeo completado son recursos diferentes. Conserve la grabación terminada y su estado de finalización con el resultado de la tarea.\n\nAvatar IV sigue siendo distinto del movimiento guiado por referencias de Avatar V y de sus controles independientes de preajustes de Studio. También es distinto de la generación de escenas de propósito general de HeyGen Video y de una conversación interactiva con un avatar en directo. Revise el movimiento de boca renderizado, las manos visibles, la expresión facial, las pausas y la redacción hablada frente al material de origen y el tono previsto. La imagen, la pose, la iluminación y las instrucciones de movimiento afectan al resultado; una animación basada en fotografía debe revisarse como una interpretación generada y conservar las entradas elegidas para revisiones posteriores.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "4055c8c114b3e4d87b6437b1c8ce76e77d7f168da580a92e3abcac1d23e02097",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "es",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">HeyGen: Avatar IV</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>HeyGen /</span><code>heygen/avatar-iv</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\">Primeros pasos</button><button type=\"button\" data-card-jump=\"methods\">Entradas y métodos</button><button type=\"button\" data-card-jump=\"pricing\">Planes</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|heygen%2Favatar-iv\">Vídeo</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\">Primeros pasos</h3><p class=\"mdesc-full\">Avatar IV anima una fotografía para convertirla en un vídeo hablado con sincronización labial, con expresión facial y ritmo de gestos guiados por la voz. HeyGen documenta flujos con guion o audio grabado y controles de movimiento de Photo Avatar para presentadores realistas o estilizados.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceptadas</dt><dd>Texto · Imágenes · Audio · Vídeo</dd></div><div><dt>Resultados</dt><dd>Vídeo</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>Avatar IV es el motor de avatares de HeyGen para transformar una imagen fija en un vídeo hablado expresivo. Su diseño de audio a expresión, inspirado en difusión, utiliza el tono vocal, el ritmo y la emoción para orientar el movimiento facial, las inclinaciones de cabeza, las pausas y las microexpresiones. Su finalidad es que un presentador o personaje transmita contenido hablado con sincronización labial y gestos, en lugar de ser un generador general de escenas que crea todo un escenario y una banda sonora a partir de una instrucción cinematográfica.</p><p>El fabricante describe compatibilidad con personajes realistas y estilizados, incluidas imágenes en ángulo o de perfil, rostros de estilo anime y mascotas. Los personajes basados en fotografías funcionan mejor cuando sus ojos, boca y estructura facial son fáciles de identificar. HeyGen recomienda una imagen clara y bien iluminada, con postura natural y manos visibles cuando importen los gestos. Un rostro muy pequeño, labios ocultos, máscaras grandes, un pico pronunciado o proporciones muy exageradas pueden debilitar el movimiento facial y la sincronización labial. Mantenga el encuadre de origen adecuado para la interpretación prevista.</p><p>El fabricante proporciona dos vías de entrada de voz. Un guion escrito se empareja con una voz seleccionada; una pista de audio pregrabada aporta directamente la voz y la sincronización. Utilice la vía de audio grabado cuando la interpretación ya esté establecida y la vía de guion cuando la voz deba sintetizarse. Estas entradas son alternativas en la interfaz documentada. Prepare la redacción final, los nombres y la pronunciación antes de animar y conserve el audio o el guion junto al vídeo devuelto para comprobar el resultado hablado.</p><p>El perfil del modelo Avatar IV de HeyGen abarca avatares de estudio, Digital Twins, Photo Avatars, imágenes directas y sujetos creados mediante instrucciones. Un Photo Avatar reutilizable proporciona un sujeto estable para vídeos posteriores, mientras que un flujo de imagen directa parte de la imagen suministrada. El perfil Photo Avatar del fabricante ofrece instrucciones de movimiento en texto libre y opciones de expresividad high, medium o low, con low como valor predeterminado. Conserve el aspecto de avatar y el motor elegidos al crear una serie, para que una imagen de origen o modelo de renderizado diferentes no se conviertan en un cambio inadvertido del presentador.</p><p>Para dirigir el movimiento, describa una acción corporal visible y su cualidad emocional. «Asiente suavemente con una sonrisa cálida» aporta un gesto y una expresión; un saludo breve puede utilizar un movimiento amistoso de la mano. El fabricante recomienda un gesto principal, opcionalmente acompañado de una expresión facial, y no más de dos cláusulas breves para una secuencia. Avatar IV gestiona el ritmo a partir de la interpretación, por lo que la guía de Studio no exige un calendario de gestos segundo a segundo. Una redacción específica y concisa es más fácil de examinar que varias acciones enfrentadas en una instrucción.</p><p>El perfil de audio a vídeo del fabricante renderiza hasta treinta minutos de audio proporcionado por solicitud, y los recursos MP3 o WAV cargados tienen un límite de 32 MB. Para una lección o grabación más larga, divida el material en límites coherentes del habla y conserve el orden original. La sincronización hablada del vídeo final debe seguir el audio seleccionado, en lugar de una estimación ajena de duración de clip.</p><p>Los ajustes documentados de salida del fabricante incluyen 720p o 1080p y formas 16:9, 9:16, 4:5, 5:4 o 1:1, con una opción automática que sigue las proporciones de origen. El ajuste cover puede recortar el sujeto; contain encaja todo el sujeto y puede dejar visible fondo circundante. Su flujo de audio a vídeo devuelve MP4 de forma predeterminada. Para avatares de vídeo, la salida WebM transparente exige compatibilidad con extracción de máscara y el fabricante aplica eliminación de fondo para esa salida, en lugar de combinarla con un fondo nuevo. Examine el encuadre y el archivo reales antes de colocar al presentador en una composición mayor.</p><p>Una introducción formativa puede utilizar una imagen de presentador legible, una explicación concisa y un gesto contenido en la instrucción clave. Una explicación de producto puede conservar el mismo aspecto de avatar y cambiar el guion hablado para distintas funciones. El fabricante también documenta archivos opcionales de subtítulos y subtítulos incrustados en la imagen; revise su redacción y sincronización junto con la voz. El renderizado es asíncrono en la interfaz del fabricante, por lo que una respuesta de creación y el vídeo completado son recursos diferentes. Conserve la grabación terminada y su estado de finalización con el resultado de la tarea.</p><p>Avatar IV sigue siendo distinto del movimiento guiado por referencias de Avatar V y de sus controles independientes de preajustes de Studio. También es distinto de la generación de escenas de propósito general de HeyGen Video y de una conversación interactiva con un avatar en directo. Revise el movimiento de boca renderizado, las manos visibles, la expresión facial, las pausas y la redacción hablada frente al material de origen y el tono previsto. La imagen, la pose, la iluminación y las instrucciones de movimiento afectan al resultado; una animación basada en fotografía debe revisarse como una interpretación generada y conservar las entradas elegidas para revisiones posteriores.</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 · Vídeo</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Tipos de entrada</dt><dd><code>text</code>, <code>image</code>, <code>audio</code>, <code>video</code></dd></div><div><dt>Tipos de salida</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valores y límites</th><th>Predeterminado</th></tr></thead><tbody><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><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>heygen/avatar-iv</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>array</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>Número mínimo de elementos: 2</div><div>Número máximo de elementos: 2</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr><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>Opcional</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr></tbody></table></div><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, input_references</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, image, audio, video</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_conditions</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>Usa las URL de contenido reales de los recursos de medios completados bajo tu titularidad, con las firmas devueltas: una fuente de vídeo para BFL, o una fuente de imagen y otra de audio para el avatar. Se requiere la comprobación de titularidad, tipo y bytes definida en el código fuente., Proporciona exactamente una imagen PNG/JPEG y un recurso de audio WAV/MP3. El audio no puede superar los 32000000 bytes, y su duración debe ser mayor que 0 y como máximo de 1800 segundos.</td></tr></tbody></table></div><p>Ciclo de vida: <code>asynchronous_job_then_owned_outputs</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code> · id o polling_url real devuelto</p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Planes</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 estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen 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 rápido</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo rápido</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 utiliza el ajuste predeterminado (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>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=\"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 vídeo</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=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de vídeo</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>No se declara ninguna condición adicional en esta clave de precios.</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del vídeo · Estimación solo para comparar</span> <b>$0.1</b> <span class=\"price-unit\">por segundo de vídeo</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Coste 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=\"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 · Coste estimado de generación · Estimación solo para comparar</span> <b>$0.1</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 para la generación completada.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserva un importe 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/billing/reserve/\">Cómo funcionan la reserva y la liquidación →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Solicitudes de ejemplo</h3><h4>Ailoot Ultra · Vídeo</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-1711-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1711-panel-0\" aria-selected=\"true\" tabindex=\"0\">Usa la entrada real y conserva el resultado completo</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-1711-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1711-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_REFERENCES_JSON\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;heygen/avatar-iv&#39;, &#39;input_references&#39;: &#39;${ACTUAL_OWNED_INPUT_REFERENCES}&#39;}\nrequest[&#39;input_references&#39;]=json.loads(os.environ[&#39;AILOOT_INPUT_REFERENCES_JSON&#39;])\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\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 · Vídeo</h4><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li></ul><h5>Guarda todos los archivos completados</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-1712-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1712-panel-0\" aria-selected=\"true\" tabindex=\"0\">Obtener todos los archivos completados 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-1712-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1712-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}&quot;\nexport AILOOT_STATUS_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[&quot;AILOOT_STATUS_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose the actual completed status file&quot;)\nr=json.loads(f.read_text())\nif r.get(&quot;status&quot;)!=&quot;completed&quot; or not isinstance(r.get(&quot;data&quot;),list) or not r[&quot;data&quot;]:raise SystemExit(&quot;Wait for a completed status with asset paths&quot;)\nurls=[]\nfor x in r[&quot;data&quot;]:\n    if not isinstance(x,str) or &quot;\\n&quot; in x or &quot;\\r&quot; in x:raise SystemExit(&quot;Invalid asset path&quot;)\n    u=urljoin(&quot;https://api.ailoot.ai&quot;,x)\n    z=urlsplit(u)\n    if z.scheme!=&quot;https&quot; or z.netloc!=&quot;api.ailoot.ai&quot; or z.username or z.password:raise SystemExit(&quot;Use the actual Ailoot asset paths from status&quot;)\n    urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; \\\n    -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o &quot;video-${index}.mp4&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div><div class=\"card-result-process\" data-all-results><h5>Conserva todos los resultados completados</h5><p class=\"note-s\">Guarda todos los vídeos completados o archivos recibidos; descarga cada URL de archivo que se haya devuelto.</p><p class=\"note-s\">Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si es necesario revisar la respuesta original</h5><p class=\"note-s\">Conserva X-Client-Request-ID, X-Ailoot-Task-Id y los valores reales devueltos de id/polling_url. Continúa el trabajo original; no vuelvas a enviar la solicitud de creación.</p></div><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></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></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></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></td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">outputs[]</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></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=heygen%2Favatar-iv&amp;route=Ultra&amp;caller=heygen%2Favatar-iv&amp;fmt=videos\"><code>heygen/avatar-iv</code></a></span></p><h4>Alias de rutas de métodos</h4><p class=\"note-s\">Usa las rutas de método indicadas arriba.</p><h4>ID de modelo relacionados</h4><p class=\"note-s\"><a href=\"#m=heygen%2Favatar-iv&amp;route=Ultra&amp;caller=heygen%2Favatar-iv&amp;fmt=videos\"><code>heygen/avatar-iv</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "heygen/avatar-iv",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "heygen/avatar-iv",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|heygen%2Favatar-iv",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen 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": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "Conserva X-Client-Request-ID, X-Ailoot-Task-Id y los valores reales devueltos de id/polling_url. Continúa el trabajo original; no vuelvas a enviar la solicitud de creación."
            },
            "outputs": {
              "all_results": "Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.",
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "heygen/avatar-iv"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "image_url": {
                          "additionalProperties": false,
                          "properties": {
                            "url": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "url"
                          ],
                          "type": "object"
                        },
                        "type": {
                          "const": "image_url"
                        }
                      },
                      "required": [
                        "type",
                        "image_url"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "audio_url": {
                          "additionalProperties": false,
                          "properties": {
                            "url": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "url"
                          ],
                          "type": "object"
                        },
                        "type": {
                          "const": "audio_url"
                        }
                      },
                      "required": [
                        "type",
                        "audio_url"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "maximum_items": 2,
                "minimum_items": 2,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "name": "prompt",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "input_references": {
                  "allOf": [
                    {
                      "contains": {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      "maxContains": 1,
                      "minContains": 1
                    },
                    {
                      "contains": {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      },
                      "maxContains": 1,
                      "minContains": 1
                    }
                  ],
                  "items": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "maxItems": 2,
                  "minItems": 2,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "heygen/avatar-iv"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "const": "",
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_references"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "heygen/avatar-iv"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Usa las URL de contenido reales de los recursos de medios completados bajo tu titularidad, con las firmas devueltas: una fuente de vídeo para BFL, o una fuente de imagen y otra de audio para el avatar. Se requiere la comprobación de titularidad, tipo y bytes definida en el código fuente.",
              "Proporciona exactamente una imagen PNG/JPEG y un recurso de audio WAV/MP3. El audio no puede superar los 32000000 bytes, y su duración debe ser mayor que 0 y como máximo de 1800 segundos."
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id o polling_url real devuelto",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Coste estimado de generación",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'heygen/avatar-iv', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "Vídeo",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "heygen/avatar-iv",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}"
        ],
        "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.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "heygen/avatar-iv",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "9c81ef814ec2c8bcd4e2dd7f1d60e4d973e14eff0b08a47421afa2b493d68d86",
    "input_html_sha256": "dee7f05b19b3f8cb83a9a7a73cd73eb73ecc95697864af4e3a2680f64ef9d0a0",
    "private_audit_sha256": "9b128b3977f2222cf32c71a98bebef830377351e44fce7cdb85016d9c29c435d",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es/heygen-avatar-iv/",
    "description": "Avatar IV anima una fotografía para convertirla en un vídeo hablado con sincronización labial, con expresión facial y ritmo de gestos guiados por la voz. HeyGen documenta flujos con guion o audio grabado y controles de movimiento de Photo Avatar para presentadores realistas o estilizados.",
    "locale": "es",
    "md_url": "https://ailoot.ai/models/es/heygen-avatar-iv/index.md",
    "title": "HeyGen: Avatar IV — Ailoot",
    "url": "https://ailoot.ai/models/es/heygen-avatar-iv/"
  },
  "rawModel": {
    "about": "Avatar IV es el motor de avatares de HeyGen para transformar una imagen fija en un vídeo hablado expresivo. Su diseño de audio a expresión, inspirado en difusión, utiliza el tono vocal, el ritmo y la emoción para orientar el movimiento facial, las inclinaciones de cabeza, las pausas y las microexpresiones. Su finalidad es que un presentador o personaje transmita contenido hablado con sincronización labial y gestos, en lugar de ser un generador general de escenas que crea todo un escenario y una banda sonora a partir de una instrucción cinematográfica.\n\nEl fabricante describe compatibilidad con personajes realistas y estilizados, incluidas imágenes en ángulo o de perfil, rostros de estilo anime y mascotas. Los personajes basados en fotografías funcionan mejor cuando sus ojos, boca y estructura facial son fáciles de identificar. HeyGen recomienda una imagen clara y bien iluminada, con postura natural y manos visibles cuando importen los gestos. Un rostro muy pequeño, labios ocultos, máscaras grandes, un pico pronunciado o proporciones muy exageradas pueden debilitar el movimiento facial y la sincronización labial. Mantenga el encuadre de origen adecuado para la interpretación prevista.\n\nEl fabricante proporciona dos vías de entrada de voz. Un guion escrito se empareja con una voz seleccionada; una pista de audio pregrabada aporta directamente la voz y la sincronización. Utilice la vía de audio grabado cuando la interpretación ya esté establecida y la vía de guion cuando la voz deba sintetizarse. Estas entradas son alternativas en la interfaz documentada. Prepare la redacción final, los nombres y la pronunciación antes de animar y conserve el audio o el guion junto al vídeo devuelto para comprobar el resultado hablado.\n\nEl perfil del modelo Avatar IV de HeyGen abarca avatares de estudio, Digital Twins, Photo Avatars, imágenes directas y sujetos creados mediante instrucciones. Un Photo Avatar reutilizable proporciona un sujeto estable para vídeos posteriores, mientras que un flujo de imagen directa parte de la imagen suministrada. El perfil Photo Avatar del fabricante ofrece instrucciones de movimiento en texto libre y opciones de expresividad high, medium o low, con low como valor predeterminado. Conserve el aspecto de avatar y el motor elegidos al crear una serie, para que una imagen de origen o modelo de renderizado diferentes no se conviertan en un cambio inadvertido del presentador.\n\nPara dirigir el movimiento, describa una acción corporal visible y su cualidad emocional. «Asiente suavemente con una sonrisa cálida» aporta un gesto y una expresión; un saludo breve puede utilizar un movimiento amistoso de la mano. El fabricante recomienda un gesto principal, opcionalmente acompañado de una expresión facial, y no más de dos cláusulas breves para una secuencia. Avatar IV gestiona el ritmo a partir de la interpretación, por lo que la guía de Studio no exige un calendario de gestos segundo a segundo. Una redacción específica y concisa es más fácil de examinar que varias acciones enfrentadas en una instrucción.\n\nEl perfil de audio a vídeo del fabricante renderiza hasta treinta minutos de audio proporcionado por solicitud, y los recursos MP3 o WAV cargados tienen un límite de 32 MB. Para una lección o grabación más larga, divida el material en límites coherentes del habla y conserve el orden original. La sincronización hablada del vídeo final debe seguir el audio seleccionado, en lugar de una estimación ajena de duración de clip.\n\nLos ajustes documentados de salida del fabricante incluyen 720p o 1080p y formas 16:9, 9:16, 4:5, 5:4 o 1:1, con una opción automática que sigue las proporciones de origen. El ajuste cover puede recortar el sujeto; contain encaja todo el sujeto y puede dejar visible fondo circundante. Su flujo de audio a vídeo devuelve MP4 de forma predeterminada. Para avatares de vídeo, la salida WebM transparente exige compatibilidad con extracción de máscara y el fabricante aplica eliminación de fondo para esa salida, en lugar de combinarla con un fondo nuevo. Examine el encuadre y el archivo reales antes de colocar al presentador en una composición mayor.\n\nUna introducción formativa puede utilizar una imagen de presentador legible, una explicación concisa y un gesto contenido en la instrucción clave. Una explicación de producto puede conservar el mismo aspecto de avatar y cambiar el guion hablado para distintas funciones. El fabricante también documenta archivos opcionales de subtítulos y subtítulos incrustados en la imagen; revise su redacción y sincronización junto con la voz. El renderizado es asíncrono en la interfaz del fabricante, por lo que una respuesta de creación y el vídeo completado son recursos diferentes. Conserve la grabación terminada y su estado de finalización con el resultado de la tarea.\n\nAvatar IV sigue siendo distinto del movimiento guiado por referencias de Avatar V y de sus controles independientes de preajustes de Studio. También es distinto de la generación de escenas de propósito general de HeyGen Video y de una conversación interactiva con un avatar en directo. Revise el movimiento de boca renderizado, las manos visibles, la expresión facial, las pausas y la redacción hablada frente al material de origen y el tono previsto. La imagen, la pose, la iluminación y las instrucciones de movimiento afectan al resultado; una animación basada en fotografía debe revisarse como una interpretación generada y conservar las entradas elegidas para revisiones posteriores.",
    "alias_of": null,
    "aliases": [],
    "author": "HeyGen",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image",
        "audio"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.1",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Consulta los precios completos de la configuración en los detalles."
      }
    ],
    "ctx": null,
    "formats": [
      "videos"
    ],
    "id": "heygen/avatar-iv",
    "input": [
      "text",
      "image",
      "audio",
      "video"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen 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": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "Conserva X-Client-Request-ID, X-Ailoot-Task-Id y los valores reales devueltos de id/polling_url. Continúa el trabajo original; no vuelvas a enviar la solicitud de creación."
            },
            "outputs": {
              "all_results": "Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.",
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "heygen/avatar-iv"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "image_url": {
                          "additionalProperties": false,
                          "properties": {
                            "url": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "url"
                          ],
                          "type": "object"
                        },
                        "type": {
                          "const": "image_url"
                        }
                      },
                      "required": [
                        "type",
                        "image_url"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "audio_url": {
                          "additionalProperties": false,
                          "properties": {
                            "url": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "url"
                          ],
                          "type": "object"
                        },
                        "type": {
                          "const": "audio_url"
                        }
                      },
                      "required": [
                        "type",
                        "audio_url"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "maximum_items": 2,
                "minimum_items": 2,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "name": "prompt",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "input_references": {
                  "allOf": [
                    {
                      "contains": {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      "maxContains": 1,
                      "minContains": 1
                    },
                    {
                      "contains": {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      },
                      "maxContains": 1,
                      "minContains": 1
                    }
                  ],
                  "items": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "maxItems": 2,
                  "minItems": 2,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "heygen/avatar-iv"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "const": "",
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_references"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "heygen/avatar-iv"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Usa las URL de contenido reales de los recursos de medios completados bajo tu titularidad, con las firmas devueltas: una fuente de vídeo para BFL, o una fuente de imagen y otra de audio para el avatar. Se requiere la comprobación de titularidad, tipo y bytes definida en el código fuente.",
              "Proporciona exactamente una imagen PNG/JPEG y un recurso de audio WAV/MP3. El audio no puede superar los 32000000 bytes, y su duración debe ser mayor que 0 y como máximo de 1800 segundos."
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id o polling_url real devuelto",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Coste estimado de generación",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'heygen/avatar-iv', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "Vídeo",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "heygen/avatar-iv",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}"
        ],
        "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.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "heygen/avatar-iv",
        "request_model_id": "heygen/avatar-iv",
        "route_label": "Ultra"
      }
    ],
    "name": "HeyGen: Avatar IV",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.1,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.1,
      "varies": false
    },
    "short": "Avatar IV anima una fotografía para convertirla en un vídeo hablado con sincronización labial, con expresión facial y ritmo de gestos guiados por la voz. HeyGen documenta flujos con guion o audio grabado y controles de movimiento de Photo Avatar para presentadores realistas o estilizados."
  },
  "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": "Avatar IV anima una fotografía para convertirla en un vídeo hablado con sincronización labial, con expresión facial y ritmo de gestos guiados por la voz. HeyGen documenta flujos con guion o audio grabado y controles de movimiento de Photo Avatar para presentadores realistas o estilizados.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "49262845152b6b2f27d2f4df20a8ba2dea17f53dadf6b95990d228ac6da78c9e",
    "renderer_sha256": "b6d488b4bdee68568e5b17d2d4871b2ba1885e1032091b635a7a58ad2ca224e7"
  },
  "sourceRevision": "c1c624119dae59c3fb40e8107ba16ed3132648f65539a90412328138b2cb4cb3"
}
