Видео собирается дольше, чем длится один запрос, поэтому ручка асинхронная: создаёшь задачу, опрашиваешь её, скачиваешь готовый файл. Тот же vk- ключ. Цена зависит от длины и разрешения ролика: сумма списывается при создании задачи и возвращается целиком, если генерация не удалась.
Создать задачу
curl https://vibecode.moe/v1/media/tasks \
-H "Authorization: Bearer vk-YOUR-KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-job-001" \
-d '{"model":"seedance-2.0-mini","input":{"prompt":"a paper boat on a quiet lake at sunset"},"parameters":{"duration":4,"resolution":"480p","aspect_ratio":"16:9"}}'
Ответ 202: id задачи, status (queued), poll_url и price — ровно столько спишется, например {"amount":0.16,"currency":"USD","quantity":4,"tier":"480p","unit":"second"}. Повтор запроса с тем же Idempotency-Key вернёт ту же задачу и не спишет деньги второй раз. Если баланса не хватает на цену задачи, ответ 402 и ничего не создаётся.
Опрашивай раз в 3–5 секунд, пока status не станет succeeded или failed. Видео готовится от нескольких десятков секунд до нескольких минут. При успехе assets[0].url — ссылка на mp4: она открывается без ключа, поддерживает Range и живёт 24 часа с создания задачи (expires_at), так что скачай файл сразу. При failed деньги уже вернулись (refunded: true), причина — в error.code. Опрашивать можно и при нулевом балансе.
Модели и параметры
Модель
duration, с
resolution
aspect_ratio
seedance-2.0-mini seedance-2.0-fast
любая от 4 до 15
480p, 720p
да
seedance-2.0
любая от 4 до 15
480p, 720p, 1080p
да
seedance-2.5
любая от 4 до 30
480p, 720p, 1080p
да
minimax-h3
4, 6, 8, 10, 12, 15
768p, 2k
да, плюс 4:3, 3:4, 21:9, adaptive
happyhorse-1.1
5, 10, 15
480p, 720p, 1080p
только из текста
happyhorse-1.0
5, 10, 15
720p, 1080p
только из текста
wan-3.0 wan-3.0-prime
5, 10, 15
480p, 720p, 1080p
да
grok-imagine-video-1.5
5, 10, 15
720p
нет
kling-3.0
5, 10, 15
вместо него mode: std или pro
только из текста
Всё в parameters. Если не указать длину и разрешение, берутся самые короткие и дешёвые; ошибка в ответе называет допустимые значения. aspect_ratio — 16:9, 9:16 или 1:1; где в таблице «нет» или «только из текста», кадр задаёт сама модель или первый кадр, и параметр не влияет на результат. У kling-3.0 цена за задачу зависит от режима и длины, у остальных — от секунд и разрешения.
Звук. Ролики seedance-* по умолчанию со звуком; "generate_audio": false выключает его, цена та же. У других моделей этого параметра нет — запрос с ним отклоняется. Незнакомые параметры тоже отклоняются, а не игнорируются.
Первый кадр — ссылка https:// или data:image/…;base64,…: png, jpeg или webp до 700 КБ, не меньше 300 пикселей по короткой стороне (для kling-3.0 бери крупнее, например 1280×720). Кадр больше 700 КБ отклоняется сразу, до списания, — сожми его в jpeg. Один кадр на задачу; цена та же, что у видео из текста. Пропорции ролика берутся с картинки, кроме minimax-h3 и wan-3.0, где aspect_ratio по-прежнему работает.
Ошибки
До создания задачи деньги не списываются: 400 — не тот параметр или кадр (текст ошибки называет, что поправить), 402 — не хватает баланса или лимита ключа, 429 — слишком много задач идёт одновременно, 503 — модель сейчас недоступна. Задача, которая не удалась, возвращает деньги и пишет причину в error.code:
error.code
Что случилось
content_policy
модель отказалась по своим правилам — переформулируй промпт или смени кадр
invalid_input
модель не приняла промпт, параметры или кадр
input_unavailable
кадр не удалось скачать или прочитать
generation_failed
генерация не получилась — можно повторить
expired, delivery_failed, create_failed
задача не запустилась, не уложилась во время или файл не удалось отдать
Цены
Цены по разрешениям и режимам — на странице моделей (вкладка «Видео») и в GET https://vibecode.moe/v1/media/models, там же допустимые длины каждой модели.