TL;DR
seedance-2.0-miniis the lightweight version of ByteDance's Seedance 2.0. One model id handles text-to-video, image-to-video (first frame or first + last frame), and reference-guided video, with native synced audio. Try it on the model page.- It is one of the cheapest video models on HiAPI: $0.0272 per second at 480p and $0.0586 at 720p. A 5-second 480p clip costs $0.136.
resolutionis required, and the request fails without it. The rest of this guide covers working curl and Python, every input, and what each mode costs.
What it produces
Three text-to-video clips, each 5 seconds at 480p ($0.136 each).
A slow dolly-in toward a steaming bowl of ramen on a worn wooden counter in a dim izakaya. Warm amber lantern light, soft volumetric haze, gentle steam curling upward, shallow depth of field, the broth surface rippling slightly. Cinematic, photoreal.
Generate with this prompt → (5 seconds, 480p)
seedance-2.0-mini, text-to-video, 480p, 5 seconds, $0.136.
A cozy fireplace crackling in a log cabin at night, orange embers popping and drifting, a cast-iron kettle gently steaming on the hearth, rain streaking the dark window behind. Static locked-off shot. Native audio: crackling fire, soft rain on glass, a low wind.
Generate with this prompt → (5 seconds, 480p)
seedance-2.0-mini, text-to-video, 480p, 5 seconds, with native audio, $0.136.
The audio in this clip (crackling fire, rain, wind) comes from the last sentence of the prompt. Mini generates sound by default, but it follows what you describe.
A border collie sprints across a sunlit beach toward the camera, kicking up wet sand, ears flapping, tongue out, water spray catching the low golden light. Tracking shot moving backward to keep the dog centered, motion blur on the paws, joyful energy, photoreal.
Generate with this prompt → (5 seconds, 480p)
seedance-2.0-mini, text-to-video, 480p, 5 seconds, $0.136.
curl: your first clip
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-mini",
"input": {
"prompt": "A slow dolly-in toward a steaming bowl of ramen in a dim izakaya, warm lantern light",
"resolution": "480p",
"duration": 5,
"aspect_ratio": "16:9"
}
}'
A 5-second 480p clip, $0.136. The response contains data.taskId. Poll GET /v1/tasks/{taskId} until status is success, then download output[0].url.
Python: submit, poll, download
# pip install requests; export HIAPI_KEY=your-key
import os, time, uuid, requests
KEY = os.environ["HIAPI_KEY"]
H = {"Authorization": f"Bearer {KEY}"}
def generate(timeout_s=900, **params):
body = {"model": "seedance-2.0-mini", "input": params}
# Reuse the same Idempotency-Key if you retry this submission, so it is billed once
headers = {**H, "Idempotency-Key": str(uuid.uuid4())}
r = requests.post("https://api.hiapi.ai/v1/tasks", json=body, headers=headers, timeout=30)
r.raise_for_status()
res = r.json()
if res.get("code") != 200:
raise RuntimeError(res)
task_id = res["data"]["taskId"]
deadline = time.time() + timeout_s
while time.time() < deadline:
d = requests.get(f"https://api.hiapi.ai/v1/tasks/{task_id}", headers=H, timeout=30).json()["data"]
if d["status"] == "success":
return d["output"][0]["url"]
if d["status"] == "fail":
raise RuntimeError(d)
time.sleep(10)
raise TimeoutError(task_id)
# Image-to-video: animate a product photo, 5 s at 720p ($0.293)
url = generate(
prompt="The camera slowly pulls back as mist drifts between the peaks, golden morning light",
first_frame_url="https://your-cdn.example.com/first-frame.jpg",
resolution="720p", duration=5, generate_audio=False,
)
with open("clip.mp4", "wb") as f:
f.write(requests.get(url).content)
One model, three modes
The inputs you send decide the mode:
| Mode | Send | Notes |
|---|---|---|
| Text-to-video | prompt only | |
| Image-to-video | first_frame_url, optionally last_frame_url | Can't be combined with reference images or video |
| Reference-guided | reference_image_urls, reference_video_urls, reference_audio_urls | Up to 3 reference videos and 3 audio clips, each set 15 s total at most |
Input schema
| Field | Values | Notes |
|---|---|---|
prompt | string, required | |
resolution | 480p / 720p, required | Leaving it out returns HTTP 400 |
duration | integer 4–15, required (5 in examples) | Seconds |
aspect_ratio | 1:1 4:3 3:4 16:9 9:16 21:9 adaptive, default 16:9 | |
generate_audio | default true | Native synced audio |
first_frame_url / last_frame_url | image URL | jpeg/png/webp/bmp/tiff/gif, 300–6000 px per side, under 30 MB |
reference_image_urls | image URLs | Up to 9 images including first/last frames |
reference_video_urls | up to 3 | mp4/mov, 480p or 720p, 2–15 s each, 15 s total |
reference_audio_urls | up to 3 | wav/mp3, 2–15 s each, 15 s total |
Pricing
| Duration | 480p ($0.0272/s) | 720p ($0.0586/s) |
|---|---|---|
| 4 s | $0.1088 | $0.2344 |
| 5 s | $0.136 | $0.293 |
| 10 s | $0.272 | $0.586 |
| 15 s | $0.408 | $0.879 |
When you send reference_video_urls, a separate rate applies: $0.0172 per second at 480p and $0.0358 at 720p. $10 buys about 367 seconds at 480p. Draft at 480p, then render the keeper at 720p, or on Seedance 2.0 or Seedance 2.5 when you need 1080p.
Before you ship
- Use a callback instead of polling: add
"callback": {"url": "https://your-app.example.com/hiapi/callback"}next toinputand deduplicate bytaskId. - Save the output right away:
output[0].urlis temporary. - Send an
Idempotency-Keyheader: retries with the same key create the task only once. - Failed tasks are refunded.
FAQ
Seedance 2.0 Mini or Seedance 2.0?
Mini costs about a fifth as much at 480p ($0.0272 vs $0.136 per second) and tops out at 720p. Use Mini for drafts, high-volume social clips, and prompt testing; switch to Seedance 2.0 for 1080p or 4K.
Why does my request fail without resolution?
On this model resolution is required. Send "480p" or "720p" explicitly.
Does it make sound?
Yes, by default. Describe the sounds in the prompt, or set generate_audio: false for a silent clip.
How long can a clip be?
4 to 15 seconds.
For more prompt patterns, see Seedance 2.0 Mini prompt recipes, or run the ramen prompt on the model page.





