Search

Search HiAPI models, tools, and resources.

Back to blog
Tutorial5 min read

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.

HiAPI EditorialSeedance 2.0API tutorialVideo generation

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:

ModeSendNotes
Text-to-videoprompt only
Image-to-videofirst_frame_url, optionally last_frame_urlCan't be combined with reference images or video
Reference-guidedreference_image_urls, reference_video_urls, reference_audio_urlsUp to 3 reference videos and 3 audio clips, each set 15 s total at most

Input schema

FieldValuesNotes
promptstring, required
resolution480p / 720p, requiredLeaving it out returns HTTP 400
durationinteger 4–15, required (5 in examples)Seconds
aspect_ratio1:1 4:3 3:4 16:9 9:16 21:9 adaptive, default 16:9
generate_audiodefault trueNative synced audio
first_frame_url / last_frame_urlimage URLjpeg/png/webp/bmp/tiff/gif, 300–6000 px per side, under 30 MB
reference_image_urlsimage URLsUp to 9 images including first/last frames
reference_video_urlsup to 3mp4/mov, 480p or 720p, 2–15 s each, 15 s total
reference_audio_urlsup to 3wav/mp3, 2–15 s each, 15 s total

Pricing

Duration480p ($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.

Generate it with HiAPI

Choose a model, enter your prompt, and see the result.

HiAPI Blog

Related articles

HiAPI

Generate it with HiAPI

Start generating