Видео
Генерация выполняется асинхронно: создайте задачу, дождитесь завершения и скачайте результат. Все шаги используют один API-ключ.
1. Выберите модель
Найдите нужную операцию и допустимые значения длительности, разрешения и пропорций. Ниже замените YOUR_VIDEO_MODEL_ID и параметры на значения из каталога.
curl https://api.closerouter.dev/v1/videos/models \
-H "Authorization: Bearer $CLOSEROUTER_API_KEY"2. Проверьте стоимость
Этот запрос не запускает генерацию и не списывает деньги. Сохраните max_cost_usd из ответа. Для точного выбора используйте provider.option_id в расчёте и последующей генерации.
curl https://api.closerouter.dev/v1/videos/quote \
-H "Authorization: Bearer $CLOSEROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_VIDEO_MODEL_ID",
"prompt": "A slow camera move over a mountain lake",
"duration": 5,
"aspect_ratio": "16:9"
}'3. Создайте задачу
Замените MAX_COST_FROM_QUOTE суммой из расчёта и передайте те же параметры. Повторный POST — новая генерация.
curl https://api.closerouter.dev/v1/videos \
-H "Authorization: Bearer $CLOSEROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_VIDEO_MODEL_ID",
"prompt": "A slow camera move over a mountain lake",
"duration": 5,
"aspect_ratio": "16:9",
"max_cost_usd": "MAX_COST_FROM_QUOTE"
}'Задача принята — HTTP 202
Сокращённый ответ. Сохраните id: он нужен для следующих шагов.
{
"id": "TASK_ID",
"status": "pending",
"polling_url": "https://api.closerouter.dev/v1/videos/TASK_ID"
}4. Проверьте статус
Замените TASK_ID идентификатором из ответа. Пока задача не завершена, проверяйте её статус вместо повторной отправки генерации.
curl https://api.closerouter.dev/v1/videos/TASK_ID \
-H "Authorization: Bearer $CLOSEROUTER_API_KEY"Готовый результат
Сокращённый пример: сумма иллюстративная. usage.cost — итоговая стоимость в USD, если она уже доступна в ответе.
{
"id": "TASK_ID",
"status": "completed",
"unsigned_urls": [
"https://api.closerouter.dev/v1/videos/TASK_ID/content?index=0"
],
"usage": {
"cost": 0.15
}
}5. Скачайте файл
Ссылки unsigned_urls защищены: передавайте API-ключ аккаунта, которому принадлежит задача. index выбирает результат, начиная с нуля.
curl https://api.closerouter.dev/v1/videos/TASK_ID/content?index=0 \
-H "Authorization: Bearer $CLOSEROUTER_API_KEY" \
--output video.mp4Статусы задачи
| Статус | Действие |
|---|---|
pending | Задача принята; продолжайте проверять статус. |
in_progress | Обработка продолжается; новый POST не нужен. |
completed | Получите результат по защищённой ссылке. |
failed | Прочитайте error перед следующим действием. |
Продление, повышение разрешения и редактирование
Проверьте поддержку операции и источника у выбранного провайдера. Эти действия создают новые задачи. Для каждого действия сначала запросите /videos/quote с его параметрами; затем отправьте те же параметры и полученный max_cost_usd на /videos.
Продлить видео
Тело запроса для расчёта стоимости. Используйте свою завершённую задачу и допустимые для операции параметры.
{
"model": "YOUR_VIDEO_MODEL_ID",
"operation": "extend",
"video": {
"id": "SOURCE_TASK_ID",
"index": 0
},
"prompt": "Continue the camera movement",
"duration": 5
}Повысить разрешение
Тело запроса для расчёта стоимости. Используйте свою завершённую задачу и допустимые для операции параметры.
{
"model": "YOUR_VIDEO_MODEL_ID",
"operation": "upscale",
"video": {
"id": "SOURCE_TASK_ID",
"index": 0
},
"resolution": "1080p"
}Изменить видео
Тело запроса для расчёта стоимости. Используйте свою завершённую задачу и допустимые для операции параметры.
{
"model": "YOUR_VIDEO_MODEL_ID",
"operation": "edit",
"video": {
"id": "SOURCE_TASK_ID",
"index": 0
},
"prompt": "Make the scene snowy"
}Исходники и ограничения
Вместо video.id можно передать video: {"url": "https://example.com/source.mp4"}, если операция поддерживает внешний источник. Для продления duration задаёт добавляемые секунды; extend и edit требуют prompt, а upscale — resolution.
Не передавайте input, нативные поля поставщика, provider.options или callback_url. Генерация через Chat Completions не поддерживается; анализ входящего видео — отдельная возможность текстовых моделей.
Неопределённый результат
Если ответ содержит closerouter.reconciliation_pending, окончательный результат ещё уточняется. Сохраните ID задачи и проверяйте статус; повторная генерация может создать отдельную платную задачу.