Генерация видео через API vibecode.moe

Видео собирается дольше, чем длится один запрос, поэтому ручка асинхронная: создаёшь задачу, опрашиваешь её, скачиваешь готовый файл. Тот же 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 и ничего не создаётся.

Опросить и скачать

curl https://vibecode.moe/v1/media/tasks/task_YOUR_TASK_ID \
  -H "Authorization: Bearer vk-YOUR-KEY"

Опрашивай раз в 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 выключает его, цена та же. У других моделей этого параметра нет — запрос с ним отклоняется. Незнакомые параметры тоже отклоняются, а не игнорируются.

Из картинки в видео

curl https://vibecode.moe/v1/media/tasks \
  -H "Authorization: Bearer vk-YOUR-KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: my-job-002" \
  -d '{"model":"seedance-2.0-mini","operation":"image_to_video","input":{"prompt":"slow camera push-in","media":[{"type":"first_frame","url":"https://example.com/frame.jpg"}]},"parameters":{"duration":5,"resolution":"720p"}}'

Первый кадр — ссылка 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, там же допустимые длины каждой модели.