Документация по вызову API для генерации видео
kozeai предоставляет интерфейс генерации видео, совместимый с OpenAI Sora, использующий **асинхронный режим задач**: сначала отправляется задача для получения `task_id`, затем проверяется статус задачи, и после завершения загружается видеоконтент.
Аутентификация
Все запросы аутентифицируются с помощью `Authorization: Bearer
export KOZEAI_API_KEY="sk-your-token"
export KOZEAI_BASE_URL="https://api.kozeai.com"
Интерфейс Обзор
| Метод | Путь | Назначение |
|---|---|---|
| POST | /v1/videos/generations |
Создать видеозадачу |
| GET | /v1/videos/{task_id} |
Запрос статуса задачи |
| GET | /v1/videos/{task_id}/content |
Играть онлайн или Скачать | mp4
Идентификатор задачи в формате
task_12345, возвращаемый интерфейсом отправки, принадлежит только текущему пользователю.
1. Создать задачу видео
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Авторизация: Bearer $KOZEAI_API_KEY" \
-H "Тип содержимого: application/json" \
-d '{
"модель": "video-ds-2.0",
"prompt": "Кинематографическое видео 9:16, на котором кошка бежит под теплым солнечным светом",
"секунд": 15,
"aspect_ratio": "9:16"
Параметры запроса
| Параметры | Тип | Обязательный | Описание |
|---|---|---|---|
модель |
строка | Да | Название модели видео, например, video-ds-2.0 |
подсказка |
строка | Да | Видеоконтент описание | секунды |
целое число | Нет | Длительность видео (в секундах), в зависимости от диапазона поддержки модели источника |
соотношение сторон |
строка | Нет | Соотношение сторон, обычно используемое: 9:16, 16:9, 1:1 |
изображения |
массив | Нет | URL эталонных изображений или base64 |
videos |
array | No | Reference Video URL |
audios |
array | No | Reference Audio URL |
Разные модели исходного кода могут поддерживать разные параметры. Параметры, не указанные в списке, будут переданы в соответствии с протоколом вышестоящего сервера.
Видео, сгенерированное с помощью изображений (с эталонными изображениями)
Передайте массив images для генерации видео на основе эталонных изображений:
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Авторизация: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "video-ds-2.0",
"prompt": "Используйте стиль эталонного изображения и создайте плавное видео о продукте",
"seconds": 15,
"aspect_ratio": "9:16",
"images": ["https://example.com/input.png"],
"videos": ["https://example.com/input.mp4"],
"audios": ["https://example.com/input.mp3"]
}'
imagesподдерживает URL-адреса изображений или base64.videos/audiosявляются необязательными справочными материалами.- При обращении через интерфейс автозаполнения чата (см. конец статьи) просто прикрепите изображение к сообщению; система автоматически преобразует его в параметр
images.
Ответ (отправка прошла успешно)
{
"id": "task_12345",
"task_id": "task_12345",
"model": "video-ds-2.0",
"status": "queued",
"progress": 0,
"created_at":
}
status Значения: queued (в очереди), in_progress (в процессе), completed (завершено), failed (сбой).
2. Опрос статуса задачи
Используйте id, возвращаемый при отправке запроса, для опроса с рекомендуемым интервалом 3-5 секунд.
curl "$KOZEAI_BASE_URL/v1/videos/task_12345" \
-H "Авторизация: Bearer $KOZEAI_API_KEY"
Ответ (генерируется)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "in_progress",
"progress": 45,
"created_at": 1751000000
}
Response (Complete)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "completed",
"progress": 100,
"created_at": 1751000000,
После завершения `metadata.content_url` предоставляет непосредственно доступный адрес видео; его также можно загрузить, используя интерфейс контента ниже.
Ответ (сбой)
{
"id": "task_12345",
"object": "video",
"status": "failed",
class="hljs-attr">"error": { "message": "Failure reason" }
}
3. Загрузка видеоконтента
curl -L "$KOZEAI_BASE_URL/v1/videos/task_12345/content" \
-H "Авторизация: Bearer $KOZEAI_API_KEY" \
-o result.mp4
- Возвращает 409 Conflict, если задача не выполнена (все еще в очереди/генерируется).
- Поддерживает сегментированную загрузку/воспроизведение методом перетаскивания с использованием запроса
заголовок.
- Возвращает
.
Полный пример
JavaScript (fetch + polling)
const BASE = process.env.KOZEAI_BASE_URL;
const KEY = process.env.KOZEAI_API_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// 1. Отправить задачу
const submit = await fetch(`${BASE}/v1/videos/generations`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'video-ds-2.0',
prompt: 'Плавный рекламный ролик с флаконом духов на стекле',
seconds: 15,
class="hljs-attr">aspect_ratio: '9:16',
}),
});
const task = await submit.json();
const taskId = task.id;
// 2. Опрашивать до завершения
асинхронный функция опрос() {
пока (true) {
const res = await fetch(`${BASE}/v1/videos/${taskId}`, { headers });
const data = await res.json();
if (data.status === 'completed') return data;
if (data.status === 'failed') throw new Error(data.error?.message || 'failed');
await new Promise((r) => setTimeout(r, 5000));
}
}
const done = await poll();
// 3. Получение адреса видео
console.log('Адрес видео:', done.metadata?.content_url
|| `${BASE}/v1/videos/${taskId}/content`);
Python (requests + polling)
import os, time, requests
BASE = os.environ["KOZEAI_BASE_URL"]
KEY = os.environ["KOZEAI_API_KEY"]
headers = {"Авторизация": f"Bearer {KEY}"}
# 1. Отправить задачу
resp = requests.post(
f"{BASE}/v1/videos/generations",
headers=headers,
json={
"model": "video-ds-2.0",
"prompt": "Кинематографическое видео 9:16, на котором кошка бежит под теплым солнечным светом",
"seconds": 15,
"aspect_ratio": "9:16",
},
)
task_id = resp.json()["id"]
# 2. Опрос
while True:
data = requests.get(f"{BASE}/v1/videos/{task_id}", headers=headers).json()
if data["status"] == "completed":
break
if data["status"] == "failed":
raise RuntimeError(data.get("error", {}).get("message", "failed"))
time.sleep(5)
# 3. Download
mp4 = requests.get(f"{BASE}/v1/videos/{task_id}/content", headers=headers)
with open("result.mp4", "wb") as f: f.write(mp4.content)
Вызывается в интерфейсе автозавершения чата (совместимое использование)
Видеомодель также может быть вызвана через /v1/chat/completions, облегчая повторное использование чат-клиентов.
При отправке запроса просто передайте имя модели видео в `model`, и система автоматически преобразует его в задачу видео:
curl $KOZEAI_BASE_URL/v1/chat/completions \
-H Authorization: Bearer $KOZEAI_API_KEY \
-H Content-Type: application/json \
-d {
Model: } `returns "video-ds-2.0
,
"messages: [{"role: "user, "content: "a cat running in the sunlight, cinematic, 9:16}]
}
Возвращает результат завершения чата
Формат — `message.content`, который содержит статус задачи и ссылку `/v1/videos/{task_id}`. Эта ссылка воспроизведет видео после завершения задачи. Страница лобби чата использует этот метод.
Обе точки входа (/v1/videos/generations и /v1/chat/completions) используют одну и ту же систему задач и не конфликтуют друг с другом. Для прямой интеграции рекомендуется использовать стандартный интерфейс `/v1/videos/*`.
Код ошибки
Код состояния
Значение
401
Токен отсутствует, истек или недействителен
403
Недостаточный баланс или у текущей группы нет разрешения на эту модель
404
Идентификатор задачи не существует или не принадлежит текущему пользователю; или модель не является настроено.
409
Видеоконтент не готов (задача все еще находится в очереди/генерируется)
429
Срабатывает ограничение скорости
502
Поставщик вышестоящего уровня не справился или вернул недействительный результат