Sinh video AI

Tạo video từ text hoặc ảnh. Hỗ trợ Kling, Pika, Runway, Luma — chọn theo nhu cầu hoặc để Smart Router tự chọn.

Lưu ý: Sinh video là job bất đồng bộ (async) — mất 30s-3 phút tùy model. Khuyến nghị dùng Webhook hoặc poll endpoint /v1/jobs/:id.

Endpoint

POST https://api.aigate.id.vn/v1/generate/video

Tham số đầy đủ

Tham sốKiểuBắt buộcMô tả
promptstringCó (nếu không có image)Mô tả video cần tạo
imagestringCó (nếu image-to-video)URL ảnh đầu vào
modelstringKhôngauto (mặc định) hoặc model cụ thể
durationintegerKhôngĐộ dài video (giây): 3, 5, 10 — tùy model
aspect_ratiostringKhông16:9, 9:16, 1:1
resolutionstringKhông480p, 720p, 1080p
motion_strengthfloatKhôngMức chuyển động (0.1-1.0), mặc định 0.5
fpsintegerKhôngKhung hình/giây (8, 16, 24, 30)
seedintegerKhôngTái tạo cùng kết quả
webhook_urlstringKhôngNhận callback khi xong (khuyến nghị)

Models hỗ trợ

ModelCreditsTốc độTối đaPhù hợp với
auto80-200~1m10sSmart Router tự chọn
kling-1.680~45s5s 720pCảnh tự nhiên, người
kling-pro200~2m10s 1080pChất lượng cao nhất
pika-1.560~30s3s 720pNhanh, hiệu ứng nghệ thuật
runway-gen3180~1.5m10s 1080pCinematic, smooth motion
luma-dream150~1m5s 720pRealistic, depth tốt
hailuo-01100~1m6s 720pImage-to-video, character

Ví dụ

1. Text-to-video

curl -X POST https://api.aigate.id.vn/v1/generate/video \
  -H "Authorization: Bearer aig_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "một con rồng vàng cuộn quanh ngôi nhà cổ, ánh sáng hoàng hôn",
    "model": "kling-pro",
    "duration": 5,
    "aspect_ratio": "16:9",
    "resolution": "1080p",
    "webhook_url": "https://your-app.com/webhook/aigate"
  }'

Phản hồi ngay (job created):

{
  "ok": true,
  "job_id": "vid_x9k2lp",
  "status": "queued",
  "estimated_seconds": 90,
  "credits_held": 200
}

2. Image-to-video (làm ảnh chuyển động)

{
  "image": "https://cdn.aigate.id.vn/img/abc123.png",
  "prompt": "camera kéo nhẹ về phía trước, lá cây rung trong gió",
  "model": "hailuo-01",
  "duration": 5,
  "motion_strength": 0.6
}

3. Kiểm tra trạng thái job

GET https://api.aigate.id.vn/v1/jobs/vid_x9k2lp
Authorization: Bearer aig_xxx

Khi đang xử lý:

{
  "id": "vid_x9k2lp",
  "status": "running",
  "progress": 0.45,
  "started_at": "2026-04-24T16:30:00Z"
}

Khi xong:

{
  "id": "vid_x9k2lp",
  "status": "succeeded",
  "url": "https://cdn.aigate.id.vn/vid/x9k2lp.mp4",
  "thumbnail": "https://cdn.aigate.id.vn/vid/x9k2lp_thumb.jpg",
  "duration": 5.0,
  "resolution": "1080p",
  "credits_used": 200,
  "completed_at": "2026-04-24T16:31:30Z"
}

Khi lỗi:

{
  "id": "vid_x9k2lp",
  "status": "failed",
  "error": "upstream_timeout",
  "credits_refunded": 200
}
💡 Refund tự động: Nếu job thất bại do lỗi từ provider (không phải lỗi prompt), AIGate tự động hoàn lại credits. Bạn không bị mất credits cho job lỗi.

Polling vs Webhook

Cách 1: Polling (đơn giản)

// JavaScript
async function waitForVideo(jobId) {
  while (true) {
    const r = await fetch(`https://api.aigate.id.vn/v1/jobs/${jobId}`, {
      headers: { Authorization: `Bearer ${KEY}` }
    });
    const job = await r.json();
    if (job.status === 'succeeded') return job.url;
    if (job.status === 'failed') throw new Error(job.error);
    await new Promise(r => setTimeout(r, 5000));  // chờ 5s
  }
}

Cách 2: Webhook (khuyến nghị)

Cung cấp webhook_url trong yêu cầu. AIGate sẽ POST tới URL đó khi xong (có chữ ký HMAC để verify).

Xem chi tiết: Webhooks.

Giới hạn & Best practices

Mẹo viết prompt video tiếng Việt

Tiếp theo

👉 Webhooks — không phải poll, nhận thông báo tự động

👉 Sinh ảnh AI — kết hợp image + video pipeline