Seedance API Guide (2026): Model IDs, Code & Real Pricing
Affiliate disclosure: This article contains affiliate links. If you sign up through one of them, we may earn a commission at no extra cost to you. This never affects our ratings or conclusions.
The Seedance API you can call today is the Dreamina Seedance 2.0 series on BytePlus ModelArk, and the model IDs are dreamina-seedance-2-0-260128, dreamina-seedance-2-0-fast-260128 and dreamina-seedance-2-0-mini-260615. Generation is asynchronous: you POST a task, get an ID back, then poll or receive a webhook. There is no publicly documented Seedance 2.5 model ID as of July 23, 2026 — we checked the BytePlus model list, pricing page, model releases page and video generation API reference, and none of them contain a 2.5 entry.
That last point matters more than it sounds. Most Seedance API tutorials currently in search results are stuck on one of two stale positions: either “the API isn’t public yet” (a February 2026 fact that stopped being true) or “the 2.5 API opened on July 16” (third-party reporting we still cannot confirm against any official BytePlus page). This guide is written against the docs as they actually read today, with every number sourced and dated.
All BytePlus figures below were read from the official ModelArk documentation on 2026-07-23.
Can You Use the Seedance API, and Where Do You Sign Up?
Yes, with three practical constraints.
Region. Every model in the ModelArk model list is available in ap-southeast-1. Only seed-2-0 and seedream-5-0-lite are additionally served from eu-west-1, so Seedance video generation means the Singapore base URL: https://ark.ap-southeast.bytepluses.com/api/v3.
Activation. Models are opt-in per account. You enable them on the ModelArk Model activation page; calling a model you have not activated returns OperationDenied.ServiceNotOpen (HTTP 403).
Auth. The video generation endpoints support API key authentication only — no signed-request scheme, no OAuth. Generate a long-term key at the BytePlus ModelArk API key console and pass it as a bearer token, or let the SDK read it from ARK_API_KEY.
One thing to settle before you write code: your account type changes your throughput. BytePlus publishes separate default rate limits for enterprise and individual users on the Seedance 2.0 series — 600 RPM with concurrency 10 for enterprise, 180 RPM with concurrency 3 for individuals. The docs describe all published rate limits as theoretical maximums that are not guaranteed.
The Model IDs That Actually Exist
This is the table most Seedance API articles get wrong, because they quote model names from press coverage instead of IDs from the model list.
| Model | Model ID | Resolutions | Duration | Frame rate |
|---|---|---|---|---|
| Dreamina Seedance 2.0 | dreamina-seedance-2-0-260128 | 480p, 720p, 1080p, 4K (10-bit) | 4–15 s | 24 fps |
| Dreamina Seedance 2.0 Fast | dreamina-seedance-2-0-fast-260128 | 480p, 720p | 4–15 s | 24 fps |
| Dreamina Seedance 2.0 Mini | dreamina-seedance-2-0-mini-260615 | 480p, 720p | 4–15 s | 24 fps |
| Seedance 1.5 Pro | seedance-1-5-pro-251215 | 480p, 720p, 1080p | 4–12 s | 24 fps |
| Seedance 1.0 Pro | seedance-1-0-pro-250528 | 480p, 720p, 1080p | 2–12 s | 24 fps |
| Seedance 1.0 Pro Fast | seedance-1-0-pro-fast-251015 | 480p, 720p, 1080p | 2–12 s | 24 fps |
Source: BytePlus ModelArk model list, data checked 2026-07-23. One row is an exception: the model list publishes no output spec at all for seedance-1-0-pro-fast-251015 (that cell is blank). Its figures above come from the Video Generation API reference, which gives its duration range as [2, 12] s and names 1080p as the model’s default resolution, and from the pricing page, whose worked examples for that model run at 24 fps across 480p, 720p and 1080p — both also checked 2026-07-23.
Two constraints hide inside that table and will break your first integration if you miss them:
- 1080p is not supported on Seedance 2.0 Fast or Seedance 2.0 Mini. Those two tiers top out at 720p.
- 4K is only supported on the mainline
dreamina-seedance-2-0-260128. It is encoded 10-bit H.265/HEVC, which BytePlus explicitly warns some browsers and players cannot decode directly.
All three Seedance 2.0 series models advertise the same capability set: text-to-video, image-to-video (first frame), image-to-video (first and last frames), multimodal reference-to-video, video modification and video extension — all with audio-visual sync.
Related pages on this site: for the consumer-side story on those tiers, see our Seedance 2.0 Mini breakdown; for the web-app workflow, see the Seedance 2.0 complete guide.
Minimum Working Request: Create, Then Poll
Video generation is a two-call, asynchronous flow. POST .../contents/generations/tasks returns a task ID that looks like cgt-2026******-**** (a timestamp plus a short random suffix); you then GET .../contents/generations/tasks/{id} until status becomes succeeded.
The example below is written strictly from the parameter and code samples in the BytePlus Dreamina Seedance 2.0 series tutorial and Video Generation API reference (both checked 2026-07-23). It was not executed for this article — we do not hold a BytePlus API key.
import os
import time
# pip install 'byteplus-python-sdk-v2[ark]'
from byteplussdkarkruntime import Ark
client = Ark(
base_url="https://ark.ap-southeast.bytepluses.com/api/v3",
api_key=os.environ.get("ARK_API_KEY"),
)
create_result = client.content_generation.tasks.create(
model="dreamina-seedance-2-0-260128",
content=[
{"type": "text", "text": "A ceramic mug on a windowsill at golden hour, "
"slow push-in, shallow depth of field."},
],
resolution="720p",
ratio="16:9",
duration=5,
generate_audio=True,
watermark=False,
)
task_id = create_result.id
while True:
task = client.content_generation.tasks.get(task_id=task_id)
if task.status == "succeeded":
print(task.content.video_url) # expires in 24 hours — download now
print(task.usage.completion_tokens) # what you are actually billed on
break
if task.status in ("failed", "expired", "cancelled"):
print(task.error)
break
time.sleep(30)
BytePlus also ships Java and Go SDKs, and the same two endpoints work over plain curl. A GET .../contents/generations/tasks?page_size=2&filter.status=succeeded list endpoint exists for reconciliation jobs.
Task statuses are queued, running, succeeded, failed, expired and cancelled — note that only tasks still in queued can be cancelled.
Parameters That Matter (and Four That Silently Do Nothing)
BytePlus now supports two ways to pass generation parameters: the new method, which puts them in the request body with strict validation and errors on bad input, and the legacy method, which appends --parameter flags to the end of the text prompt with loose validation and silently falls back to defaults. Use the new method. Silent fallback is how you end up paying 4K rates for a job you thought was 720p.
| Parameter | Values | Default | Notes for Seedance 2.0 series |
|---|---|---|---|
resolution | 480p, 720p, 1080p, 4k | 720p | 1080p excluded on Fast/Mini; 4K only on mainline 2.0 |
ratio | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive | adaptive | adaptive picks the ratio from the prompt or the first reference asset |
duration | integer seconds, or -1 | 5 | Range 4–15 s; -1 lets the model choose the length — and the length drives the bill |
generate_audio | boolean | true | Output audio is always mono. Put dialogue in double quotes in the prompt |
watermark | boolean | false | true adds an “AI Generated” mark bottom-right |
callback_url | URL | — | Webhook fires on status change; retried 3× if no ack within 5 s |
return_last_frame | boolean | false | Returns a watermark-free PNG at the video’s dimensions — the clean way to chain clips |
execution_expires_after | seconds | 172800 | 48 h default, range 3600–259200; past it the task goes expired |
priority | 0–9 | 0 | Seedance 2.0 only. Jumps the queue within one endpoint; does not preempt running tasks |
safety_identifier | string ≤64 chars | — | Hashed end-user ID for abuse detection |
And the parameters that exist in the API but are not honoured by the Seedance 2.0 series — the single most common source of “why is my output non-deterministic” support tickets:
seedis not supported by Seedance 2.0 models. If you are porting a Seedance 1.x pipeline that relies on seeds for reproducibility, that guarantee is gone.camera_fixedis not supported by the Seedance 2.0 series. Express a locked-off camera in the prompt instead.framesis not supported by the Seedance 2.0 series or 1.5 Pro. Fractional-second durations are a 1.0-era feature; usedurationin whole seconds.service_tier: flex(offline inference at 50% of online pricing) is not available on the Seedance 2.0 series. Online inference only. If your workload is genuinely latency-tolerant and price-sensitive, Seedance 1.5 Pro still offersflex.
Input Limits for Multimodal Reference Jobs
The Seedance 2.0 series accepts up to 9 images, up to 3 videos and up to 3 audio files plus an optional text prompt in a single request, and at least one reference image or video must be included. Audio can never be the only input.
| Asset | Formats | Limits |
|---|---|---|
| Image | jpeg, png, webp, bmp, tiff, gif, heic, heif | 300–6000 px per side, aspect ratio 0.4–2.5, <30 MB each |
| Video | mp4, mov (H.264/H.265, AAC/MP3 audio) | 2–15 s each, ≤3 files totalling ≤15 s, ≤200 MB each, 24–60 fps |
| Audio | wav, mp3 | 2–15 s each, ≤3 files totalling ≤15 s, ≤15 MB each |
Total request body must stay under 64 MB, which effectively rules out base64-inlining anything large — pass public URLs instead.
Prompt language support differs by model family. All models take English prompts; the Seedance 2.0 series additionally supports Japanese, Indonesian, Spanish and Portuguese. BytePlus recommends keeping prompts under 1,000 words, because longer text causes the model to latch onto headline elements and drop details.
One prompt rule has no equivalent in the web app and will quietly wreck multi-reference jobs: assets must be referenced by type plus number — Image 1, Video 1, Audio 1 — where the number is the asset’s position among assets of the same type in the request content array, counting from 1. Referencing an asset by its Asset ID is explicitly not supported; BytePlus spells out the contrast as “Correct usage: The beauty influencer in Image 1” versus “Incorrect usage: asset-2026**** is a beauty influencer”. The official Seedance 2.0 series prompt guide writes the same references with an @ prefix (@Image 1, @Video 1, @Audio 1) and, for scenes where the subject is otherwise undefined, recommends binding it explicitly on every mention as <Subject_N>@<Image_N> — for example, Zhang San@Image 1. Both forms appear in official ModelArk docs; the raw asset-… ID is the one thing that must never reach the prompt text. Our prompt library is a good source of scene-level phrasing to reuse — just renumber the asset references to match your content array.
The Human-Face Restriction Is an API-Level Rejection
The Seedance 2.0 series does not accept reference images or videos containing real human faces. This is enforced at the API, not by guidance, and it returns a sensitive-content error. BytePlus documents three supported paths:
- Trusted outputs as input assets — face-containing video your own account generated with a Seedance 2.0 series model within the last 30 days can be fed back in as a reference.
- Preset digital characters — a library of virtual characters, each with an asset ID, passed as
asset://<ASSET_ID>in the URL field. - Authorized real-person assets — after real-person verification and consent registration, real assets get their own asset IDs usable the same way.
Route 3 requires enterprise verification. Plan your character pipeline around routes 1 and 2 unless you have a legal function that can run consent registration.
What It Actually Costs
BytePlus bills video generation per token, and tokens are a function of pixels and seconds:
Estimated tokens = (input video duration + output video duration) × output width × output height × output frame rate ÷ 1024
Two consequences developers routinely miss. First, the duration of your reference video is inside the formula — a 15-second reference attached to a 5-second output is billed on 20 seconds of pixels. Second, when the input includes video, Seedance 2.0 and 2.0 Fast apply a minimum token consumption floor: if your computed tokens land under it, you pay the floor.
Token unit prices (USD per million tokens), checked 2026-07-23:
| Model | Output | No video input | With video input |
|---|---|---|---|
| Seedance 2.0 | 480p / 720p | $7.00 | $4.30 |
| Seedance 2.0 | 1080p | $7.70 | $4.70 |
| Seedance 2.0 | 4K | $4.00 | $2.40 |
| Seedance 2.0 Fast | 480p / 720p | $5.60 | $3.30 |
| Seedance 2.0 Mini | 480p / 720p | $3.50 | $2.10 |
The lower unit price at 4K is not a discount — it is offset many times over by the token count, as the per-video table shows. BytePlus published reference prices for a 5-second, 16:9 text-to-video clip with no video input:
| Model | 480p | 720p | 1080p | 4K |
|---|---|---|---|---|
| Seedance 2.0 | $0.35 | $0.76 | $1.87 | $3.89 |
| Seedance 2.0 Fast | $0.28 | $0.60 | not supported | not supported |
| Seedance 2.0 Mini | $0.18 | $0.38 | not supported | not supported |
Add a reference video and the same 5-second output costs more, scaling with how long the reference is (the ranges below run from a 2–4 second input up to a 15-second input):
| Model | 480p | 720p | 1080p | 4K |
|---|---|---|---|---|
| Seedance 2.0 | $0.39–$0.86 | $0.84–$1.86 | $2.06–$4.57 | $4.20–$9.33 |
| Seedance 2.0 Fast | $0.30–$0.66 | $0.64–$1.43 | not supported | not supported |
| Seedance 2.0 Mini | $0.19–$0.42 | $0.41–$0.91 | not supported | not supported |
Source: BytePlus ModelArk pricing page, data checked 2026-07-23. These are BytePlus reference prices; the platform states actual fees follow final order details.
Three billing facts worth hard-coding into your cost model:
- You are only charged for successful generations. Failures, including content-moderation rejections, are not billed.
- Read
usage.completion_tokensfrom the retrieve response, not your own estimate. For video models input tokens are always 0, sototal_tokensequalscompletion_tokens. duration: -1is a billing decision, not just a convenience. Letting the model pick a length between 4 and 15 seconds means letting it pick a price up to ~3× the floor.
These API rates sit alongside, not inside, the Dreamina subscription plans. Our Seedance pricing review covers the consumer credit tiers, and the credit calculator helps model subscription spend.
Errors, Queues and the 24-Hour Cliff
The output URL expires in 24 hours. BytePlus deletes the file behind content.video_url 24 hours after generation, and content.last_frame_url follows the same clock. The task ID itself survives 7 days. Any pipeline that treats the returned URL as durable storage will start serving 404s on day two — copy to your own bucket inside the success handler.
Poll politely, or use the webhook. The official sample polls every 30 seconds; that is a reasonable floor. If you set callback_url, ModelArk POSTs status changes to you and retries three times when it does not get a delivery confirmation within 5 seconds, so your endpoint needs to be idempotent.
4K has its own, much tighter queue. On the mainline Seedance 2.0 model, non-4K work runs at up to 600 RPM / concurrency 10 for enterprise accounts and 180 RPM / concurrency 3 for individuals — but 4K is capped at 15 RPM and concurrency 1 for both account types. A 4K batch is a serial queue no matter who you are. Budget wall-clock time accordingly, and consider generating at 1080p and upscaling if throughput matters more than the 10-bit pipeline.
Error codes you should branch on explicitly (full list, checked 2026-07-23):
| Code | HTTP | What it usually means |
|---|---|---|
AuthenticationError | 401 | Bad or missing API key |
OperationDenied.ServiceNotOpen | 403 | Model not activated on this account |
AccountOverdueError | 403 | Balance negative; services suspend after 2 hours in arrears |
InvalidArgumentError.InvalidPixelLimit | 400 | The min_pixels / max_pixels values you passed are invalid — min above max, or outside the range the service allows |
InputImageSensitiveContentDetected.* | 400 | Reference image rejected — most often a real human face |
InputVideoSensitiveContentDetected.* | 400 | Reference video rejected |
OutputVideoSensitiveContentDetected.* | 400 | The generation itself was blocked post-hoc |
QuotaExceeded | 429 | Account quota exhausted |
ModelAccountRpmRateLimitExceeded | 429 | Per-model RPM ceiling hit — back off |
RateLimitExceeded.EndpointRPMExceeded | 429 | Endpoint-level ceiling hit |
InternalServiceError | 500 | Retry with backoff |
Retry 429 and 500 with exponential backoff; never retry the *SensitiveContentDetected family, because the same input will be rejected every time.
There is also a documented visual failure mode worth knowing: in first-frame and first-and-last-frame jobs, mismatched input-image and output-video dimensions produce abrupt stretch/squash jumps between frames. The fix is either to crop your input to the exact pixel dimensions BytePlus publishes for each ratio, or to set ratio: adaptive.
Where Seedance 2.5 Actually Stands
If you arrived here searching for the Seedance 2.5 API, here is the honest state of play as of 2026-07-23.
| Source | Status on 2026-07-23 |
|---|---|
| BytePlus ModelArk model list | No Seedance 2.5 entry |
| BytePlus ModelArk pricing page | No Seedance 2.5 rate card |
| BytePlus ModelArk model releases | No Seedance 2.5 release note |
| BytePlus video generation API reference | Documents the Seedance 2.0 series and 1.x only |
| Dreamina product page for Seedance 2.5 | Live, labelled “coming soon”, advertising 30-second clips, 4K, up to 50 reference inputs and a 180-second long-video beta |
Third-party reporting dated July 16, 2026 said public 2.5 API access had opened on BytePlus; we have not been able to confirm that against any official BytePlus page, and WaveSpeed — itself a commercial Seedance API reseller, so a third party with every incentive to list 2.5 the moment it exists — describes it in its own published API watch as previewed but not shipped, with no public model ID and no disclosed pricing.
The practical read: build against dreamina-seedance-2-0-260128 now. The request shape (async task create, content array, resolution/ratio/duration) is the shape BytePlus has kept stable across Seedance 1.0, 1.5 and 2.0, so a 2.5 model ID will most likely drop into the same call. Our Seedance 2.5 news briefing tracks the rollout, and the Seedance 2.5 vs Veo 3.1 comparison covers the announced feature set.
When Not to Use the API
The API is the right tool less often than developer-facing content implies. Skip it when:
- You need Seedance 2.5 features specifically — 30-second single-pass clips, 50 reference inputs, regional editing. None of that is callable via any documented endpoint today. Waiting is a valid engineering decision.
- Your volume is under roughly 100 clips a month and a human picks every take. Between activation, async plumbing, asset hosting, the 24-hour URL cliff and retry logic, you are writing a few hundred lines of infrastructure to replace a browser tab. Dreamina’s web app is the faster path — see Seedance 2.0 for beginners.
- You want several models behind one integration. Multi-model aggregators like Pollo AI bundle Seedance alongside Veo, Kling, Runway and Luma under one account, which is cheaper in engineering time than maintaining a separate client per vendor — at the cost of a markup and a dependency on someone else’s uptime.
- You need reproducible output from a fixed seed. Seedance 2.0 does not support
seed. If your product promises “regenerate the exact same clip”, that promise cannot be kept on this model. - You need 4K throughput. Concurrency 1 at 15 RPM is a hard architectural ceiling, not a quota you can negotiate away with a bigger plan.
Use the API when you are generating at volume, chaining clips programmatically with return_last_frame, driving generation from your own product’s data, or need the webhook to fan results into an existing pipeline.
Quick Reference
| Item | Value (checked 2026-07-23) |
|---|---|
| Base URL | https://ark.ap-southeast.bytepluses.com/api/v3 |
| Create task | POST /contents/generations/tasks |
| Retrieve task | GET /contents/generations/tasks/{id} |
| List tasks | GET /contents/generations/tasks?page_size=…&filter.status=… |
| Auth | API key only |
| Python SDK | pip install 'byteplus-python-sdk-v2[ark]' |
| Flagship model ID | dreamina-seedance-2-0-260128 |
| Region | ap-southeast-1 |
| Video URL lifetime | 24 hours |
| Task ID retention | 7 days |
Related Content
- Seedance 2.0: The Complete Guide — the web-app workflow the API mirrors
- Seedance Pricing Review — subscription and credit costs, alongside these API rates
- Seedance 2.5: What’s New & How to Access It — rollout tracking
- Seedance 2.0 Mini — the cheapest tier, and what it gives up
- Multi-Shot Storytelling — the stitching problem
return_last_framesolves programmatically
SeedanceTips is an independent publication. We are not affiliated with, sponsored by, or endorsed by ByteDance, Dreamina, BytePlus, or any AI video platform. All API specifications, parameters and prices above were read from the official BytePlus ModelArk documentation on July 23, 2026 and may change. The code sample was written from the official documentation and was not executed for this article. Verify current model IDs and rates in the BytePlus console before committing production work.