Общая документация Public API · API-ключ можно создать в настройках аккаунта
PixVerse C1 делает короткие ролики длиной от 1 до 15 секунд. Можно оживить готовую картинку, снять сцену только по описанию, собрать ролик из нескольких референсов (персонаж, предмет, одежда) или построить переход от одного кадра к другому. По желанию модель сразу добавляет звук: фоновую музыку, шумы и реплики героев. Подходит для роликов в соцсети, рекламы товаров, заставок и раскадровок.
Основные сценарии:
pixverse_c1_generation_type: "image_to_video", картинка становится первым кадром.pixverse_c1_generation_type: "text_to_video", ролик только по заданию.pixverse_c1_generation_type: "reference_to_video", до 5 картинок с именами, на которые вы ссылаетесь в задании через @имя.pixverse_c1_generation_type: "transition", ролик начинается с первого кадра и, если нужно, приходит к конечному.Каждый вызов создаёт асинхронную операцию. После запуска сохраните id и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Сценарий задаёт параметр pixverse_c1_generation_type:
image_to_video - видео из одной картинки (нужен image_url), пропорции берутся из картинки;text_to_video - видео по заданию, пропорции задаёт aspect_ratio;reference_to_video - видео по референсам (нужен массив image_references), пропорции задаёт aspect_ratio;transition - переход от first_image_url, конечный кадр end_image_url включается через use_end_image: true.Во всех сценариях общие prompt, resolution, duration и generate_audio_switch.
{
"tool": "pixverse-c1",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "pixverse-c1".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
pixverse_c1_generation_type | enum | Да | Сценарий: image_to_video - видео из изображения, text_to_video - видео из текста, reference_to_video - видео по референсам, transition - переход между кадрами. Если не передать, используется image_to_video. |
prompt | string | Да | Что происходит в ролике: действие, движение камеры, свет, звук, реплики. От 3 до 4000 символов. В режиме reference_to_video называйте референсы через @имя, например @hero. |
image_url | string (url) | Да, для image_to_video | Картинка для первого кадра. Только в режиме image_to_video. Один файл: jpg, jpeg, png или webp. |
first_image_url | string (url) | Да, для transition | Первый кадр перехода. Только в режиме transition. Один файл: jpg, jpeg, png или webp. |
use_end_image | boolean | Нет | Включить конечный кадр перехода. Только в режиме transition. По умолчанию false: тогда модель сама решает, чем закончить ролик. |
end_image_url | string (url) | Да, при use_end_image: true | Конечный кадр, к которому приходит переход. Учитывается только в режиме transition вместе с use_end_image: true. Форматы те же. |
image_references | object[] | Да, для reference_to_video | Референсы, от 1 до 5 штук. Каждый элемент - объект с тремя обязательными полями: ref_name - имя до 50 символов, по нему вы ссылаетесь на референс в задании (@ref_name); type - тип референса, сейчас только subject (персонаж или предмет); - ссылка на картинку , , или . Только в режиме . |
Ссылки на картинки передавайте как внешние http/https URL с расширением jpg, jpeg, png или webp. Файл должен открываться без авторизации, размер - до 128 МБ.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "pixverse-c1",
"input": {
"pixverse_c1_generation_type": "image_to_video",
"prompt": "Девушка крутит педали и поворачивает за угол, камера едет рядом, неоновые вывески отражаются в лужах",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"resolution": "720p",
"duration": 5,
"generate_audio_switch": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'pixverse-c1',
input: {
pixverse_c1_generation_type: 'image_to_video',
prompt:
'Девушка крутит педали и поворачивает за угол, камера едет рядом, неоновые вывески отражаются в лужах',
image_url: 'https://cdn.example.com/source-image-1.jpg',
resolution: '720p',
duration: 5,
generate_audio_switch: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'pixverse-c1',
'input': {
'pixverse_c1_generation_type': 'image_to_video',
'prompt': 'Девушка крутит педали и поворачивает за угол, камера едет рядом, неоновые вывески отражаются в лужах',
'image_url': 'https://cdn.example.com/source-image-1.jpg',
'resolution': '720p',
'duration': 5,
'generate_audio_switch': False,
},
},
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": "pixverse-c1",
"input": {
"pixverse_c1_generation_type": "text_to_video",
"prompt": "Старый часовщик в тесной мастерской поднимает голову от лупы и говорит в камеру: «Часы не спешат. Это вы опаздываете». Тикают часы, тёплый свет лампы, крупный план",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"generate_audio_switch": true
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'pixverse-c1',
input: {
pixverse_c1_generation_type: 'text_to_video',
prompt:
'Старый часовщик в тесной мастерской поднимает голову от лупы и говорит в камеру: «Часы не спешат. Это вы опаздываете». Тикают часы, тёплый свет лампы, крупный план',
aspect_ratio: '16:9',
resolution: '720p',
duration: 5,
generate_audio_switch: true,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'pixverse-c1',
'input': {
'pixverse_c1_generation_type': 'text_to_video',
'prompt': 'Старый часовщик в тесной мастерской поднимает голову от лупы и говорит в камеру: «Часы не спешат. Это вы опаздываете». Тикают часы, тёплый свет лампы, крупный план',
'aspect_ratio': '16:9',
'resolution': '720p',
'duration': 5,
'generate_audio_switch': True,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Каждому референсу дайте короткое имя и упомяните его в задании через @. Здесь @hero - девушка, @jacket - куртка, которую она надевает в ролике.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "pixverse-c1",
"input": {
"pixverse_c1_generation_type": "reference_to_video",
"prompt": "@hero в куртке @jacket идёт по кухне и улыбается в камеру",
"image_references": [
{
"ref_name": "hero",
"type": "subject",
"image_url": "https://cdn.example.com/reference-person-1.png"
},
{
"ref_name": "jacket",
"type": "subject",
"image_url": "https://cdn.example.com/reference-jacket-2.png"
}
],
"aspect_ratio": "9:16",
"resolution": "540p",
"duration": 5,
"generate_audio_switch": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'pixverse-c1',
input: {
pixverse_c1_generation_type: 'reference_to_video',
prompt: '@hero в куртке @jacket идёт по кухне и улыбается в камеру',
image_references: [
{
ref_name: 'hero',
type: 'subject',
image_url: 'https://cdn.example.com/reference-person-1.png',
},
{
ref_name: 'jacket',
type: 'subject',
image_url: 'https://cdn.example.com/reference-jacket-2.png',
},
],
aspect_ratio: '9:16',
resolution: '540p',
duration: 5,
generate_audio_switch: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'pixverse-c1',
'input': {
'pixverse_c1_generation_type': 'reference_to_video',
'prompt': '@hero в куртке @jacket идёт по кухне и улыбается в камеру',
'image_references': [
{
'ref_name': 'hero',
'type': 'subject',
'image_url': 'https://cdn.example.com/reference-person-1.png',
},
{
'ref_name': 'jacket',
'type': 'subject',
'image_url': 'https://cdn.example.com/reference-jacket-2.png',
},
],
'aspect_ratio': '9:16',
'resolution': '540p',
'duration': 5,
'generate_audio_switch': False,
},
},
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": "pixverse-c1",
"input": {
"pixverse_c1_generation_type": "transition",
"prompt": "Утренняя улица плавно превращается в вечернюю, в окнах загорается свет, камера неподвижна",
"first_image_url": "https://cdn.example.com/first-frame-1.jpg",
"use_end_image": true,
"end_image_url": "https://cdn.example.com/last-frame-1.jpg",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 6,
"generate_audio_switch": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'pixverse-c1',
input: {
pixverse_c1_generation_type: 'transition',
prompt:
'Утренняя улица плавно превращается в вечернюю, в окнах загорается свет, камера неподвижна',
first_image_url: 'https://cdn.example.com/first-frame-1.jpg',
use_end_image: true,
end_image_url: 'https://cdn.example.com/last-frame-1.jpg',
aspect_ratio: '16:9',
resolution: '720p',
duration: 6,
generate_audio_switch: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'pixverse-c1',
'input': {
'pixverse_c1_generation_type': 'transition',
'prompt': 'Утренняя улица плавно превращается в вечернюю, в окнах загорается свет, камера неподвижна',
'first_image_url': 'https://cdn.example.com/first-frame-1.jpg',
'use_end_image': True,
'end_image_url': 'https://cdn.example.com/last-frame-1.jpg',
'aspect_ratio': '16:9',
'resolution': '720p',
'duration': 6,
'generate_audio_switch': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "pixverse-c1",
"cost": 6,
"balance_after": 994,
"created_at": "2026-09-30T21:32:07.079237+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "pixverse-c1",
"cost": 6,
"created_at": "2026-09-30T21:32:07.079237+00:00",
"completed_at": "2026-09-30T21:33:10.598681+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/pixverse-c1/video-1.mp4"
]
},
"error_message": null
}
Сохраните 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))
}
}
Обычно ролик готов за 1-2 минуты: секундное видео по двум референсам в 360p в пробном запуске пришло через 63 секунды, пятисекундные ролики в 720p - за 60-120 секунд. Одну операцию можно опрашивать не чаще раза в секунду, разумный интервал - 10 секунд.
После завершения в result приходит одно видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/pixverse-c1/video-1.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой на MP4.duration: 1 файл длится около 1,04 секунды, при duration: 5 - около 5,04 секунды.resolution: вертикальный ролик 9:16 в 360p приходит размером 360x640, горизонтальный 16:9 в 720p - 1280x720.generate_audio_switch: true, без него ролик приходит без звука.Цена считается за секунду ролика: ставка зависит от разрешения и звука, затем умножается на duration. Сценарий, пропорции, число референсов и конечный кадр на цену не влияют.
| Разрешение | Без звука, за секунду | Со звуком, за секунду | 5 сек. без звука | 5 сек. со звуком | 15 сек. без звука | 15 сек. со звуком |
|---|---|---|---|---|---|---|
360p | 6 ₽ | 8 ₽ | 30 ₽ | 40 ₽ | 90 ₽ | 120 ₽ |
540p | 8 ₽ | 10 ₽ | 40 ₽ | 50 ₽ | 120 ₽ | 150 ₽ |
720p | 10 ₽ | 13 ₽ | 50 ₽ | 65 ₽ | 150 ₽ | 195 ₽ |
1080p | 19 ₽ | 24 ₽ | 95 ₽ | 120 ₽ | 285 ₽ | 360 ₽ |
Самый дешёвый запуск - 1 секунда в 360p без звука за 6 ₽. Запрос со значениями по умолчанию (720p, 5 секунд, без звука) стоит 50 ₽. Сумма списывается при создании операции и видна в поле cost.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую платную операцию. Если ответ на создание потерялся, не отправляйте запрос вслепую ещё раз.queued, результат забирайте через GET /api/v1/operations/{id}.image_url внутри image_references, - только внешние http/https URL на jpg, jpeg, png или webp. Адреса localhost и внутренних сетей не принимаются.duration - целое число от 1 до 15. Значение вроде 5.5 вернёт 400 validation_error.image_url в режиме transition модели не передаётся, end_image_url без use_end_image: true тоже. Проверьте, что ссылка лежит в поле своего сценария.reference_to_video передавайте хотя бы один референс и упоминайте каждый в задании через @ref_name. Давайте референсам разные короткие имена латиницей без пробелов, например hero, jacket, scooter: так модели проще понять, кто есть кто.generate_audio_switch: true. Без звука ролик приходит беззвучным.image_urljpgjpegpngwebpreference_to_videoaspect_ratio | enum | Нет | Пропорции ролика: 16:9, 4:3, 1:1, 3:4, 9:16, 2:3, 3:2, 21:9. Если не указать - 16:9. Работает в режимах text_to_video, reference_to_video и transition; в image_to_video пропорции повторяют картинку. |
resolution | enum | Да | Качество: 360p, 540p, 720p или 1080p. Если не указать - 720p. Влияет на цену. |
duration | number | Да | Длительность ролика в секундах, целое число от 1 до 15. Если не указать - 5. Дробные значения не принимаются. |
generate_audio_switch | boolean | Нет | Сгенерировать звук вместе с видео: музыку, шумы, диалоги. По умолчанию false - ролик без звука. Повышает цену. |