Tạo video
Tạo video từ prompt, từ một ảnh, hoặc đi từ frame đầu tới frame cuối. Trả về job ngay lập tức — video mất vài chục giây đến vài phút.
Đã triển khai
Request
POST
/videos/generationsCần header Authorization: Bearer apl_...
| Field | Kiểu | Mô tả |
|---|---|---|
modelbắt buộc | string | Public model ID có kind là VIDEO. |
promptbắt buộc | string | Mô tả cảnh, chuyển động, phong cách. |
duration_secondsbắt buộc | 4 | 6 | 8 | Chỉ nhận 4, 6 hoặc 8. Giá trị khác bị từ chối trước khi gọi nhà cung cấp. |
aspect_ratio | "16:9" | "9:16" | Mặc định 16:9. Dùng 9:16 cho video dọc. |
image | ImageInput | Frame đầu, dùng cho image-to-video. Cùng định dạng với image của endpoint sửa ảnh. |
last_frame | ImageInput | Frame cuối. Bắt buộc phải gửi kèm image. |
Response
| Field | Kiểu | Mô tả |
|---|---|---|
idbắt buộc | string | Job ID của ApiLux (vidjob_...). Dùng để poll và tải video. |
statusbắt buộc | "queued" | "running" | "completed" | "failed" | Trạng thái tại thời điểm tạo, thường là queued. |
requested_duration_secondsbắt buộc | integer | Số giây đã dùng để tính tiền. |
apilux.credit_chargedbắt buộc | integer | Số credit đã trừ khi tạo job. |
Tính tiền
Trừ ngay khi tạo job, theo duration_seconds bạn yêu cầu. Poll trạng thái không tốn thêm. Job failed được hoàn tiền tự động, đúng một lần.
Ví dụ
curl https://apilux.net/api/v1/videos/generations \
-H "Authorization: Bearer apl_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "VIDEO_MODEL_ID",
"prompt": "Sáng sớm trên biển, chuyển động điện ảnh",
"duration_seconds": 4,
"aspect_ratio": "16:9"
}'import os, time, requests
BASE = "https://apilux.net/api/v1"
HEAD = {"Authorization": f"Bearer {os.environ['APILUX_API_KEY']}"}
job = requests.post(
f"{BASE}/videos/generations",
headers=HEAD,
json={
"model": "VIDEO_MODEL_ID",
"prompt": "Sáng sớm trên biển, chuyển động điện ảnh",
"duration_seconds": 4,
},
).json()
while True:
time.sleep(5)
state = requests.get(f"{BASE}/videos/generations/{job['id']}", headers=HEAD).json()
if state["status"] in ("completed", "failed"):
break
if state["status"] == "completed":
mp4 = requests.get(BASE.rsplit("/v1", 1)[0] + state["content_url"], headers=HEAD)
open("video.mp4", "wb").write(mp4.content)Lỗi
| HTTP | Mã | Ý nghĩa |
|---|---|---|
| 400 | invalid_request | Body không hợp lệ (thiếu field, sai kiểu, giá trị ngoài phạm vi). |
| 401 | auth_missing_or_malformed | Thiếu header Authorization hoặc sai định dạng. Phải là Bearer apl_.... |
| 401 | auth_invalid | API key không tồn tại. |
| 401 | auth_revoked | API key đã bị thu hồi. |
| 401 | auth_expired | API key đã hết hạn. |
| 400 | unknown_model | Model không tồn tại trong ApiLux. |
| 400 | capability_not_supported | Model có tồn tại nhưng không dùng được ở endpoint này (ví dụ dùng model text cho endpoint ảnh). |
| 503 | pricing_not_configured | Model đã có route nhưng chưa được cấu hình giá trong ApiLux. Đây là trạng thái phía chúng tôi, không phải lỗi của bạn. |
| 503 | model_disabled | Model đang bị tắt. |
| 503 | model_temporarily_unavailable | Model đang bật và có giá, nhưng nhà cung cấp phía sau hiện không phục vụ nó. Đây là trạng thái tạm thời và có thể tự hết — model sẽ xuất hiện lại trong GET /v1/models khi nhà cung cấp có nó trở lại. Bạn không bị trừ tiền và không có lời gọi nào tới nhà cung cấp. |
| 402 | insufficient_balance | Số dư ví không đủ để thực hiện request. |
| 429 | api_key_limit_exceeded | API key này đã chạm hạn mức bạn tự cấu hình. Ví vẫn còn tiền — chỉ key này không được tiêu thêm cho tới khi chu kỳ reset. Response kèm limit_type (spending | requests | tokens) và period (daily | monthly | lifetime). Hạn mức token của endpoint text được tính theo usage thực tế nên tổng có thể vượt tối đa một request. |
| 503 | api_key_quota_reconciliation_required | Một request text trước đó của chính key này chưa được đối soát xong. Thường gặp nhất: nhà cung cấp trả kết quả thành công nhưng không kèm usage token, nên hạn mức token của kỳ đó không còn đáng tin và ApiLux dừng lại thay vì để hạn mức bị vượt trong im lặng. Thử lại sẽ không qua được cho tới khi việc đó xong — hãy liên hệ hỗ trợ. Bạn không bị trừ tiền cho request bị chặn, không có lời gọi nào tới nhà cung cấp, và endpoint ảnh/video không bị ảnh hưởng. |
| 502 | upstream_error | Nhà cung cấp mô hình lỗi. Không bị trừ tiền. |
| 504 | upstream_timeout | Nhà cung cấp không phản hồi kịp. Không bị trừ tiền. |
| 429 | upstream_rate_limited | Bị giới hạn tốc độ. Thử lại sau vài giây. |
Ghi chú
Nếu request tạo job đã trả về
id, đừng gửi lại request đó — hãy poll id đó. Gửi lại sẽ tạo job mới và bị tính tiền lần nữa.