MiniMax H3 API

Принимает текстовое описание и возвращает готовый ролик. Разрешение 768P, 2K, 6 соотношений сторон, от 21:9 до 9:16, описание до 7 000 символов. Модель MiniMax.

Принимает изображение и оживляет его, возвращая ролик. Разрешение 768P, 2K, описание до 7 000 символов. Модель MiniMax.

Принимает изображения-образцы и переносит показанное на них в новый ролик. Разрешение 768P, 2K, 7 соотношений сторон, от adaptive до 9:16, описание до 7 000 символов. Модель MiniMax.

MiniMax H3 API работает в России без VPN: один API ключ GEN202, оплата рублями с российской карты, цена до 35% ниже официальной.

Цена: за секунду, 768p — 10.4 кр. (5,2 ₽ · $0.052), 2K — 16.9 кр. (8,45 ₽ · $0.0845).

Цена: за секунду, 768p — 10.4 кр. (5,2 ₽ · $0.052), 2K — 16.9 кр. (8,45 ₽ · $0.0845).

Цена: за секунду, 768p — 10.4 кр. (5,2 ₽ · $0.052), 2K — 16.9 кр. (8,45 ₽ · $0.0845).

кр. — кредиты, покупаются за рубли.

Model

Статус

работает

Статус

работает

Статус

работает

Песочница

Input

Чтобы создать видео — войдите и получите 50 кредитов на тесты и любое использование сервиса.

{
  "model": "minimax/h3-text-to-video",
  "input": {
    "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
    "duration": 4,
    "aspect_ratio": "21:9",
    "resolution": "768P"
  }
}
Output

Нажмите «Запустить» — готовый ролик появится здесь

Ролик делается минуты. Задача живёт не дольше 60 минут, после чего шлюз закрывает её сам и возвращает удержание целиком.

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cm8r4t0vk0001s60p2xq7f9ab",
    "model": "minimax/h3-text-to-video",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
    "failCode": "",
    "failMsg": "",
    "creditsConsumed": 10.4
  }
}
Input

Чтобы создать видео — войдите и получите 50 кредитов на тесты и любое использование сервиса.

{
  "model": "minimax/h3-image-to-video",
  "input": {
    "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
    "duration": 4,
    "resolution": "768P"
  }
}
Output

Нажмите «Запустить» — готовый ролик появится здесь

Ролик делается минуты. Задача живёт не дольше 60 минут, после чего шлюз закрывает её сам и возвращает удержание целиком.

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cm8r4t0vk0001s60p2xq7f9ab",
    "model": "minimax/h3-image-to-video",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
    "failCode": "",
    "failMsg": "",
    "creditsConsumed": 10.4
  }
}
Input

Чтобы создать видео — войдите и получите 50 кредитов на тесты и любое использование сервиса.

{
  "model": "minimax/h3-reference-to-video",
  "input": {
    "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
    "duration": 4,
    "aspect_ratio": "adaptive",
    "resolution": "768P"
  }
}
Output

Нажмите «Запустить» — готовый ролик появится здесь

Ролик делается минуты. Задача живёт не дольше 60 минут, после чего шлюз закрывает её сам и возвращает удержание целиком.

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cm8r4t0vk0001s60p2xq7f9ab",
    "model": "minimax/h3-reference-to-video",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
    "failCode": "",
    "failMsg": "",
    "creditsConsumed": 10.4
  }
}

Цена MiniMax H3

Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.

Вариант Скидка от официальной цены Наша цена
768P $0.08 −35% 10.4 кр. $0.0525,2 ₽
2K $0.13 −35% 16.9 кр. $0.08458,45 ₽

В среднем на 35% ниже официальной цены поставщика. кр. — кредиты, покупаются за рубли.

Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.

Вариант Скидка от официальной цены Наша цена
768P $0.08 −35% 10.4 кр. $0.0525,2 ₽
2K $0.13 −35% 16.9 кр. $0.08458,45 ₽

В среднем на 35% ниже официальной цены поставщика. кр. — кредиты, покупаются за рубли.

Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.

Вариант Скидка от официальной цены Наша цена
768P $0.08 −35% 10.4 кр. $0.0525,2 ₽
2K $0.13 −35% 16.9 кр. $0.08458,45 ₽

В среднем на 35% ниже официальной цены поставщика. кр. — кредиты, покупаются за рубли.

На время работы шлюз удерживает ставку выбранного разрешения, умноженную на запрошенную длительность; больше 253.5 кредита по этой модели он не удержит ни при каком запросе (duration до 15 с). Разница между удержанием и фактическим расходом возвращается на баланс тем же запросом состояния, который увидел итог.

Вызов через API

POST https://api.gen202.com/api/v1/jobs/createTask
GET https://api.gen202.com/api/v1/jobs/recordInfo?taskId=…

Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком Authorization: Bearer sk-… и выпускается в кабинете. На один ключ шлюз пропускает 30 постановок задачи и 300 запросов состояния в минуту.

Поля запроса

Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне перечисления возвращают 422 и кредитов не тратят.

ПолеТипОбяз.Допустимые значения
model текст обязательное minimax/h3-text-to-video
input объект обязательное Параметры генерации — поля из таблицы ниже

Поля input

ПолеТипОбяз.Допустимые значения
prompt текст обязательное от 1 до 7 000 символов
duration целое число обязательное целое от 4 до 15
aspect_ratio значение из списка обязательное 21:9 · 16:9 · 4:3 · 1:1 · 3:4 · 9:16
resolution значение из списка опц. 768P · 2K

Ответ

Оба запроса отвечают одним конвертом: {"code":…,"msg":…,"data":…}, где code повторяет HTTP-статус, а полезное лежит в data. Тот же конверт приходит и при отказе — разбирать две формы ответа не нужно.

/api/v1/jobs/createTask

ПолеТипЧто в нём
data.taskId строка Номер задачи. Больше в ответе ничего нет и быть не может — работа только началась.

/api/v1/jobs/recordInfo

ПолеТипЧто в нём
data.taskId строка Номер задачи — тот же, что вернул createTask.
data.model строка Имя модели в том виде, в каком его прислал клиент.
data.state строка Состояние задачи: waiting, queuing, generating, success или fail.
data.param строка Параметры, с которыми задача создана, — строкой JSON внутри JSON.
data.resultJson строка Результат строкой JSON внутри JSON: {"resultUrls":["https://…"]} — разбирается вторым разбором. До завершения задачи — пустая строка.
data.failCode строка Код неудачи из таблицы ниже. У остальных задач — пустая строка.
data.failMsg строка Причина неудачи словами. Иначе пустая строка.
data.costTime число Сколько задача заняла, миллисекунды. Пока не завершилась — null.
data.completeTime число Когда завершилась, миллисекунды эпохи Unix. Пока не завершилась — null.
data.createTime число Когда создана, миллисекунды эпохи Unix.
data.updateTime число Когда состояние менялось в последний раз, миллисекунды эпохи Unix.
data.creditsConsumed число Сколько кредитов списано. Ноль, пока задача не завершилась, и ноль у неудачной.

Состояния задачи

Состояние лежит в поле state ответа /api/v1/jobs/recordInfo. Первые три означают, что работа идёт: запрос надо повторить примерно через 3 секунды — чаще спрашивать нечего, столько же ждёт между опросами сам шлюз. Два последних состояния окончательные: после них задача не меняется.

stateЧто происходит
waiting Задача принята и стоит в очереди шлюза; поставщику она ещё не отправлена.
queuing Поставщик задачу принял и поставил в свою очередь.
generating Генерация идёт.
success Готово: ссылки на результат лежат в resultJson, в creditsConsumed — сколько списано.
fail Задача не удалась: причина в failCode и failMsg, удержанные кредиты возвращены целиком.

Опрос не бывает бесконечным: задача на видео живёт не дольше 60 минут, после чего шлюз закрывает её сам состоянием fail и возвращает удержанные кредиты целиком. Причина неудачи приходит двумя полями: failCode из таблицы ниже и failMsg словами.

failCodeЧто произошло
501 Поставщик вернул отказ: генерация не удалась.
408 Результата нет дольше крайнего срока задачи (60 минут для видео).
404 Поставщик не знает такой задачи.
429 Поставщик отбил создание задачи по своему лимиту.
500 Поломка на нашей стороне; подробности остаются в журнале шлюза.

Ссылка на готовый файл живёт 14 дней — столько его хранит поставщик. Файл, который нужен дольше, скачивайте к себе сразу после того, как задача пришла в состояние success.

Отказы

Тело отказа одно на все случаи: {"code":…,"msg":…,"data":null}. Задача, не дошедшая до результата, не тарифицируется — удержанные кредиты возвращаются целиком.

КодАдресКогда
400 /api/v1/jobs/createTask Тело запроса — не разбираемый JSON.
401 /api/v1/jobs/createTask Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 /api/v1/jobs/createTask Свободных кредитов меньше, чем удерживается под задачу.
403 /api/v1/jobs/createTask Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте.
413 /api/v1/jobs/createTask Тело запроса больше 512 КиБ.
415 /api/v1/jobs/createTask Тело отправлено не как application/json или заголовок Content-Type не передан.
422 /api/v1/jobs/createTask Поле model пустое или его имени нет в каталоге, input — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
500 /api/v1/jobs/createTask Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.
401 /api/v1/jobs/recordInfo Ключа нет в заголовке Authorization, либо он неверный или отключён.
404 /api/v1/jobs/recordInfo Задачи с таким номером нет или она создана другим аккаунтом.
422 /api/v1/jobs/recordInfo Параметр taskId не передан.
429 /api/v1/jobs/recordInfo Больше 300 запросов в минуту на один ключ.
500 /api/v1/jobs/recordInfo Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Пример вызова

task.sh
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax/h3-text-to-video",
    "input": {
      "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
      "duration": 4,
      "aspect_ratio": "21:9",
      "resolution": "768P"
    }
  }' | jq -r '.data.taskId')

# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
#    generating означают «работа идёт», success и fail — окончательные
while true; do
  RECORD=$(curl -s "https://api.gen202.com/api/v1/jobs/recordInfo?taskId=$TASK" \
    -H "Authorization: Bearer sk-ваш-ключ")
  STATE=$(echo "$RECORD" | jq -r '.data.state')
  case "$STATE" in success|fail) break;; esac
  sleep 3
done

# 3. Забрать результат. Ссылка на файл лежит в resultJson — это строка JSON
#    внутри JSON, поэтому её разбирают вторым разбором (fromjson)
echo "$RECORD" | jq -r '.data |
  if .state == "fail"
  then "отказ \(.failCode): \(.failMsg)"
  else .resultJson | fromjson | .resultUrls[0]
  end'
task.py
import json
import time

import requests

headers = {"Authorization": "Bearer sk-ваш-ключ"}

# 1. Поставить задачу — в ответе придёт её номер
created = requests.post(
    "https://api.gen202.com/api/v1/jobs/createTask",
    headers=headers,
    json={
      "model": "minimax/h3-text-to-video",
      "input": {
        "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
        "duration": 4,
        "aspect_ratio": "21:9",
        "resolution": "768P"
      }
    },
).json()
task_id = created["data"]["taskId"]

# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
#    generating означают «работа идёт», success и fail — окончательные
while True:
    task = requests.get(
        "https://api.gen202.com/api/v1/jobs/recordInfo",
        headers=headers,
        params={"taskId": task_id},
    ).json()["data"]
    if task["state"] in ("success", "fail"):
        break
    time.sleep(3)

# 3. Разобрать итог. У неудачи причина в failCode и failMsg
if task["state"] == "fail":
    raise SystemExit("отказ " + task["failCode"] + ": " + task["failMsg"])

# resultJson — строка JSON внутри JSON, поэтому разбор второй
result = json.loads(task["resultJson"])
print(result["resultUrls"][0])
print("списано кредитов:", task["creditsConsumed"])

Пример проходит весь путь: ставит задачу, повторяет запрос состояния раз в 3 секунды, пока задача не закончится, и разбирает ответ до ссылки на файл. Разборов два, потому что поле resultJson — строка JSON внутри JSON. В теле первого запроса стоят обязательные поля модели и значения из её перечислений, поэтому он проходит проверку шлюза как есть. Подставить остаётся только свой ключ. Пример на оболочке разбирает ответ через jq; на Python своего ничего не нужно, кроме requests.

POST https://api.gen202.com/api/v1/jobs/createTask
GET https://api.gen202.com/api/v1/jobs/recordInfo?taskId=…

Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком Authorization: Bearer sk-… и выпускается в кабинете. На один ключ шлюз пропускает 30 постановок задачи и 300 запросов состояния в минуту.

Поля запроса

Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне перечисления возвращают 422 и кредитов не тратят.

ПолеТипОбяз.Допустимые значения
model текст обязательное minimax/h3-image-to-video
input объект обязательное Параметры генерации — поля из таблицы ниже

Поля input

ПолеТипОбяз.Допустимые значения
prompt текст обязательное от 1 до 7 000 символов
duration целое число обязательное целое от 4 до 15
first_frame_url ссылка опц. одна ссылка на изображение
last_frame_url ссылка опц. одна ссылка на изображение
resolution значение из списка опц. 768P · 2K

Ссылка на изображение принимается только полным адресом на http или https: не длиннее 2048 символов, на общедоступном сайте, без имени и пароля перед адресом и без порта, кроме 80 и 443. Относительный путь, а также адреса внутри сети — localhost, 127.0.0.1, 10.0.0.5, 192.168.1.2 — и имена без точки шлюз отклоняет ответом 422, к поставщику не обращаясь.

Ответ

Оба запроса отвечают одним конвертом: {"code":…,"msg":…,"data":…}, где code повторяет HTTP-статус, а полезное лежит в data. Тот же конверт приходит и при отказе — разбирать две формы ответа не нужно.

/api/v1/jobs/createTask

ПолеТипЧто в нём
data.taskId строка Номер задачи. Больше в ответе ничего нет и быть не может — работа только началась.

/api/v1/jobs/recordInfo

ПолеТипЧто в нём
data.taskId строка Номер задачи — тот же, что вернул createTask.
data.model строка Имя модели в том виде, в каком его прислал клиент.
data.state строка Состояние задачи: waiting, queuing, generating, success или fail.
data.param строка Параметры, с которыми задача создана, — строкой JSON внутри JSON.
data.resultJson строка Результат строкой JSON внутри JSON: {"resultUrls":["https://…"]} — разбирается вторым разбором. До завершения задачи — пустая строка.
data.failCode строка Код неудачи из таблицы ниже. У остальных задач — пустая строка.
data.failMsg строка Причина неудачи словами. Иначе пустая строка.
data.costTime число Сколько задача заняла, миллисекунды. Пока не завершилась — null.
data.completeTime число Когда завершилась, миллисекунды эпохи Unix. Пока не завершилась — null.
data.createTime число Когда создана, миллисекунды эпохи Unix.
data.updateTime число Когда состояние менялось в последний раз, миллисекунды эпохи Unix.
data.creditsConsumed число Сколько кредитов списано. Ноль, пока задача не завершилась, и ноль у неудачной.

Состояния задачи

Состояние лежит в поле state ответа /api/v1/jobs/recordInfo. Первые три означают, что работа идёт: запрос надо повторить примерно через 3 секунды — чаще спрашивать нечего, столько же ждёт между опросами сам шлюз. Два последних состояния окончательные: после них задача не меняется.

stateЧто происходит
waiting Задача принята и стоит в очереди шлюза; поставщику она ещё не отправлена.
queuing Поставщик задачу принял и поставил в свою очередь.
generating Генерация идёт.
success Готово: ссылки на результат лежат в resultJson, в creditsConsumed — сколько списано.
fail Задача не удалась: причина в failCode и failMsg, удержанные кредиты возвращены целиком.

Опрос не бывает бесконечным: задача на видео живёт не дольше 60 минут, после чего шлюз закрывает её сам состоянием fail и возвращает удержанные кредиты целиком. Причина неудачи приходит двумя полями: failCode из таблицы ниже и failMsg словами.

failCodeЧто произошло
501 Поставщик вернул отказ: генерация не удалась.
408 Результата нет дольше крайнего срока задачи (60 минут для видео).
404 Поставщик не знает такой задачи.
429 Поставщик отбил создание задачи по своему лимиту.
500 Поломка на нашей стороне; подробности остаются в журнале шлюза.

Ссылка на готовый файл живёт 14 дней — столько его хранит поставщик. Файл, который нужен дольше, скачивайте к себе сразу после того, как задача пришла в состояние success.

Отказы

Тело отказа одно на все случаи: {"code":…,"msg":…,"data":null}. Задача, не дошедшая до результата, не тарифицируется — удержанные кредиты возвращаются целиком.

КодАдресКогда
400 /api/v1/jobs/createTask Тело запроса — не разбираемый JSON.
401 /api/v1/jobs/createTask Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 /api/v1/jobs/createTask Свободных кредитов меньше, чем удерживается под задачу.
403 /api/v1/jobs/createTask Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте.
413 /api/v1/jobs/createTask Тело запроса больше 512 КиБ.
415 /api/v1/jobs/createTask Тело отправлено не как application/json или заголовок Content-Type не передан.
422 /api/v1/jobs/createTask Поле model пустое или его имени нет в каталоге, input — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
500 /api/v1/jobs/createTask Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.
401 /api/v1/jobs/recordInfo Ключа нет в заголовке Authorization, либо он неверный или отключён.
404 /api/v1/jobs/recordInfo Задачи с таким номером нет или она создана другим аккаунтом.
422 /api/v1/jobs/recordInfo Параметр taskId не передан.
429 /api/v1/jobs/recordInfo Больше 300 запросов в минуту на один ключ.
500 /api/v1/jobs/recordInfo Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Пример вызова

task.sh
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax/h3-image-to-video",
    "input": {
      "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
      "duration": 4,
      "resolution": "768P"
    }
  }' | jq -r '.data.taskId')

# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
#    generating означают «работа идёт», success и fail — окончательные
while true; do
  RECORD=$(curl -s "https://api.gen202.com/api/v1/jobs/recordInfo?taskId=$TASK" \
    -H "Authorization: Bearer sk-ваш-ключ")
  STATE=$(echo "$RECORD" | jq -r '.data.state')
  case "$STATE" in success|fail) break;; esac
  sleep 3
done

# 3. Забрать результат. Ссылка на файл лежит в resultJson — это строка JSON
#    внутри JSON, поэтому её разбирают вторым разбором (fromjson)
echo "$RECORD" | jq -r '.data |
  if .state == "fail"
  then "отказ \(.failCode): \(.failMsg)"
  else .resultJson | fromjson | .resultUrls[0]
  end'
task.py
import json
import time

import requests

headers = {"Authorization": "Bearer sk-ваш-ключ"}

# 1. Поставить задачу — в ответе придёт её номер
created = requests.post(
    "https://api.gen202.com/api/v1/jobs/createTask",
    headers=headers,
    json={
      "model": "minimax/h3-image-to-video",
      "input": {
        "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
        "duration": 4,
        "resolution": "768P"
      }
    },
).json()
task_id = created["data"]["taskId"]

# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
#    generating означают «работа идёт», success и fail — окончательные
while True:
    task = requests.get(
        "https://api.gen202.com/api/v1/jobs/recordInfo",
        headers=headers,
        params={"taskId": task_id},
    ).json()["data"]
    if task["state"] in ("success", "fail"):
        break
    time.sleep(3)

# 3. Разобрать итог. У неудачи причина в failCode и failMsg
if task["state"] == "fail":
    raise SystemExit("отказ " + task["failCode"] + ": " + task["failMsg"])

# resultJson — строка JSON внутри JSON, поэтому разбор второй
result = json.loads(task["resultJson"])
print(result["resultUrls"][0])
print("списано кредитов:", task["creditsConsumed"])

Пример проходит весь путь: ставит задачу, повторяет запрос состояния раз в 3 секунды, пока задача не закончится, и разбирает ответ до ссылки на файл. Разборов два, потому что поле resultJson — строка JSON внутри JSON. В теле первого запроса стоят обязательные поля модели и значения из её перечислений, поэтому он проходит проверку шлюза как есть. Подставить остаётся только свой ключ. Пример на оболочке разбирает ответ через jq; на Python своего ничего не нужно, кроме requests.

POST https://api.gen202.com/api/v1/jobs/createTask
GET https://api.gen202.com/api/v1/jobs/recordInfo?taskId=…

Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком Authorization: Bearer sk-… и выпускается в кабинете. На один ключ шлюз пропускает 30 постановок задачи и 300 запросов состояния в минуту.

Поля запроса

Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне перечисления возвращают 422 и кредитов не тратят.

ПолеТипОбяз.Допустимые значения
model текст обязательное minimax/h3-reference-to-video
input объект обязательное Параметры генерации — поля из таблицы ниже

Поля input

ПолеТипОбяз.Допустимые значения
prompt текст обязательное от 1 до 7 000 символов
duration целое число обязательное целое от 4 до 15
reference_image_urls список ссылок опц. до 9 ссылок на изображение
reference_video_urls список ссылок опц. до 3 ссылок на видео
reference_audio_urls список ссылок опц. до 3 ссылок на аудио
aspect_ratio значение из списка опц. adaptive · 21:9 · 16:9 · 4:3 · 1:1 · 3:4 · 9:16
resolution значение из списка опц. 768P · 2K

Ссылка на исходный файл принимается только полным адресом на http или https: не длиннее 2048 символов, на общедоступном сайте, без имени и пароля перед адресом и без порта, кроме 80 и 443. Относительный путь, а также адреса внутри сети — localhost, 127.0.0.1, 10.0.0.5, 192.168.1.2 — и имена без точки шлюз отклоняет ответом 422, к поставщику не обращаясь.

Ответ

Оба запроса отвечают одним конвертом: {"code":…,"msg":…,"data":…}, где code повторяет HTTP-статус, а полезное лежит в data. Тот же конверт приходит и при отказе — разбирать две формы ответа не нужно.

/api/v1/jobs/createTask

ПолеТипЧто в нём
data.taskId строка Номер задачи. Больше в ответе ничего нет и быть не может — работа только началась.

/api/v1/jobs/recordInfo

ПолеТипЧто в нём
data.taskId строка Номер задачи — тот же, что вернул createTask.
data.model строка Имя модели в том виде, в каком его прислал клиент.
data.state строка Состояние задачи: waiting, queuing, generating, success или fail.
data.param строка Параметры, с которыми задача создана, — строкой JSON внутри JSON.
data.resultJson строка Результат строкой JSON внутри JSON: {"resultUrls":["https://…"]} — разбирается вторым разбором. До завершения задачи — пустая строка.
data.failCode строка Код неудачи из таблицы ниже. У остальных задач — пустая строка.
data.failMsg строка Причина неудачи словами. Иначе пустая строка.
data.costTime число Сколько задача заняла, миллисекунды. Пока не завершилась — null.
data.completeTime число Когда завершилась, миллисекунды эпохи Unix. Пока не завершилась — null.
data.createTime число Когда создана, миллисекунды эпохи Unix.
data.updateTime число Когда состояние менялось в последний раз, миллисекунды эпохи Unix.
data.creditsConsumed число Сколько кредитов списано. Ноль, пока задача не завершилась, и ноль у неудачной.

Состояния задачи

Состояние лежит в поле state ответа /api/v1/jobs/recordInfo. Первые три означают, что работа идёт: запрос надо повторить примерно через 3 секунды — чаще спрашивать нечего, столько же ждёт между опросами сам шлюз. Два последних состояния окончательные: после них задача не меняется.

stateЧто происходит
waiting Задача принята и стоит в очереди шлюза; поставщику она ещё не отправлена.
queuing Поставщик задачу принял и поставил в свою очередь.
generating Генерация идёт.
success Готово: ссылки на результат лежат в resultJson, в creditsConsumed — сколько списано.
fail Задача не удалась: причина в failCode и failMsg, удержанные кредиты возвращены целиком.

Опрос не бывает бесконечным: задача на видео живёт не дольше 60 минут, после чего шлюз закрывает её сам состоянием fail и возвращает удержанные кредиты целиком. Причина неудачи приходит двумя полями: failCode из таблицы ниже и failMsg словами.

failCodeЧто произошло
501 Поставщик вернул отказ: генерация не удалась.
408 Результата нет дольше крайнего срока задачи (60 минут для видео).
404 Поставщик не знает такой задачи.
429 Поставщик отбил создание задачи по своему лимиту.
500 Поломка на нашей стороне; подробности остаются в журнале шлюза.

Ссылка на готовый файл живёт 14 дней — столько его хранит поставщик. Файл, который нужен дольше, скачивайте к себе сразу после того, как задача пришла в состояние success.

Отказы

Тело отказа одно на все случаи: {"code":…,"msg":…,"data":null}. Задача, не дошедшая до результата, не тарифицируется — удержанные кредиты возвращаются целиком.

КодАдресКогда
400 /api/v1/jobs/createTask Тело запроса — не разбираемый JSON.
401 /api/v1/jobs/createTask Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 /api/v1/jobs/createTask Свободных кредитов меньше, чем удерживается под задачу.
403 /api/v1/jobs/createTask Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте.
413 /api/v1/jobs/createTask Тело запроса больше 512 КиБ.
415 /api/v1/jobs/createTask Тело отправлено не как application/json или заголовок Content-Type не передан.
422 /api/v1/jobs/createTask Поле model пустое или его имени нет в каталоге, input — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
500 /api/v1/jobs/createTask Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.
401 /api/v1/jobs/recordInfo Ключа нет в заголовке Authorization, либо он неверный или отключён.
404 /api/v1/jobs/recordInfo Задачи с таким номером нет или она создана другим аккаунтом.
422 /api/v1/jobs/recordInfo Параметр taskId не передан.
429 /api/v1/jobs/recordInfo Больше 300 запросов в минуту на один ключ.
500 /api/v1/jobs/recordInfo Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Пример вызова

task.sh
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax/h3-reference-to-video",
    "input": {
      "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
      "duration": 4,
      "aspect_ratio": "adaptive",
      "resolution": "768P"
    }
  }' | jq -r '.data.taskId')

# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
#    generating означают «работа идёт», success и fail — окончательные
while true; do
  RECORD=$(curl -s "https://api.gen202.com/api/v1/jobs/recordInfo?taskId=$TASK" \
    -H "Authorization: Bearer sk-ваш-ключ")
  STATE=$(echo "$RECORD" | jq -r '.data.state')
  case "$STATE" in success|fail) break;; esac
  sleep 3
done

# 3. Забрать результат. Ссылка на файл лежит в resultJson — это строка JSON
#    внутри JSON, поэтому её разбирают вторым разбором (fromjson)
echo "$RECORD" | jq -r '.data |
  if .state == "fail"
  then "отказ \(.failCode): \(.failMsg)"
  else .resultJson | fromjson | .resultUrls[0]
  end'
task.py
import json
import time

import requests

headers = {"Authorization": "Bearer sk-ваш-ключ"}

# 1. Поставить задачу — в ответе придёт её номер
created = requests.post(
    "https://api.gen202.com/api/v1/jobs/createTask",
    headers=headers,
    json={
      "model": "minimax/h3-reference-to-video",
      "input": {
        "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
        "duration": 4,
        "aspect_ratio": "adaptive",
        "resolution": "768P"
      }
    },
).json()
task_id = created["data"]["taskId"]

# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
#    generating означают «работа идёт», success и fail — окончательные
while True:
    task = requests.get(
        "https://api.gen202.com/api/v1/jobs/recordInfo",
        headers=headers,
        params={"taskId": task_id},
    ).json()["data"]
    if task["state"] in ("success", "fail"):
        break
    time.sleep(3)

# 3. Разобрать итог. У неудачи причина в failCode и failMsg
if task["state"] == "fail":
    raise SystemExit("отказ " + task["failCode"] + ": " + task["failMsg"])

# resultJson — строка JSON внутри JSON, поэтому разбор второй
result = json.loads(task["resultJson"])
print(result["resultUrls"][0])
print("списано кредитов:", task["creditsConsumed"])

Пример проходит весь путь: ставит задачу, повторяет запрос состояния раз в 3 секунды, пока задача не закончится, и разбирает ответ до ссылки на файл. Разборов два, потому что поле resultJson — строка JSON внутри JSON. В теле первого запроса стоят обязательные поля модели и значения из её перечислений, поэтому он проходит проверку шлюза как есть. Подставить остаётся только свой ключ. Пример на оболочке разбирает ответ через jq; на Python своего ничего не нужно, кроме requests.

Остальные модели этого семейства и их поля — в разделе документации Видео.

Что делает нейросеть MiniMax H3

MiniMax H3 — видеомодель MiniMax третьего поколения, объявленная 31 июля 2026 года. Цена у GEN202 — от 5,2 ₽ до 8,45 ₽ за секунду, и цену задаёт выбранное разрешение. Ролик она отдаёт со звуком, а сцену для него берёт из описания, из присланного кадра или из образцов.

У той же модели есть второе имя — Hailuo AI: так MiniMax называет её на своём сайте для людей. Ищут её чаще под этим именем, а в поле model уходит первое.

Способов задать сцену 3, и под каждый есть свой режим: minimax/h3-text-to-video, minimax/h3-image-to-video и minimax/h3-reference-to-video.

Общего у режимов больше, чем своего: prompt, duration и resolution стоят у всех 3, а расходятся они полями под кадры и образцы. Что уходит в теле запроса целиком, разобрано в разделе «MiniMax».

Как снять ролик в MiniMax H3 и что забирают себе

Ролик считается на стороне MiniMax, а запрос уходит туда через нас. Поля заполняют в песочнице, готовый ролик проигрывается прямо под формой, и оттуда же он скачивается файлом.

Считается работа посекундно: сколько секунд заказали, столько и оплачено, а ставку задаёт выбранное разрешение. Приветственные кредиты приходят на счёт при первом входе, и пробный ролик снимается за них.

Файлы самой модели MiniMax выложил наружу — про это ниже на этой странице отдельный раздел. Тем, кому нужен готовый ролик, а не расчёт у себя, ставить ничего не придётся.

Порядок работы один на все 3 режимов, а меняются в нём заполненные поля.

  1. Выберите режим. Переключатель над формой ставит нужный, и от него зависит, появятся ли в запросе поля кадров и образцов.
  2. Опишите сцену. В поле prompt складывают, кто в кадре и что происходит. Движение камеры вписывают действием внутри сцены — так просит сам разработчик.
  3. Приложите кадры или образцы. Ссылки кладут каждую в своё поле: кадры отдельно, картинки, ролики и звук — отдельными списками.
  4. Назначьте длительность и разрешение. Эти два поля решают, каким выйдет ролик, и разрешение вдобавок двигает ставку за секунду.
  5. Сверьте замысел коротким роликом. Младшее разрешение и короткая длительность обходятся дешевле, и описание доводят на них, а нужную длину ставят уже готовому описанию.

Запуск MiniMax H3 на своей видеокарте: файлы и веса

Файлы этой модели MiniMax выложил наружу вскоре после выпуска, и лежат они в открытом хранилище под именем MiniMaxAI/MiniMax-H3. На тех же весах работает модель у нас — разница в том, чья видеокарта считает.

Слово о разрешении при своём расчёте стоит сказать заранее: у практиков ролик в родном для модели разрешении выходил чище, чем тот же ролик, поднятый выше, — на подъёме в кадре появлялись искажения.

Звук у неё свой и пишется вместе с картинкой, поэтому отдельной звуковой модели к ней не нужно.

Прежние поколения этой линейки — Hailuo 02 и 2.3 — файлами наружу не выкладывались и считаются на стороне MiniMax. Они стоят в каталоге рядом и собраны на странице MiniMax API.

Чем различаются режимы MiniMax H3

Разводит режимы только вход: ставка, длительность и разрешения у всех одинаковы, а различаются поля, которыми задают сцену.

РежимОткуда берётся сценаЧто кладут сверх описания
«текст в видео»из одного описанияформа кадра, 6 значения на выбор
«картинка в видео»из присланного кадраfirst_frame_url, last_frame_url или оба сразу
«по образцам»из образцовдо 9 картинок, до 3 роликов и до 3 звуковых дорожек

Обязательных полей у «текст в видео» 3: prompt, duration и aspect_ratio. У остальных двух их 2 — prompt и duration, а форма кадра приходит вместе с присланным материалом.

Значение adaptive есть только у «по образцам»: по нему пропорции берутся с образца, а не назначаются числом.

Выпуски ряда Hailuo: имена у MiniMax и даты

Свою модель MiniMax называет третьим поколением ряда, и два прежних считает своими же. В таблице собраны имена у разработчика, дата объявления, суть переделки и те имена, которые уходят в поле model.

Имя у MiniMaxДата по анонсуЧто изменилосьИмя для поля model
MiniMax-H331 июля 2026Задачи сведены в одну модель; старшее разрешение собирается перегенерацией собственного кадра, а не отдельным увеличителемminimax/h3-text-to-video, minimax/h3-image-to-video и minimax/h3-reference-to-video
Hailuo 02в анонсе H3 не названаПеределаны основные части прежней системы: устройство модели, качество данных и размер

Прочерк во второй строке таблицы значит, что этот выпуск на странице не показан: она собрана вокруг третьего поколения, и в поле model уходят имена его режимов.

Дата стоит на самой странице анонса строкой «2026-07-31», а текст под ней открывается словами «Today, we're launching MiniMax H3» — перевод наш: «Сегодня мы выпускаем MiniMax H3». Страница — объявление о выпуске MiniMax H3.

Прежние поколения разработчик перечисляет там же: «We previously developed two generations of models: Hailuo 01 built the system from the ground up, and Hailuo 02 focused on improving core components like architectural efficiency, data quality, and scale». Перевод наш: «Раньше мы сделали два поколения моделей: Hailuo 01 построила систему с нуля, Hailuo 02 улучшала основные части — эффективность архитектуры, качество данных и масштаб».

Почему устройство прошлого выпуска в новый не перешло, MiniMax объясняет прямо: «Notably, we set aside the Hailuo-02 architecture, despite the significant architectural advantages it once gave us, because it would introduce unnecessary complexity for a model built around task generalization». Перевод наш: «Примечательно, что мы отказались от архитектуры Hailuo-02, несмотря на её прежние преимущества: для модели, построенной вокруг обобщения задач, она добавляла лишнюю сложность».

Какой длины и в каком разрешении выходит ролик MiniMax H3

Поле duration принимает целое число секунд, от 4 до 15, и заполнить его нужно при любом способе задать сцену.

Разрешений 2 — 768P и 2K. Выбор между ними двигает ставку за секунду, и обе строки стоят таблицей выше.

Форм кадра 6: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. Широкая и вертикальная стоят в том же перечне, что и квадратная, поэтому ролик под ленту и ролик под экран заказываются одним и тем же полем.

Что кладут в запрос MiniMax H3 кроме описания

Описание вмещает до 7 000 знаков — это самое просторное поле запроса, и в нём же называют звуки сцены.

Кадры кладут по одной ссылке в поле: first_frame_url задаёт начало ролика, last_frame_url — его конец. Заполняют либо одно из них, либо оба.

Образцы перечисляют тремя списками ссылок — отдельно картинки, отдельно готовые ролики, отдельно звук. Имена полей и предел каждого списка стоят в таблице выше.

Как выглядит заполненная форма, видно сразу: до первой правки в ней стоят допустимые значения, и запрос из неё уходит как есть.

Что MiniMax говорит о модели MiniMax H3

Чем разработчик считает эту модель, сказано первой строкой объявления: «Today, we're launching MiniMax H3, a general-purpose multimodal generation model. H3 understands unified context across text, images, video, and audio, generating video with native stereo sound, up to 15 seconds at 2K resolution». Перевод наш: «Сегодня мы выпускаем MiniMax H3, универсальную многомодальную модель генерации. H3 понимает единый контекст из текста, картинок, видео и звука и порождает видео с родным стереозвуком длиной до 15 секунд в разрешении 2K». Страница — объявление о выпуске MiniMax H3.

Что выходит на выходе, разработчик перечисляет таблицей «Output Specs»: «Model name | MiniMax-H3», «Output resolution | 768P / 2K», «Output duration | 4–15 seconds, integer values only». Перевод наш: имя модели MiniMax-H3, разрешение на выходе 768P или 2K, длительность от 4 до 15 секунд и только целым числом. Страница — руководство MiniMax по генерации видео. Те же значения стоят в форме GEN202: разрешения 768P и 2K и длительность от 4 до 15 секунд.

Как получается старшее разрешение, MiniMax объясняет в том же объявлении о выпуске: «For H3's 2K output, instead of using a conventional dedicated super-resolution module, we have the H3 base model regenerate its own low-resolution output in-context». Перевод наш: «Для выхода в 2K мы не используем отдельный модуль повышения разрешения: базовая модель H3 заново порождает свой же результат низкого разрешения, держа его в контексте».

Свою цену MiniMax публикует сам, строками таблицы: «MiniMax-H3 | 768P | Billed per second | $0.08 / second» и «MiniMax-H3 | 2K | Billed per second | $0.13 / second». Перевод наш: счёт по секундам, 0,08 доллара за секунду в 768P и 0,13 в 2K. Страница — страница цен MiniMax по факту работы. Те же два числа стоят официальной ценой в таблице цен GEN202 — $0.08 и $0.13 за секунду, а рублёвая цена GEN202 стоит в таблице цен выше.

Где модели есть куда расти, разработчик называет сам: «H3 still has room to grow, and here are our priorities for future versions» и дальше «Visual detail can still be improved in certain scenarios. We will continue pushing toward higher resolutions and greater visual fidelity». Перевод наш: «H3 есть куда расти, вот наши приоритеты на будущие версии» и «В некоторых сценах детализация картинки пока может быть лучше; мы будем двигаться к более высоким разрешениям и точности изображения».

Слова MiniMax о модели H3 приведены по его страницам на 14 сентября 2026 года.

Где MiniMax сам очерчивает границу

Кадров на вход берётся один или два: начало ролика, его конец или оба вместе.

У присланной картинки названы пределы сторон в точках и допустимый разброс пропорций — очень вытянутый лист остаётся за границей.

Ролик-образец и звуковой образец ограничены дважды: числом кусков и общей длительностью всех кусков вместе.

Когда образцы смешивают — и картинки, и ролики, и звук в одном запросе, — назван ещё и общий предел на число приложенных файлов.

Что показали независимые проверки MiniMax H3

MiniMax H3 проверяют слепым сравнением на LMArena: человек смотрит два ролика, не зная, чей какой, и выбирает лучший. В арене «картинка в видео» у minimax-h3 стоит 1494 с допуском 6 при 49 443 голосах, у прошлого поколения, hailuo-2.3, — 1262 с допуском 5 при 394 450. В арене «текст в видео» у minimax-h3 — 1462 с допуском 10 при 7 648 голосах, у hailuo-2.3 — 1205 с допуском 6 при 82 971. Между поколениями больше двухсот пунктов в обеих аренах. Числа MiniMax взяты из таблиц — арена «картинка в видео» и арена «текст в видео» на LMArena.

Первый разбор — ролик Airt «MiniMax H3 Is Incredible – And It's FREE (100+ Examples)» от 7 августа 2026 года. Про физику автор говорит так: «Now, physics. This is where you find out if a model actually understands weight. Watch the moment things touch. That's where models cheat». Перевод наш: «Физика — здесь видно, понимает ли модель вес. Смотрите на момент касания: там модели жульничают». Итог он подводит числом предметов: «With one thing moving, it's solid. Add a few more and it starts guessing» — перевод наш: «Один движущийся предмет — держит уверенно. Добавьте ещё несколько — начинает угадывать». Ролик — разбор ста с лишним примеров MiniMax H3.

Что у модели вышло, тот же автор показывает на надписях в кадре: «Now, motion graphics, titles, logos, interfaces, this is where most models fall apart. Watch the text. It stays readable». Перевод наш: «Движущаяся графика, титры, логотипы, интерфейсы — здесь большинство моделей разваливается. Смотрите на текст: он остаётся читаемым». Про постоянство героя: «They gave it a character sheet, one page of drawings, and it kept the same character the whole way» — перевод наш: «Ей дали лист с рисунками героя, одну страницу, и она держала того же героя до конца».

Про открытые файлы он оговаривается отдельно: «So, a free model is actually competing now. That part is real, but the free one isn't the 2K one. That still costs money». Перевод наш: «Бесплатная модель теперь по-настоящему конкурирует. Но бесплатная — не та, что в 2K. За 2K по-прежнему платят».

Второй разбор — ролик Mark Gadala-Maria «I Tested China's New Uncensored AI Video Model (Hailuo H3)» от 7 августа 2026 года, снятый на своём компьютере. Время он называет числом: «But with a 5090, I was able to create a 15-second clip in about 7 to 8 minutes». Перевод наш: «На карте 5090 пятнадцатисекундный ролик у меня выходил примерно за 7–8 минут». Ролик — проверка MiniMax H3 на своём компьютере.

Своё число времени называет и разработчик, но на другом железе и на другом ролике: в его руководстве по запуску у себя стоит строка «Mean inference latency 75.10 seconds across three prompt/seed pairs» при условиях «4 × H200, Ulysses 4, resident, lossless» и «1344 × 768, 124 frames, 24 FPS, 50 steps, 5-second T2VA». Перевод наш: средняя задержка вывода 75,10 секунды по трём парам описание и зерно, на четырёх картах H200, для пятисекундного ролика. Страница — руководство MiniMax по запуску H3 у себя. Оба числа получены на своём оборудовании и на роликах разной длины, поэтому между собой они не сравниваются, и ни одно из них не относится к вызову через GEN202.

Что меняют образцы, второй автор проверил напрямую: «I also put reference images of Michael Jackson and Donald Trump. It I tried it without the reference images and it just does not work as well». Перевод наш: «Я добавил картинки-образцы. Пробовал без них — работает заметно хуже».

Оба ролика о MiniMax H3 приведены на 14 сентября 2026 года, числа арен — на 21 сентября.

Что видно на съёмке в MiniMax H3

Справочник разработчика — его руководство по генерации видео на платформе MiniMax — описывает поля запроса. Ниже — то, что всплывает уже на работе: где пересняли и как обошли.

Наблюдения о MiniMax H3 взяты из разборов с живыми прогонами: Airt, 6 августа 2026, Mark Gadala-Maria, 7 августа 2026, Kingy AI, 10 августа 2026, Dan Kieft, 21 августа 2026.

  • Ролик в родном для модели разрешении выходит чище того же ролика, поднятого выше: на подъёме в кадре набираются искажения. Замысел поэтому доводят на низком разрешении, а высокое берут для готового описания.
  • Музыка рождается заново в каждом куске, и длинный ролик, склеенный из нескольких, звучит разными темами. Обходят это просьбой оставить одни звуки сцены — шаги, удары, шум, — а музыку кладут при монтаже.
  • Движение камеры надёжнее вписать в сцену действием: у прежних поколений работали квадратные скобки с названием приёма, а здесь то же самое говорят обычными словами.
  • Звуки сцены модель берёт из описания охотно, и называть их стоит там же, где действие: удар, скрип, шаги по гравию попадают в дорожку вместе с движением, которое их вызвало.

Отсюда обычный порядок: короткий ролик на низком разрешении, доведённое на нём описание и уже потом длинный ролик в высоком. Так переснимается проба, а не готовая сцена.

Частые вопросы

Как вызвать MiniMax H3 через API из России?
Запрос уходит на api.gen202.com, и это адрес GEN202, а не адрес MiniMax: обращения за границу в вызове MiniMax H3 нет, поэтому VPN не требуется. В поле model уходит идентификатор выбранного варианта: текст в видео (minimax/h3-text-to-video), картинка в видео (minimax/h3-image-to-video), по образцам (minimax/h3-reference-to-video). Порядок вызова MiniMax H3 с примерами кода разобран в документации.
Сколько стоит MiniMax H3
Цена за секунду MiniMax H3 — от 10.4 кр. (5,2 ₽ · $0.052) до 16.9 кр. (8,45 ₽ · $0.0845). У MiniMax H3 списывается фактический расход, а задача, завершившаяся ошибкой, не тарифицируется вовсе.
Нужны ли VPN и иностранная карта для MiniMax H3
Ни то, ни другое: обращение к MiniMax H3 идёт на наш адрес, а расчёты с MiniMax ведём мы, поэтому договариваться с ним клиенту не о чем. Оплата рублями с карты российского банка.
Что MiniMax H3 принимает на вход
Обязательные поля запроса к MiniMax H3: Текст в видео — prompt — от 1 до 7 000 символов; duration — целое от 4 до 15; aspect_ratio — 21:9 · 16:9 · 4:3 · 1:1 · 3:4 · 9:16. Картинка в видео — prompt — от 1 до 7 000 символов; duration — целое от 4 до 15. По образцам — prompt — от 1 до 7 000 символов; duration — целое от 4 до 15. Остальные поля необязательны.
Как подключить MiniMax H3 API и сделать первый вызов
Войти на сайт и выпустить ключ в кабинете: при первом входе начисляется 50 кредитов, и этот же ключ открывает MiniMax H3 вместе с остальным каталогом. Собственного ключа MiniMax и договора с ним для вызова MiniMax H3 не нужно.
Какая компания разработала MiniMax H3
H3 разработала компания MiniMax и объявила её 31 июля 2026 года. Это третье поколение её видеолинейки: прежние назывались Hailuo 02 и Hailuo 2.3.