Видео
POST /v1/videos — всегда 202 с задачей. Результат —
GET /v1/jobs/{id} (или GET /v1/videos/{id}, совместимо с videos.retrieve SDK OpenAI),
поток событий или вебхук. Поля — схема VideoGenerationRequest и input_schema модели.
curl https://api.souz.ai/v1/videos \
-H "Authorization: Bearer $SOUZ_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: teaser-7" \
-d '{"model": "seedance-2", "prompt": "рассвет над морем, камера медленно поднимается", "duration_seconds": 5, "callback_url": "https://example.com/hooks/souz"}'Поля ролика
По карточке модели: duration_seconds, aspect_ratio, resolution, audio, кадры
first_frame и last_frame, наборы references[], reference_videos[],
reference_audio[], именованные elements[] (промпт ссылается на них как @name), сцены
shots[], return_last_frame — последний кадр вторым файлом с role: "last_frame". Кадры
и набор референсов взаимоисключающие. Для reference_videos[] и reference_audio[]
подойдут HTTPS-ссылки или file_… из POST /v1/files.
videos.create SDK OpenAI
client.videos.create шлёт форму multipart/form-data — она принимается так же, как JSON:
seconds ("8") — то же, что duration_seconds; size ("1280x720") — соотношение
сторон из aspect_ratio модели и разрешение по короткой стороне; input_reference (файл
картинки или ссылка) — первый кадр. Остальные поля — через extra_body. size вместе с
aspect_ratio или resolution, seconds с другим duration_seconds — 400 с
mutually_exclusive.
video = client.videos.create(model="seedance-2", prompt="волны у маяка", seconds="8", size="1280x720")
video = client.videos.retrieve(video.id)У kling-3.0 и kling-3.0-motion-control кадр — картинка с пропорциями от 1:2.5 до 2.5:1.
Другой кадр — 400 invalid_input до запуска модели: в detail[] поле кадра,
out_of_range и "allowed": ["aspect ratio from 1:2.5 to 2.5:1"].
Как получить ролик
Серверу — callback_url (вебхук); скрипту — поток событий или опрос
GET /v1/jobs/{id} раз в Retry-After секунд
(Задачи и долгие операции). Цена — за оплачиваемые секунды
ролика (billed_seconds).