Video overview
Compare every video generation family HopBase sells, and learn the submit, poll, download, balance, and failure rules they share.
| Item | Value |
|---|---|
| Base URL | https://api.hop-base.com/v1 |
| Submit a task | POST /v1/video/generate |
| Poll a task | GET /v1/video/tasks/{task_id} |
Video generation is asynchronous: submit a task to get a task ID, poll until it finishes, then download the clip before its link expires.
# 1. Submit a task and keep the returned task.id (shaped like vt…)
curl https://api.hop-base.com/v1/video/generate \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5-260628",
"content": [
{
"type": "text",
"text": "An orange cat runs across sunlit grass as the camera follows"
}
]
}'
# 2. Query every 5 seconds until task.status is completed
# The clip URL is in task.outputs
curl https://api.hop-base.com/v1/video/tasks/vt-your-task-id \
-H "Authorization: Bearer sk-your-key"Choose a family
HopBase sells six video model families. Every family follows the same async flow below: submit → poll → download.
| Family | Resolutions | Duration (s) | References | Audio | Official price |
|---|---|---|---|---|---|
| Seedance Multimodal-reference video; overseas 2.0 Standard is the only 4K option | 480p–1080p, 4K | 2.0: 4–15; 2.5: 4–30 | Image · video · audio | generate_audio | $2.06from/ 1M tokens |
| Kling First/last frames, subject references, motion control, avatar, and lip sync | 720p–4K, per model | Per model | Image · video | Audio-capable models | $0.0441from/ second |
| MiniMax Hailuo 24 FPS native stereo; dialogue and narration generated with the picture | H3: 768P / 2K; H3-Max: 480P / 768P; H3-SelfHosted: 480P / 768P / 1080P / 2K / 4K | H3: 4-15; H3-Max: 5-15; H3-SelfHosted: 4-15 | H3: image · video · audio | Built in | $0.05from/ second |
| Wan 3.0 References images, video, audio, and documents together | 480P / 720P / 1080P | 2-30 | Image · video · audio · document | audio switch, same price | $0.0441from/ second |
| HappyHorse 1.1 Text-to-video, first-frame image-to-video, reference-image video | 480P / 720P / 1080P | 3-15 | First frame or reference images | — | $0.0662from/ second |
| Grok Imagine Text-to-video with optional reference images | 480p / 720p / 1080p | 1-15 | Reference images only | — | $0.08from/ second |
The price column shows each family's lowest starting tier; full tiers are on each family page and the model cards, and special modes such as Kling lip sync are priced separately. Your own rate is the one shown in the signed-in Model Plaza.
Model IDs and groups
Each family sits in its own group, so call it with a key that includes that group.
| Family | Model IDs | Group |
|---|---|---|
| Seedance 2.5 / 2.0 | Overseas: dreamina-seedance-2-5-260628, dreamina-seedance-2-0-*China: doubao-seedance-2-*-a | Seedance overseas + Seedream Seedance China (Doubao) |
| Kling | kling-v3, kling-v3-omni, kling-v3-turbo, and more | Kling Official |
| MiniMax Hailuo | MiniMax-H3MiniMax-H3-MaxMiniMax-H3-SelfHosted | MiniMax H3 Official MiniMax H3 Max Official MiniMax H3 Self-hosted MiniMax H3 Max Cloud |
| Wan 3.0 | wan3.0-video | Wan 3.0 Official |
| HappyHorse 1.1 | happyhorse-1.1-t2v, happyhorse-1.1-i2v, happyhorse-1.1-r2v | HappyHorse 1.1 Official |
| Grok Imagine | grok-imagine-video-1.5 | Grok Video |
Kling also has motion control, avatar, and lip sync variants; see the Kling page. Each family's minimum request and result location:
| Family | Minimum request | Submit returns | Read when complete |
|---|---|---|---|
| Seedance | model + non-empty content[] | 200, task.id (vt…) | task.outputs |
| Grok Imagine | model + prompt / content + resolution | 200, task.id (vt…) | task.outputs |
| MiniMax Hailuo | model + content + resolution + duration | 202, id (mmt…) | outputs |
| Kling | model + prompt or images[] / videos[] | 202, id (kt…) | outputs |
| Wan 3.0 / HappyHorse | model + input; parameters optional | 200, output.task_id | output.video_url |
MiniMax text-only requests also require ratio. Kling's special modes are on the Kling page. Seedance content[] usually carries text and image_url items.
Task flow: submit → poll → download
Every video model follows these three steps.
Submit
| Family | Submit | Query |
|---|---|---|
| Seedance, Grok Imagine, MiniMax, Kling | POST /v1/video/generate | GET /v1/video/tasks/{task_id} |
| Wan 3.0, HappyHorse | POST /api/v1/services/aigc/video-generation/video-synthesis | GET /api/v1/tasks/{task_id} |
HopBase hands each request to the right family based on its model and the key's groups. Request bodies and status values differ by family, so follow each family's page. Families return different success codes on submit, so treat any 2xx as a successful submission.
A key reaches only the families whose groups it includes; one key can include several video groups. Call GET /v1/models with the key you intend to use and take the complete model ID from the response. Model IDs are exact: an unknown name is rejected, never routed to a near match.
Poll
Query the task ID returned on submit until the task succeeds or fails. Seedance, Grok Imagine, MiniMax, and Kling also have a task list:
GET /v1/video/tasks?page=1&limit=20Wan 3.0 and HappyHorse have no list endpoint, so keep track of task IDs on your side.
Download
Output URLs are signed URLs on api.hop-base.com, valid from the moment the task completes:
| Family | Result link lifetime |
|---|---|
| Seedance, Grok Imagine, Kling, MiniMax, Wan 3.0, HappyHorse | 24 hours |
Querying again returns the same URL without extending it, and an expired URL returns 410. Download and save results promptly.
Balance and billing
A video submit checks available balance minus the estimates for in-flight tasks minus this request's estimate. If that falls short you get a 402 with code insufficient_balance. The estimate is released automatically when the task ends.
Insufficient balance: available $X, reserved in flight $Y, this request estimated $Z
Insufficient quota: … # an enterprise member with a spending quota; the message starts with thisKling lip sync cannot be estimated and reserves nothing.
Failed video tasks are never billed. Once a task is finished, the single-task query also returns a top-level usage:
| Field | Meaning |
|---|---|
usage.cost | The charge for the task in CNY (the same charge as usage.cost_usd) |
usage.cost_usd | The USD amount actually deducted from your balance for the task, the same as its usage record |
usage.currency | The currency of usage.cost, always CNY |
A failed task that was not charged shows 0. The field is absent while the task is running, and a single-task query returns it only to the key that created the task; amounts in the examples are illustrative. In the task list (GET /v1/video/tasks without a task ID), every finished task carries the same cost, cost_usd, and currency in its usage; the list covers the whole account, so tasks created by other keys of the same account carry the amount too.
Official list prices are on the pricing page. Your own rate is the one shown in the signed-in Model Plaza, and each request's actual charge is on the Usage page in the console.
Failures, timeouts, and cancellation
A 2xx submit only means the task was accepted. A failed generation still queries as HTTP 200 with a failed status and an English reason, but no stable error code.
Seedance puts the reason in task.error.message; for other families, see their pages. The console Usage page shows the failure category and a suggested fix. See Errors.
The time limit for running tasks differs by family; see each family's page. A Seedance task still unfinished 24 hours after creation is failed automatically with this message:
The task did not finish within 24 hours and was terminated automaticallyVideo tasks cannot be cancelled.
Reference media comparison
How many references each model accepts:
| Model | Field | Count limit |
|---|---|---|
| Seedance 2.0 (China/overseas, Standard/Fast/Mini) | content | images ≤9 · videos ≤3 · audio ≤3 |
| Seedance 2.5 (China/overseas) | content | images ≤30 · videos ≤10 · audio ≤10 |
| Grok Imagine video | Top-level reference_images[] | Not live-verified; not the 2-image edit limit |
| MiniMax-H3 | content | images ≤9 · videos ≤3 · audio ≤3, ≤12 total |
| MiniMax-H3-SelfHosted | content | images ≤9 · videos ≤3 · audio ≤3, ≤12 total |
| MiniMax-H3-Max | content | Text or at most 1 first and 1 last frame |
| All Kling video variants | images[] / videos[] | Per variant; see the Kling page |
| Wan 3.0 | input.media[] | images ≤10 · videos ≤5 · audio ≤5 |
| HappyHorse t2v / i2v / r2v | input.media[] | t2v none · i2v exactly 1 first frame · r2v 1–9 reference images |
- Seedance takes at most 2 first/last-frame images; on 2.0, frame mode is separate from reference mode.
- On MiniMax-H3, frames and references are exclusive; H3-Max takes no reference_* inputs.
- Wan 3.0 takes ≤1 document or webpage (exclusive), and frames exclude the reference group.
- Kling usage and special modes depend on the variant's contract; see the Kling page.
- Grok Imagine content is text only.
Which encodings each model accepts:
| Model | URL | Data URL | Asset ID |
|---|---|---|---|
| Seedance 2.0 | HTTP(S) | Image/audio yes, video no | Ready asset:// |
| Seedance 2.5 | HTTP(S) | Image/audio under gateway rules, video no | No library IDs |
| Grok Imagine video | Public HTTP(S) only | No | No asset:// |
| MiniMax-H3 | HTTP(S) | Full Data URL | No mm_file:// or asset:// |
| MiniMax-H3-Max | Image HTTP(S) | Full Data URL | — |
| MiniMax-H3-SelfHosted | Public HTTP(S) | Image Data URL only | No mm_file:// or asset:// |
| Kling | One HTTP(S) url per item | No | Usable file_id (instead of url); no asset:// |
| Wan 3.0 | HTTP(S); link requires a web URL | Full Data URL | No oss:// or asset:// |
| HappyHorse | HTTP(S) | Image Data URL | No oss:// |
The Seedance 2.0 library registration URL accepts HTTP(S) only. On MiniMax-H3-Max, encoding does not bypass type restrictions. HappyHorse takes no video/audio references.
A Data URL is data:media-MIME;base64,encoded-content, not raw base64.
"Accepted" in these tables means supported by the request contract/gateway, not live generation verified for every model using the current key.
Counts, per-file specifications, cumulative reference durations, and total JSON size apply together. HTTP 2xx acceptance does not mean final task success.
Next steps
- Seedance: Seedance 2.0 / 2.5 parameters, responses, and errors
- Kling: Kling video parameters and task modes
- API reference: Submit a video task: every request field for each family
- Concurrency, timeouts, and billing: concurrency caps, timeouts, and billing rules
- Error codes and retries: what each error code means and whether to retry