{
  "aboutHtml": "<p>Единый результат со звуком по мультимодальному заданию</p><p>MiniMax H3 — омнимодальная видеосистема MiniMax. Она совместно интерпретирует текст, изображения, видео и аудио, затем генерирует видео со встроенным стереозвуком. Разработчик предлагает её для коротких творческих работ: визуальных материалов о товарах, рекламы, анимированных постеров и концепций кинотитров, где связи между референсными материалами важны не меньше описания сцены.</p><p>Документированная система создаёт видео длительностью 4–15 секунд с частотой 24 кадра/с и стереозвуком 32 кГц. H3-Base генерирует в 768p; полный процесс 2K повторно создаёт результат с исходным мультимодальным контекстом. Это больше, чем обычное изменение размера: на втором этапе модель вновь использует исходный контекст для восстановления мелких деталей. У H3 Max и H3-Context-IR отдельные роли и ограничения.</p><p>Создание по тексту и опорным кадрам</p><p>Текстовый ввод описывает всю последовательность изображения и звука во времени. Первое изображение закрепляет начало, последнее — конец, а два изображения могут задать оба состояния. Для плана по первому кадру начните с композиции и внешности, видимых на изображении, затем опишите развивающееся действие. Для перехода от первого к последнему кадру опишите наблюдаемое движение между состояниями вместо двух несвязанных описаний изображений.</p><p>Практическое задание для товара может задавать закрытую упаковку в начальном кадре, открывающую её руку, мягкое движение камеры и нужное конечное состояние. Сохраните форму предмета, положение этикетки и освещение в предоставленных кадрах. Создание по кадрам и по референсам — отдельные режимы ввода; интерфейс разработчика не смешивает роли первого/последнего кадра с ролями референсных медиа в одном запросе.</p><p>Генерация и редактирование по референсам</p><p>Референсный режим принимает текст вместе с изображениями, видео- и аудиоклипами. Укажите вклад каждого источника: внешность персонажа, локацию, движение камеры, временную структуру исходного клипа или голос. Видео, используемое только для движения камеры, отличается от видео, которое нужно действительно отредактировать или продолжить. Явно задайте эту связь.</p><p>Руководство разработчика по референсам разделяет определения объектов, краткое изложение задачи, анализ сохраняемых элементов, подробное описание плана, общую звуковую среду и фоновую музыку только для зрителя. Оно отличает сохранение видимого содержания от переноса атрибутов или общего стилевого ориентира. Для аудио копирование сигнала отличается от использования тембра, ритма или манеры произнесения. Сохраняйте эти роли неизменными во всём задании.</p><p>Для сцены по референсам предоставьте изображение персонажа, короткий пример движения камеры и голосовой аудиореференс, затем опишите, где каждый влияет на целевой план. Укажите детали одежды, окружения или предметов, которые должны оставаться узнаваемыми. Сравните готовый клип с этими требованиями, включая непрерывность движения и соответствие видимого говорящего слышимому голосу.</p><p>Речь, звук и тайминг планов</p><p>H3 совместно моделирует диалог, физические звуки, атмосферу и музыку. Карточка модели документирует стабильную поддержку диалогов на арабском, китайском, английском, французском, немецком, итальянском, японском, корейском, португальском, русском и испанском; поддержка остальных языков описана как неодинаковая. Задайте точные произносимые слова и язык, сохраняя идентичность говорящего между планами.</p><p>В руководствах разработчика по промптам описательные разделы пишутся на английском, а диалог и видимый текст сохраняются на исходном языке. Для речи используется <code>&lt;d&gt;[Language] ...&lt;/d&gt;</code>, при этом личность говорящего и описание голоса находятся вне блока. Различайте речь персонажа в сцене и закадровое озвучивание, указывайте, продолжается ли реплика через монтажную склейку или обрывается в конце. Видимый текст тоже сохраняйте точно. Соразмеряйте объём речи с выбранной длительностью и совместно проверяйте написанные слова и слышимую реплику.</p><p>Описывайте движение камеры как действие, включая размах и скорость, когда они важны. Нумеруйте планы в порядке воспроизведения и располагайте моменты склеек в пределах длительности видео. Отделяйте звуки сцены, например шаги или закрывающуюся дверь, от фоновой музыки, слышимой только аудитории. Так короткий план съёмки проще интерпретировать и сопоставлять с результатом.</p><p>Подготовка входных данных и численные ограничения</p><p>Текущая схема генерации требует непустой текст в каждом режиме, до 7 000 символов на текстовый элемент. Изображения могут быть JPG, JPEG, PNG, WebP, HEIC или HEIF, до 30 МБ каждое, с каждой стороной от 256 до 5 760 пикселей и соотношением от 0.4 до 2.5. Кадровый ввод допускает одно начальное и одно конечное изображение; референсный режим — до девяти изображений.</p><p>Референсное видео может включать до трёх клипов MP4 или MOV, каждый длительностью 2–15 секунд, суммарно не более 15 секунд. Размер клипа — до 50 МБ; видеокодек H.264 или H.265, аудио AAC или MP3, стороны от 256 до 5 760 пикселей, соотношение от 0.4 до 2.5 и частота от 23.976 до 60 кадров/с. Референсное аудио поддерживает до трёх WAV или MP3, до 15 МБ каждый, каждый по 2–15 секунд, суммарно не более 15 секунд. Карточка модели ограничивает смешанный набор референсов 12 файлами. Документированный предел тела запроса — 64 МБ, отдельно от ограничений каждого файла.</p><p>Выбирайте только полезные для задания референсы и явно описывайте вклад каждого. Ясное изображение объекта полезнее нескольких противоречащих видов без объяснения. Сохраняйте порядок референсов, обрезайте лишнее, не удаляя необходимый контекст сцены, и проверяйте, что короткие исходные клипы содержат запрашиваемое действие или голосовую особенность.</p><p>Форма результата и полная система</p><p>Интерфейс H3 разработчика предлагает 768P и 2K. Для генерации только по тексту нужно конкретное соотношение: 21:9, 16:9, 4:3, 1:1, 3:4 или 9:16. Создание по первому/последнему кадру берёт соотношение из исходного изображения; по референсам — использует адаптивное или явное соотношение. Длительность результата задаётся целым числом секунд в диапазоне 4–15.</p><p>Карточка модели различает H3-Context-IR, интерпретирующий и обогащающий задание, H3-Base, создающий видео и звук, и H3-Regenerate-2K, формирующий результат повышенного разрешения. Выпущенные базовые контрольные точки отдельно предназначены для задач по кадрам и по омниреференсам. Компоненты контекста и повторной генерации отделены от этих базовых весов, поэтому одно название открытой контрольной точки не подтверждает поведение всей системы.</p><p>Процесс генерации разработчика асинхронный. Интерфейс проверки задач получает задачи за предыдущие семь дней. Сохраняйте идентификатор до возвращения самого видеорезультата, затем сохраните клип, а не только временный адрес скачивания. Проверяйте визуальную идентичность, мелкий текст, взаимодействия объектов, речь и синхронизацию звука в целевом размере просмотра. Разработчик относит мультимодальное понимание и мелкие визуальные детали к направлениям дальнейшего улучшения; подробное задание и сравнение с источником остаются основой полезного результата.</p>",
  "aboutText": "Единый результат со звуком по мультимодальному заданию\n\nMiniMax H3 — омнимодальная видеосистема MiniMax. Она совместно интерпретирует текст, изображения, видео и аудио, затем генерирует видео со встроенным стереозвуком. Разработчик предлагает её для коротких творческих работ: визуальных материалов о товарах, рекламы, анимированных постеров и концепций кинотитров, где связи между референсными материалами важны не меньше описания сцены.\n\nДокументированная система создаёт видео длительностью 4–15 секунд с частотой 24 кадра/с и стереозвуком 32 кГц. H3-Base генерирует в 768p; полный процесс 2K повторно создаёт результат с исходным мультимодальным контекстом. Это больше, чем обычное изменение размера: на втором этапе модель вновь использует исходный контекст для восстановления мелких деталей. У H3 Max и H3-Context-IR отдельные роли и ограничения.\n\nСоздание по тексту и опорным кадрам\n\nТекстовый ввод описывает всю последовательность изображения и звука во времени. Первое изображение закрепляет начало, последнее — конец, а два изображения могут задать оба состояния. Для плана по первому кадру начните с композиции и внешности, видимых на изображении, затем опишите развивающееся действие. Для перехода от первого к последнему кадру опишите наблюдаемое движение между состояниями вместо двух несвязанных описаний изображений.\n\nПрактическое задание для товара может задавать закрытую упаковку в начальном кадре, открывающую её руку, мягкое движение камеры и нужное конечное состояние. Сохраните форму предмета, положение этикетки и освещение в предоставленных кадрах. Создание по кадрам и по референсам — отдельные режимы ввода; интерфейс разработчика не смешивает роли первого/последнего кадра с ролями референсных медиа в одном запросе.\n\nГенерация и редактирование по референсам\n\nРеференсный режим принимает текст вместе с изображениями, видео- и аудиоклипами. Укажите вклад каждого источника: внешность персонажа, локацию, движение камеры, временную структуру исходного клипа или голос. Видео, используемое только для движения камеры, отличается от видео, которое нужно действительно отредактировать или продолжить. Явно задайте эту связь.\n\nРуководство разработчика по референсам разделяет определения объектов, краткое изложение задачи, анализ сохраняемых элементов, подробное описание плана, общую звуковую среду и фоновую музыку только для зрителя. Оно отличает сохранение видимого содержания от переноса атрибутов или общего стилевого ориентира. Для аудио копирование сигнала отличается от использования тембра, ритма или манеры произнесения. Сохраняйте эти роли неизменными во всём задании.\n\nДля сцены по референсам предоставьте изображение персонажа, короткий пример движения камеры и голосовой аудиореференс, затем опишите, где каждый влияет на целевой план. Укажите детали одежды, окружения или предметов, которые должны оставаться узнаваемыми. Сравните готовый клип с этими требованиями, включая непрерывность движения и соответствие видимого говорящего слышимому голосу.\n\nРечь, звук и тайминг планов\n\nH3 совместно моделирует диалог, физические звуки, атмосферу и музыку. Карточка модели документирует стабильную поддержку диалогов на арабском, китайском, английском, французском, немецком, итальянском, японском, корейском, португальском, русском и испанском; поддержка остальных языков описана как неодинаковая. Задайте точные произносимые слова и язык, сохраняя идентичность говорящего между планами.\n\nВ руководствах разработчика по промптам описательные разделы пишутся на английском, а диалог и видимый текст сохраняются на исходном языке. Для речи используется `<d>[Language] ...</d>`, при этом личность говорящего и описание голоса находятся вне блока. Различайте речь персонажа в сцене и закадровое озвучивание, указывайте, продолжается ли реплика через монтажную склейку или обрывается в конце. Видимый текст тоже сохраняйте точно. Соразмеряйте объём речи с выбранной длительностью и совместно проверяйте написанные слова и слышимую реплику.\n\nОписывайте движение камеры как действие, включая размах и скорость, когда они важны. Нумеруйте планы в порядке воспроизведения и располагайте моменты склеек в пределах длительности видео. Отделяйте звуки сцены, например шаги или закрывающуюся дверь, от фоновой музыки, слышимой только аудитории. Так короткий план съёмки проще интерпретировать и сопоставлять с результатом.\n\nПодготовка входных данных и численные ограничения\n\nТекущая схема генерации требует непустой текст в каждом режиме, до 7 000 символов на текстовый элемент. Изображения могут быть JPG, JPEG, PNG, WebP, HEIC или HEIF, до 30 МБ каждое, с каждой стороной от 256 до 5 760 пикселей и соотношением от 0.4 до 2.5. Кадровый ввод допускает одно начальное и одно конечное изображение; референсный режим — до девяти изображений.\n\nРеференсное видео может включать до трёх клипов MP4 или MOV, каждый длительностью 2–15 секунд, суммарно не более 15 секунд. Размер клипа — до 50 МБ; видеокодек H.264 или H.265, аудио AAC или MP3, стороны от 256 до 5 760 пикселей, соотношение от 0.4 до 2.5 и частота от 23.976 до 60 кадров/с. Референсное аудио поддерживает до трёх WAV или MP3, до 15 МБ каждый, каждый по 2–15 секунд, суммарно не более 15 секунд. Карточка модели ограничивает смешанный набор референсов 12 файлами. Документированный предел тела запроса — 64 МБ, отдельно от ограничений каждого файла.\n\nВыбирайте только полезные для задания референсы и явно описывайте вклад каждого. Ясное изображение объекта полезнее нескольких противоречащих видов без объяснения. Сохраняйте порядок референсов, обрезайте лишнее, не удаляя необходимый контекст сцены, и проверяйте, что короткие исходные клипы содержат запрашиваемое действие или голосовую особенность.\n\nФорма результата и полная система\n\nИнтерфейс H3 разработчика предлагает 768P и 2K. Для генерации только по тексту нужно конкретное соотношение: 21:9, 16:9, 4:3, 1:1, 3:4 или 9:16. Создание по первому/последнему кадру берёт соотношение из исходного изображения; по референсам — использует адаптивное или явное соотношение. Длительность результата задаётся целым числом секунд в диапазоне 4–15.\n\nКарточка модели различает H3-Context-IR, интерпретирующий и обогащающий задание, H3-Base, создающий видео и звук, и H3-Regenerate-2K, формирующий результат повышенного разрешения. Выпущенные базовые контрольные точки отдельно предназначены для задач по кадрам и по омниреференсам. Компоненты контекста и повторной генерации отделены от этих базовых весов, поэтому одно название открытой контрольной точки не подтверждает поведение всей системы.\n\nПроцесс генерации разработчика асинхронный. Интерфейс проверки задач получает задачи за предыдущие семь дней. Сохраняйте идентификатор до возвращения самого видеорезультата, затем сохраните клип, а не только временный адрес скачивания. Проверяйте визуальную идентичность, мелкий текст, взаимодействия объектов, речь и синхронизацию звука в целевом размере просмотра. Разработчик относит мультимодальное понимание и мелкие визуальные детали к направлениям дальнейшего улучшения; подробное задание и сравнение с источником остаются основой полезного результата.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "36a5732562c00db1ff52f6844518c5bdd5dba9d8a6be7482bc9a6232256caf27",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ru",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">MM</span><h2 id=\"sheet-title\">MiniMax: H3</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Закрыть\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>minimax/hailuo-3</code><button type=\"button\" id=\"copy-id\">Скопировать ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Разделы карточки модели\"><button type=\"button\" data-card-jump=\"overview\">Начало</button><button type=\"button\" data-card-jump=\"methods\">Входные данные и методы</button><button type=\"button\" data-card-jump=\"pricing\">Тарифы</button><button type=\"button\" data-card-jump=\"examples\">Примеры</button><button type=\"button\" data-card-jump=\"results\">Результаты</button><button type=\"button\" data-card-jump=\"aliases\">Псевдонимы</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Методы 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|minimax%2Fhailuo-3\">Видео</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\">Начало</h3><p class=\"mdesc-full\">MiniMax H3 создаёт короткое видео со встроенным стереозвуком по тексту, изображениям кадров или мультимодальным референсам. Поддерживает создание по первому/последнему кадру, редактирование по референсам и связи движения или голоса; длительность результата — 4–15 секунд, а для 2K предусмотрен отдельный процесс повторной генерации.</p><dl class=\"card-io\" data-card-io><div><dt>Допустимые входные данные</dt><dd>Текст · Картинки · Аудио · Видео</dd></div><div><dt>Результаты</dt><dd>Видео</dd></div></dl><details class=\"card-about\"><summary>О модели</summary><p class=\"note-s\" data-model-method-boundary>Описание раскрывает возможности модели. Доступные в Ailoot входные данные, результаты и параметры выбранного метода перечислены ниже.</p><div class=\"mabout\" id=\"m-about\"><p>Единый результат со звуком по мультимодальному заданию</p><p>MiniMax H3 — омнимодальная видеосистема MiniMax. Она совместно интерпретирует текст, изображения, видео и аудио, затем генерирует видео со встроенным стереозвуком. Разработчик предлагает её для коротких творческих работ: визуальных материалов о товарах, рекламы, анимированных постеров и концепций кинотитров, где связи между референсными материалами важны не меньше описания сцены.</p><p>Документированная система создаёт видео длительностью 4–15 секунд с частотой 24 кадра/с и стереозвуком 32 кГц. H3-Base генерирует в 768p; полный процесс 2K повторно создаёт результат с исходным мультимодальным контекстом. Это больше, чем обычное изменение размера: на втором этапе модель вновь использует исходный контекст для восстановления мелких деталей. У H3 Max и H3-Context-IR отдельные роли и ограничения.</p><p>Создание по тексту и опорным кадрам</p><p>Текстовый ввод описывает всю последовательность изображения и звука во времени. Первое изображение закрепляет начало, последнее — конец, а два изображения могут задать оба состояния. Для плана по первому кадру начните с композиции и внешности, видимых на изображении, затем опишите развивающееся действие. Для перехода от первого к последнему кадру опишите наблюдаемое движение между состояниями вместо двух несвязанных описаний изображений.</p><p>Практическое задание для товара может задавать закрытую упаковку в начальном кадре, открывающую её руку, мягкое движение камеры и нужное конечное состояние. Сохраните форму предмета, положение этикетки и освещение в предоставленных кадрах. Создание по кадрам и по референсам — отдельные режимы ввода; интерфейс разработчика не смешивает роли первого/последнего кадра с ролями референсных медиа в одном запросе.</p><p>Генерация и редактирование по референсам</p><p>Референсный режим принимает текст вместе с изображениями, видео- и аудиоклипами. Укажите вклад каждого источника: внешность персонажа, локацию, движение камеры, временную структуру исходного клипа или голос. Видео, используемое только для движения камеры, отличается от видео, которое нужно действительно отредактировать или продолжить. Явно задайте эту связь.</p><p>Руководство разработчика по референсам разделяет определения объектов, краткое изложение задачи, анализ сохраняемых элементов, подробное описание плана, общую звуковую среду и фоновую музыку только для зрителя. Оно отличает сохранение видимого содержания от переноса атрибутов или общего стилевого ориентира. Для аудио копирование сигнала отличается от использования тембра, ритма или манеры произнесения. Сохраняйте эти роли неизменными во всём задании.</p><p>Для сцены по референсам предоставьте изображение персонажа, короткий пример движения камеры и голосовой аудиореференс, затем опишите, где каждый влияет на целевой план. Укажите детали одежды, окружения или предметов, которые должны оставаться узнаваемыми. Сравните готовый клип с этими требованиями, включая непрерывность движения и соответствие видимого говорящего слышимому голосу.</p><p>Речь, звук и тайминг планов</p><p>H3 совместно моделирует диалог, физические звуки, атмосферу и музыку. Карточка модели документирует стабильную поддержку диалогов на арабском, китайском, английском, французском, немецком, итальянском, японском, корейском, португальском, русском и испанском; поддержка остальных языков описана как неодинаковая. Задайте точные произносимые слова и язык, сохраняя идентичность говорящего между планами.</p><p>В руководствах разработчика по промптам описательные разделы пишутся на английском, а диалог и видимый текст сохраняются на исходном языке. Для речи используется <code>&lt;d&gt;[Language] ...&lt;/d&gt;</code>, при этом личность говорящего и описание голоса находятся вне блока. Различайте речь персонажа в сцене и закадровое озвучивание, указывайте, продолжается ли реплика через монтажную склейку или обрывается в конце. Видимый текст тоже сохраняйте точно. Соразмеряйте объём речи с выбранной длительностью и совместно проверяйте написанные слова и слышимую реплику.</p><p>Описывайте движение камеры как действие, включая размах и скорость, когда они важны. Нумеруйте планы в порядке воспроизведения и располагайте моменты склеек в пределах длительности видео. Отделяйте звуки сцены, например шаги или закрывающуюся дверь, от фоновой музыки, слышимой только аудитории. Так короткий план съёмки проще интерпретировать и сопоставлять с результатом.</p><p>Подготовка входных данных и численные ограничения</p><p>Текущая схема генерации требует непустой текст в каждом режиме, до 7 000 символов на текстовый элемент. Изображения могут быть JPG, JPEG, PNG, WebP, HEIC или HEIF, до 30 МБ каждое, с каждой стороной от 256 до 5 760 пикселей и соотношением от 0.4 до 2.5. Кадровый ввод допускает одно начальное и одно конечное изображение; референсный режим — до девяти изображений.</p><p>Референсное видео может включать до трёх клипов MP4 или MOV, каждый длительностью 2–15 секунд, суммарно не более 15 секунд. Размер клипа — до 50 МБ; видеокодек H.264 или H.265, аудио AAC или MP3, стороны от 256 до 5 760 пикселей, соотношение от 0.4 до 2.5 и частота от 23.976 до 60 кадров/с. Референсное аудио поддерживает до трёх WAV или MP3, до 15 МБ каждый, каждый по 2–15 секунд, суммарно не более 15 секунд. Карточка модели ограничивает смешанный набор референсов 12 файлами. Документированный предел тела запроса — 64 МБ, отдельно от ограничений каждого файла.</p><p>Выбирайте только полезные для задания референсы и явно описывайте вклад каждого. Ясное изображение объекта полезнее нескольких противоречащих видов без объяснения. Сохраняйте порядок референсов, обрезайте лишнее, не удаляя необходимый контекст сцены, и проверяйте, что короткие исходные клипы содержат запрашиваемое действие или голосовую особенность.</p><p>Форма результата и полная система</p><p>Интерфейс H3 разработчика предлагает 768P и 2K. Для генерации только по тексту нужно конкретное соотношение: 21:9, 16:9, 4:3, 1:1, 3:4 или 9:16. Создание по первому/последнему кадру берёт соотношение из исходного изображения; по референсам — использует адаптивное или явное соотношение. Длительность результата задаётся целым числом секунд в диапазоне 4–15.</p><p>Карточка модели различает H3-Context-IR, интерпретирующий и обогащающий задание, H3-Base, создающий видео и звук, и H3-Regenerate-2K, формирующий результат повышенного разрешения. Выпущенные базовые контрольные точки отдельно предназначены для задач по кадрам и по омниреференсам. Компоненты контекста и повторной генерации отделены от этих базовых весов, поэтому одно название открытой контрольной точки не подтверждает поведение всей системы.</p><p>Процесс генерации разработчика асинхронный. Интерфейс проверки задач получает задачи за предыдущие семь дней. Сохраняйте идентификатор до возвращения самого видеорезультата, затем сохраните клип, а не только временный адрес скачивания. Проверяйте визуальную идентичность, мелкий текст, взаимодействия объектов, речь и синхронизацию звука в целевом размере просмотра. Разработчик относит мультимодальное понимание и мелкие визуальные детали к направлениям дальнейшего улучшения; подробное задание и сравнение с источником остаются основой полезного результата.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Доступно в Ailoot · входные данные и методы</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Видео</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Входные данные</dt><dd><code>text</code>, <code>image</code>, <code>audio</code>, <code>video</code></dd></div><div><dt>Результат</dt><dd><code>video</code></dd></div><div><dt>Выходной формат</dt><dd>Исходные байты MP4; без нормализации и перекодирования</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Поле</th><th>Тип</th><th>Требование</th><th>Значения и ограничения</th><th>По умолчанию</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Обязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>minimax/hailuo-3</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Обязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>integer</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Обязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15</div><div>Минимум: 1</div><div>Максимум: 600</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>2K</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>21:9, 16:9, 4:3, 1:1, 3:4, 9:16</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>boolean</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>false, true</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>array</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>Минимум элементов: 1</div><div>Максимум элементов: 2</div><div>Входное содержимое: Массив объектов кадров. Каждый объект содержит type=image_url, image_url с url и frame_type. Используйте HTTPS URL изображения и укажите first_frame или last_frame в frame_type. Каждая роль кадра встречается не более одного раза.</div><div>Точные ключи: type, image_url, frame_type</div><div>Условия: Эти ключи описывают каждый объект кадра; image_url содержит только url. Не передавайте frame_images для запроса только с текстом.</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>array</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>Шаблон: ^https://</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>object</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Необязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Сочетания входных материалов</summary><p class=\"note-s\"><b>Из текста в видео</b> · Текстовый запрос. · Обязательно: model, prompt, duration</p><p class=\"note-s\"><code>Передайте prompt как текст, а duration — как целое число секунд. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Тип: string · minimax/hailuo-3</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Тип: string · Максимум байтов UTF-8: 10 000 · Нужен хотя бы один непробельный символ: Да</p><p class=\"note-s\"><b>Из изображения в видео</b> · Текстовый запрос и изображение первого кадра. · Обязательно: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images — массив. Каждый объект кадра содержит type, image_url и frame_type; image_url содержит url. Укажите image_url в type. Используйте first_frame с необязательным last_frame. Каждая роль кадра встречается не более одного раза. Для каждого кадра укажите публичный HTTPS URL изображения. В одном запросе используйте изображения кадров либо референсные изображения; не совмещайте их. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.</code></p><p class=\"note-s\">Точные ключи: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Тип: string · minimax/hailuo-3</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Тип: string · Максимум байтов UTF-8: 10 000 · Нужен хотя бы один непробельный символ: Да</p><p class=\"note-s\"><b>Reference to video</b> · Текстовый запрос и поддерживаемые референсы: изображения, видео, аудио. · Обязательно: model, prompt, duration, input_references</p><p class=\"note-s\"><code>input_references — массив объектов. Укажите image_url, video_url или audio_url в type и используйте соответствующее поле с url. Используйте публичные HTTPS-ссылки. Не передавайте frame_images, чтобы выбрать режим референсов. В оценку входит показанная плата за изображение только для референсов сверх первых пяти. Итоговое начисление определяется фактически тарифицированной конфигурацией. Не совмещайте референсные изображения с изображениями кадров. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Тип: string · minimax/hailuo-3</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Тип: string · Максимум байтов UTF-8: 10 000 · Нужен хотя бы один непробельный символ: Да</p></details><details class=\"note-s\" data-method-contract><summary>Параметры и жизненный цикл метода</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Параметр</th><th>Контракт</th></tr></thead><tbody><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>content_type</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>application/json</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>required</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>material_types</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>text, image, audio, video</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>additional_properties</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>false</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>optional_controls</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Жизненный цикл: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Тарифы</h3><div class=\"card-result-process\" data-billing-basis><h5>Как рассчитывается итоговая плата</h5><p class=\"note-s\">Отображаемые тарифы позволяют оценить стоимость до генерации. Итоговое списание рассчитывается по стоимости, записанной для исходной генерации. Измеренная длительность результата и прогнозные объёмы не являются итоговым оплачиваемым объёмом.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Тарифная справка не добавляет режимы запроса. Поддерживаемые параметры указаны для выбранного метода.</p><dl data-price-conditions><dt>Быстрый режим</dt><dd>Не указано <span class=\"note-s\">При выборе быстрого режима</span></dd><dt>Режим flex</dt><dd>Не указано <span class=\"note-s\">При выборе режима flex</span></dd><dt>Максимальная интенсивность рассуждений</dt><dd>Не указано <span class=\"note-s\">При максимальной интенсивности рассуждений с корректировкой по умолчанию (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Оценочные ставки для сравнения</h4><h4>Цены по конфигурациям</h4><p class=\"note-s\">Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Конфигурация</th><th>Шкала ставок</th><th>Прогноз количества</th><th>Расчётная единица</th><th>Условия расчёта</th><th>Плата</th></tr></thead><tbody><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>Базовые тарифы на токены</th><td data-cell-label=\"Шкала ставок\"><span class=\"card-cell-label\">Шкала ставок</span>Базовая ставка</td><td data-cell-label=\"Прогноз количества\"><span class=\"card-cell-label\">Прогноз количества</span>—</td><td data-cell-label=\"Расчётная единица\"><span class=\"card-cell-label\">Расчётная единица</span>—</td><td data-cell-label=\"Условия расчёта\"><span class=\"card-cell-label\">Условия расчёта</span>—</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Вход · Входные токены · Оценка только для сравнения</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Выход · Выходные токены · Оценка только для сравнения</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Вход · Чтение кэша · Оценка только для сравнения</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Вход · Запись в кэш · Оценка только для сравнения</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Вход · Запись в кэш, 1 час · Оценка только для сравнения</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div></td></tr><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>Цена видео</th><td data-cell-label=\"Шкала ставок\"><span class=\"card-cell-label\">Шкала ставок</span>—</td><td data-cell-label=\"Прогноз количества\"><span class=\"card-cell-label\">Прогноз количества</span>—</td><td data-cell-label=\"Расчётная единица\"><span class=\"card-cell-label\">Расчётная единица</span>за секунду видео</td><td data-cell-label=\"Условия расчёта\"><span class=\"card-cell-label\">Условия расчёта</span>В этом ключе цены дополнительное условие не объявлено.</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Выход · Цена видео · Оценка только для сравнения</span> <b>$0.26</b> <span class=\"price-unit\">за секунду видео</span></div></td></tr><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>референсное изображение</th><td data-cell-label=\"Шкала ставок\"><span class=\"card-cell-label\">Шкала ставок</span>—</td><td data-cell-label=\"Прогноз количества\"><span class=\"card-cell-label\">Прогноз количества</span>—</td><td data-cell-label=\"Расчётная единица\"><span class=\"card-cell-label\">Расчётная единица</span>за изображение-референс</td><td data-cell-label=\"Условия расчёта\"><span class=\"card-cell-label\">Условия расчёта</span>—</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Вход · референсное изображение · Оценка только для сравнения</span> <b>$0.08</b> <span class=\"price-unit\">за изображение-референс</span></div></td></tr><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>Ориентировочная стоимость генерации</th><td data-cell-label=\"Шкала ставок\"><span class=\"card-cell-label\">Шкала ставок</span>—</td><td data-cell-label=\"Прогноз количества\"><span class=\"card-cell-label\">Прогноз количества</span>Оценка для одной генерации</td><td data-cell-label=\"Расчётная единица\"><span class=\"card-cell-label\">Расчётная единица</span>—</td><td data-cell-label=\"Условия расчёта\"><span class=\"card-cell-label\">Условия расчёта</span>—</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Выход · Оценочная стоимость генерации · Оценка только для сравнения</span> <b>$1.3</b> <span class=\"price-unit\">оценка до генерации</span></div><p class=\"note-s\">Эта оценка не является дополнительным списанием или фиксированным тарифом для завершённой генерации.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. <a href=\"/docs/ru/billing/reserve/\">Как работают резервирование и расчёт →</a></p><div data-declared-reference-pricing><h4>Сведения о справочном тарифе</h4><p class=\"note-s\">Справочные шкалы модели не меняют выбор метода, расчёт стоимости или списания. Действующая плата определяется ставками выбранного метода Ailoot.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Ссылки на цены конфигураций видео</summary><h4>Цены по конфигурациям</h4><p class=\"note-s\">Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Конфигурация</th><th>Условия расчёта</th><th>Плата</th></tr></thead><tbody><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>Цена видео</th><td data-cell-label=\"Условия расчёта\"><span class=\"card-cell-label\">Условия расчёта</span>В этом ключе цены дополнительное условие не объявлено.</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Выход · Цена видео</span> <b>$0.26</b> <span class=\"price-unit\">за секунду видео</span></div><p class=\"note-s\">Опубликованный ориентир цены для показанной конфигурации. Итоговые списания зависят от фактической оплачиваемой конфигурации.</p></td></tr><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>Референсные изображения сверх первых пяти</th><td data-cell-label=\"Условия расчёта\"><span class=\"card-cell-label\">Условия расчёта</span>В этом ключе цены дополнительное условие не объявлено.</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Вход · Референсные изображения после первых пяти</span> <b>$0.08</b> <span class=\"price-unit\">за изображение</span></div><p class=\"note-s\">Первые пять референсных изображений бесплатны; указанная ставка за изображение применяется сверх первых пяти. Опубликованная справочная цена относится к показанной конфигурации. Итоговые начисления определяются фактически тарифицированной конфигурацией.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Примеры запросов</h3><h4>Ailoot Ultra · Видео</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Варианты кода\"><button class=\"cg-tab\" id=\"model-code-1866-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1866-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · создать видео</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Скопировать код\"><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-1866-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1866-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;duration&quot;:8,&quot;model&quot;:&quot;minimax/hailuo-3&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;resolution&quot;:&quot;2K&quot;}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Получить и сохранить результаты</h3><h4>Ailoot Ultra · Видео</h4><p class=\"note-s\">подписанные ссылки на содержимое, принадлежащее Ailoot</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>Проверить статус задачи</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Варианты кода\"><button class=\"cg-tab\" id=\"model-code-1867-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1867-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET статус исходной операции</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Скопировать код\"><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-1867-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1867-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Чтение другого содержимого</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Варианты кода\"><button class=\"cg-tab\" id=\"model-code-1868-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1868-panel-0\" aria-selected=\"true\" tabindex=\"0\">Сохраняйте каждый готовый результат, принадлежащий вам</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Скопировать код\"><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-1868-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1868-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Сохраняйте все готовые результаты</h5><p class=\"note-s\">Сохраните каждое готовое видео или полученный файл; загрузите содержимое по каждому фактически полученному URL материала.</p><p class=\"note-s\">Сохраняйте каждый фактический результат, принадлежащий Ailoot, и возвращённые измеренные метаданные.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Если нужно проверить исходный ответ</h5><p class=\"note-s\">503 result_pending_check + исходный id + X-Should-Retry:false; никогда не отправляйте исходный запрос повторно</p></div><details class=\"card-about\" data-output-fields><summary>Поля ответа</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Поле</th><th>Тип</th><th>Значение</th></tr></thead><tbody><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>integer</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Позиция этого видео в списке результатов, начиная с нуля.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>string</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Подписанный HTTPS URL для скачивания этого готового видео.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>string | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Хэш SHA-256 исходных байтов видео; null, если недоступен.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>integer | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Размер исходного видеофайла в байтах; null, если недоступен.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>integer | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Измеренная длительность видео в миллисекундах; null, если недоступна.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>integer | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Ширина видео в пикселях; null, если недоступна.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>integer | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Высота видео в пикселях; null, если недоступна.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>string | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Идентификатор видеокодека; null, если не записан.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>boolean | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Есть ли у видео аудиодорожка; null, если не измерено.</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span>string | null</td><td data-cell-label=\"Значение\"><span class=\"card-cell-label\">Значение</span>Идентификатор аудиокодека; null, если идентификатор не записан.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ошибки и дальнейшие шаги</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Ответ</th><th>Условие</th><th>Следующий шаг</th></tr></thead><tbody><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Доступ к видео недоступен либо этот ID видео не найден.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Проверьте доступ к видео. Для существующего видео используйте исходный публичный ID и тот же ключ API.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Ключ API не соответствует авторизованному аккаунту.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Перед отправкой проверьте ключ API и доступ к аккаунту.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Не удалось прочитать запрос либо индекс скачивания недопустим.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Исправьте тело запроса. Для скачивания выберите индекс результата, возвращённый исходной задачей.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Невозможно определить цену выбранной конфигурации видео.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Выберите поддерживаемую конфигурацию видео и заполните обязательные параметры перед отправкой исправленного запроса.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Недопустимы входное видео или исходная задача продолжения.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Используйте корректные входные HTTPS-ссылки. Для продолжения используйте исходный публичный ID вашего готового видео и тот же ключ API.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>402 · <code>billing_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Доступный баланс или лимиты не позволяют зарезервировать средства.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Перед отправкой нового запроса проверьте доступный баланс и лимиты.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>503 · <code>server_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Проверка видео, хранилище или доступ к сервису временно недоступны.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Дождитесь доступности сервиса. Если у вас уже есть ID видео, проверяйте ту исходную задачу вместо создания новой генерации.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Нужно проверить результат исходного видео и начисление.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните возвращённый ID видео и проверьте эту задачу. Не отправляйте заменяющий запрос на генерацию, пока идёт проверка.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Скачивание существующего видео временно недоступно.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Проверьте ту же видеозадачу позже и скачайте её существующий результат. Новая генерация создаёт отдельную операцию.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Содержимое видео не опубликовано.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Проверьте исходный статус задачи. Скачайте результат после completed; при failed следуйте уведомлению о проверке начисления.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Псевдонимы</h3><h4>Псевдонимы моделей</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=minimax%2Fhailuo-3&amp;route=Ultra&amp;caller=minimax%2Fhailuo-3&amp;fmt=videos\"><code>minimax/hailuo-3</code></a></span></p><h4>Псевдонимы путей метода</h4><p class=\"note-s\">Используйте пути методов, указанные выше.</p><h4>Связанные ID для вызова</h4><p class=\"note-s\"><a href=\"#m=minimax%2Fhailuo-3&amp;route=Ultra&amp;caller=minimax%2Fhailuo-3&amp;fmt=videos\"><code>minimax/hailuo-3</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "minimax/hailuo-3",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "minimax/hailuo-3",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|minimax%2Fhailuo-3",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Отображаемые тарифы позволяют оценить стоимость до генерации. Итоговое списание рассчитывается по стоимости, записанной для исходной генерации. Измеренная длительность результата и прогнозные объёмы не являются итоговым оплачиваемым объёмом.",
          "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": "Сохраняйте каждый фактический результат, принадлежащий Ailoot, и возвращённые измеренные метаданные.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Доступ к видео недоступен либо этот ID видео не найден.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Проверьте доступ к видео. Для существующего видео используйте исходный публичный ID и тот же ключ API.",
                "type": "not_found_error"
              },
              {
                "condition": "Ключ API не соответствует авторизованному аккаунту.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Перед отправкой проверьте ключ API и доступ к аккаунту.",
                "type": "authentication_error"
              },
              {
                "condition": "Не удалось прочитать запрос либо индекс скачивания недопустим.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Исправьте тело запроса. Для скачивания выберите индекс результата, возвращённый исходной задачей.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Невозможно определить цену выбранной конфигурации видео.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Выберите поддерживаемую конфигурацию видео и заполните обязательные параметры перед отправкой исправленного запроса.",
                "type": "price_unavailable"
              },
              {
                "condition": "Недопустимы входное видео или исходная задача продолжения.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Используйте корректные входные HTTPS-ссылки. Для продолжения используйте исходный публичный ID вашего готового видео и тот же ключ API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Доступный баланс или лимиты не позволяют зарезервировать средства.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Перед отправкой нового запроса проверьте доступный баланс и лимиты.",
                "type": "billing_error"
              },
              {
                "condition": "Проверка видео, хранилище или доступ к сервису временно недоступны.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Дождитесь доступности сервиса. Если у вас уже есть ID видео, проверяйте ту исходную задачу вместо создания новой генерации.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Нужно проверить результат исходного видео и начисление.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Сохраните возвращённый ID видео и проверьте эту задачу. Не отправляйте заменяющий запрос на генерацию, пока идёт проверка.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Скачивание существующего видео временно недоступно.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Проверьте ту же видеозадачу позже и скачайте её существующий результат. Новая генерация создаёт отдельную операцию.",
                "type": "server_error"
              },
              {
                "condition": "Содержимое видео не опубликовано.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Проверьте исходный статус задачи. Скачайте результат после completed; при failed следуйте уведомлению о проверке начисления.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + исходный id + X-Should-Retry:false; никогда не отправляйте исходный запрос повторно"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Передайте prompt как текст, а duration — как целое число секунд. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Текстовый запрос."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images — массив. Каждый объект кадра содержит type, image_url и frame_type; image_url содержит url. Укажите image_url в type. Используйте first_frame с необязательным last_frame. Каждая роль кадра встречается не более одного раза. Для каждого кадра укажите публичный HTTPS URL изображения. В одном запросе используйте изображения кадров либо референсные изображения; не совмещайте их. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Текстовый запрос и изображение первого кадра."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references — массив объектов. Укажите image_url, video_url или audio_url в type и используйте соответствующее поле с url. Используйте публичные HTTPS-ссылки. Не передавайте frame_images, чтобы выбрать режим референсов. В оценку входит показанная плата за изображение только для референсов сверх первых пяти. Итоговое начисление определяется фактически тарифицированной конфигурацией. Не совмещайте референсные изображения с изображениями кадров. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Текстовый запрос и поддерживаемые референсы: изображения, видео, аудио."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Позиция этого видео в списке результатов, начиная с нуля.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "Подписанный HTTPS URL для скачивания этого готового видео.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Хэш SHA-256 исходных байтов видео; null, если недоступен.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Размер исходного видеофайла в байтах; null, если недоступен.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Измеренная длительность видео в миллисекундах; null, если недоступна.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Ширина видео в пикселях; null, если недоступна.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Высота видео в пикселях; null, если недоступна.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Идентификатор видеокодека; null, если не записан.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Есть ли у видео аудиодорожка; null, если не измерено.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Идентификатор аудиокодека; null, если идентификатор не записан.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "подписанные ссылки на содержимое, принадлежащее Ailoot",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "minimax/hailuo-3"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "minimax/hailuo-3"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "2K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "2K"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "21:9",
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Эти ключи описывают каждый объект кадра; image_url содержит только url. Не передавайте frame_images для запроса только с текстом.",
                "content": "Массив объектов кадров. Каждый объект содержит type=image_url, image_url с url и frame_type. Используйте HTTPS URL изображения и укажите first_frame или last_frame в frame_type. Каждая роль кадра встречается не более одного раза.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "type": {
                            "const": "video_url"
                          },
                          "video_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "type",
                          "video_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "type": {
                            "const": "video_url"
                          },
                          "video_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "type",
                          "video_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "minimax/hailuo-3"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "2K"
                  ]
                },
                "seed": false,
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": false,
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Frame images plus image references are rejected because mixed additive input count is unproved; pure frame or pure reference mode remains separately priced."
              ]
            },
            "unsupported": [
              "size",
              "seed",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.26",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.26",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per reference image"
            },
            "label": "reference image",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "reference_images",
                "label": "reference image",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per reference image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "reference_images"
              }
            ]
          },
          {
            "basis": "Эта оценка не является дополнительным списанием или фиксированным тарифом для завершённой генерации.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Ориентировочная стоимость генерации",
            "units": [
              {
                "amount": "1.3",
                "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": "1.3",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"minimax/hailuo-3\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"2K\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.26",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.26",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per reference image"
            },
            "label": "reference image",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "reference_images",
                "label": "reference image",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per reference image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "reference_images"
              }
            ]
          },
          {
            "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": "1.3",
                "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": "1.3",
                "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": "minimax/hailuo-3",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.26",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.26",
            "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.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "reference_images",
            "label": "reference image",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "per reference image",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "reference_images"
          },
          {
            "amount": "1.3",
            "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": "1.3",
            "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": "minimax/hailuo-3",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "9175c246af3a2e2d94ce6ded6c4a9e8f848a95039a919e61bcc6d66ca9a5fba6",
    "input_html_sha256": "befc8edc58625e5e8ff0d7a8a1ffe6e6a31d0279d32c1f1b46844b0941ae8aa7",
    "private_audit_sha256": "931ee8702c5435560d3d9530b3ba4e334ffec1f12fc0810a95d93b22c693c7b3",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ru/minimax-hailuo-3/",
    "description": "MiniMax H3 создаёт короткое видео со встроенным стереозвуком по тексту, изображениям кадров или мультимодальным референсам. Поддерживает создание по первому/последнему кадру, редактирование по референсам и связи движения или голоса; длительность результата — 4–15 секунд, а для 2K предусмотрен отдельный процесс повторной генерации.",
    "locale": "ru",
    "md_url": "https://ailoot.ai/models/ru/minimax-hailuo-3/index.md",
    "title": "MiniMax: H3 — Ailoot",
    "url": "https://ailoot.ai/models/ru/minimax-hailuo-3/"
  },
  "rawModel": {
    "about": "Единый результат со звуком по мультимодальному заданию\n\nMiniMax H3 — омнимодальная видеосистема MiniMax. Она совместно интерпретирует текст, изображения, видео и аудио, затем генерирует видео со встроенным стереозвуком. Разработчик предлагает её для коротких творческих работ: визуальных материалов о товарах, рекламы, анимированных постеров и концепций кинотитров, где связи между референсными материалами важны не меньше описания сцены.\n\nДокументированная система создаёт видео длительностью 4–15 секунд с частотой 24 кадра/с и стереозвуком 32 кГц. H3-Base генерирует в 768p; полный процесс 2K повторно создаёт результат с исходным мультимодальным контекстом. Это больше, чем обычное изменение размера: на втором этапе модель вновь использует исходный контекст для восстановления мелких деталей. У H3 Max и H3-Context-IR отдельные роли и ограничения.\n\nСоздание по тексту и опорным кадрам\n\nТекстовый ввод описывает всю последовательность изображения и звука во времени. Первое изображение закрепляет начало, последнее — конец, а два изображения могут задать оба состояния. Для плана по первому кадру начните с композиции и внешности, видимых на изображении, затем опишите развивающееся действие. Для перехода от первого к последнему кадру опишите наблюдаемое движение между состояниями вместо двух несвязанных описаний изображений.\n\nПрактическое задание для товара может задавать закрытую упаковку в начальном кадре, открывающую её руку, мягкое движение камеры и нужное конечное состояние. Сохраните форму предмета, положение этикетки и освещение в предоставленных кадрах. Создание по кадрам и по референсам — отдельные режимы ввода; интерфейс разработчика не смешивает роли первого/последнего кадра с ролями референсных медиа в одном запросе.\n\nГенерация и редактирование по референсам\n\nРеференсный режим принимает текст вместе с изображениями, видео- и аудиоклипами. Укажите вклад каждого источника: внешность персонажа, локацию, движение камеры, временную структуру исходного клипа или голос. Видео, используемое только для движения камеры, отличается от видео, которое нужно действительно отредактировать или продолжить. Явно задайте эту связь.\n\nРуководство разработчика по референсам разделяет определения объектов, краткое изложение задачи, анализ сохраняемых элементов, подробное описание плана, общую звуковую среду и фоновую музыку только для зрителя. Оно отличает сохранение видимого содержания от переноса атрибутов или общего стилевого ориентира. Для аудио копирование сигнала отличается от использования тембра, ритма или манеры произнесения. Сохраняйте эти роли неизменными во всём задании.\n\nДля сцены по референсам предоставьте изображение персонажа, короткий пример движения камеры и голосовой аудиореференс, затем опишите, где каждый влияет на целевой план. Укажите детали одежды, окружения или предметов, которые должны оставаться узнаваемыми. Сравните готовый клип с этими требованиями, включая непрерывность движения и соответствие видимого говорящего слышимому голосу.\n\nРечь, звук и тайминг планов\n\nH3 совместно моделирует диалог, физические звуки, атмосферу и музыку. Карточка модели документирует стабильную поддержку диалогов на арабском, китайском, английском, французском, немецком, итальянском, японском, корейском, португальском, русском и испанском; поддержка остальных языков описана как неодинаковая. Задайте точные произносимые слова и язык, сохраняя идентичность говорящего между планами.\n\nВ руководствах разработчика по промптам описательные разделы пишутся на английском, а диалог и видимый текст сохраняются на исходном языке. Для речи используется `<d>[Language] ...</d>`, при этом личность говорящего и описание голоса находятся вне блока. Различайте речь персонажа в сцене и закадровое озвучивание, указывайте, продолжается ли реплика через монтажную склейку или обрывается в конце. Видимый текст тоже сохраняйте точно. Соразмеряйте объём речи с выбранной длительностью и совместно проверяйте написанные слова и слышимую реплику.\n\nОписывайте движение камеры как действие, включая размах и скорость, когда они важны. Нумеруйте планы в порядке воспроизведения и располагайте моменты склеек в пределах длительности видео. Отделяйте звуки сцены, например шаги или закрывающуюся дверь, от фоновой музыки, слышимой только аудитории. Так короткий план съёмки проще интерпретировать и сопоставлять с результатом.\n\nПодготовка входных данных и численные ограничения\n\nТекущая схема генерации требует непустой текст в каждом режиме, до 7 000 символов на текстовый элемент. Изображения могут быть JPG, JPEG, PNG, WebP, HEIC или HEIF, до 30 МБ каждое, с каждой стороной от 256 до 5 760 пикселей и соотношением от 0.4 до 2.5. Кадровый ввод допускает одно начальное и одно конечное изображение; референсный режим — до девяти изображений.\n\nРеференсное видео может включать до трёх клипов MP4 или MOV, каждый длительностью 2–15 секунд, суммарно не более 15 секунд. Размер клипа — до 50 МБ; видеокодек H.264 или H.265, аудио AAC или MP3, стороны от 256 до 5 760 пикселей, соотношение от 0.4 до 2.5 и частота от 23.976 до 60 кадров/с. Референсное аудио поддерживает до трёх WAV или MP3, до 15 МБ каждый, каждый по 2–15 секунд, суммарно не более 15 секунд. Карточка модели ограничивает смешанный набор референсов 12 файлами. Документированный предел тела запроса — 64 МБ, отдельно от ограничений каждого файла.\n\nВыбирайте только полезные для задания референсы и явно описывайте вклад каждого. Ясное изображение объекта полезнее нескольких противоречащих видов без объяснения. Сохраняйте порядок референсов, обрезайте лишнее, не удаляя необходимый контекст сцены, и проверяйте, что короткие исходные клипы содержат запрашиваемое действие или голосовую особенность.\n\nФорма результата и полная система\n\nИнтерфейс H3 разработчика предлагает 768P и 2K. Для генерации только по тексту нужно конкретное соотношение: 21:9, 16:9, 4:3, 1:1, 3:4 или 9:16. Создание по первому/последнему кадру берёт соотношение из исходного изображения; по референсам — использует адаптивное или явное соотношение. Длительность результата задаётся целым числом секунд в диапазоне 4–15.\n\nКарточка модели различает H3-Context-IR, интерпретирующий и обогащающий задание, H3-Base, создающий видео и звук, и H3-Regenerate-2K, формирующий результат повышенного разрешения. Выпущенные базовые контрольные точки отдельно предназначены для задач по кадрам и по омниреференсам. Компоненты контекста и повторной генерации отделены от этих базовых весов, поэтому одно название открытой контрольной точки не подтверждает поведение всей системы.\n\nПроцесс генерации разработчика асинхронный. Интерфейс проверки задач получает задачи за предыдущие семь дней. Сохраняйте идентификатор до возвращения самого видеорезультата, затем сохраните клип, а не только временный адрес скачивания. Проверяйте визуальную идентичность, мелкий текст, взаимодействия объектов, речь и синхронизацию звука в целевом размере просмотра. Разработчик относит мультимодальное понимание и мелкие визуальные детали к направлениям дальнейшего улучшения; подробное задание и сравнение с источником остаются основой полезного результата.",
    "alias_of": null,
    "aliases": [],
    "author": "MiniMax",
    "available": null,
    "canonical_model": "minimax/hailuo-3",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image",
        "video",
        "audio"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "1.3",
            "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": "1.3",
            "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": "Полная информация о ценах конфигурации — в подробностях."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "ffcc346d33bca9e66b22f181",
        "label": "Ссылки на цены конфигураций видео",
        "profiles": [
          {
            "basis": "Опубликованный ориентир цены для показанной конфигурации. Итоговые списания зависят от фактической оплачиваемой конфигурации.",
            "dimensions": {
              "conditions": "В этом ключе цены дополнительное условие не объявлено."
            },
            "label": "Цена видео",
            "units": [
              {
                "amount": "0.26",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Первые пять референсных изображений бесплатны; указанная ставка за изображение применяется сверх первых пяти. Опубликованная справочная цена относится к показанной конфигурации. Итоговые начисления определяются фактически тарифицированной конфигурацией.",
            "dimensions": {
              "conditions": "В этом ключе цены дополнительное условие не объявлено."
            },
            "label": "Референсные изображения сверх первых пяти",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "key": "input_image",
                "label": "Reference images after the first five",
                "public_unit_label": "per image",
                "quantity": 1,
                "rate_role": "typed_video_image_reference",
                "side": "in",
                "unit": "image"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "minimax/hailuo-3",
    "input": [
      "text",
      "image",
      "audio",
      "video"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Отображаемые тарифы позволяют оценить стоимость до генерации. Итоговое списание рассчитывается по стоимости, записанной для исходной генерации. Измеренная длительность результата и прогнозные объёмы не являются итоговым оплачиваемым объёмом.",
          "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": "Сохраняйте каждый фактический результат, принадлежащий Ailoot, и возвращённые измеренные метаданные.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Доступ к видео недоступен либо этот ID видео не найден.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Проверьте доступ к видео. Для существующего видео используйте исходный публичный ID и тот же ключ API.",
                "type": "not_found_error"
              },
              {
                "condition": "Ключ API не соответствует авторизованному аккаунту.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Перед отправкой проверьте ключ API и доступ к аккаунту.",
                "type": "authentication_error"
              },
              {
                "condition": "Не удалось прочитать запрос либо индекс скачивания недопустим.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Исправьте тело запроса. Для скачивания выберите индекс результата, возвращённый исходной задачей.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Невозможно определить цену выбранной конфигурации видео.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Выберите поддерживаемую конфигурацию видео и заполните обязательные параметры перед отправкой исправленного запроса.",
                "type": "price_unavailable"
              },
              {
                "condition": "Недопустимы входное видео или исходная задача продолжения.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Используйте корректные входные HTTPS-ссылки. Для продолжения используйте исходный публичный ID вашего готового видео и тот же ключ API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Доступный баланс или лимиты не позволяют зарезервировать средства.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Перед отправкой нового запроса проверьте доступный баланс и лимиты.",
                "type": "billing_error"
              },
              {
                "condition": "Проверка видео, хранилище или доступ к сервису временно недоступны.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Дождитесь доступности сервиса. Если у вас уже есть ID видео, проверяйте ту исходную задачу вместо создания новой генерации.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Нужно проверить результат исходного видео и начисление.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Сохраните возвращённый ID видео и проверьте эту задачу. Не отправляйте заменяющий запрос на генерацию, пока идёт проверка.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Скачивание существующего видео временно недоступно.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Проверьте ту же видеозадачу позже и скачайте её существующий результат. Новая генерация создаёт отдельную операцию.",
                "type": "server_error"
              },
              {
                "condition": "Содержимое видео не опубликовано.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Проверьте исходный статус задачи. Скачайте результат после completed; при failed следуйте уведомлению о проверке начисления.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + исходный id + X-Should-Retry:false; никогда не отправляйте исходный запрос повторно"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Передайте prompt как текст, а duration — как целое число секунд. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Текстовый запрос."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images — массив. Каждый объект кадра содержит type, image_url и frame_type; image_url содержит url. Укажите image_url в type. Используйте first_frame с необязательным last_frame. Каждая роль кадра встречается не более одного раза. Для каждого кадра укажите публичный HTTPS URL изображения. В одном запросе используйте изображения кадров либо референсные изображения; не совмещайте их. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Текстовый запрос и изображение первого кадра."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "minimax/hailuo-3"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references — массив объектов. Укажите image_url, video_url или audio_url в type и используйте соответствующее поле с url. Используйте публичные HTTPS-ссылки. Не передавайте frame_images, чтобы выбрать режим референсов. В оценку входит показанная плата за изображение только для референсов сверх первых пяти. Итоговое начисление определяется фактически тарифицированной конфигурацией. Не совмещайте референсные изображения с изображениями кадров. Выберите поддерживаемое разрешение и, при необходимости, соотношение сторон.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Текстовый запрос и поддерживаемые референсы: изображения, видео, аудио."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Позиция этого видео в списке результатов, начиная с нуля.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "Подписанный HTTPS URL для скачивания этого готового видео.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Хэш SHA-256 исходных байтов видео; null, если недоступен.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Размер исходного видеофайла в байтах; null, если недоступен.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Измеренная длительность видео в миллисекундах; null, если недоступна.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Ширина видео в пикселях; null, если недоступна.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Высота видео в пикселях; null, если недоступна.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Идентификатор видеокодека; null, если не записан.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Есть ли у видео аудиодорожка; null, если не измерено.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Идентификатор аудиокодека; null, если идентификатор не записан.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "подписанные ссылки на содержимое, принадлежащее Ailoot",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "minimax/hailuo-3"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "minimax/hailuo-3"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "2K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "2K"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "21:9",
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Эти ключи описывают каждый объект кадра; image_url содержит только url. Не передавайте frame_images для запроса только с текстом.",
                "content": "Массив объектов кадров. Каждый объект содержит type=image_url, image_url с url и frame_type. Используйте HTTPS URL изображения и укажите first_frame или last_frame в frame_type. Каждая роль кадра встречается не более одного раза.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "type": {
                            "const": "video_url"
                          },
                          "video_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "type",
                          "video_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "21:9",
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "type": {
                            "const": "video_url"
                          },
                          "video_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "type",
                          "video_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "minimax/hailuo-3"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "2K"
                  ]
                },
                "seed": false,
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": false,
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Frame images plus image references are rejected because mixed additive input count is unproved; pure frame or pure reference mode remains separately priced."
              ]
            },
            "unsupported": [
              "size",
              "seed",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.26",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.26",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per reference image"
            },
            "label": "reference image",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "reference_images",
                "label": "reference image",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per reference image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "reference_images"
              }
            ]
          },
          {
            "basis": "Эта оценка не является дополнительным списанием или фиксированным тарифом для завершённой генерации.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Ориентировочная стоимость генерации",
            "units": [
              {
                "amount": "1.3",
                "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": "1.3",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"minimax/hailuo-3\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"2K\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.26",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.26",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per reference image"
            },
            "label": "reference image",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "reference_images",
                "label": "reference image",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per reference image",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "reference_images"
              }
            ]
          },
          {
            "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": "1.3",
                "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": "1.3",
                "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": "minimax/hailuo-3",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.26",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.26",
            "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.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "reference_images",
            "label": "reference image",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "per reference image",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "reference_images"
          },
          {
            "amount": "1.3",
            "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": "1.3",
            "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": "minimax/hailuo-3",
        "request_model_id": "minimax/hailuo-3",
        "route_label": "Ultra"
      }
    ],
    "name": "MiniMax: H3",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 1.3,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 1.3,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "input_materials_additive": true,
          "resolution": "768P"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "input_materials_additive": true,
              "resolution": "768P"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "input_materials_additive": true,
          "resolution": "2K"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.26",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "input_materials_additive": true,
              "resolution": "2K"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "output_resolution": "768P"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "adds_to_output": true,
              "output_resolution": "768P"
            },
            "key": "input_video",
            "label": "input video",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "output_resolution": "2K"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.26",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "adds_to_output": true,
              "output_resolution": "2K"
            },
            "key": "input_video",
            "label": "input video",
            "profile_index": 3,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_output": true,
          "first_free_reference_images": 5,
          "only_additional_images_charged": true,
          "reference_audio_free": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_input_image",
            "conditions": {
              "adds_to_output": true,
              "first_free_reference_images": 5,
              "only_additional_images_charged": true,
              "reference_audio_free": true
            },
            "key": "input_image",
            "label": "input image",
            "profile_index": 4,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.26",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "output second",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.26",
            "key": "duration_seconds",
            "label": "output second",
            "native_amount_usd_per_unit": "0.26",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "reference image",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.08",
            "key": "reference_images",
            "label": "reference image",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "quantity": 1,
            "side": "in",
            "unit": "reference_image"
          }
        ]
      }
    ],
    "public_id": "minimax/hailuo-3",
    "short": "MiniMax H3 создаёт короткое видео со встроенным стереозвуком по тексту, изображениям кадров или мультимодальным референсам. Поддерживает создание по первому/последнему кадру, редактирование по референсам и связи движения или голоса; длительность результата — 4–15 секунд, а для 2K предусмотрен отдельный процесс повторной генерации."
  },
  "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": "MiniMax H3 создаёт короткое видео со встроенным стереозвуком по тексту, изображениям кадров или мультимодальным референсам. Поддерживает создание по первому/последнему кадру, редактирование по референсам и связи движения или голоса; длительность результата — 4–15 секунд, а для 2K предусмотрен отдельный процесс повторной генерации.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "41c5c17fe1e19c250bde4b62dec0122086973bfd11d7cb586df65166d13dbddd",
    "renderer_sha256": "aa692ffec412026bdeaf316df24a58e6c5083045e5246f6033f898d132afa5ff"
  },
  "sourceRevision": "4cf4caf9786b099a2c2ec7a890d91b6c03205df963ea3e2d7768d83f18104e5a"
}
