Генерирует короткие видео по текстовому описанию или оживляет картинку в видеоролик. Стоимость от 12 до 48 рублей за генерацию - зависит от режима (текст/изображение), версии модели, разрешения и длительности.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Hailuo 02 генерирует короткие видеоролики двумя способами: по текстовому описанию или из загруженного изображения. Вы описываете сцену, при необходимости прикладываете картинку - и получаете готовый ролик на 6 или 10 секунд.
Два режима работы:
В режиме «Видео из изображения» можно дополнительно задать конечный кадр - изображение, на котором ролик должен завершиться. Это удобно для сценариев «до/после» или точного финала сцены.
Две модели:
Каждый вызов создаёт асинхронную операцию. API сразу возвращает id и стартовый статус, а готовое видео нужно забрать отдельной проверкой.
POST /api/v1/operationsAuthorization: Bearer brth_...id, стартовый статус и стоимость.{
"tool": "hailuo-02",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "hailuo-02".input - параметры конкретного запуска. Набор полей зависит от выбранного режима.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
hailuo_generation_type | enum | Да | Тип генерации. Варианты: image (видео из изображения), text (видео из текста). |
hailuo_tier | enum | Да | Модель. Варианты: standard (Standard), pro (Pro). Standard поддерживает разрешения 512P/768P и длительность 6/10 секунд. Pro работает только в 1080p и 6 секунд. |
prompt | string | Да | Текстовое описание сцены: что происходит в кадре, как движется камера, стиль и настроение. От 3 до 4000 символов. |
image_url | string (url) | Да (для image) | URL исходного изображения. Нужен только при hailuo_generation_type: "image". Допустимые расширения: .jpg, .jpeg, .png, .webp. Только внешние http/https ссылки. |
use_end_image | boolean | Нет | Включает конечный кадр. Работает только при hailuo_generation_type: "image". Если true, нужно передать end_image_url. |
end_image_url | string (url) | Да (если use_end_image = true) | URL изображения конечного кадра. Ролик завершится на этой картинке. Допустимые расширения: .jpg, .jpeg, .png, .webp. Только внешние http/https ссылки. |
duration | enum | Да | Длительность видео. Варианты: 6 (6 секунд), 10 (10 секунд). Для Pro доступно только 6. |
resolution | enum | Да | Разрешение видео. Варианты: 512P, 768P (только для Standard), 1080p (только для Pro). |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "hailuo-02",
"input": {
"hailuo_generation_type": "text",
"hailuo_tier": "standard",
"prompt": "Неоновый город ночью, дождь, машины медленно едут по мокрой дороге, отражения огней в лужах, камера плавно движется вперёд",
"duration": "6",
"resolution": "768P"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hailuo-02',
input: {
hailuo_generation_type: 'text',
hailuo_tier: 'standard',
prompt:
'Неоновый город ночью, дождь, машины медленно едут по мокрой дороге, отражения огней в лужах, камера плавно движется вперёд',
duration: '6',
resolution: '768P',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "hailuo-02",
"input": {
"hailuo_generation_type": "text",
"hailuo_tier": "standard",
"prompt": "Неоновый город ночью, дождь, машины медленно едут по мокрой дороге, отражения огней в лужах, камера плавно движется вперёд",
"duration": "6",
"resolution": "768P",
},
},
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": "hailuo-02",
"input": {
"hailuo_generation_type": "image",
"hailuo_tier": "standard",
"prompt": "Персонаж медленно поворачивает голову вправо, ветер слегка колышет волосы, камера плавно приближается",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"use_end_image": false,
"duration": "6",
"resolution": "768P"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hailuo-02',
input: {
hailuo_generation_type: 'image',
hailuo_tier: 'standard',
prompt:
'Персонаж медленно поворачивает голову вправо, ветер слегка колышет волосы, камера плавно приближается',
image_url: 'https://cdn.example.com/source-image-1.jpg',
use_end_image: false,
duration: '6',
resolution: '768P',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "hailuo-02",
"input": {
"hailuo_generation_type": "image",
"hailuo_tier": "standard",
"prompt": "Персонаж медленно поворачивает голову вправо, ветер слегка колышет волосы, камера плавно приближается",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"use_end_image": False,
"duration": "6",
"resolution": "768P",
},
},
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": "hailuo-02",
"input": {
"hailuo_generation_type": "image",
"hailuo_tier": "standard",
"prompt": "Плавная трансформация объекта из начального состояния в конечное, мягкий свет, камера неподвижна",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"use_end_image": true,
"end_image_url": "https://cdn.example.com/source-image-2.jpg",
"duration": "10",
"resolution": "512P"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hailuo-02',
input: {
hailuo_generation_type: 'image',
hailuo_tier: 'standard',
prompt:
'Плавная трансформация объекта из начального состояния в конечное, мягкий свет, камера неподвижна',
image_url: 'https://cdn.example.com/source-image-1.jpg',
use_end_image: true,
end_image_url: 'https://cdn.example.com/source-image-2.jpg',
duration: '10',
resolution: '512P',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "hailuo-02",
"input": {
"hailuo_generation_type": "image",
"hailuo_tier": "standard",
"prompt": "Плавная трансформация объекта из начального состояния в конечное, мягкий свет, камера неподвижна",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"use_end_image": True,
"end_image_url": "https://cdn.example.com/source-image-2.jpg",
"duration": "10",
"resolution": "512P",
},
},
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": "hailuo-02",
"input": {
"hailuo_generation_type": "image",
"hailuo_tier": "pro",
"prompt": "Крупный план лица, модель моргает, лёгкая улыбка, мягкий студийный свет, камера неподвижна",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"use_end_image": false,
"duration": "6",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hailuo-02',
input: {
hailuo_generation_type: 'image',
hailuo_tier: 'pro',
prompt:
'Крупный план лица, модель моргает, лёгкая улыбка, мягкий студийный свет, камера неподвижна',
image_url: 'https://cdn.example.com/source-image-1.jpg',
use_end_image: false,
duration: '6',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "hailuo-02",
"input": {
"hailuo_generation_type": "image",
"hailuo_tier": "pro",
"prompt": "Крупный план лица, модель моргает, лёгкая улыбка, мягкий студийный свет, камера неподвижна",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"use_end_image": False,
"duration": "6",
"resolution": "1080p",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "hailuo-02",
"cost": 30,
"balance_after": 495,
"created_at": "2026-03-30T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "hailuo-02",
"cost": 30,
"created_at": "2026-03-30T12:00:00Z",
"completed_at": "2026-03-30T12:01:15Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/hailuo-02/result.mp4"
]
},
"error_message": null
}
После создания операции сохраните id и используйте его для проверки статуса:
GET /api/v1/operations/{id}id возвращается сразу после POST /api/v1/operations.curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const data = await response.json()
console.log(data)
После успешного завершения операция возвращает result в таком формате:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/hailuo-02/result.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видеофайлы. Возвращается один ролик в формате .mp4.Если операция завершилась с ошибкой, result будет null, а текст ошибки вернётся в error_message.
Цена зависит от четырёх параметров: типа генерации, модели, разрешения и длительности.
| Тип генерации | Модель | Разрешение | Длительность | Цена |
|---|---|---|---|---|
| Видео из изображения | Standard | 512P | 6 сек | 12 ₽ |
| Видео из изображения | Standard | 512P | 10 сек | 20 ₽ |
| Видео из изображения | Standard | 768P | 6 сек | 30 ₽ |
| Видео из изображения | Standard | 768P | 10 сек | 48 ₽ |
| Видео из текста | Standard | 768P | 6 сек | 30 ₽ |
| Видео из текста | Standard | 768P | 10 сек | 48 ₽ |
| Видео из изображения | Pro | 1080p | 6 сек | 48 ₽ |
| Видео из текста | Pro | 1080p | 6 сек | 48 ₽ |
Самый экономичный вариант - видео из изображения в Standard, 512P, 6 секунд (12 ₽). Pro всегда стоит 48 ₽ вне зависимости от типа генерации.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию.queued, затем отдельно проверяете статус по id.image_url и end_image_url подходят только внешние http/https URL. localhost, private IP и внутренние адреса не принимаются..jpg, .jpeg, .png, .webp. Форматы HEIC/HEIF, которые поддерживаются при загрузке файлов в UI, в Public API по URL не принимаются.end_image_url) работает только в режиме видео из изображения (hailuo_generation_type: "image"). Для его использования нужно передать use_end_image: true.