01
Несовпадение пропорций обходится дорого и незаметно
Если опора 1:1, а вы просите клип 16:9, эндпоинт вынужден добавлять поля, обрезать или растягивать. Приведите опору к запрашиваемому aspect_ratio или resolution до отправки.
Руководство по интеграции
«Изображение в видео» убирает самую трудную переменную — как выглядит сцена — и заменяет её более узкой: как она должна двигаться. Опорный кадр делает основную работу, поэтому слабую опору текст запроса не спасает.

Задача
Эндпоинты движения наследуют из первого кадра всё: композицию, свет, пропорции, артефакты. Мягкая или неудачно кадрированная опора даёт мягкий и неудачно кадрированный клип — по видеотарифу.
01
Если опора 1:1, а вы просите клип 16:9, эндпоинт вынужден добавлять поля, обрезать или растягивать. Приведите опору к запрашиваемому aspect_ratio или resolution до отправки.
02
Там, где объявлен last_image_url, обе опоры задают определённое начало и конец вместо свободного дрейфа. Там, где он не объявлен, его отправка — это 400.
03
movement_amplitude, camera_fixed, fps и duration_seconds появляются от эндпоинта к эндпоинту, и схема отмечает, какие из них меняют тариф. Общего словаря движения снизу не существует.
Подход
Работу со статикой делайте на эндпоинте изображений, где итерация стоит центы, зафиксируйте кадр и только потом платите за движение. Подтверждённая загрузка spicy:// сохраняет опору побайтово одинаковой между попытками, поэтому повтор стартует ровно с тех же пикселей.
Тело — это вызов создания с полем изображения. Отслеживание ничем не отличается от любой другой медиазадачи.
POST /api/v1/jobs/createTask
POST /api/v1/jobs/createTask
Authorization: Bearer $SPICY_API_KEY
Idempotency-Key: 7b1f0c2e-9a4d-4f31-8c67-2b5e0d9a1c44
Content-Type: application/json
{
"model": "<publisher>/<model>/image-to-video",
"input": {
"prompt": "Slow push-in, fabric moving in a light breeze",
"image_url": "https://example.com/reference.png",
"duration_seconds": 5,
"resolution": "720p"
},
"callBackUrl": "https://example.com/hooks/spicyapi"
}202 Accepted
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3
{
"code": 200,
"msg": "success",
"request_id": "req_example_create",
"data": {
"taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
"state": "queued",
"estimatedCost": "0.750000"
}
}Контракт
| Поле или заголовок | Значение или предел |
|---|---|
| image_url · last_image_url | declared per endpoint |
| POST /api/v1/jobs/retry | new task · source record untouched |
| state | queued · running · succeeded · failed · expired |
| audio / video upload | ≤ 100 MiB · ≤ 600 s |
Проведите по горизонтали, чтобы увидеть все столбцы.
Интеграция
Применимость
Проверки
HTTPS-адреса, подтверждённые загрузки spicy:// и встроенные data URI работают одинаково на эндпоинтах изображений и видео, в тех же пределах и с теми же проверками при приёме.
POST /api/v1/jobs/retry создаёт новую задачу из неудавшейся или истёкшей и заново проверяет схему, цену, права и доступность. Исходная запись остаётся нетронутой.
queued, running, succeeded, failed, expired. Эти пять слов описывают любой медиаэндпоинт, поэтому логика переходов пишется один раз.
Перед запуском
Частые вопросы
Модели
Каждая ссылка ведёт на страницу семейства моделей: входные данные, ограничения, контентная политика и текущая цена за единицу.
Дальше
Превратите опорное изображение в клип. Что делают качество первого кадра, несовпадение пропорций, поля движения и длительность.