Wan 3.0 Video Prime API
Wan 3.0 Video Prime - флагманская видеомодель линейки Wan для роликов от 2 до 30 секунд со звуком. Кроме привычных «из текста» и «из картинки» она собирает видео по набору референсов (картинки, видео, аудио), по первому и последнему кадру, по документу и даже по ссылке на публичную страницу. Подходит для рекламных роликов, объяснялок по материалам и анимации собственных персонажей.
Каждый вызов создаёт асинхронную операцию: вы получаете id, а результат забираете отдельным запросом статуса.
Создание операции
- Endpoint:
POST /api/v1/operations
- Авторизация:
Authorization: Bearer brth_...
- Запрос создаёт операцию и сразу возвращает
id и стартовый статус queued.
- Выполнение асинхронное: обычно 2-6 минут.
Режимы, которые доступны через API:
references - видео по набору материалов: картинки, короткие видео и аудио.
text - видео по тексту.
first_frame - ролик от заданного первого кадра.
frames - ролик между первым и последним кадром.
file - ролик по содержимому документа (PDF, DOCX, презентация и т.п.).
link - ролик по содержимому публичной веб-страницы.
Тело запроса
{
"tool": "wan-3-0-video-prime",
"input": {
"...": "..."
}
}
tool - slug нейросети, здесь всегда "wan-3-0-video-prime".
input - параметры конкретного запуска.
- Все поля передаются напрямую внутри
input, без дополнительного вложенного объекта input.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|
wan_3_0_prime_generation_type | enum | Нет | Режим: references (если не передать), text, first_frame, frames, file или link. |
reference_prompt | string | Нет | Задание для режима references, от 2 до 20000 символов; обязательно в этом режиме. Ссылайтесь на материалы как «изображение 1», «видео 1», «аудио 1». |
text_prompt | string | Нет | Задание для режима text, от 2 до 20000 символов; обязательно в этом режиме. |
frame_prompt | string | Нет | Задание для режимов first_frame и frames, от 2 до 20000 символов; обязательно в них. |
file_prompt | string | Нет | Уточнение для режима file, до 20000 символов. Можно не передавать - ролик будет построен по содержимому документа. |
link_prompt | string | Нет | Уточнение для режима link, до 20000 символов. Можно не передавать. |
reference_image_urls | string[] (url) | Нет | До 10 картинок для режима references. Только http/https, форматы .jpg, .jpeg, .png (без прозрачности), .bmp, .webp. |
video_urls | string[] (url) | Нет | До 5 видео для режима references, каждое от 1 до 15 секунд, суммарно не больше 15 секунд. Форматы .mp4, .mov. |
audio_urls | string[] (url) | Нет | До 5 аудио для режима references, суммарно не больше 15 секунд. Форматы .wav, .mp3. |
Примеры запросов
Сценарий 1. Видео по тексту
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "text",
"text_prompt": "Кинематографичный пролёт камеры над утренним Байкалом: ледяная гладь с трещинами, восходящее солнце, лёгкий туман, звук ветра",
"resolution": "480P",
"duration": 5,
"aspect_ratio": "16:9",
"audio": true
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "text",
"text_prompt": "Кинематографичный пролёт камеры над утренним Байкалом: ледяная гладь с трещинами, восходящее солнце, лёгкий туман, звук ветра",
"resolution": "480P",
"duration": 5,
"aspect_ratio": "16:9",
"audio": true
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "text",
"text_prompt": "Кинематографичный пролёт камеры над утренним Байкалом: ледяная гладь с трещинами, восходящее солнце, лёгкий туман, звук ветра",
"resolution": "480P",
"duration": 5,
"aspect_ratio": "16:9",
"audio": True
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Сценарий 2. Видео по референсам
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "references",
"reference_prompt": "Персонаж с изображения 1 идёт по улице с изображения 2 в ритме аудио 1, движение камеры как в видео 1",
"reference_image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"video_urls": [
"https://cdn.example.com/source-video-1.mp4",
"https://cdn.example.com/source-video-2.mp4"
],
"audio_urls": [
"https://cdn.example.com/source-audio-1.mp3",
"https://cdn.example.com/source-audio-2.mp3"
],
"resolution": "720P",
"duration": 8,
"aspect_ratio": "adaptive"
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "references",
"reference_prompt": "Персонаж с изображения 1 идёт по улице с изображения 2 в ритме аудио 1, движение камеры как в видео 1",
"reference_image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"video_urls": [
"https://cdn.example.com/source-video-1.mp4",
"https://cdn.example.com/source-video-2.mp4"
],
"audio_urls": [
"https://cdn.example.com/source-audio-1.mp3",
"https://cdn.example.com/source-audio-2.mp3"
],
"resolution": "720P",
"duration": 8,
"aspect_ratio": "adaptive"
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "references",
"reference_prompt": "Персонаж с изображения 1 идёт по улице с изображения 2 в ритме аудио 1, движение камеры как в видео 1",
"reference_image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"video_urls": [
"https://cdn.example.com/source-video-1.mp4",
"https://cdn.example.com/source-video-2.mp4"
],
"audio_urls": [
"https://cdn.example.com/source-audio-1.mp3",
"https://cdn.example.com/source-audio-2.mp3"
],
"resolution": "720P",
"duration": 8,
"aspect_ratio": "adaptive"
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Сценарий 3. От первого кадра
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "first_frame",
"frame_prompt": "Девушка на фото оборачивается и улыбается, ветер колышет волосы, камера медленно наезжает",
"first_frame_url": "https://cdn.example.com/source-image-1.jpg",
"resolution": "480P",
"duration": 5
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "first_frame",
"frame_prompt": "Девушка на фото оборачивается и улыбается, ветер колышет волосы, камера медленно наезжает",
"first_frame_url": "https://cdn.example.com/source-image-1.jpg",
"resolution": "480P",
"duration": 5
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "first_frame",
"frame_prompt": "Девушка на фото оборачивается и улыбается, ветер колышет волосы, камера медленно наезжает",
"first_frame_url": "https://cdn.example.com/source-image-1.jpg",
"resolution": "480P",
"duration": 5
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Сценарий 4. Между первым и последним кадром
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "frames",
"frame_prompt": "Плавный переход от дня к ночи, зажигаются фонари",
"first_frame_url": "https://cdn.example.com/source-image-1.jpg",
"last_frame_url": "https://cdn.example.com/source-image-2.jpg",
"resolution": "480P",
"duration": 6
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "frames",
"frame_prompt": "Плавный переход от дня к ночи, зажигаются фонари",
"first_frame_url": "https://cdn.example.com/source-image-1.jpg",
"last_frame_url": "https://cdn.example.com/source-image-2.jpg",
"resolution": "480P",
"duration": 6
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "frames",
"frame_prompt": "Плавный переход от дня к ночи, зажигаются фонари",
"first_frame_url": "https://cdn.example.com/source-image-1.jpg",
"last_frame_url": "https://cdn.example.com/source-image-2.jpg",
"resolution": "480P",
"duration": 6
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Сценарий 5. Ролик по документу
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "file",
"file_url": "https://cdn.example.com/source-document-1.pdf",
"file_prompt": "Короткий рекламный ролик по презентации: главные тезисы и настроение",
"resolution": "480P",
"duration": 10
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "file",
"file_url": "https://cdn.example.com/source-document-1.pdf",
"file_prompt": "Короткий рекламный ролик по презентации: главные тезисы и настроение",
"resolution": "480P",
"duration": 10
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "file",
"file_url": "https://cdn.example.com/source-document-1.pdf",
"file_prompt": "Короткий рекламный ролик по презентации: главные тезисы и настроение",
"resolution": "480P",
"duration": 10
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Сценарий 6. Ролик по ссылке
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "link",
"link_url": "https://ru.wikipedia.org/wiki/Байкал",
"link_prompt": "Познавательный ролик о Байкале по содержимому страницы",
"resolution": "480P",
"duration": 8,
"audio": true
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "link",
"link_url": "https://ru.wikipedia.org/wiki/Байкал",
"link_prompt": "Познавательный ролик о Байкале по содержимому страницы",
"resolution": "480P",
"duration": 8,
"audio": true
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "wan-3-0-video-prime",
"input": {
"wan_3_0_prime_generation_type": "link",
"link_url": "https://ru.wikipedia.org/wiki/Байкал",
"link_prompt": "Познавательный ролик о Байкале по содержимому страницы",
"resolution": "480P",
"duration": 8,
"audio": True
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Примеры ответов
Ответ после создания
{
"id": "op_uuid-123",
"status": "queued",
"tool": "wan-3-0-video-prime",
"cost": 45,
"balance_after": 495,
"created_at": "2026-09-17T12:00:00Z"
}
Ответ после завершения
{
"id": "op_uuid-123",
"status": "completed",
"tool": "wan-3-0-video-prime",
"cost": 45,
"created_at": "2026-09-17T12:00:00Z",
"completed_at": "2026-09-17T12:04:30Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/wan-3-0-video-prime/video-1.mp4"
]
},
"error_message": null
}
Ответ с ошибкой
{
"id": "op_uuid-123",
"status": "failed",
"tool": "wan-3-0-video-prime",
"cost": 45,
"created_at": "2026-09-17T12:00:00Z",
"completed_at": "2026-09-17T12:00:20Z",
"result": null,
"error_message": "Произошла ошибка, сервис временно недоступен. Попробуйте повторить запрос позже."
}
Проверка статуса
После создания операции сохраните id и проверяйте её статус запросом:
GET /api/v1/operations/{id}
cURL
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
JavaScript / TypeScript
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
}
)
const data = await response.json()
Пока операция выполняется, status будет queued или processing. Опрашивайте статус раз в 5-10 секунд.
Формат результата
После успешного завершения result содержит одно видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/wan-3-0-video-prime/video-1.mp4"
]
}
type всегда равен "video".
urls содержит одну ссылку на MP4.
Ценообразование
- Цена считается за каждую секунду
duration; ставка зависит только от resolution:
| Разрешение | Ставка |
|---|
480P | 9 ₽/сек |
720P | 18 ₽/сек |
1080P | 38 ₽/сек |
- Пример: 5 секунд в
480P - 45 ₽; 10 секунд в 720P - 180 ₽; 30 секунд в 1080P - 1140 ₽.
- Режим, референсы, пропорции и звук на цену не влияют.
- Сумма списывается при создании операции и видна в поле
cost ответа. Если операция завершилась с ошибкой, деньги возвращаются на баланс автоматически.
Ограничения и практические заметки
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги.
- Операция выполняется асинхронно: после
queued проверяйте статус по id.
- Для файлов подходят только внешние
http/https ссылки, без localhost и приватных адресов. HEIC/HEIF принимаются только при загрузке через форму сайта, по URL в API - нет.
- В режиме
references нужен хотя бы один материал. Видео и аудио считаются по длительности: суммарно не больше 15 секунд на каждый тип, иначе запрос отклоняется на валидации.
- Картинки в PNG должны быть без прозрачности: прозрачные области дают непредсказуемый фон.
- Для
file и link содержимое читается автоматически; коротко скажите в промпте, что именно показать, чтобы ролик не пересказывал весь документ.
- Режим
link принимает не любые страницы: например, статьи Wikipedia и главные страницы сайтов отклоняются с ошибкой «Указанный URL не поддерживается» уже после создания операции (статус failed, деньги возвращаются). Проверьте нужную страницу одним запросом, прежде чем строить на этом режиме интеграцию.
- Длительность до 30 секунд доступна во всех режимах, но 30 секунд в
1080P стоят больше 1000 ₽: сначала проверьте идею в 480P.