WanHub API v2

REST API untuk generate video & image AI. Autentikasi memakai API key sk_live_… yang diterbitkan WanHub.

Quick start

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>

Authentication

Setiap request wajib membawa header:

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx

Key diterbitkan oleh tim WanHub dan tidak kedaluwarsa (bisa direvoke). Satu key memiliki batas:

BatasDefaultResponse saat terlampaui
Kuota bulanan500 request/bulan429 quota_exceeded
Rate limit30 request/menit429 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.

Endpoints

GET/v2/models

Daftar 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"], "...": "..." }
    }
  ]
}
POST/v2/generate

Submit job generate. Body:

FieldTipeWajibKeterangan
modelstring✓Id model dari GET /v2/models (mis. spicy-video). Id lama versi sebelumnya masih diterima.
input.promptstring✓Deskripsi video/image yang diinginkan
input.aspect_ratiostring—Default "16:9"
input.duration_secondsnumber—Default: durasi valid pertama untuk model tsb
input.resolutionstring—Mis. "720p", "1080p"
input.reference_image_urlsstring[]—URL gambar referensi (publik-accessible). Sesuai options.max_ref_images model.
input.reference_video_urlsstring[]—URL video referensi (sesuai options.max_ref_videos).
input.seednumber—Seed untuk reproduksibilitas

Response sukses (200):

{
  "ok": true,
  "id": "b1f2c3d4e5f60718",
  "model": "spicy-video",
  "status": "queued",
  "ms": 812,
  "poll": "/v2/jobs/b1f2c3d4e5f60718"
}
GET/v2/jobs/:id

Poll status job tiap 3–5 detik sampai status terminal.

statusArti
queuedMenunggu diproses
in_progressSedang digenerate
completedSelesai — hasil di data.result_url
failedGagal — lihat data.error
{
  "ok": true,
  "id": "b1f2c3d4e5f60718",
  "model": "spicy-video",
  "status": "completed",
  "data": { "result_url": "https://…/output.mp4" }
}

Error responses

Semua error memakai envelope konsisten: { "ok": false, "error": "<code>", "message": "…" }

HTTPerror codePenyebab
401unauthorizedHeader Authorization hilang / salah format
401invalid_keyKey tidak dikenal
401key_revokedKey sudah direvoke
429quota_exceededKuota bulanan habis
429rate_limitedLewat batas request/menit — cek retry_after_ms
400missing_model, unknown_model, too_many_ref_images, too_many_ref_videosBody request tidak valid
404job_not_foundJob id tidak ada / server pernah restart
502pipeline_errorGagal submit — aman untuk di-retry

Changelog

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.