WanduraDocsBeta
BetaDocs đang ở bản beta và còn thay đổi. Thấy chỗ sai, khó hiểu hoặc còn thiếu? Hãy cho chúng tôi biết.
API tạo ảnh và video (v2)

Wandura C1.1: video quảng cáo từ một đoạn mô tả

Markdown
Trên trang này

TL;DR: gọi POST /v2/jobs với model: "wandura-c1-1", một prompt mô tả quảng cáo và tối đa 4 ảnh tham chiếu. Bạn nhận về một video hoàn chỉnh dài 5 đến 60 giây. Wandura tự lên các cảnh quay, dựng từng cảnh rồi nối lại; bạn không cần viết system prompt. Giá tính theo giây video đầu ra: 480p $0,09, 720p $0,15, 1080p $0,30. Poll GET /v2/jobs/{job_id} hoặc nhận webhook có ký, giống hệt các job video khác. Job lỗi, bị chặn hoặc quá giờ thì không tính tiền.

Cơ bản

  • Model id: wandura-c1-1 ("Wandura C1.1"), đầu ra video. Gọi qua Jobs API, dùng chung key, idempotency, webhook và trạng thái với các job khác.
  • Không có style. Gửi mô tả và các tuỳ chọn thành field ở cấp ngoài cùng. Gửi style hoặc object inputs sẽ bị từ chối.
  • Kết quả: một video quảng cáo liền mạch, giữ đúng người, sản phẩm và bối cảnh trong ảnh tham chiếu của bạn.
Endpoint Làm gì
POST /v2/jobs Gửi một job C1.1.
GET /v2/jobs/{job_id} Trạng thái và kết quả. Body giống webhook.
POST /v2/jobs/{job_id}/cancel Huỷ job còn queued.
GET /v2/models/wandura-c1-1 Thông tin model, kèm price_per_second theo độ phân giải.
GET /v2/models/wandura-c1-1/schema JSON Schema của body gửi lên.
GET /v2/public/workflows Không cần key: C1.1 cùng các input và giá theo giây.

Request

curl -X POST https://api.wandura.ai/v2/jobs \
  -H "Authorization: Bearer $WANDURA_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ad-2026-10-20-001" \
  -d '{
    "model": "wandura-c1-1",
    "prompt": "A 15 second ad for Aurora, a meditation app. The woman in Image 1 sits by a window at sunrise, closes her eyes and breathes; the phone in Image 2 shows the app. Calm piano. She says: \"Ten minutes changed my mornings.\" End on the app logo.",
    "image_urls": ["https://your-bucket.example.com/ads/woman.jpg", "https://your-bucket.example.com/ads/phone.png"],
    "duration": 15,
    "resolution": "720p",
    "aspect_ratio": "9:16",
    "webhook_url": "https://your-backend.example.com/hooks/wandura",
    "end_user_id": "ua_member_17"
  }'
# HTTP 202
# {"job_id":"run_7Hq2LmPaX9Ws","status":"queued","model":"wandura-c1-1","created_at":"2026-10-20T02:14:46.251Z"}
Field Ghi chú
model Bắt buộc. wandura-c1-1.
prompt Bắt buộc, 1 đến 4000 ký tự. Nội dung quảng cáo: sản phẩm, người, bối cảnh, câu chuyện, không khí, và mọi câu thoại hay chữ trên màn hình (để trong ngoặc kép). Gọi ảnh là "Image 1", "Image 2" theo đúng thứ tự gửi.
image_urls Không bắt buộc, 0 đến 4 URL https công khai (JPEG, PNG hoặc WEBP; presigned URL dùng được). Ảnh người, sản phẩm, bối cảnh. [] coi như không gửi.
duration Không bắt buộc, số giây nguyên từ 5 đến 60. Mặc định 5. Giá tính theo giây.
resolution Không bắt buộc, 480p, 720p hoặc 1080p. Mặc định 720p. Giá mỗi giây phụ thuộc vào nó.
aspect_ratio Không bắt buộc, 9:16, 16:9 hoặc 1:1. Mặc định 9:16.
lane Không bắt buộc, priority (mặc định) hoặc relax. Xem Làn relax.
num_outputs Không bắt buộc, phải là 1.
webhook_url Không bắt buộc. URL https công khai nhận job cuối cùng, có ký. Cần có signing secret trước (xem Webhook).
end_user_id Không bắt buộc. Id của bạn cho người mà job phục vụ. Khi gửi, giới hạn số job mỗi người mỗi ngày được áp dụng (xem Giới hạn).
  • URL đầu vào được tải khi job chạy, không phải lúc gửi. Giữ presigned URL còn hạn ít nhất 30 phút.
  • Gửi header Idempotency-Key ở mọi lần gửi để lần thử lại không bao giờ tạo video thứ hai (xem Idempotency).

Poll và kết quả

curl https://api.wandura.ai/v2/jobs/run_7Hq2LmPaX9Ws -H "Authorization: Bearer $WANDURA_KEY"
{"job_id":"run_7Hq2LmPaX9Ws","status":"succeeded","model":"wandura-c1-1","style":"sty_wandura_c1_1",
 "output":[{"url":"https://<wandura-storage-host>/outputs/2026-10-20/<random name>.mp4","type":"video/mp4",
   "width":720,"height":1280,"duration":15,"fps":30,"size_bytes":4183022,"seed":null,"expires_at":"2026-10-27T02:22:21.000Z"}],
 "error":null,"created_at":"2026-10-20T02:14:46.251Z","completed_at":"2026-10-20T02:22:21.964Z"}
  • Body có đúng các field như mọi job video khác, nên một bộ đọc dùng được cho tất cả. Với model này, style là một giá trị cố định; bỏ qua nó.
  • Trạng thái: queued → processing → succeeded | failed | cancelled | timeout (xem Trạng thái).
  • Mất bao lâu: 2 đến 8 phút trong các lần thử của chúng tôi (video 5 đến 30 giây). Video dài được dựng song song từng phần, nên video 60 giây không lâu gấp 12 lần video 5 giây. Poll mỗi 10 đến 15 giây, hoặc dùng webhook.
  • Kết quả: một file MP4 trên kho của Wandura. Link dùng được ít nhất 7 ngày (expires_at). Cần giữ lâu hơn thì chép file về (xem Kết quả).

Webhook

Khi có webhook_url, Wandura POST body cuối cùng của job (cùng JSON với poll) một lần khi job kết thúc, ký bằng X-Signature và X-Timestamp. Cách kiểm chữ ký, thử lại và chống trùng giống hệt các job khác: xem Webhook và Kiểm chữ ký.

Giá

Giá tính theo giây video đầu ra, theo độ phân giải, đã gồm cả việc lên cảnh, dựng và nối.

resolution Mỗi giây 5 s 15 s 30 s 60 s
480p $0,09 $0,45 $1,35 $2,70 $5,40
720p (mặc định) $0,15 $0,75 $2,25 $4,50 $9,00
1080p $0,30 $1,50 $4,50 $9,00 $18,00
  • Khi job được nhận, ví của bạn bị giữ số tiền cho đúng duration bạn xin. Khi job thành công, bạn trả cho số giây nhận được, không bao giờ quá số đã giữ.
  • Job failed, timeout, cancelled và lần gửi bị từ chối (4xx) không tính tiền; tiền giữ được trả lại.
  • Với model này, làn relax cùng giá với priority.
  • Giá hiện hành đọc ở GET /v2/models/wandura-c1-1 (price_per_second) hoặc GET /v2/public/workflows.
  • Key test (wdr_test_…) miễn phí: job thành công ngay với một video mẫu, không giữ tiền.

Giới hạn

Mục Giới hạn
Độ dài 5 đến 60 giây, số nguyên
Ảnh tham chiếu Tối đa 4
Mô tả Tối đa 4000 ký tự
Số kết quả Một video mỗi job
Thời gian tối đa của job 1080 giây (18 phút) tính từ lúc gửi, ở làn priority. Job chưa xong lúc đó kết thúc timeout, không tính tiền. Hãy gửi lại.
Trần chi tiêu mỗi ngày Admin của org đặt cho từng product. Vượt trần: 429 DAILY_CAP_REACHED (xem Lỗi).
Mỗi người dùng cuối Mặc định 20 job mỗi ngày, chỉ khi bạn gửi end_user_id (429 END_USER_LIMIT_REACHED).

Khi nhiều job C1.1 chạy cùng lúc, job mới chờ ở queued đến khi có chỗ, không bị từ chối.

Lỗi

Body sai bị từ chối ngay bằng 422 INVALID_INPUT, trước khi giữ tiền. Mọi lỗi đều được liệt kê:

HTTP 422
{"error":{"code":"INVALID_INPUT","message":"Validation failed.","retryable":false,"details":[
  {"field":"image_urls","reason":"at most 4 reference images"},
  {"field":"duration","reason":"must be whole seconds from 5 to 60"},
  {"field":"style","reason":"wandura-c1-1 takes no style"}],
 "docs_url":"https://docs.wandura.ai/developers/api-v2/errors#jobs-invalid-input"}}

Khi product của bạn đã chạm trần chi tiêu trong ngày, lần gửi bị từ chối và không giữ tiền:

HTTP 429
{"error":{"code":"DAILY_CAP_REACHED","message":"This product reached its daily spend cap (the day resets at 00:00 Vietnam time, UTC+7). Ask your org admin to raise the cap.","retryable":false,"docs_url":"https://docs.wandura.ai/developers/api-v2/errors#jobs-daily-cap-reached"}}
HTTP code retryable Cần làm gì
422 INVALID_INPUT false Sửa các field ghi trong details.
402 INSUFFICIENT_CREDITS false Ví không đủ tiền để giữ. Nạp thêm.
429 DAILY_CAP_REACHED false Đừng thử lại. Chờ tới 00:00 giờ Việt Nam, hoặc nhờ admin của org nâng trần.
429 RATE_LIMITED, PRODUCT_BUSY, END_USER_LIMIT_REACHED true Thử lại sau Retry-After với cùng Idempotency-Key.

Job kết thúc mà không có video không phải lỗi HTTP. error.code của nó là GENERATION_FAILED (thử lại được), CONTENT_MODERATION_BLOCKED (đổi mô tả hoặc ảnh) hoặc TIMEOUT (gửi lại). Cả ba đều không tính tiền. Xem Trạng thái.

Làm lại từ một quảng cáo gốc

Gửi một quảng cáo có sẵn qua video_url để nhận một quảng cáo mới giữ nguyên các cảnh và nhịp, với người và sản phẩm của bạn.

curl -X POST https://api.wandura.ai/v2/jobs \
  -H "Authorization: Bearer $WANDURA_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: remake-2026-10-20-001" \
  -d '{
    "model": "wandura-c1-1",
    "video_url": "https://your-bucket.example.com/ads/source-ad.mp4",
    "prompt": "Remake it for Lumi sparkling water: a summer sale at a Lumi drinks store. The woman in Image 1 is the shop assistant.",
    "image_urls": ["https://your-bucket.example.com/ads/woman.jpg"],
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'
# HTTP 202
# {"job_id":"run_Pz81KqTmV2Rc","status":"queued","model":"wandura-c1-1","created_at":"2026-10-20T05:14:46.251Z"}
Field Ghi chú
video_url Quảng cáo gốc: file MP4 hoặc MOV dài tối đa 60 giây, ở URL https công khai. Presigned URL và URL kết quả của Wandura đều dùng được.
prompt Không bắt buộc khi có video_url: điều cần đổi, ví dụ sản phẩm, thương hiệu, thông điệp hay ngôn ngữ của bạn. Không gửi thì quảng cáo được làm lại y như cũ, với người mới và một sản phẩm chung chung.
image_urls Không bắt buộc, tối đa 4: người, sản phẩm và bối cảnh muốn đưa vào.
duration Không bắt buộc. Mặc định: độ dài của quảng cáo gốc, từ 5 đến 60 giây (quảng cáo gốc ngắn hơn 5 giây thì được 5 giây).
  • Giữ lại: các cảnh theo đúng thứ tự, thời lượng co giãn theo độ dài mới, cách quay và chuyển động máy, nhịp, nhạc và âm thanh, cùng dáng của lời thoại và chữ trên hình. Thay đổi: người (lấy từ ảnh của bạn, hoặc người mới), sản phẩm và thương hiệu (lấy từ prompt của bạn, hoặc một sản phẩm chung chung), và lời thoại được viết lại cho sản phẩm của bạn. Thương hiệu, logo và người thật trong quảng cáo gốc không bị chép lại.
  • Chỉ đọc một lần: Wandura đọc mỗi quảng cáo gốc một lần rồi dùng lại kết quả đọc cho mọi lần làm lại sau với cùng file video đó, dù gửi từ link nào hay tải lên lại. Một video làm lại của Wandura C1.1 gửi lại qua video_url dùng lại kết quả đọc của quảng cáo gốc ban đầu. Kết quả đọc chỉ mô tả quảng cáo gốc, không bao giờ chứa prompt, ảnh hay thương hiệu của bạn.
  • Giá: theo giá mỗi giây ở trên. Đọc quảng cáo gốc không tính thêm tiền. Tiền giữ tính theo duration, nên theo độ dài quảng cáo gốc khi bạn không gửi duration.
  • Kiểm trước khi giữ tiền: video_url không phải MP4 hay MOV đọc được, hoặc dài hơn 60 giây, nhận 422 INVALID_INPUT và không bị giữ tiền. Giữ link còn hạn ít nhất 30 phút, vì file được tải lại khi job chạy.
  • Thời gian tối đa của job: 1080 giây (18 phút) tính từ lúc gửi, ở làn priority, như ở trên.
  • Kết thúc không có video, không tính tiền: quảng cáo gốc có nội dung người lớn, bạo lực, thù ghét hoặc nguy hiểm kết thúc failed với CONTENT_MODERATION_BLOCKED. Link không còn trả về video dài tối đa 60 giây lúc job chạy kết thúc với INPUT_UNUSABLE. Máy chủ giữ quảng cáo gốc đang bận thì kết thúc với GENERATION_FAILED (thử lại được).
HTTP 422
{"error":{"code":"INVALID_INPUT","message":"Validation failed.","retryable":false,"details":[
  {"field":"video_url","reason":"the source ad lasts 75 s; at most 60 s"}],
 "docs_url":"https://docs.wandura.ai/developers/api-v2/errors#jobs-invalid-input"}}

Cập nhật 19/10/2026 · Lịch sử thay đổi (3)

↑↓ chọnEnter mởEsc đóng

Gửi góp ý

Góp ý được gửi thẳng tới đội Wandura, kèm địa chỉ trang này.

0 / 4000