Создание видео
Отправьте задачу генерации видео. Запрос сразу возвращает 202 Accepted с id задачи и URL для опроса — генерация выполняется асинхронно. Опрашивайте задачу или получите webhook, затем прочитайте результат через Получение статуса видео.
POST https://api.ofox.ai/v1/videosПараметры запроса
| Параметр | Тип | Обязателен | Описание |
|---|---|---|---|
model | string | ✅ | Model slug, например google/veo-3.1 или bytedance/seedance-2.0 |
prompt | string | ✅ | Текстовое описание видео |
duration | integer | — | Длина видео в секундах |
resolution | string | — | 480p / 720p / 1080p / 1K / 2K / 4K |
aspect_ratio | string | — | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 3:2 / 2:3 / 21:9 / 9:21 |
size | string | — | Точный размер в пикселях WIDTHxHEIGHT (например, 1280x720), альтернатива resolution + aspect_ratio |
frame_images | array | — | Управление кадрами (изображение в видео / первый и последний кадр). Если присутствует ⇒ обрабатывается как изображение в видео. См. ниже |
input_references | array | — | Задает объект / стиль (референс в видео), не точные якоря кадров. См. ниже |
generate_audio | boolean | — | По умолчанию true для моделей, поддерживающих аудиовывод |
seed | integer | — | Seed для детерминированной генерации (не гарантируется у всех провайдеров) |
callback_url | string | — | URL webhook для конечного состояния, должен использовать HTTPS (см. Webhooks) |
provider | object | — | Сквозные параметры провайдера, см. Сквозные параметры провайдера |
Элемент frame_images[]
Каждый элемент закрепляет один кадр результата. frame_type — это first_frame или last_frame.
{
"type": "image_url",
"image_url": { "url": "https://example.com/first.jpg" },
"frame_type": "first_frame"
}Элемент input_references[]
Передавайте референсы изображения / аудио / видео через type — они направляют объект, стиль и консистентность, но не являются точными якорями кадров:
{ "type": "image_url", "image_url": { "url": "https://example.com/subject.jpg" } }
{ "type": "audio_url", "audio_url": { "url": "https://example.com/voice.mp3" } }
{ "type": "video_url", "video_url": { "url": "https://example.com/ref.mp4" } }| Медиа | type | Макс. количество | Другие ограничения |
|---|---|---|---|
| Изображение | image_url | ≤ 9 | — |
| Аудио | audio_url | ≤ 3 | ≤ 15s на клип |
| Видео | video_url | ≤ 1 | — |
Превышение любого лимита возвращает 400 too_many_references (см. Ошибки).
frame_images и input_references взаимоисключающие — один запрос использует одно или другое, но не оба одновременно. Отправка обоих возвращает 400 references_conflict.
Режим генерации (неявный)
Поля gen_mode нет. Режим определяется по переданным входным данным:
| Режим | Когда определяется |
|---|---|
text2video | Нет ни frame_images, ни input_references |
img2video | frame_images с одним first_frame |
img2video_end | frame_images с first_frame + last_frame |
imgref2video | input_references, только изображения |
mixref2video | input_references со смешанными изображениями / аудио / видео |
Ответ
202 Accepted — задача принята со status: "pending" и polling_url:
{
"id": "9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718",
"status": "pending",
"polling_url": "https://api.ofox.ai/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718"
}Опрашивайте polling_url (или дождитесь webhook), пока задача не достигнет конечного состояния — см. Получение статуса видео.
Примеры запросов
Одна схема /v1/videos покрывает каждый режим генерации; режим выбирается неявно по входным данным. Каждый пример ниже запускается как есть.
Текст в видео
Нет frame_images / input_references → текст в видео.
curl -X POST https://api.ofox.ai/v1/videos \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/veo-3.1",
"prompt": "A golden retriever running on the beach at sunset",
"duration": 5,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": true
}'Совмещаемые опции
Поля ниже ортогональны режиму генерации — добавляйте любое из них в любой body запроса выше.
Webhook (callback_url)
Получите POST на свой эндпоинт, когда задача достигнет конечного состояния, вместо опроса.
{
"model": "google/veo-3.1",
"prompt": "...",
"callback_url": "https://your-app.example/webhooks/ofox-video"
}callback_url должен использовать HTTPS. См. Webhooks, чтобы узнать payload и подпись.
Сквозные параметры провайдера
Параметры конкретного провайдера передаются через provider.options.<slug> — их получает только выбранный провайдер. Параметры вроде watermark поддерживаются не каждой моделью, поэтому они находятся в сквозных параметрах провайдера, а не в полях верхнего уровня (это следует соглашению OpenRouter для provider-passthrough). То, какие сквозные опции принимает модель, зависит от возможностей модели.
{
"model": "alibaba/wan-2.7",
"prompt": "...",
"provider": {
"options": {
"dashscope": { "watermark": false, "audio_setting": "..." }
}
}
}