Seedance 2.5 30-second clip via API: the request, poll and price

Send model seedance-2.5 with duration 30 to POST /v1/videos on Sume, poll the job, and expect about $17 at 720p 16:9. Request and Python poll loop.

5 min readSume
All posts

Send model: "seedance-2.5" and duration: 30 to POST https://api.sume.com/v1/videos, then poll the returned polling_url until the job is completed. At 720p and 16:9 the 30-second clip costs about $17.33 on Sume.

ByteDance launched Seedance 2.5 on 2026-07-31 and says it generates up to 30 seconds per generation, with multi-round extensions. Sume lists the model as seedance-2.5 with a 4 to 30 second range, so a single request can ask for the full length.

The request

The route is asynchronous: you receive a job id and a polling URL immediately, then download from unsigned_urls[0] once the status is completed. Send an Idempotency-Key so a retry returns the original job instead of a second charge.

curl -X POST https://api.sume.com/v1/videos \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: seedance-2.5-30s-001" \
  -d '{"model": "seedance-2.5", "prompt": "A chef plates a dish, slow push-in, kitchen ambience", "duration": 30, "resolution": "720p", "aspect_ratio": "16:9"}'

Poll and download

The docs suggest a moderate polling interval of about 30 seconds. The poll response carries usage.cost, the Sume billable amount.

import os, time, requests

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
job = requests.post(
    "https://api.sume.com/v1/videos",
    headers=H,
    json={"model": "seedance-2.5", "prompt": "A chef plates a dish, kitchen ambience",
          "duration": 30, "resolution": "720p", "aspect_ratio": "16:9"},
).json()

while True:
    time.sleep(30)
    s = requests.get(job["polling_url"], headers=H).json()
    if s["status"] == "completed":
        print(s["unsigned_urls"][0], s["usage"]["cost"])
        break
    if s["status"] in ("failed", "cancelled"):
        print(s.get("error", s["status"]))
        break

What the 30 seconds cost

Sume bills Seedance on video tokens: width x height x seconds x 24 fps / 1024, at the provider list rate times 1.25.

Seedance 2.5 on Sume, 30 s, 16:9, no reference video (read 2026-10-07)
ResolutionPrice for 30 s
480p$8.06
720p$17.33
1080p$42.65

Before you submit

Pick 480p while you iterate on the prompt, then re-run the winner at 1080p.

  • Check GET /v1/videos/models for the live range; this post reflects the docs on 2026-10-07.
  • bitrate_mode is not offered on Seedance 2.5.
  • Sume reserves the price at submit and reports the final amount in usage.cost.

Why 30 seconds in one request matters

Before 30-second models, a half-minute spot meant two or three 10 to 15 second renders stitched in an editor, with a visible seam where the character or lighting drifted. A single duration: 30 job keeps one continuous take, and ByteDance's launch post frames Seedance 2.5 around exactly this: narrative coherence across longer clips with flexible referencing.

The cost of that convenience is a larger single charge, which is why the price table above matters. A failed 30-second job at 1080p is the most expensive mistake you can make on this route.

  • Draft at 480p for about $8.06 per 30 seconds, then re-run only the approved prompt at higher resolution.
  • Keep the Idempotency-Key per creative, not per attempt.
  • Store usage.cost from the poll response next to the prompt so you can reconcile with the wallet.

Choosing aspect ratio and audio

Seedance 2.5 on Sume accepts 21:9, 16:9, 4:3, 1:1, 3:4 and 9:16, plus auto and adaptive. Vertical 9:16 at 720p is 720x1280, the same pixel area as 16:9, so the price is effectively the same for a vertical social clip.

Audio is optional through generate_audio. If the clip is a silent b-roll plate, switch it off and keep the track for the edit.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume