Генерация видео

Модели видео тарифицируются за секунду ролика (или за ролик) — по цене модели в каталоге. Генерация асинхронная: запрос создаёт задачу, результат забирается по её идентификатору.

Видео

POST/api/v1/videos — асинхронная генерация: запрос возвращает идентификатор задачи, результат забирается по нему. Поля — model и prompt, а также необязательные duration (целое число секунд, 1–60), resolution (360p, 480p, 720p, 768p, 1080p, 1K, 2K, 4K), aspect_ratio, size (ШИРИНАxВЫСОТА, не больше 5040x2160), generate_audio (true или false), seed (целое), frame_images (первый/последний кадр — части image_url с frame_type: first_frame или last_frame) и input_references (части image_url, video_url или audio_url); для моделей увеличения — upscale_factor (до 4) и creativity (целое). Какие значения подходят, зависит от модели — см. parameters в списке моделей. previous_job_id и callback_url не поддерживаются (ответ 422), другие поля модели не передаются.

curl https://infergate.ru/api/v1/videos \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/veo-3.1",
    "prompt": "A cat surfing a wave at sunset",
    "duration": 8
  }'

Ответ — 202 Accepted с id задачи и polling_url. На время генерации на балансе резервируется сумма по цене модели: цена секунды × duration, округлённая вверх до длительности, которую модель поддерживает (без duration — самая длинная у модели, а если они неизвестны — 30 с; с видео или аудио во входных данных — 60 с и цена каждого входного ролика за 60 с; у модели без duration, чья длина задаётся входными данными, — 60 с или секунда на 10 символов prompt, если больше); без resolution или с size — по самому дорогому разрешению модели, без generate_audio: false (у модели, которая его принимает) — по цене со звуком. После завершения списывается фактическая стоимость, при ошибке резерв возвращается полностью.

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "polling_url": "https://infergate.ru/api/v1/videos/3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "status": "pending"
}

Статус задачи

GET/api/v1/videos/{id} — опрос задачи; доступен только ключу, которым она создана. Статусы: pending / processing — генерация идёт, повторите запрос через несколько секунд; completed — готово, в unsigned_urls появится ссылка на скачивание; failed / cancelled / expired — задача завершилась без результата (причина — в error, средства не списываются).

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "status": "completed",
  "unsigned_urls": ["https://infergate.ru/api/v1/videos/3fa85f64-5717-4562-b3fc-2c963f66afa6/content?index=0"]
}

Стоимость списывается один раз — при первом опросе со статусом completed; повторные опросы безопасны. Если такой ответ содержит usage, в нём указана стоимость задачи; итог в любом случае виден в журнале запросов.

Скачивание видео

GET/api/v1/videos/{id}/content — готовый ролик (MP4). Параметр index выбирает файл, если их несколько (по умолчанию 0). Доступно только ключу-владельцу задачи.

curl -o video.mp4 "https://infergate.ru/api/v1/videos/3fa85f64-5717-4562-b3fc-2c963f66afa6/content?index=0" \
  -H "Authorization: Bearer sk-..."

Модели видео

GET/api/v1/videos/models — модели, которые принимает POST/api/v1/videos, с supported_parameters (duration, resolution, aspect_ratio и т. д.). Цена за единицу (например, за секунду) — в media_price: это ориентир для оценки и размера резерва, списывается фактическая стоимость задачи.

curl https://infergate.ru/api/v1/videos/models \
  -H "Authorization: Bearer sk-..."

parameters — допустимые значения полей запроса: duration (секунды), resolution, aspect_ratio, size и frame_images (какие кадры, first_frame / last_frame, принимает модель) — списки {"type": "enum", "values": [...]}; generate_audio и seed — {"type": "boolean"}, если модель их поддерживает; upscale_factor у моделей, увеличивающих видео, — диапазон {"type": "range", "min": …, "max": …}. Поля нет у модели, для которой значения неизвестны. Например:

"id": "google/veo-3.1",
"parameters": {
  "duration": { "type": "enum", "values": [4, 6, 8] },
  "resolution": { "type": "enum", "values": ["720p", "1080p", "4K"] },
  "aspect_ratio": { "type": "enum", "values": ["16:9", "9:16"] },
  "size": { "type": "enum", "values": ["1280x720", "1080x1920", "1920x1080", "720x1280", "3840x2160", "2160x3840"] },
  "frame_images": { "type": "enum", "values": ["first_frame", "last_frame"] },
  "generate_audio": { "type": "boolean" },
  "seed": { "type": "boolean" }
}