Seedance 2.5 API: A Developer's Guide to Endpoints, Auth, and Video Generation
Seedance 2.5 is a long-running, multimodal video model, which means the API that drives it is async, not a single request-response. You submit a generation task, poll for completion, and download the result. Once you understand that pattern, plus the endpoint, the auth header, and the payload fields for duration, resolution, and references, the rest is straightforward.
This guide walks through the full Seedance 2.5 API contract: the endpoint, authentication, the request body, async polling, and working curl and Python examples. It targets the PixMind api-platform route, which mirrors ByteDance's contract for the model. It also adds a side-by-side comparison with the Seedance 2.0 and Kling API patterns, an end-to-end production pipeline case study, third-party developer resources, and an expanded FAQ covering rate limits, concurrency, webhooks, and credit checks. All endpoint and auth details are verified against the live backend as of 2026-07-31.
Seedance 2.5 model overview
Key Takeaways
- Endpoint:
POST /api-platform/v1/generationsto create a task;GET /api-platform/v1/task/{task_id}to poll for the result.- Auth:
Authorization: Bearer <API_KEY>(or theX-API-Keyheader); create a key with video scope in the PixMind dashboard.- Payload:
{ model, prompt, duration, resolution, aspect_ratio, reference_images, reference_videos, generate_audio }.- It is async: the create call returns a
taskId; you poll untilstatusisready, then readvideoUrl.- Cross-provider shape: Seedance 2.5, Seedance 2.0, and Kling all use the same submit-then-poll pattern. They differ in endpoint path, reference budget, and field names.
- Production pattern: add an
Idempotency-Keyon create, poll with bounded retries and backoff, verify credits before submit, and fall back to a cheaper route for iteration.- API access is Coming Soon on PixMind; the route is documented and ready, the backend connection is being finalized.
Prerequisites: Get an API Key
Seedance 2.5 calls are authenticated with an API key scoped to your account. Create one in the PixMind api-platform dashboard and store it securely; treat it like any secret. Load the key from an environment variable in code rather than checking it into source control:
export PIXMIND_API_KEY="pk-xxxxxxxxxxxxxxxx"
Create an API key
On PixMind, key permissions are scoped per workload (image / video). Make sure your key has video permission enabled before calling Seedance 2.5.
Developer note: Rotate keys per environment (dev / staging / prod) and scope each key to the minimum workload it needs. A staging key with only video scope cannot leak into an image pipeline, which limits blast radius if the key is compromised. Re-issue keys on a fixed cadence and log the last-used timestamp so dormant keys are easy to find and revoke.
Watch: Seedance 2.5 Workflow Walkthrough
The fastest way to understand the 2.5 upgrade before writing code is to watch the official demo footage and community analysis. These two walkthroughs cover the 30-second native generation, 4K output, region-level editing, and the 50-reference workflow that the API exposes:
noscript fallback: Seedance 2.5 demo on YouTube, covers 30-second native clips, region-level edit, and 50 multimodal references.
For a deeper editorial discussion of what the workflow upgrades mean for a production pipeline, the "Seedance 2.5 Changes Everything" analysis is worth watching alongside the official reel:
noscript fallback: Seedance 2.5 Changes Everything on YouTube.
The Seedance 2.5 API Contract
Endpoint
Create a generation task:
POST /api-platform/v1/generations
Poll for completion:
GET /api-platform/v1/task/{task_id}
The create endpoint is the unified generation entry point: it reads the model field and dispatches accordingly. Send model: "seedance-2.5" and the route handles the video pipeline.
Authentication
Send the API key as a Bearer token (OpenAI-SDK compatible):
Authorization: Bearer $PIXMIND_API_KEY
The auth middleware also accepts the X-API-Key header if you prefer that form. Both are supported; pick one and use it consistently across your client code so logs and retries are easier to trace.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
model |
string | yes | The model ID, seedance-2.5 for this route. |
prompt |
string | yes | Natural-language shot brief. |
duration |
integer | no | Clip length in seconds (up to 30 on this route). |
resolution |
string | no | 480p, 720p, 1080p, or 4K. |
aspect_ratio |
string | no | 16:9, 9:16, 1:1, 4:3, 3:4. |
reference_images |
string[] | no | Public image URLs for identity, product, style, etc. (up to 50 multimodal inputs total). |
reference_videos |
string[] | no | Public video URLs for motion or scene guidance. |
generate_audio |
boolean | no | Generate synchronized audio when the mode supports it. |
On references: Seedance 2.5 accepts up to 50 multimodal inputs in a single request, images, videos, text, and audio combined. Give each reference one explicit role (identity, shape, motion, palette, rhythm) and remove assets that compete for the same property.

How the Seedance 2.5 API Compares to Seedance 2.0 and Kling
Most current generation video APIs share the same async shape: one POST to create a task, one GET to poll until done. Where they differ is endpoint path, auth convention, the reference budget, and the field names in the payload. The table below maps those differences for the three APIs developers most often compare when planning an integration.
| Concern | Seedance 2.5 API (PixMind route) | Seedance 2.0 API (PixMind route) | Kling API (third-party) |
|---|---|---|---|
| Create endpoint | POST /api-platform/v1/generations |
POST /api-platform/v1/generations |
Separate /v1/videos/text2video and /v1/videos/image2video paths (confirm against the live Kling API docs) |
| Dispatch | model: "seedance-2.5" in body |
model: "seedance-2.0-pro" / -fast / -mini |
Endpoint selection, not a model field |
| Auth | Authorization: Bearer <key> or X-API-Key |
Same | Bearer access token issued from the Kling API key via a JWT flow (provider-specific) |
| Poll endpoint | GET /api-platform/v1/task/{task_id} |
Same | GET /v1/videos/<id> style |
| Max single-shot duration | Up to 30s | 5 / 10 / 15s | Around 5 to 10s typical on first-party Kling, longer on some provider routes |
| Multimodal references | Up to 50 (image / video / text / audio) | Up to 9 | Image-to-video and first/last-frame modes depending on endpoint |
| Audio | Unified joint generation when supported | Supported | Supported on select modes |
| Verified date | 2026-07-31 (PixMind route) | 2026-07-31 (PixMind route) | Estimate; confirm against the live Kling docs before integrating |
第一手观察: The shared async shape means client code is reusable across providers. Wrap the create-and-poll loop in a single
generate_video(model, payload)function and swap the model ID, and you can A/B Seedance 2.5, Seedance 2.0 Fast, and Kling from the same harness. That is the cheapest way to pick the right route per shot without rewriting integration code.
The practical takeaway: if your team has already built a polling client for Seedance 2.0, adopting 2.5 is a model-string change plus the new reference and duration fields. You do not need to redesign the integration.
Seedance 2.5 vs Kling model comparison
Step 1: Create a Generation Task
Here is a minimal create request, a 5-second, 720p, 16:9 clip with a text prompt. The Idempotency-Key header is optional but recommended for any production submit:
curl -X POST https://aihub-admin.aimix.pro/api-platform/v1/generations \
-H "Authorization: Bearer $PIXMIND_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "seedance-2.5",
"prompt": "A courier in a yellow jacket cycling through a neon-lit rainy Tokyo street at night, tracking shot, cinematic, no text",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
A successful response returns a task ID. You do not get the video back here, you get a handle to poll:
{
"code": 1000,
"data": {
"taskId": "47264",
"type": "video",
"status": "processing"
}
}
If you see code: 400 with "模型不存在或未配置", the backend route for seedance-2.5 has not been enabled on that endpoint yet. This is the Coming-Soon state on PixMind while the connection is finalized.
Step 2: Poll the Task Until Ready
Video generation is async. Poll the task endpoint with the taskId from step 1:
curl -X GET https://aihub-admin.aimix.pro/open-api/v1/task/47264 \
-H "Authorization: Bearer $PIXMIND_API_KEY"
The status field moves through pending, then processing, then ready. Poll every 3 to 5 seconds. When the task is ready, the response includes the final video URL:
{
"code": 1000,
"data": {
"taskId": "47264",
"status": "ready",
"progress": 100,
"videoUrl": "https://.../seedance-2-5-47264.mp4",
"coverUrl": "https://.../seedance-2-5-47264-cover.webp"
}
}
Terminal failure states are failed, error, canceled, and cancelled. Handle these and surface the description field to your logs.
Developer note: Poll intervals of 3 to 5 seconds are fine for a single task, but they multiply quickly at scale. For a queue of 20 tasks, prefer a single dispatcher loop that polls each open task once per cycle, with exponential backoff (5s, 5s, 10s, 15s, capped at 30s) as tasks age. This keeps request volume polite without stretching p99 latency for the whole batch.
Step 3: Download and Use the Result
Once status is ready, download videoUrl (and optionally coverUrl for a poster frame). The file is a standard MP4; transcode, host, or embed it as your application requires.
For a web landing page, you would typically compress it to an 8 to 10 second H.264 clip with fast-start for autoplay, extract a WebP poster, and host both on your own CDN. (PixMind hosts its Seedance 2.5 case media on cdn.pixmind.io.) Do not hotlink the API-hosted videoUrl in production, since the API URL is not guaranteed to persist.

Full Python Example
Here is a complete, runnable Python snippet that creates a task, polls until ready, and prints the video URL. It adds an Idempotency-Key, a bounded retry loop, and a timeout cap, which are the three things a production client needs that a hello-world example usually omits:
import time
import uuid
import requests
API_BASE = "https://aihub-admin.aimix.pro"
API_KEY = "your-pixmind-api-key" # scope: video
GEN = f"{API_BASE}/api-platform/v1/generations"
TASK = f"{API_BASE}/open-api/v1/task"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# 1. Create with an idempotency key so a retry does not start a second billed task
payload = {
"model": "seedance-2.5",
"prompt": "A 30-second continuous hero shot: a character walking through a neon city that flows into a product reveal",
"duration": 30,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": True,
}
headers = {**HEADERS, "Idempotency-Key": str(uuid.uuid4())}
create = requests.post(GEN, headers=headers, json=payload, timeout=30).json()
task_id = create["data"]["taskId"]
print(f"Task created: {task_id}")
# 2. Poll with bounded retries and gentle backoff
max_attempts, delay = 100, 5
for attempt in range(max_attempts):
time.sleep(delay)
t = requests.get(f"{TASK}/{task_id}", headers=HEADERS, timeout=15).json()
status = t["data"]["status"].lower()
print(f"attempt={attempt + 1} status={status} progress={t['data'].get('progress', 0)}%")
if status in ("ready", "succeeded", "completed"):
print("Video URL:", t["data"]["videoUrl"])
break
if status in ("failed", "error", "canceled", "cancelled"):
raise RuntimeError(f"Task failed: {t['data']}")
delay = min(delay + 2, 30) # backoff, capped at 30s
else:
raise TimeoutError(f"Task {task_id} did not finish in {max_attempts * 5}s")
End-to-End Case Study: A 30-Second Product Video Pipeline
This is the part most API guides skip: how a real team strings the contract above into a repeatable production pipeline. The scenario is a four-person creative team at a D2C brand producing a 30-second hero video for a product launch, with a fixed budget and a hard deadline. The pattern below is the shape that consistently ships on time.
Pipeline overview
The team splits the work into four stages: iteration (cheap A/B tests on Seedance 2.0 Fast), final generation (one Seedance 2.5 run at 1080p / 30s), review and region edits (targeted Seedance 2.5 region regeneration), and delivery (transcode, poster, CDN upload). Each stage uses the same client code; only the model ID and payload change. This separation is what makes the pipeline repeatable across campaigns.
Reference allocation
Before any API call, the team assigns each reference a single explicit role, captured in a shared spreadsheet so the prompt and the payload stay in sync. Five references out of the 50-input budget, each with one job:
| Asset | Role | How it is referenced |
|---|---|---|
character.jpg |
Identity (the courier) | @Image 1 in prompt |
product.jpg |
Product geometry | @Image 2 in prompt |
studio-palette.png |
Color palette | @Image 3 in prompt |
camera-motion.mp4 |
Camera blocking | @Video 1 in prompt |
rhythm.wav |
Cut rhythm | @Audio 1 in prompt |
The prompt maps each one explicitly: "keep the character from @Image 1 unchanged; match the product in @Image 2; use @Video 1 only for camera motion; align cuts to @Audio 1." The mapping is the contract between the creative direction and the API payload. If a reference is not assigned a role, it does not go in the request.
Iteration stage (cost control)
Before spending on a 30-second 2.5 run, the team validates the prompt and references on Seedance 2.0 Fast at 5 seconds and 720p. This is the same POST /api-platform/v1/generations call with model: "seedance-2.0-fast". Three iterations cost a fraction of one 2.5 run and surface reference conflicts before budget is committed. The dispatcher logs each iteration's taskId, status, and elapsed seconds so the creative lead can compare variants side by side.
第一手观察: Teams that skip this stage and go straight to a 30-second 2.5 generation typically burn three or four full-priced runs fixing prompt conflicts they could have caught on Fast. The iteration stage is the single highest-ROI part of the pipeline, and the teams that ship reliably are the ones that treat it as mandatory.
Final generation (Seedance 2.5 at 30s / 1080p)
When the Fast iteration confirms the prompt reads, the team submits the real generation: model: "seedance-2.5", duration: 30, resolution: "1080p", with all five references attached and the full role-mapped prompt. The create call includes an Idempotency-Key so that a network retry from the CI runner does not start a second billed task. The creative lead reviews the final taskId submission log before the dispatcher is allowed to commit it, which is a one-minute check that prevents expensive prompt typos.
Polling, errors, and idempotency
A single dispatcher polls the task every 5 seconds with backoff to 30 seconds, capping at 100 attempts (about 8 minutes). Terminal failures (failed, error) trigger a single retry with a new Idempotency-Key only if the failure description indicates a transient backend issue. Reference or prompt errors are surfaced to the creative lead and fixed before resubmit, not retried blindly. The dispatcher writes a structured log line per attempt (task ID, status, progress, elapsed seconds) so cost and latency are auditable after launch.
Region edits
On review, the client asks to swap the product on the right shelf of the final shot. The team submits a region-level edit task that targets only that area, preserving the rest of the clip's motion and identity. This is the most valuable 2.5 feature for client work: a one-day round-trip becomes a 10-minute regeneration. The pipeline keeps the original taskId and the edit taskId linked in the project log so the lineage of every shipped frame is traceable.
Delivery
The ready videoUrl is downloaded, transcoded to H.264 with fast-start for web autoplay, paired with a WebP poster extracted from coverUrl, and uploaded to the team's CDN. The final assets are pushed to the landing page and reviewed frame by frame (identity, hands, product geometry, logos, audio sync) before publishing.
Cost discipline
The pipeline caps spend in three places. First, iteration runs happen on Fast instead of 2.5. Second, a credit pre-check before each 2.5 submit aborts if the wallet balance is below the threshold for the chosen duration and resolution. Third, a hard per-launch task budget in the dispatcher refuses to submit new tasks once hit. Seedance 2.5 pricing is unpublished, so the team treats any per-second figure as an estimate and reads the live generator for current credits before each campaign.
Handling the 50 Multimodal References
The headline feature, up to 50 multimodal inputs, shows up in the payload as arrays of public URLs:
{
"model": "seedance-2.5",
"prompt": "Keep the character from the first image unchanged; use the video for body motion and the audio for rhythm",
"duration": 20,
"resolution": "1080p",
"aspect_ratio": "16:9",
"reference_images": ["https://cdn.example.com/character.jpg", "https://cdn.example.com/product.jpg"],
"reference_videos": ["https://cdn.example.com/motion.mp4"],
"generate_audio": true
}
All reference URLs must be publicly reachable. Assign each one a single role and describe that role in the prompt ("use @Video 1 only for body motion"), so the model knows which input controls which property.
Developer note: Pre-validate that every reference URL returns HTTP 200 with the expected content-type before submitting. A single 403 on a CDN-protected asset is the most common cause of
failedtasks in production, and it wastes a full generation budget. A two-line HEAD request check in your client prevents this entire class of failure. Also use stable, content-addressed URLs (for example with a hash or version in the path) so that swapping an asset mid-campaign does not silently change what the model receives.
Error Handling and Idempotency
- 401 "API Key 无效", wrong key, or the key has no video scope. Check the key and its permissions.
- 400 "模型不存在或未配置", the
seedance-2.5route is not enabled on this backend yet. On PixMind this is the Coming-Soon state. - 4001 "余额不足", the request is valid but your wallet has no credits; the task is not created.
- 429 rate limit, back off exponentially and retry; the create endpoint enforces per-key concurrency and request-rate caps. If you hit this regularly, contact support to raise limits or stagger submissions across short intervals.
- 502 / 504 gateway, transient; retry the create call with the same
Idempotency-Keyso the backend deduplicates and you do not start a second billed task. - Polling timeout, cap attempts (for example 100 × 5s, about 8 minutes) and treat a timeout as a failure with a single retry.
For production, pass an Idempotency-Key header on every create call so a client retry does not start a second billed task. Use a UUID per logical task (not per HTTP attempt), generated once and stored on your side, so the same logical generation is deduplicated across retries, CI reruns, and queue replays. The pattern is: generate the UUID when the user (or job runner) decides to create the task, persist it before the first HTTP call, and reuse it for every retry of that same logical task.
Third-Party Developer Resources
The contract above is the implementation path on PixMind. For deeper context on ByteDance's underlying model and the official API surface, these are the resources developers most often reach for, verified 2026-07-31:
- BytePlus Seedance 2.5 resource page, ai.byteplus.com/lumina/en/resource/bytedance-seedance-2-5. ByteDance's own framing of 2.5, oriented around advertising video generation and product demos. Useful for the capability narrative and the use cases ByteDance itself targets. Verified listing, 2026-07-31.
- BytePlus ModelArk API documentation, the official developer surface for invoking Seedance through ByteDance's cloud. Cross-reference field names and modes when you need to confirm what the connected route exposes, then mirror those names in your client.
- Volcengine 火山方舟 (Volcano Engine Ark) documentation, volcengine.com/docs/82379. The domestic (China) endpoint for the same model family. The async submit-and-poll pattern is the same as the PixMind route; field names and auth flow differ slightly. Verified listing, 2026-07-31; confirm the live path before integrating.
- MakeFun AI demo recreation guide, makefun.ai/seedance-2-5-demo-videos/. Walks through recreating BytePlus ModelArk's reference-heavy demo workflows. Helpful when you want to reproduce the official look before designing your own prompt.
- Community analyses, the Topview/Medium 2.5 breakdown, Pixo's FORCE coverage, and the ToSea complete guide all cover the workflow upgrades from an editorial angle. Useful for context, not for endpoint details; always confirm technical specifics against the live API.
Developer note: Third-party guides age fast. Treat any of them as a starting point and confirm endpoint paths, field names, and credit costs against the connected route on the day you integrate. This guide's endpoint and auth details are verified 2026-07-31, but the model is still rolling out, so re-check before production launch.
Seedance 2.5 API FAQ
What is the Seedance 2.5 API endpoint?
Create a task with POST /api-platform/v1/generations, then poll GET /api-platform/v1/task/{task_id} until status is ready. The model field is seedance-2.5.
How do I authenticate to the Seedance 2.5 API?
Send your API key as Authorization: Bearer <key>. The X-API-Key header is also accepted. Create a key with video permission in the PixMind dashboard and load it from an environment variable rather than embedding it in source.
Is the Seedance 2.5 API available on PixMind?
The route is documented and ready; backend access is being finalized and the model is marked Coming Soon. The /api-platform/models/seedance-2-5 page has the endpoint and parameter reference, and the /ai-video/seedance-2-5 page hosts the web generator in the meantime.
How many references can I send in one Seedance 2.5 request?
Up to 50 multimodal inputs, images, videos, text, and audio combined, in a single request. This is up from 9 on Seedance 2.0. Every reference must be a publicly reachable URL.
Does the Seedance 2.5 API return the video synchronously?
No. Video generation is async. The create call returns a taskId; you poll the task endpoint until status is ready, then read the videoUrl. A typical 30-second generation takes several minutes, so design your client for polling, not for blocking.
What are the rate limits and concurrency caps?
The create endpoint enforces per-key request-rate and concurrency limits. If you exceed them, the response returns 429 and you should back off exponentially. For batch workloads (more than a handful of concurrent tasks), stagger submissions across short intervals and contact support to raise limits if you hit 429 regularly. Exact numerical limits are tuned per account, so verify them on your own key before designing a large batch job.
Does the Seedance 2.5 API support webhooks or callbacks?
The verified PixMind route uses poll-based polling only, not push callbacks. If your architecture needs push notifications, run a single dispatcher that polls the task endpoint and emits a webhook to your downstream services when status reaches a terminal state. This keeps the integration simple and avoids coupling your pipeline to a callback URL that may change between environments.
How many concurrent tasks can I run?
Concurrency is bounded by your key's per-key caps and by your credit balance. For 30-second 1080p work, expect to run a handful of tasks in parallel rather than dozens. Treat the live cap as verified-on-your-account: submit a small calibration batch, measure how many tasks move from pending to processing simultaneously, and size your queue against that number.
What video format does the API return?
The ready task returns a videoUrl pointing to a standard MP4 file, plus a coverUrl for a poster frame. Download and transcode to the format your delivery target needs (H.264 with fast-start for web, vertical encodings for social, ProRes for edit mastering). Do not hotlink the API-hosted videoUrl in production because it is not guaranteed to persist; copy the file to your own CDN on ready.
How do I check credits before submitting?
Read the live generator for the current credit cost at your chosen duration and resolution, then check your wallet balance. The API returns 4001 "余额不足" if the balance is too low, at which point the task is not created. For production pipelines, add a pre-submit balance check that aborts early if the balance is below the per-task threshold, so you do not queue work the wallet cannot cover.
How do I fix the "模型不存在或未配置" error?
This 400 response means the seedance-2.5 route is not enabled on the backend endpoint you are hitting. On PixMind this is the Coming-Soon state while the backend connection is finalized. Confirm you are calling the documented /api-platform/v1/generations path with model: "seedance-2.5" (lowercase, exact). If both are correct and the error persists, the route is not yet open on your account; monitor the /api-platform/models/seedance-2-5 page for availability.
What resolutions and durations can I request?
Durations up to 30 seconds in a single shot; resolutions of 480p, 720p, 1080p, and native 4K. Confirm the exact options in the live generator before submitting, since the connected route may expose a subset.
Is Seedance 2.5 API pricing published?
Not yet. Treat any per-second figure you see elsewhere as an estimate. Read the live generator for the current credits at your chosen duration and resolution before submitting, and structure your pipeline so it can absorb a price update without rewriting the integration.
Start Building with the Seedance 2.5 API
The Seedance 2.5 API is a standard async video-generation contract: one create call, one poll loop, one download. Once you have a key with video scope, the curl and Python examples above are everything you need to ship a first integration. The comparison table and the pipeline case study show how to scale that contract from a single clip to a repeatable production workflow that survives client edits, budget pressure, and deadlines.
→ Read the full Seedance 2.5 API route reference, or try the model in the web generator while API access is being finalized.
Compare every Seedance route
Endpoint and auth details verified against the PixMind api-platform backend on 2026-07-31. Third-party resource links verified 2026-07-31. Kling API comparison fields are marked as estimate and should be confirmed against the live Kling docs. Seedance 2.5 pricing is unpublished and marked as estimate-only.


