Создаёт короткие видео по текстовому описанию и референсам-картинкам, а также умеет перерисовывать и менять уже готовое видео по промпту. Цена зависит от режима модели: Fast - 15 ₽/сек., Обычная - 25 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Создаёт короткие видео по текстовому описанию, по набору референсов-изображений и умеет редактировать уже готовый ролик по промпту. Подходит для рекламных шотов, вертикальных видео для соцсетей, быстрых превизов и правок существующего видео без ручного монтажа.
Поддерживаются три основных сценария:
image_urls;video_urls.Каждый вызов создаёт асинхронную операцию. Сразу после запроса вы получаете id и стартовый статус, а итоговый результат нужно забрать отдельной проверкой операции.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус.Поддерживаются три сценария запуска:
seedance_generation_type = "create" без image_urls - видео только по текстовому описанию.seedance_generation_type = "create" с image_urls - видео по тексту с визуальными референсами.seedance_generation_type = "edit" с video_urls - редактирование исходного видео по новому промпту.{
"tool": "seedance-2-0",
"input": {
"...": "..."
}
}
tool - slug нейросети, для этой модели всегда "seedance-2-0".input - параметры конкретного запуска.seedance_duration.video_urls и не передавайте seedance_duration.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
seedance_generation_type | enum | Да | Режим запуска. Варианты: create (Создание), edit (Редактирование). |
seedance_model_tier | enum | Да | Режим качества и скорости. Варианты: fast (Fast), normal (Обычная). |
prompt | string | Да | Текстовое задание для сцены или правки. Если передаёте image_urls, на изображения можно ссылаться в тексте как @image1 - @image9 по порядку элементов в массиве. |
image_urls | string[] (url) | Нет | Опциональные референсы-изображения. Можно передать до 9 внешних http/https URL, чтобы лучше удерживать персонажа, стиль, композицию или палитру. Допустимые расширения для Public API: .jpg, .jpeg, .png, .webp. |
video_urls | string[] (url) | Да, только для edit | Исходное видео для редактирования. Передавайте массив ровно с одним внешним http/https URL. Допустимые расширения: .mp4, .mov, .webm. Максимальная длительность исходного ролика - 15 секунд. |
seedance_duration | enum | Да, только для create | Длительность создаваемого ролика. Варианты: 5 (5 сек), 10 (10 сек), 15 (15 сек). |
aspect_ratio | enum | Да | Соотношение сторон результата. Варианты: 16:9, 9:16, 4:3, 3:4. Если переданы референсы, их пропорции могут повлиять на итоговый кадр. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "seedance-2-0",
"input": {
"seedance_generation_type": "create",
"seedance_model_tier": "fast",
"prompt": "Ночной мегаполис после дождя, камера медленно летит вперёд между неоновыми вывесками, отражения на мокром асфальте, кинематографичный свет",
"seedance_duration": "5",
"aspect_ratio": "16:9"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-0',
input: {
seedance_generation_type: 'create',
seedance_model_tier: 'fast',
prompt:
'Ночной мегаполис после дождя, камера медленно летит вперёд между неоновыми вывесками, отражения на мокром асфальте, кинематографичный свет',
seedance_duration: '5',
aspect_ratio: '16:9',
},
}),
})
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': 'seedance-2-0',
'input': {
'seedance_generation_type': 'create',
'seedance_model_tier': 'fast',
'prompt': 'Ночной мегаполис после дождя, камера медленно летит вперёд между неоновыми вывесками, отражения на мокром асфальте, кинематографичный свет',
'seedance_duration': '5',
'aspect_ratio': '16:9',
},
},
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": "seedance-2-0",
"input": {
"seedance_generation_type": "create",
"seedance_model_tier": "normal",
"prompt": "Девушка в красном плаще идёт по футуристичному подземному переходу. Сохрани черты лица и цветовую палитру из @image1 и @image2, добавь плавный наезд камеры",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"seedance_duration": "10",
"aspect_ratio": "9:16"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-0',
input: {
seedance_generation_type: 'create',
seedance_model_tier: 'normal',
prompt:
'Девушка в красном плаще идёт по футуристичному подземному переходу. Сохрани черты лица и цветовую палитру из @image1 и @image2, добавь плавный наезд камеры',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.jpg',
],
seedance_duration: '10',
aspect_ratio: '9:16',
},
}),
})
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': 'seedance-2-0',
'input': {
'seedance_generation_type': 'create',
'seedance_model_tier': 'normal',
'prompt': 'Девушка в красном плаще идёт по футуристичному подземному переходу. Сохрани черты лица и цветовую палитру из @image1 и @image2, добавь плавный наезд камеры',
'image_urls': [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.jpg',
],
'seedance_duration': '10',
'aspect_ratio': '9:16',
},
},
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": "seedance-2-0",
"input": {
"seedance_generation_type": "edit",
"seedance_model_tier": "fast",
"prompt": "Сохрани движение камеры и пластику персонажа, но замени обычную улицу на киберпанк-город с неоновыми вывесками и лёгким туманом",
"video_urls": [
"https://cdn.example.com/source-video-1.mp4"
],
"aspect_ratio": "16:9"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-0',
input: {
seedance_generation_type: 'edit',
seedance_model_tier: 'fast',
prompt:
'Сохрани движение камеры и пластику персонажа, но замени обычную улицу на киберпанк-город с неоновыми вывесками и лёгким туманом',
video_urls: ['https://cdn.example.com/source-video-1.mp4'],
aspect_ratio: '16:9',
},
}),
})
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': 'seedance-2-0',
'input': {
'seedance_generation_type': 'edit',
'seedance_model_tier': 'fast',
'prompt': 'Сохрани движение камеры и пластику персонажа, но замени обычную улицу на киберпанк-город с неоновыми вывесками и лёгким туманом',
'video_urls': ['https://cdn.example.com/source-video-1.mp4'],
'aspect_ratio': '16:9',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "seedance-2-0",
"cost": 75,
"balance_after": 495,
"created_at": "2026-03-20T15:21:41Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "seedance-2-0",
"cost": 75,
"created_at": "2026-03-20T15:21:41Z",
"completed_at": "2026-03-20T15:46:15Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/seedance-2-0/result.mp4"
]
},
"error_message": null
}
После создания операции сохраните её id. Именно по нему нужно проверять статус:
GET /api/v1/operations/{id}
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()
После завершения операция возвращает видео в поле result:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/seedance-2-0/result.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видеофайлы. В типичном сценарии здесь одна mp4-ссылка, но поле остаётся массивом.fast стоит 15 ₽ за секунду.normal стоит 25 ₽ за секунду.create длительность берётся из seedance_duration: 5, 10 или 15 секунд.edit длительность берётся из фактической длины входного видео.Примеры:
fast + 5 сек = 75 ₽fast + 15 сек = 225 ₽normal + 10 сек = 250 ₽POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию.queued, затем проверяете статус по id.image_urls и video_urls нужны внешние http/https URL. Локальные адреса, localhost и private IP не подходят.image_urls в Public API используйте только .jpg, .jpeg, .png, .webp. Форматы HEIC/HEIF относятся только к загрузке через UI и по URL не принимаются.video_urls передавайте массив ровно с одним файлом. Максимальная длина исходного ролика для edit - 15 секунд.edit длительность результата обычно повторяет длину исходного видео, а не значение из текста.image_urls, полезно явно ссылаться на референсы в prompt как @image1, @image2 и так далее.aspect_ratio конфликтуют, итоговый кадр может сильнее опираться на сами референсы.