The short answer: you can call Seedance, Kling, MiniMax Hailuo H3 and Wan 3.0 from outside China without opening an account on each Chinese platform. HopBase exposes all of them behind one API key, one base URL (https://api.hop-base.com) and USD billing. Seedance, Kling and Hailuo share the same asynchronous pattern: POST /v1/video/generate to submit, then GET /v1/video/tasks/{task_id} to poll until the status is completed or failed. Wan 3.0 and HappyHorse keep their original request format on their original paths, so existing SDK code only needs a new base URL and key. Each request body follows that model family's own schema, so only the submit-and-poll loop is shared. Failed tasks are not billed, result links are valid for 24 hours, and the actual USD charge for every finished task is returned in usage.cost_usd. Seedance comes in two sets of IDs: overseas (dreamina-seedance-*) and China (doubao-seedance-*-a).
Why Chinese video models are awkward to reach from abroad
The strongest video models of 2026 are disproportionately Chinese: ByteDance's Seedance, Kuaishou's Kling, MiniMax's Hailuo and Alibaba's Wan. If you are building a video product in the US, Europe or Southeast Asia, getting API access to all of them is not one sign-up but four separate projects:
- Separate regional platforms. ByteDance runs Volcano Engine for mainland China and BytePlus for international customers, and the model catalogue, IDs and release timing differ between the two. Kling, MiniMax and Alibaba each have their own developer consoles too.
- Account verification and payment. China-region consoles typically expect real-name verification and CNY payment methods. International consoles are easier, but each one is still its own contract, top-up balance and invoice.
- Four request schemas. Seedance uses a
content[]array, Kling usesprompt+images[]+videos[], Hailuo H3 uses MiniMax's v2 body (also acontent[]array, with different rules), and Wan uses the DashScopeinput/parametersshape. Polling, error formats and result-link lifetimes also differ. - Four billing units. Seedance bills per million video tokens; Kling, Hailuo and Wan bill per output second at a resolution tier. Comparing cost per clip means normalising all of them yourself.
A gateway does not change the models. It removes the account, payment and polling work, so your code deals with one key, one balance and one task loop.
Which models you can call, and at what list price
The table below lists the families available today. Where our pricing page shows a USD list price, it is included; for the others, check the live pricing. Your own rate is shown in the signed-in model catalog, and every task reports its actual charge.
| Family | Example model IDs | Output | Billing unit | Entry list price |
|---|---|---|---|---|
| Seedance 2.5 / 2.0 (ByteDance) | dreamina-seedance-2-5-260628, dreamina-seedance-2-0-260128, dreamina-seedance-2-0-fast-260128, dreamina-seedance-2-0-mini-260615 | 480p-1080p (1080p on overseas 2.5 depends on your group); 4K only on overseas 2.0 Standard; 2.0: 4-15 s, 2.5: 4-30 s | Per 1M video tokens | 2.0 Mini: $3.50 / 1M tokens (no video input) |
| Kling (Kuaishou) | kling-v3, kling-v3-omni, kling-v3-turbo, kling-v2-5-turbo | 720p-4K by model; 3-15 s on v3 | Per second | See live pricing |
| Hailuo H3 (MiniMax) | MiniMax-H3, MiniMax-H3-Max | H3: 768P / 2K, 4-15 s; H3-Max: 480P / 768P, 5-15 s | Per second | MiniMax-H3-Max 480P: $0.05 / s |
| Wan 3.0 / HappyHorse 1.1 (Alibaba) | wan3.0-video, happyhorse-1.1-t2v, -i2v, -r2v | 480P-1080P | Per second | See live pricing |
Two worked examples at list price: a 6-second 768P clip on MiniMax-H3 is 6 × $0.08 = $0.48, and a 5-second 480P clip on MiniMax-H3-Max is 5 × $0.05 = $0.25. Seedance cost depends on resolution, duration and whether you pass a reference video, so check the Seedance guide and the live pricing before you budget at scale.
Step 1: one key, several video groups
Sign up at api.hop-base.com, open API Keys and create a key. Each model family lives in its own group, and one key can include up to 10 groups, so add Seedance, Kling, Hailuo and Wan to the same key. Then confirm what the key can reach:
export HOPBASE_API_KEY=sk-your-key
curl https://api.hop-base.com/v1/models \
-H "Authorization: Bearer $HOPBASE_API_KEY"
Only use IDs that this call returns. Model IDs are matched exactly: an unknown name is rejected and never routed to a similar model.
Step 2: submit a task (three schemas, one endpoint)
Seedance 2.5 (overseas)
curl https://api.hop-base.com/v1/video/generate \
-H "Authorization: Bearer $HOPBASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5-260628",
"content": [{"type": "text", "text": "A barista pours latte art in a sunlit cafe, slow push-in"}],
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": false
}'
Kling v3
curl https://api.hop-base.com/v1/video/generate \
-H "Authorization: Bearer $HOPBASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3",
"prompt": "A red sneaker rotates on a white turntable, studio lighting",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "9:16"
}'
Hailuo H3
curl https://api.hop-base.com/v1/video/generate \
-H "Authorization: Bearer $HOPBASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [{"type": "text", "text": "Aerial drone shot over snow mountains above a sea of clouds"}],
"resolution": "768P",
"duration": 6,
"ratio": "16:9"
}'
Use each family's own field names. Kling and Hailuo reject OpenAI-style fields such as size or n with a 400 before any task is created, and nothing is billed. Seedance is the exception to watch: size, seconds, n and aspect_ratio are ignored without an error, and the task runs at the default duration and 720p, so always send duration, resolution and ratio. Wan 3.0 and HappyHorse use POST /api/v1/services/aigc/video-generation/video-synthesis with input and parameters, and are polled at GET /api/v1/tasks/{task_id}; see the Wan and HappyHorse guide.
Step 3: one polling loop for all of them
Seedance responses wrap the task in a task object, while Kling and Hailuo return top-level fields. In-progress status values differ (pending / processing on Seedance, queued / processing on Kling and Hailuo), but the two final states are the same everywhere: completed and failed. A small helper absorbs the difference:
import os, time, requests
BASE = "https://api.hop-base.com"
HEADERS = {"Authorization": f"Bearer {os.environ['HOPBASE_API_KEY']}"}
def submit(body: dict) -> str:
r = requests.post(f"{BASE}/v1/video/generate", json=body, headers=HEADERS, timeout=60)
r.raise_for_status() # Seedance returns 200, Kling and Hailuo return 202
data = r.json()
return data.get("task", data)["id"]
def wait(task_id: str, every: int = 5) -> dict:
while True:
r = requests.get(f"{BASE}/v1/video/tasks/{task_id}", headers=HEADERS, timeout=30)
r.raise_for_status()
data = r.json()
task = data.get("task", data)
if task.get("status") in ("completed", "failed"):
return data
time.sleep(every)
task_id = submit({
"model": "kling-v3",
"prompt": "A red sneaker rotates on a white turntable, studio lighting",
"duration": 5, "resolution": "720p", "aspect_ratio": "9:16",
})
result = wait(task_id)
task = result.get("task", result)
print(task["status"], task.get("outputs"))
print("charged (USD):", result.get("usage", {}).get("cost_usd"))
We ran this exact helper on 2026-10-29 against kling-v2-5-turbo, MiniMax-H3-Max and dreamina-seedance-2-0-mini-260615 with no per-family changes: all three completed and printed their charge from usage.cost_usd, which sits at the top level of the response for every family. Polling is free and does not count against your concurrency limit. Download outputs promptly: every result link is a signed URL on api.hop-base.com, valid for 24 hours after the task completes, and an expired link returns 410.
Overseas vs China Seedance IDs
Seedance is the one family with two sets of IDs:
- Overseas:
dreamina-seedance-2-5-260628,dreamina-seedance-2-0-260128,-fast-260128,-mini-260615. The 2.0 Standard model is the only Seedance option with 4K output. - China:
doubao-seedance-2-5-260628-a,doubao-seedance-2-0-260128-a,-fast-260128-a,-mini-260615-a. These have no 4K tier, and they need a key that includes the Seedance China group: a key with only the overseas group cannot calldoubao-*IDs.
The request format, endpoints and polling code are the same, so switching is a change of key and model ID. Reference assets cannot be reused across groups, so upload them again with the other key.
Gotchas that cost teams a day
- Real-person reference images on Seedance. An image of a real person passed inline (URL or data URL) may be rejected at submission with
input_sensitive, and nothing is billed. On Seedance 2.0, upload it first withPOST /v1/sd/assetsand reference it asasset://<id>. Seedance 2.5 has no asset route, so it cannot take real-person reference images yet. - Balance is reserved at submission. Each video submit reserves its estimated cost. A positive balance can still return 402
insufficient_balancewhen several large tasks are in flight. The reservation is released when the task ends. - Concurrency is per account. The default is 5 requests in flight, and extra requests get 429 immediately rather than waiting in a queue. Video submits count; polling does not.
- Timeouts. Unfinished tasks fail automatically after 24 hours on Seedance and after 2 hours on Kling, Hailuo and Wan. Failed tasks are not billed.
- Do not resubmit to retry a slow task. Tasks cannot be cancelled, and every accepted submission is a separate billed task. Keep polling the ID you already have.
How to choose a way in
Going direct to each maker's international platform makes sense if you only need one family and want to deal with that vendor directly. If you need several, compare options on facts you can check:
- Are the exact model versions you need listed, with exact IDs (for example Seedance 2.5 and Kling v3)?
- Does a failed task cost nothing, and can you read the real charge per task through the API?
- How long do result links last, and what happens after they expire?
- Can one key cover several families with one balance, and can you cap spend per key?
- Is there documentation for each family's parameter limits, not just a model card?
FAQ
Can I use Seedance from the US or Europe without a BytePlus or Volcano Engine account?
Yes. With a HopBase key that includes the Seedance overseas group, you call dreamina-seedance-2-5-260628 and the other overseas IDs at https://api.hop-base.com/v1/video/generate. You do not need a ByteDance account.
Do Kling, Seedance and Hailuo use the same request body?
No. They share the submit endpoint, the polling endpoint and the billing rules, but each family keeps its own body: Seedance uses content[] with ratio, Kling uses prompt/images/videos with aspect_ratio, and Hailuo H3 uses MiniMax's v2 body.
Am I charged when a video fails?
No. Failed video tasks are not billed, and requests rejected at submission are not billed. A finished task's usage.cost_usd shows 0 for an uncharged failure.
How long are generated videos available?
Result URLs are valid for 24 hours from task completion for every family. Querying again returns the same URL without extending it, so copy outputs to your own storage.
Where do I see the price I will actually pay?
List prices are on hop-base.com/pricing. Your account's rate is in the signed-in model catalog, and every finished task reports its real charge in usage.cost_usd. Full parameter references are in the video overview, Kling, Seedance and MiniMax Hailuo docs.