REST API untuk generate video & image AI. Autentikasi memakai API key sk_live_… yang diterbitkan WanHub.
BASE_URL="https://pusatapi.web.id"
# 1. List model yang tersedia
curl -H "Authorization: Bearer sk_live_xxx" $BASE_URL/v2/models
# 2. Submit sebuah job generate
curl -X POST $BASE_URL/v2/generate \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "spicy-video",
"input": { "prompt": "a cat surfing a wave, cinematic",
"aspect_ratio": "16:9", "duration_seconds": 5 }
}'
# 3. Poll hasilnya
curl -H "Authorization: Bearer sk_live_xxx" \
$BASE_URL/v2/jobs/<job_id>
Setiap request wajib membawa header:
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx
Key diterbitkan oleh tim WanHub dan tidak kedaluwarsa (bisa direvoke). Satu key memiliki batas:
| Batas | Default | Response saat terlampaui |
|---|---|---|
| Kuota bulanan | 500 request/bulan | 429 quota_exceeded |
| Rate limit | 30 request/menit | 429 rate_limited + retry_after_ms |
Batas di atas adalah default saat key diterbitkan; kuota per key dapat disesuaikan (termasuk unlimited) oleh tim WanHub kapan saja tanpa perlu key baru.
/v2/modelsDaftar semua model yang tersedia beserta opsi masing-masing (durasi, resolusi, aspect ratio, limit referensi). Model tersedia sebagai spicy-video, spicy-image, dan spicy-image-pro.
{
"ok": true,
"object": "list",
"data": [
{
"object": "model",
"id": "spicy-video",
"label": "Spicy Video",
"kind": "video",
"options": { "durations": [5, 10], "resolutions": ["720p", "1080p"], "...": "..." }
}
]
}
/v2/generateSubmit job generate. Body:
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
model | string | ✓ | Id model dari GET /v2/models (mis. spicy-video). Id lama versi sebelumnya masih diterima. |
input.prompt | string | ✓ | Deskripsi video/image yang diinginkan |
input.aspect_ratio | string | — | Default "16:9" |
input.duration_seconds | number | — | Default: durasi valid pertama untuk model tsb |
input.resolution | string | — | Mis. "720p", "1080p" |
input.reference_image_urls | string[] | — | URL gambar referensi (publik-accessible). Sesuai options.max_ref_images model. |
input.reference_video_urls | string[] | — | URL video referensi (sesuai options.max_ref_videos). |
input.seed | number | — | Seed untuk reproduksibilitas |
Response sukses (200):
{
"ok": true,
"id": "b1f2c3d4e5f60718",
"model": "spicy-video",
"status": "queued",
"ms": 812,
"poll": "/v2/jobs/b1f2c3d4e5f60718"
}
/v2/jobs/:idPoll status job tiap 3–5 detik sampai status terminal.
| status | Arti |
|---|---|
queued | Menunggu diproses |
in_progress | Sedang digenerate |
completed | Selesai — hasil di data.result_url |
failed | Gagal — lihat data.error |
{
"ok": true,
"id": "b1f2c3d4e5f60718",
"model": "spicy-video",
"status": "completed",
"data": { "result_url": "https://…/output.mp4" }
}
Semua error memakai envelope konsisten: { "ok": false, "error": "<code>", "message": "…" }
| HTTP | error code | Penyebab |
|---|---|---|
| 401 | unauthorized | Header Authorization hilang / salah format |
| 401 | invalid_key | Key tidak dikenal |
| 401 | key_revoked | Key sudah direvoke |
| 429 | quota_exceeded | Kuota bulanan habis |
| 429 | rate_limited | Lewat batas request/menit — cek retry_after_ms |
| 400 | missing_model, unknown_model, too_many_ref_images, too_many_ref_videos | Body request tidak valid |
| 404 | job_not_found | Job id tidak ada / server pernah restart |
| 502 | pipeline_error | Gagal submit — aman untuk di-retry |
v2 — Peluncuran API publik dengan autentikasi sk_live_ resmi, kuota & rate-limit per key, dan endpoint konsisten /v2/models, /v2/generate, /v2/jobs/:id. Endpoint internal generasi sebelumnya tetap berjalan untuk kompatibilitas, namun v2 inilah yang didokumentasikan untuk integrator.
WanHub API v2 · docs ini publik, tidak memerlukan akses panel.