ByteDance Seedance 2.5 is live on reAPI. Text, images, video and audio in — a 4–30 s clip with synced sound out. One async REST endpoint, per-second billing, failed jobs refunded.
Seedance 2.5 model page → · API reference · Seedance 2.0 · All models
Last updated: 2026-09-30
| Status | Live (generally available on reAPI) |
| Endpoint | POST https://reapi.ai/api/v1/videos/generations → poll GET /api/v1/tasks/{id} |
| Model ids | doubao-seedance-2.5-face (standard) · doubao-seedance-2.5-eco (economy tier) |
| Modes | text-to-video, image-to-video, first/last frame, multimodal reference, video edit / extend |
| Duration | 4–30 s, or -1 to let the model choose |
| Resolution | 480p / 720p / 1080p (Eco: 720p / 1080p) |
| Aspect ratio | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 · adaptive |
| Audio | Synced speech, sound effects and music (generate_audio, on by default) |
| References | up to 30 images · 10 videos · 10 audio tracks per request |
| Prompt | up to 20,000 characters |
| Delivery | mp4 or mov · optional webhook_url instead of polling |
Rates read from each provider's own pricing source on 2026-09-30. No video input; 1 second of generated video.
| Provider | 480p | 720p | 1080p | 10 s @ 720p |
|---|---|---|---|---|
| reAPI — Seedance 2.5 | $0.119 | $0.267 | $0.643 | $2.67 |
| reAPI — Seedance 2.5 Eco | — | $0.201 | $0.347 | $2.01 |
| kie.ai | $0.140 | $0.315 | $0.790 | $3.15 |
| fal.ai | $0.2205 | $0.473 | $1.164 | $4.73 |
- Eco takes the same request body as the standard tier. It starts at 720p, its picture quality may be a little lower, and a job usually takes 50–100 s longer. That's why it costs less.
- Uploaded reference video is billed differently on every provider, reAPI included. On reAPI the per-second rate drops ($0.072 / $0.161 / $0.384 standard; $0.121 / $0.207 Eco), but the bill covers reference seconds + output seconds. When the input contains video, there is also a floor of
⌈5 × duration / 3⌉seconds. - Higgsfield includes Seedance 2.5 in its subscription credit plans. Its pricing page does not list a per-second rate for 2.5, so it isn't in the table.
- Live reAPI rates: reapi.ai/models/seedance-2-5. Those numbers are authoritative if they differ from this table.
Get an API key at reapi.ai/settings/apikeys, then:
# 1. Submit
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer $REAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.5-face",
"prompt": "A barista pours latte art in slow motion, warm cafe light, 35mm film look. She looks up and says \"Your flat white.\"",
"duration": 5,
"resolution": "720p",
"size": "16:9"
}'
# → {"id": "task_...", "status": "processing", ...}
# 2. Poll (polling is free) until status is "completed" or "failed"
curl https://reapi.ai/api/v1/tasks/task_xxx \
-H "Authorization: Bearer $REAPI_API_KEY"
# → {"status": "completed", "output": {"video_urls": ["https://.../0.mp4"]}, ...}import os, time, requests
API = "https://reapi.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REAPI_API_KEY']}"}
task = requests.post(f"{API}/videos/generations", headers=HEADERS, json={
"model": "doubao-seedance-2.5-face",
"prompt": "A red fox trots through fresh snow at dawn, low tracking shot",
"duration": 5,
"resolution": "720p",
"size": "16:9",
}, timeout=30).json()
while True:
t = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
if t["status"] == "completed":
print(t["output"]["video_urls"][0])
break
if t["status"] == "failed":
raise RuntimeError(t["error"])
time.sleep(10)const API = "https://reapi.ai/api/v1";
const headers = {
Authorization: `Bearer ${process.env.REAPI_API_KEY}`,
"Content-Type": "application/json",
};
const task = await fetch(`${API}/videos/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "doubao-seedance-2.5-face",
prompt: "A red fox trots through fresh snow at dawn, low tracking shot",
duration: 5,
resolution: "720p",
size: "16:9",
}),
}).then((r) => r.json());
for (;;) {
const t = await fetch(`${API}/tasks/${task.id}`, { headers }).then((r) => r.json());
if (t.status === "completed") { console.log(t.output.video_urls[0]); break; }
if (t.status === "failed") throw new Error(JSON.stringify(t.error));
await new Promise((r) => setTimeout(r, 10_000));
}Rather not poll? Add "webhook_url": "https://your.app/hook" to the submit body. When the task completes or fails, reAPI POSTs the same JSON the task endpoint returns.
There is no mode parameter. The fields you send decide the mode:
| You send | You get |
|---|---|
prompt only |
Text-to-video |
prompt + image_urls |
Image-to-video / image references |
image_with_roles with first_frame / last_frame |
First/last-frame transition |
any mix of image_urls, video_urls, audio_urls |
Multimodal reference generation (audio-only works too) |
video_urls + omni_reference_task_type: "edit" or "extend" |
Edit or extend an existing clip |
Other useful fields: generate_audio (default true), return_last_frame (chain clips by feeding the last frame into the next call), seed, output_format (mp4 / mov), watermark (default false).
All media inputs are public HTTP(S) URLs; base64 isn't accepted.
The full parameter table is in the API reference.
- Per second of output.
credits = ceil(rate × billable_seconds × 1000), where 1 credit = $0.001. - Failed jobs are refunded in full, automatically.
- Reference video counts. With
video_urls, you pay formax(ceil(reference_seconds) + duration, ceil(5 × duration / 3))seconds. Reference images and audio are free. duration: -1reserves credits at the 30 s cap, then settles to the real length and refunds the difference.
Is Seedance 2.5 available outside China? Yes. reAPI is a global API, and you can sign up and call it from anywhere with a normal API key. You don't need a Volcengine or BytePlus account.
Seedance 2.5 or 2.0?
Seedance 2.5 makes longer clips (4–30 s; 2.0 does 4–15 s) and takes more references per request (30 images / 10 videos / 10 audio, vs 9 / 3 / 3). Seedance 2.0 is still live. It costs less per second (from $0.072/s at 480p) and goes up to 4K. The request shape is the same, so switching usually means changing the model field.
Can I try it without code? Yes. The model page has a browser playground with the same parameters, and it shows the JSON for the request it sends.
Independent developer resource for the Seedance API on reAPI. Not affiliated with, endorsed by, or sponsored by ByteDance, kie.ai, fal.ai or Higgsfield. Model and company names belong to their respective owners. Third-party prices were read from each provider's public pricing source on the date above and may have changed since.
