Seedance 2.5 API: 30-second clips, pricing and code
Seedance 2.5 is the newest Seedance model in the Revana catalogue. It makes clips up to 30 seconds long from text, images or video. This guide covers how it differs from Seedance 2.0, what it costs, and how to call it.
What Seedance 2.5 adds over Seedance 2.0
Seedance 2.5 takes the same request format as the 2.0 family and covers the same kinds of jobs: text to video with sound, start and end frames, and reference images. The differences that matter when you build on it are practical ones, and they are all visible in the catalogue:
| Seedance 2.0 | Seedance 2.5 | |
|---|---|---|
| Tasks | text to video, image to video, first and last frame and reference images | text to video, image to video, first and last frame, reference images and video to video |
| Clip length | 4 to 15 s | 4 to 30 s |
| Resolution | 480p, 720p, 1080p and 4K | 480p, 720p and 1080p |
| Reference images | up to 9 | up to 30 |
| Aspect ratio | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 or adaptive | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 or adaptive |
| Price from | $0.08 / s | $0.11 / s |
| Routes | three routes | five routes |
In short: Seedance 2.5 goes up to 30 seconds in a single clip against 15 for Seedance 2.0, accepts 30 reference images instead of 9, and adds video to video. Seedance 2.0 is still the one to use if you need 4K output. For clips of 15 seconds or less, compare the per-second prices before you choose: at 720p, Seedance 2.0 lists $0.15 and Seedance 2.5 lists $0.20.
We do not publish quality scores for either model. The best way to choose is to run the same three or four prompts from your own product through both and compare.
When a 30-second clip helps
- One continuous take. A walkthrough, a product demo or a scene with dialogue that would show a visible seam if you stitched two 15 second clips together.
- Full ad spots. Many social ad formats run 15 to 30 seconds. One generation can cover the whole spot, with the sound designed across it.
- Fewer joins in long edits. Even when you cut clips together, longer pieces mean fewer places where a character or the lighting can drift.
If your clips are 15 seconds or shorter, check whether Seedance 2.0 covers the job first: you may not need the longer limit.
Seedance 2.5 pricing (October 2026)
Seedance 2.5 is billed per second of output, from $0.11 per second at 480p. The table shows the listed rate and what a 10 second and a 30 second clip cost at each resolution.
| Resolution | Per second | 10 s clip | 30 s clip | With video input |
|---|---|---|---|---|
| 480p | $0.11 | $1.10 | $3.30 | $0.06 / s |
| 720p | $0.20 | $2.00 | $6.00 | $0.12 / s |
| 1080p | $0.55 | $5.50 | $16.50 | $0.34 / s |
The price is the same with sound on or off. Jobs that use a video as input are billed at the lower with video input rate, but the billed seconds include the input: output seconds plus the length of the input clip. A 10 second 720p clip made from a 10 second source video is billed as 20 seconds, $2.40, against $2.00 for a 10 second clip from a text prompt.
Each job's price is held from your balance when you submit it and charged only if the job succeeds. A failed job releases the hold, so a 30 second job that fails costs nothing. The exact charge comes back as cost_usd; credit packs and the full table are on the pricing page.
Generate a Seedance 2.5 video
Send POST /v1/generations with the model id seedance-2.5. The response is a 202 with a generation id; poll it until the status is succeeded or failed. This 10 second 720p clip with sound costs $2.00.
export REVANA_API_KEY="sr_live_..."
# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
-H "Authorization: Bearer $REVANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"input": {
"prompt": "A street food vendor in a night market prepares noodles, wok flames rising. Shot 1: wide shot of the busy stall. Shot 2: close-up of noodles tossed in the wok. Shot 3: a customer takes the first bite and smiles. Sizzling wok, crowd chatter, distant music.",
"resolution": "720p",
"duration": 10,
"aspect_ratio": "16:9",
"audio": true
},
"max_cost_usd": 3
}'
# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JBX7Q2M4 \
-H "Authorization: Bearer $REVANA_API_KEY"import os
import time
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
resp = requests.post(f"{API}/generations", headers=HEADERS, json={
"model": "seedance-2.5",
"input": {
"prompt": "A street food vendor in a night market prepares noodles, wok flames rising. Shot 1: wide shot of the busy stall. Shot 2: close-up of noodles tossed in the wok. Shot 3: a customer takes the first bite and smiles. Sizzling wok, crowd chatter, distant music.",
"resolution": "720p",
"duration": 10,
"aspect_ratio": "16:9",
"audio": True,
},
"max_cost_usd": 3,
})
resp.raise_for_status()
job = resp.json()
while job["status"] in ("queued", "running"):
time.sleep(5)
job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()
if job["status"] == "succeeded":
print(job["output"]["urls"], job["cost_usd"])
else:
print("Failed:", job["error"])// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
"Content-Type": "application/json",
};
const res = await fetch(`${API}/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "seedance-2.5",
input: {
prompt: "A street food vendor in a night market prepares noodles, wok flames rising. Shot 1: wide shot of the busy stall. Shot 2: close-up of noodles tossed in the wok. Shot 3: a customer takes the first bite and smiles. Sizzling wok, crowd chatter, distant music.",
resolution: "720p",
duration: 10,
aspect_ratio: "16:9",
audio: true,
},
max_cost_usd: 3,
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 5000));
job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}
if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);Long jobs take longer to finish than short ones, so poll every five to ten seconds rather than hammering the endpoint. A finished job looks like this:
{
"id": "gen_01JBX7Q2M4",
"model": "seedance-2.5",
"status": "succeeded",
"output": {
"urls": [
"https://cdn.revana.si/g/gen_01JBX7Q2M4/0.mp4"
]
},
"cost_usd": 2,
"attempts": 1,
"error": null,
"created_at": "2026-10-19T14:02:11Z",
"completed_at": "2026-10-19T14:03:47Z"
}A 30-second vertical clip with references
For a full-length vertical spot, send the brand assets as reference images and describe the shots in order. At 1080p this job costs $16.50; set max_cost_usd above that so it is not skipped. The same request at 480p costs $3.30, which is a cheaper way to check the structure before you commit to the full resolution.
{
"model": "seedance-2.5",
"input": {
"prompt": "A 30 second vertical ad. Shot 1: the runner from the first image laces the shoe from the second image at dawn. Shot 2: tracking shot as she runs along the seafront. Shot 3: close-up of the shoe hitting wet sand. Shot 4: she stops, breathing hard, and looks out to sea. Steady electronic beat, waves, footsteps.",
"image_urls": [
"https://example.com/runner.jpg",
"https://example.com/shoe.jpg"
],
"resolution": "1080p",
"duration": 30,
"aspect_ratio": "9:16",
"audio": true
},
"max_cost_usd": 20
}Use start and end frames (image_url, end_image_url) or reference images (image_urls) in one request, not both: they are separate modes, and a request that mixes them may be rejected with a 422 before anything is charged.
Prompt tips for long clips
- Write a shot list, not a paragraph. Number the shots and give each one a subject, an action and a camera move. Over 30 seconds, structure matters more than adjectives.
- Keep the cast small. One or two characters stay consistent more reliably than a crowd, especially across several cuts.
- Lean on references. With up to 30 images you can pin the character from more than one angle, the product, the location and the colour palette. Refer to each by its position, such as "the shoe from the second image".
- Design the sound for the whole clip. Say what runs underneath every shot (a beat, ambience) and what happens at specific moments (a door slam, a line of dialogue).
- Draft short and small. Test the opening shots as a 10 second clip at 480p, then render the full 30 seconds once the look is right. Results differ between resolutions, so treat drafts as a guide rather than a preview.
- Keep text out of the frame. Add captions, prices and logos in your editor.
Routing and fallback
Seedance 2.5 currently has five routes on Revana. The router submits each job to the cheapest route first and, if that route fails or times out, moves it to the next. The backup routes cost more per second (the model page lists each one), and only the route that succeeds is charged. The attempts field shows how many routes a job used.
Fallback improves the odds of a result but is not an uptime guarantee. For long jobs in particular, handle failed in your app, for example by retrying later at a lower resolution.
See every Seedance tier on the models page, the request reference in the docs, or get an API key and run the sample above.
Frequently asked questions
How much does the Seedance 2.5 API cost?
In October 2026, Seedance 2.5 costs $0.11 per second at 480p, $0.20 at 720p and $0.55 at 1080p. A 10 second 720p clip is $2.00 and a 30 second 1080p clip is $16.50.
What is the difference between Seedance 2.0 and Seedance 2.5?
Seedance 2.5 makes clips up to 30 seconds (2.0 stops at 15), accepts up to 30 reference images (2.0 takes 9) and adds video to video. Seedance 2.0 offers 4K; Seedance 2.5 goes up to 1080p.
How long can a Seedance 2.5 video be?
Between 4 and 30 seconds per request. Set the length with the duration field.
Does Seedance 2.5 support 4K?
Not in the catalogue today: it lists 480p, 720p and 1080p. For 4K output, use Seedance 2.0.
Does Seedance 2.5 generate sound?
Yes. Set audio to true for sound generated with the picture, or false for a silent clip. The price is the same either way.
Am I charged if a long Seedance 2.5 job fails?
No. The price is held when you submit and released if the job fails. The router tries the other routes first, and you pay only for a job that succeeds.
Try Seedance 2.5 with one key
One API key for Seedance 2.5, Seedance 2.0 and every other model in the catalogue. Prepaid credit from $10, charged only for jobs that succeed.