HiAPI
Blog

Tutorial

Seedance 2.0 Mini API Guide: $0.0272/s Video in curl and Python

The cheapest Seedance: text-to-video, image-to-video and reference mode in one model, with working code, every input, and per-second pricing.

Oct 15, 2026 5
Seedance 2.0 Mini API Guide: $0.0272/s Video in curl and Python
480p / second
$0.0272
720p / second
$0.0586
5 s at 480p
$0.136

TL;DR

  • seedance-2.0-mini is 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.
  • resolution is 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 to input and deduplicate by taskId.
  • Save the output right away: output[0].url is temporary.
  • Send an Idempotency-Key header: 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.

Related articles

View all articles →

Start building with persistent AI artifacts

Get your API key and call image, video and audio models through one task-based API.

Read the API docs