Direct answer: you can call Seedance 2.5 through the Yovid API with one key. Send POST https://yovid.ai/v1/videos/generations with "model": "seedance-2.5" and a prompt, then poll GET /v1/tasks/{task_id} until the status is completed and read output.video_url. Clips run 4 to 30 seconds, and one request can carry up to 30 images, 10 videos and 10 audio files as references. Billing uses the same Yovid credits as the website, and credits are only deducted when a task succeeds.
Contents
- Where Seedance 2.5 API access comes from
- Quickstart in four steps
- Request parameters
- How the API picks the generation mode
- Reference and media limits
- What a request costs
- Errors, retries and rate limits
- A complete Python example
- FAQ
Where Seedance 2.5 API access comes from
Seedance 2.5 is ByteDance Seed's model. ByteDance's own developer route runs through its cloud platforms: its July 31, 2026 launch post said API access was coming via BytePlus ModelArk, press reports say Volcano Engine opened API access in China on August 7, and ByteDance's Seedance 2.5 page links to the BytePlus playground.
Yovid is an independent platform, not affiliated with ByteDance, and offers Seedance 2.5 through its own API:
- One key, one bill. The same key and the same credits cover Seedance 2.5, 2.0, 2.0 Fast, 2.0 Mini, 1.5 Pro and 1.0 Pro Fast.
- Stable public IDs. You send
seedance-2.5; Yovid keeps provider model names internal so they can change without breaking your code. - The same account as the website. Clips you generate through the API use the plan and credits you already have.
The full reference lives in the Yovid API docs; this guide focuses on what is specific to Seedance 2.5.
Quickstart in four steps
1. Create an API key
Open Settings → API keys, name the key and create it. The full secret is shown once, so store it in a secret manager and load it on your server as YOVID_API_KEY. Never put it in browser or mobile code.
2. Create a task
curl https://yovid.ai/v1/videos/generations \
-H "Authorization: Bearer $YOVID_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"prompt": "A lighthouse keeper climbs a spiral staircase with a lantern, reaches the lamp room as a storm rolls in, and lights the great lamp. Wind howling, boots on iron steps.",
"duration": 10,
"quality": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'{
"task_id": "vid_01JZK7R7KCYQ3T9F33A7K0J6XB",
"status": "pending",
"created_at": "2026-10-22T08:30:00.000Z"
}3. Poll the task
curl https://yovid.ai/v1/tasks/vid_01JZK7R7KCYQ3T9F33A7K0J6XB \
-H "Authorization: Bearer $YOVID_API_KEY"Poll every 5 to 10 seconds while the status is pending or processing, and back off as you go. When it changes to completed, the video URL is in output.video_url; if it changes to failed, stop polling and read error.
4. Check your credits
curl https://yovid.ai/v1/credits \
-H "Authorization: Bearer $YOVID_API_KEY"available is what a new task can use; reserved is held for tasks still running.
Request parameters
| Field | Type | Seedance 2.5 notes |
|---|---|---|
model | string | seedance-2.5 |
prompt | string | Required. Timed beats, quoted dialogue and @image1-style references all work |
duration | integer | 4 to 30 seconds |
quality | string | The docs list 480p and 720p for Seedance 2.5 |
aspect_ratio | string | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 or adaptive |
generate_audio | boolean | Sound, dialogue and effects in the same pass |
image_urls | array | Up to 30 public HTTPS image URLs |
video_urls | array | Up to 10 public HTTPS video URLs |
audio_urls | array | Up to 10 public HTTPS MP3 or WAV URLs |
reference_mode | boolean | Treat one or two images as references instead of first and last frames |
output_format | string | mp4 (default) or mov |
content_filter | boolean | Optional filter, on by default; false applies a 1.1× rate |
web_search | boolean | Text-to-video requests only |
The API checks every value against the model and your plan before it creates a task, and returns a 403 or 422 with the offending field in param if something is not allowed. Start from a frame and the output follows that image's shape.
How the API picks the generation mode
You never send a provider mode. Yovid chooses it from the media you attach:
| You send | Mode |
|---|---|
| No media | Text to video |
| One image | Image to video, the image is the first frame |
| Two images | First and last frame |
| Three or more images | Reference to video |
| Any video | Reference to video |
| Any audio | Reference to video |
One or two images plus "reference_mode": true | Reference to video |
In reference mode, address files in the prompt by their order in each array: @image1, @image2, @video1, @audio1. A reference request looks like this:
{
"model": "seedance-2.5",
"prompt": "@image1 is the main character. @image2 is the ceramic mug she holds; keep its shape and logo. @image3 is the kitchen. She walks into the kitchen, pours coffee into the mug and turns to the window. Use @audio1 as her voice: she says, \"Finally, Saturday.\"",
"image_urls": [
"https://example.com/character.jpg",
"https://example.com/mug.jpg",
"https://example.com/kitchen.jpg"
],
"audio_urls": ["https://example.com/voice-sample.mp3"],
"duration": 12,
"quality": "720p"
}Audio references are an API feature: the website composer takes images and videos, while the API adds up to 10 audio files for a voice, a track or a rhythm.
Reference and media limits
From the models and inputs page of the API docs:
| Media | Formats | Limits |
|---|---|---|
| Images | JPEG, PNG, WebP | Up to 30; 300 to 6000 px per side; aspect ratio 0.4 to 2.5; up to 30 MB each |
| Videos | MP4, MOV | Up to 10; 2 to 30 s each and 30 s in total; 24 to 60 FPS; up to 200 MB each |
| Audio | MP3, WAV | Up to 10; 2 to 30 s each and 30 s in total; up to 15 MB each |
All media must be public HTTPS URLs. Yovid rejects localhost, private network addresses, URLs with embedded credentials and hostnames it cannot resolve. Use URLs rather than Base64; the provider caps each request body at 64 MB.
What a request costs
The API bills in the same credits as the website, from the same rates. At credit-pack base rates, Seedance 2.5 costs about 3 credits per second at 480p and about 6.1 at 720p, so a 10-second 720p clip is about 61 credits and a 30-second one about 183. Subscribers pay less per second.
- Reference videos are billed on the reference clip's length plus the output length, at a lower rate: about 2.1 credits per second at 480p and 4.6 at 720p.
- Turning off
content_filtermultiplies the cost by 1.1. - Reservation, then deduction. Credits are reserved when the task is created and deducted only if it completes; a failed task gives them back.
- Plan access. Seedance 2.5 needs a paid plan or a one-time credit pack. A free account gets
403 plan_upgrade_required.
The completed task reports what it used in credits_used. See the pricing page for plans and packs, and whether Seedance 2.5 is free for the cheapest way in.
Errors, retries and rate limits
| Status | Meaning | Retry? |
|---|---|---|
401 | Key missing, invalid or revoked | No, replace the key |
402 | Not enough available credits | No, add credits |
403 | Model or quality needs a higher plan | No, change the input or plan |
422 | Invalid parameter, unavailable model or blocked prompt | No, fix the request |
429 | Rate limit or concurrent task limit reached | Yes, with backoff |
500, 502, 503 | Server, provider or moderation problem | Yes, after a delay |
Each key allows up to 120 requests per minute, and polling counts toward it. The create endpoint does not support idempotency keys yet, so do not retry a POST automatically when you do not know whether the first one succeeded: it can create a second task and reserve credits twice. Record every task_id you receive.
A complete Python example
import os
import time
import requests
API = "https://yovid.ai"
HEADERS = {"Authorization": f"Bearer {os.environ['YOVID_API_KEY']}"}
create = requests.post(
f"{API}/v1/videos/generations",
headers=HEADERS,
json={
"model": "seedance-2.5",
"prompt": (
"0-10s: a courier in a yellow rain jacket runs out of a subway exit into a night street. "
"10-20s: she weaves between umbrellas as a taxi brakes. "
"20-30s: she stops at a door and knocks twice. Rain and traffic, no music."
),
"duration": 30,
"quality": "720p",
"aspect_ratio": "16:9",
},
timeout=30,
)
create.raise_for_status()
task_id = create.json()["task_id"]
delay = 5
while True:
task = requests.get(f"{API}/v1/tasks/{task_id}", headers=HEADERS, timeout=30)
task.raise_for_status()
data = task.json()
if data["status"] == "completed":
print(data["output"]["video_url"], data["credits_used"])
break
if data["status"] == "failed":
raise RuntimeError(data["error"])
time.sleep(delay)
delay = min(delay * 1.5, 30)The prompt uses timed beats, which is the most reliable way to fill a 30-second clip. The Seedance 2.5 prompt guide has 13 prompts you can send as they are, and the comparisons with Kling 3.0, Veo 3.1 and Seedance 2.0 help you choose which model ID to call.
FAQ
Is there an official Seedance 2.5 API?
ByteDance offers Seedance 2.5 to developers through its cloud platforms, Volcano Engine and BytePlus. Yovid's API is an independent alternative: one key and one credit balance for Seedance 2.5 and the other Seedance models.
What is the model ID for Seedance 2.5 on Yovid?
seedance-2.5. Other public IDs are seedance-2.0, seedance-2.0-fast, seedance-2.0-mini, seedance-1.5-pro and seedance-1.0-pro-fast.
How long can a Seedance 2.5 API video be?
4 to 30 seconds per task, set with duration.
Which resolutions does the Seedance 2.5 API support?
The API docs list 480p and 720p for seedance-2.5. Your plan also sets a ceiling, and the API returns a 403 before creating a task if the quality is above it.
Can I send audio as a reference?
Yes, up to 10 MP3 or WAV files in audio_urls, addressed in the prompt as @audio1, @audio2 and so on. Audio references are available through the API only.
Does a failed task cost credits?
No. Credits are reserved when the task is created and deducted only when it completes successfully.
How many requests can I make?
Up to 120 requests per minute per key, polling included, plus a limit on concurrent tasks that depends on your plan. A 429 response means wait and retry with backoff.
Ready to build? Create a key in Settings → API keys and follow the API quickstart.




