Общая документация Public API · API-ключ можно создать в настройках аккаунта
MiniMax H3 делает короткие ролики со звуком длиной от 5 до 15 секунд. Сцену можно описать словами, оживить готовую картинку или собрать видео по референсам: показать персонажа и предметы на фото, движение на видео, голос и ритм в аудио. Есть две модели: H3 (768P или 2K) и старшая H3 Max (480p, 768P или 1080p). Подходит для рекламных роликов товара, анимации обложек и иллюстраций, тизеров и вертикальных видео для соцсетей.
Основные сценарии:
text).image), при желании можно задать и последний кадр.reference).Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режим выбирается параметром generation_type, модель - параметром model:
text - видео по описанию, формат кадра задаёт aspect_ratio;image - видео из картинки image, пропорции берутся из неё; с use_last_image: true и last_image ролик закончится заданным кадром;reference - видео по референсам reference_images, reference_videos и reference_audios, формат кадра задаёт aspect_ratio.{
"tool": "minimax-h3",
"input": {
"generation_type": "text",
"model": "h3",
"prompt": "...",
"aspect_ratio": "16:9",
"resolution": "768p",
"duration": 5
}
}
tool - slug нейросети, всегда "minimax-h3".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Да | Режим. text - видео из текста, image - видео из изображения, reference - видео по референсам. Если не передать, будет text. |
model | enum | Да | Модель. h3 - MiniMax H3, разрешения 768p и 2k; h3_max - MiniMax H3 Max, разрешения 480p, 768p и 1080p. Если не передать, будет h3. |
prompt | string | Да | Описание ролика: что происходит в кадре, как движутся герои и камера, свет, стиль, реплики героев. От 3 до 7000 символов. Нужен во всех режимах. |
image | string (url) | Да, для image | Ссылка на картинку, которая станет первым кадром. Форматы: jpg, jpeg, png, webp, до 30 МБ. Каждая сторона - от 256 до 5760 пикселей, соотношение сторон - от 0,4 до 2,5. Используется только в режиме image. |
use_last_image | boolean | Нет | true - задать последний кадр ролика картинкой из last_image. Работает только в режиме image. |
last_image | string (url) | Да, если use_last_image: true | Ссылка на картинку, которой должен закончиться ролик. Форматы: jpg, jpeg, png, webp, до 30 МБ. |
reference_images | string[] (url) | Нет | Референсные изображения для режима reference, до 9 ссылок: персонаж, предметы, одежда, стиль. Форматы: jpg, jpeg, png, webp, до 30 МБ каждое. |
reference_videos | string[] (url) |
В режиме reference нужен хотя бы один файл в reference_images или reference_videos. Запрос только с аудио вернёт ошибку 400 validation_error.
Для всех файлов нужны внешние http/https ссылки, которые открываются без авторизации.
Самый дешёвый вариант H3: 10 ₽ за секунду.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-h3",
"input": {
"generation_type": "text",
"model": "h3",
"prompt": "Утренний рынок в приморском городе: продавец рыбы поднимает свежую дораду и говорит покупателю по-русски: «Только с лодки, ещё утром плавала!» Над прилавками кружат чайки, тёплый рассветный свет",
"aspect_ratio": "16:9",
"resolution": "768p",
"duration": 5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-h3',
input: {
generation_type: 'text',
model: 'h3',
prompt: 'Утренний рынок в приморском городе: продавец рыбы поднимает свежую дораду и говорит покупателю по-русски: «Только с лодки, ещё утром плавала!» Над прилавками кружат чайки, тёплый рассветный свет',
aspect_ratio: '16:9',
resolution: '768p',
duration: 5,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'minimax-h3',
'input': {
'generation_type': 'text',
'model': 'h3',
'prompt': 'Утренний рынок в приморском городе: продавец рыбы поднимает свежую дораду и говорит покупателю по-русски: «Только с лодки, ещё утром плавала!» Над прилавками кружат чайки, тёплый рассветный свет',
'aspect_ratio': '16:9',
'resolution': '768p',
'duration': 5,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-h3",
"input": {
"generation_type": "text",
"model": "h3_max",
"prompt": "Детектив в плаще оборачивается на мокрой ночной улице, неоновые вывески отражаются в лужах, камера медленно обходит его по дуге",
"aspect_ratio": "21:9",
"resolution": "1080p",
"duration": 10
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-h3',
input: {
generation_type: 'text',
model: 'h3_max',
prompt: 'Детектив в плаще оборачивается на мокрой ночной улице, неоновые вывески отражаются в лужах, камера медленно обходит его по дуге',
aspect_ratio: '21:9',
resolution: '1080p',
duration: 10,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'minimax-h3',
'input': {
'generation_type': 'text',
'model': 'h3_max',
'prompt': 'Детектив в плаще оборачивается на мокрой ночной улице, неоновые вывески отражаются в лужах, камера медленно обходит его по дуге',
'aspect_ratio': '21:9',
'resolution': '1080p',
'duration': 10,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Картинка из image станет первым кадром, пропорции ролика берутся из неё.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-h3",
"input": {
"generation_type": "image",
"model": "h3_max",
"prompt": "Девушка дочитывает письмо, улыбается и поднимает взгляд, листья медленно падают, камера плавно приближается, мягкий осенний свет",
"image": "https://cdn.example.com/first-frame.png",
"resolution": "480p",
"duration": 5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-h3',
input: {
generation_type: 'image',
model: 'h3_max',
prompt: 'Девушка дочитывает письмо, улыбается и поднимает взгляд, листья медленно падают, камера плавно приближается, мягкий осенний свет',
image: 'https://cdn.example.com/first-frame.png',
resolution: '480p',
duration: 5,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'minimax-h3',
'input': {
'generation_type': 'image',
'model': 'h3_max',
'prompt': 'Девушка дочитывает письмо, улыбается и поднимает взгляд, листья медленно падают, камера плавно приближается, мягкий осенний свет',
'image': 'https://cdn.example.com/first-frame.png',
'resolution': '480p',
'duration': 5,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Ролик начнётся с image и закончится last_image. Подходит для превращений, пролётов и плавных переходов.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-h3",
"input": {
"generation_type": "image",
"model": "h3",
"prompt": "Бумажный кораблик плывёт по ручью и выплывает в широкую реку, камера следует за ним",
"image": "https://cdn.example.com/first-frame.jpg",
"use_last_image": true,
"last_image": "https://cdn.example.com/last-frame.jpg",
"resolution": "2k",
"duration": 10
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-h3',
input: {
generation_type: 'image',
model: 'h3',
prompt: 'Бумажный кораблик плывёт по ручью и выплывает в широкую реку, камера следует за ним',
image: 'https://cdn.example.com/first-frame.jpg',
use_last_image: true,
last_image: 'https://cdn.example.com/last-frame.jpg',
resolution: '2k',
duration: 10,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'minimax-h3',
'input': {
'generation_type': 'image',
'model': 'h3',
'prompt': 'Бумажный кораблик плывёт по ручью и выплывает в широкую реку, камера следует за ним',
'image': 'https://cdn.example.com/first-frame.jpg',
'use_last_image': True,
'last_image': 'https://cdn.example.com/last-frame.jpg',
'resolution': '2k',
'duration': 10,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-h3",
"input": {
"generation_type": "reference",
"model": "h3",
"prompt": "Пасечник с первой картинки стоит на пасеке среди голубых ульев и держит банку мёда со второй картинки этикеткой к камере, тёплый вечерний свет",
"reference_images": [
"https://cdn.example.com/reference-1.jpg",
"https://cdn.example.com/reference-2.png"
],
"aspect_ratio": "9:16",
"resolution": "768p",
"duration": 5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-h3',
input: {
generation_type: 'reference',
model: 'h3',
prompt: 'Пасечник с первой картинки стоит на пасеке среди голубых ульев и держит банку мёда со второй картинки этикеткой к камере, тёплый вечерний свет',
reference_images: [
'https://cdn.example.com/reference-1.jpg',
'https://cdn.example.com/reference-2.png',
],
aspect_ratio: '9:16',
resolution: '768p',
duration: 5,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'minimax-h3',
'input': {
'generation_type': 'reference',
'model': 'h3',
'prompt': 'Пасечник с первой картинки стоит на пасеке среди голубых ульев и держит банку мёда со второй картинки этикеткой к камере, тёплый вечерний свет',
'reference_images': [
'https://cdn.example.com/reference-1.jpg',
'https://cdn.example.com/reference-2.png',
],
'aspect_ratio': '9:16',
'resolution': '768p',
'duration': 5,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Секунды референс-видео оплачиваются по той же ставке, что и секунды ролика.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-h3",
"input": {
"generation_type": "reference",
"model": "h3",
"prompt": "Девушка с картинки танцует на крыше на закате, повторяет движения из видео и попадает в ритм музыки из аудио",
"reference_images": [
"https://cdn.example.com/reference-1.jpg"
],
"reference_videos": [
"https://cdn.example.com/motion-1.mp4"
],
"reference_audios": [
"https://cdn.example.com/music-1.mp3"
],
"aspect_ratio": "16:9",
"resolution": "768p",
"duration": 5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-h3',
input: {
generation_type: 'reference',
model: 'h3',
prompt: 'Девушка с картинки танцует на крыше на закате, повторяет движения из видео и попадает в ритм музыки из аудио',
reference_images: [
'https://cdn.example.com/reference-1.jpg',
],
reference_videos: [
'https://cdn.example.com/motion-1.mp4',
],
reference_audios: [
'https://cdn.example.com/music-1.mp3',
],
aspect_ratio: '16:9',
resolution: '768p',
duration: 5,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'minimax-h3',
'input': {
'generation_type': 'reference',
'model': 'h3',
'prompt': 'Девушка с картинки танцует на крыше на закате, повторяет движения из видео и попадает в ритм музыки из аудио',
'reference_images': [
'https://cdn.example.com/reference-1.jpg',
],
'reference_videos': [
'https://cdn.example.com/motion-1.mp4',
],
'reference_audios': [
'https://cdn.example.com/music-1.mp3',
],
'aspect_ratio': '16:9',
'resolution': '768p',
'duration': 5,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "minimax-h3",
"cost": 50,
"balance_after": 450,
"created_at": "2026-10-02T19:50:36.746941+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "minimax-h3",
"cost": 50,
"created_at": "2026-10-02T19:50:36.746941+00:00",
"completed_at": "2026-10-02T19:51:25.834556+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/minimax-h3/video-1.mp4"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "minimax-h3",
"cost": 50,
"created_at": "2026-10-02T19:50:36.746941+00:00",
"completed_at": "2026-10-02T19:51:40.220391+00:00",
"result": null,
"error_message": "Ваш запрос не прошел модерацию."
}
Сохраните id из ответа на создание и запрашивайте статус операции по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id: string) {
while (true) {
const response = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await response.json()
if (operation.status === 'completed' || operation.status === 'failed') {
return operation
}
await new Promise((resolve) => setTimeout(resolve, 10000))
}
}
Статус меняется с queued на processing, а затем на completed или failed. В наших проверках ролики 768P и 480p были готовы за 40-130 секунд, 2K - около 3 минут. Опрашивать одну операцию можно не чаще раза в секунду, для видео разумный интервал - 10 секунд.
После завершения в result приходит:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/minimax-h3/video-1.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой на ролик в формате MP4 со звуковой дорожкой.Размеры кадра в наших проверках: H3 768P 16:9 - 1344 × 768, H3 2K 9:16 - 1456 × 2544, H3 Max 480p 16:9 - 832 × 480. Частота - 24 кадра в секунду.
Цена считается по секундам итогового ролика (duration) и зависит от модели и разрешения:
model | resolution | Без референс-видео | С референс-видео |
|---|---|---|---|
h3 | 768p | 10 ₽/сек. | 10 ₽/сек. |
h3 | 2k | 16 ₽/сек. | 16 ₽/сек. |
h3_max | 480p | 6 ₽/сек. | 8 ₽/сек. |
h3_max | 768p | 10 ₽/сек. | 10 ₽/сек. |
h3_max | 1080p | 20 ₽/сек. | 20 ₽/сек. |
В режиме reference с видео к секундам ролика добавляются секунды референс-видео по той же ставке: длина каждого видео округляется вверх до целой секунды, затем всё складывается. Референсные изображения и аудио цену не меняют.
| Запуск | Расчёт | Цена |
|---|---|---|
| H3 Max 480p, 5 с | 5 × 6 | 30 ₽ |
| H3 768P, 5 с | 5 × 10 | 50 ₽ |
| H3 2K, 10 с | 10 × 16 | 160 ₽ |
| H3 Max 1080p, 15 с | 15 × 20 | 300 ₽ |
| H3 768P, 5 с, одно референс-видео 6 с | (5 + 6) × 10 | 110 ₽ |
| H3 Max 480p, 5 с, одно референс-видео 6 с | (5 + 6) × 8 | 88 ₽ |
Стоимость списывается при создании операции и приходит в поле cost ответа. Если длительность референс-видео не удалось определить, операция не создаётся и деньги не списываются.
Idempotency-Key: повтор одного запроса в течение 24 часов вернёт исходную операцию без повторного списания. Повтор без этого заголовка создаёт новую операцию.max_price в теле запроса, чтобы сервер отклонил запуск дороже согласованной суммы до списания.queued, результат забирается по id.http/https ссылками, которые открываются без авторизации. Изображения - только JPG, JPEG, PNG или WebP.duration - только целое число от 5 до 15. Дробное значение, например 7.5, вернёт 400 validation_error.2k только для h3, 480p и 1080p только для h3_max.image, use_last_image и last_image работают только в image, файлы reference_* - только в reference, aspect_ratio - в text и reference.reference аудио не может быть единственным референсом - добавьте хотя бы одно изображение или видео. Речь из референс-аудио модель может повторить в ролике дословно.failed и сообщением «Ваш запрос не прошел модерацию.»| Нет |
Референсные видео для режима reference, до 3 ссылок: движение, пластика, ритм монтажа. Форматы: mp4, mov (H.264/H.265), до 50 МБ, каждое от 2 секунд, вместе не больше 15 секунд. Каждая секунда этих видео оплачивается, см. «Ценообразование». |
reference_audios | string[] (url) | Нет | Референсное аудио для режима reference, до 3 ссылок: голос, реплика, музыка, ритм. Форматы: mp3, wav, до 15 МБ, каждое от 2 секунд, вместе не больше 15 секунд. Работает только вместе с хотя бы одним изображением или видео. |
aspect_ratio | enum | Да, для text и reference | Формат кадра. Варианты: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. В режиме image не учитывается - пропорции берутся из картинки. Если не передать, будет 16:9. |
resolution | enum | Да | Разрешение: 768p или 2k для h3; 480p, 768p или 1080p для h3_max. Если не передать, будет 2k. Разрешение другой модели вернёт 400 validation_error. |
duration | number | Да | Длительность ролика в секундах, целое число от 5 до 15. От неё зависит цена. Если не передать, будет 5. |