Tài liệu hướng dẫn gọi API tạo video
kozeai cung cấp giao diện tạo video tương thích với OpenAI Sora, sử dụng chế độ **tác vụ bất đồng bộ**: trước tiên gửi tác vụ để lấy `task_id`, sau đó kiểm tra trạng thái tác vụ và tải xuống nội dung video sau khi hoàn thành.
Xác thực
Tất cả các yêu cầu đều được xác thực bằng `Authorization: Bearer
export KOZEAI_API_KEY="sk-your-token"
export KOZEAI_BASE_URL="https://api.kozeai.com"
Giao diện Tổng quan
| Phương thức | Đường dẫn | Mục đích |
|---|---|---|
| POST | /v1/videos/generations |
Tạo tác vụ video |
| GET | /v1/videos/{task_id} |
Truy vấn trạng thái tác vụ |
| GET | /v1/videos/{task_id}/content |
Xem trực tuyến hoặc Tải xuống | mp4
Mã ID nhiệm vụ có dạng
task_12345, được giao diện gửi trả về, chỉ thuộc về người dùng hiện tại.
1. Tạo tác vụ video
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "video-ds-2.0",
"prompt": "Một video điện ảnh dài 9:16 về một con mèo đang chạy dưới ánh nắng ấm áp",
"giây": 15,
"tỷ_lệ_khung_hình": "9:16"
}'
Tham số yêu cầu
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
mẫu |
chuỗi | Có | Tên mẫu video, ví dụ như video-ds-2.0 |
lời nhắc |
chuỗi | Có | Mô tả nội dung video | giây |
số nguyên | Không | Thời lượng video (giây), dựa trên phạm vi hỗ trợ của mô hình nguồn |
tỷ lệ khung hình |
chuỗi | Không | Tỷ lệ khung hình, thường dùng: 9:16, 16:9, 1:1 |
hình ảnh |
mảng | Không | URL hình ảnh tham chiếu hoặc base64 |
video |
mảng | Không | URL video tham chiếu |
âm thanh |
mảng | Không | URL âm thanh tham chiếu |
Các mô hình nguồn khác nhau có thể hỗ trợ các tham số khác nhau. Các tham số không được liệt kê sẽ được truyền theo giao thức của máy chủ đầu vào.
Video được tạo từ hình ảnh (với hình ảnh tham chiếu)
Truyền vào mảng images để tạo video dựa trên các hình ảnh tham chiếu:
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "video-ds-2.0",
"prompt": "Sử dụng kiểu ảnh tham khảo và tạo video sản phẩm mượt mà",
"giây": 15,
"tỷ lệ khung hình": "9:16",
"hình ảnh": ["https://example.com/input.png"],
"video": ["https://example.com/input.mp4"],
"audio": ["https://example.com/input.mp3"]
}'
hình ảnhhỗ trợ URL hình ảnh hoặc base64.video/audiolà tài liệu tham khảo tùy chọn.- Khi gọi điện qua giao diện tự động hoàn thành trò chuyện (xem cuối bài viết), chỉ cần đính kèm hình ảnh vào tin nhắn; Hệ thống sẽ tự động chuyển đổi nó thành tham số
images.
Phản hồi (gửi thành công)
{
"id": "task_12345",
"task_id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
Trạng thái: đang chờ,
tiến độ: 0,
được tạo lúc:
}
Trạng thái Giá trị: đang chờ (queued), đang tiến hành (in progress), đã hoàn thành (completed), thất bại (failed).
2. Trạng thái tác vụ thăm dò
Sử dụng id được trả về từ yêu cầu để thăm dò, với khoảng thời gian khuyến nghị là 3-5 giây.
curl "$KOZEAI_BASE_URL/v1/videos/task_12345" \
-H "Authorization: Bearer $KOZEAI_API_KEY"
Phản hồi (đang tạo)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "in_progress",
"progress": 45,
"created_at": class="hljs-number">1751000000
}
Phản hồi (Hoàn tất)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "completed",
"progress": 100,
"created_at": 1751000000,
Sau khi hoàn thành, `metadata.content_url` cung cấp địa chỉ video có thể truy cập trực tiếp; video cũng có thể được tải xuống bằng giao diện nội dung bên dưới.
Phản hồi (thất bại)
{
"id": "task_12345",
"object": "video",
"status": "failed",
"error": { "message": "Lý do thất bại" }
}
3. Tải xuống nội dung video
curl -L "$KOZEAI_BASE_URL/v1/videos/task_12345/content" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-o result.mp4
- Trả về lỗi 409 Conflict nếu tác vụ không hoàn thành (Vẫn đang trong hàng đợi/đang tạo).
- Hỗ trợ tải xuống phân đoạn/phát lại kéo và thả bằng cách sử dụng tiêu đề yêu cầu
.
- Trả về
.
Ví dụ đầy đủ
JavaScript (truy xuất + thăm dò)
const BASE = process.env.KOZEAI_BASE_URL;
const KEY = process.env.KOZEAI_API_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// 1. Gửi nhiệm vụ
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: 'Một video quảng cáo mượt mà về chai nước hoa trên kính',
giây: 15,
tỷ lệ khung hình: '9:16',
}),
});
const task = await submit.json();
const taskId = task.id;
// 2. Kiểm tra cho đến khi hoàn thành
async function poll() {
while (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. Lấy địa chỉ video
console.log('Địa chỉ video:', 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 = {"Authorization": f"Bearer {KEY}"}
# 1. Gửi nhiệm vụ
resp = requests.post(
f"{BASE}/v1/videos/generations",
headers=headers,
json={
"model": "video-ds-2.0",
"prompt": "Một video điện ảnh dài 9:16 về một con mèo đang chạy dưới ánh nắng ấm áp",
"giây": 15,
"tỷ lệ khung hình": "9:16",
},
)
task_id = resp.json()["id"]
# 2. Polling
trong khi 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. Tải xuống
mp4 = requests.get(f"{BASE}/v1/videos/{task_id}/content", headers=headers)
with open("result.mp4", "wb") as f: f.write(mp4.content)
Được gọi trong giao diện hoàn thành trò chuyện (sử dụng tương thích)
Mô hình video cũng có thể được gọi thông qua /v1/chat/completions, tạo điều kiện thuận lợi cho việc tái sử dụng các ứng dụng khách trò chuyện.
Khi thực hiện yêu cầu, Chỉ cần truyền tên mô hình video vào `model`, và hệ thống sẽ tự động chuyển đổi nó thành một tác vụ video:
curl $KOZEAI_BASE_URL/v1/chat/completions \
-H Authorization: Bearer $KOZEAI_API_KEY \
-H Content-Type: application/json \
-d {
Model: } `trả về "video-ds-2.0
,
"messages: [{"role: "user, "content: "một con mèo đang chạy dưới ánh nắng mặt trời, điện ảnh, 9:16}]
}
Trả về trạng thái hoàn thành cuộc trò chuyện
Định dạng là `message.content`, chứa trạng thái nhiệm vụ và một liên kết `/v1/videos/{task_id}`. Liên kết này sẽ phát video sau khi hoàn thành. Trang sảnh trò chuyện sử dụng phương thức này.
Cả hai điểm truy cập (/v1/videos/generations và /v1/chat/completions) đều dùng chung hệ thống nhiệm vụ và không xung đột với nhau. Để tích hợp trực tiếp, nên sử dụng giao diện chuẩn `/v1/videos/*`.
Mã lỗi
Trạng thái Mã
Ý nghĩa
401
Mã thông báo bị thiếu, hết hạn hoặc không hợp lệ
403
Số dư không đủ, hoặc nhóm hiện tại không có quyền truy cập vào mô hình này
404
ID tác vụ không tồn tại, hoặc không thuộc về người dùng hiện tại; hoặc mô hình chưa được cấu hình.
409
Nội dung video chưa sẵn sàng (tác vụ vẫn đang xếp hàng/tạo)
429
Tỷ lệ kích hoạt giới hạn
502
Nhà cung cấp thượng nguồn gặp lỗi hoặc trả về kết quả không hợp lệ