Генерация видео
Модели видео тарифицируются за секунду ролика (или за ролик) — по цене модели в каталоге. Генерация асинхронная: запрос создаёт задачу, результат забирается по её идентификатору.
Видео
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" }
}