Seedance 2.5 Draft API
Seedance 2.5 as a cheap 480p preview, then the 1080p render of the one worth keeping.
Seedance 2.5 Draft is a video generation model from ByteDance, available on OttoPort's OpenAI-compatible API as the model ID seedance-2.5-draft at $0.203 / second as of 2026-10-17.
Provider
ByteDance
Price
$0.203 / second
Model ID
seedance-2.5-draft
Type
video generation model
Create with Seedance 2.5 Draft
videoEvery run is a 480p draft at $0.203/s. Render the one you keep in 1080p at $0.899/s, within seven days.
Your result appears here
Start with the example prompt or make it your own. Your OttoPort account is used securely for generation.
Seedance 2.5 Draft API pricing
What OttoPort bills for Seedance 2.5 Draft, and what that works out to per unit. Rates are read from the same catalog the gateway meters against, and were current on 2026-10-17.
| 480p draft | $0.203 / s | every request |
|---|---|---|
| 5-second draft | $1.02 | |
| 1080p from a draft | $0.8995 / s | renders a finished draft by its draft_id |
| 5 seconds, draft + 1080p | $5.51 | one preview kept and rendered |
No subscription and no minimum — OttoPort bills prepaid credits against usage. See the full rate card.
Call Seedance 2.5 Draft in three lines
Send "model": "seedance-2.5-draft" to POST https://ottoport.ai/api/v1/videos/generations with an OttoPort key. No ByteDance account, no waitlist, no separate SDK.
curl https://ottoport.ai/api/v1/videos/generations \
-H "Authorization: Bearer $OTTOPORT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-draft",
"prompt": "cinematic product reveal, slow dolly, black background",
"duration": 5,
"aspect_ratio": "16:9"
}'import requests
job = requests.post(
"https://ottoport.ai/api/v1/videos/generations",
headers={"Authorization": "Bearer " + API_KEY},
json={
"model": "seedance-2.5-draft",
"prompt": "cinematic product reveal, slow dolly, black background",
"duration": 5,
"aspect_ratio": "16:9",
},
).json()
# Video is a job: poll it, or pass webhook_url and be told.
print(job["id"], job["status"])const res = await fetch("https://ottoport.ai/api/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seedance-2.5-draft",
prompt: "cinematic product reveal, slow dolly, black background",
duration: 5,
aspect_ratio: "16:9",
}),
});
// Video is a job: poll it, or pass webhook_url and be told.
const job = await res.json();
console.log(job.id, job.status);Before you start
- 1. Create a key at /api-keys.
- 2. Top up credits — the smallest pack is $25.
- 3. Paste the request. It returns a job ID; poll it or pass a webhook_url.
Full reference at /docs, or drive it from an agent with the MCP server and CLI.
Request parameters
The body POST https://ottoport.ai/api/v1/videos/generations accepts for Seedance 2.5 Draft.
| Field | Type | Required | Notes |
|---|---|---|---|
| model | string | Yes | Always seedance-2.5-draft for Seedance 2.5 Draft. |
| prompt | string | Yes | Subject, action, and camera movement. |
| duration | integer | No | Seconds of output. This is the billed unit. |
| resolution | string | No | 480p only: a draft renders there, and its completion at 1080p. Leave it out. |
| aspect_ratio | string | No | e.g. 16:9 or 9:16. |
| image_url | string | No | The first frame, for image-to-video. |
| last_frame_url | string | No | The closing frame. With image_url, this is first-and-last-frame generation. |
| reference_image_urls | array | No | Subjects the shot carries through — a character, a product — on models that accept references. Up to 9. |
| draft | boolean | No | Implied: every request is a 480p draft, and false is refused — use seedance-2.5 for a full clip. The job's id is a draft_id. |
| draft_id | string | No | Render a finished draft in 1080p, within seven days: the draft's job id, sent with model and nothing else — prompt, inputs and length all come from the draft. Drafts made under seedance-2.5 complete here too. |
| webhook_url | string | No | Called when the job settles, so you need not poll. |
| webhook_secret | string | No | Signs the webhook so you can verify it came from OttoPort. |
Seedance 2.5 Draft direct vs through OttoPort
Seedance 2.5 Draft is the same model either way — what changes is how many accounts, keys, and integrations you carry to reach it.
| ByteDance direct | Via OttoPort | |
|---|---|---|
| Accounts and keys | A ByteDance account, plus one more for every other model you add | One OttoPort account and one key for the whole catalog |
| Request shape | ByteDance's own SDK and response format | OpenAI-compatible — point baseURL at OttoPort and change the model string |
| Switching models | A new integration per provider | Replace seedance-2.5-draft with any other model ID in the catalog |
| Billing | A separate invoice and contract per provider | Prepaid credits, no subscription, one usage ledger |
| Provider outages | Your call fails | Configured backup routes are tried in order on provider failure |
Every run is a 480p draft at a fraction of the full price.
Render the take you like in 1080p — same shot, same length — within seven days.
Reference images work; reference video and audio do not.
Seedance 2.5 Draft API questions
Cost, keys, and model IDs for Seedance 2.5 Draft on OttoPort.
How much does the Seedance 2.5 Draft API cost?
On OttoPort, Seedance 2.5 Draft costs $0.203 / second as of 2026-10-17. For scale, 5-second draft: $1.02. Billing is prepaid usage with no subscription and no minimum, and the current rate is always published at ottoport.ai/pricing.
How do I get a Seedance 2.5 Draft API key?
You do not need a ByteDance key. Create an OttoPort account, generate a key at ottoport.ai/api-keys, and send it as "Authorization: Bearer <key>" to POST https://ottoport.ai/api/v1/videos/generations with "model": "seedance-2.5-draft". The same key reaches every other model in the catalog.
What is the model ID for Seedance 2.5 Draft?
The OttoPort model ID for Seedance 2.5 Draft is seedance-2.5-draft. Pass it as the model field on POST https://ottoport.ai/api/v1/videos/generations, or list it programmatically from GET https://ottoport.ai/api/v1/models.
Is Seedance 2.5 Draft generation synchronous?
No. POST https://ottoport.ai/api/v1/videos/generations returns a job ID immediately. Poll GET https://ottoport.ai/api/v1/videos/generations/{id} for status, or pass webhook_url and webhook_secret and OttoPort will call you when the job settles. You are billed per second of output, so a failed job costs nothing.
Do I need a ByteDance account to use Seedance 2.5 Draft?
No. OttoPort connects to ByteDance on your behalf, so one OttoPort account covers Seedance 2.5 Draft and every other model in the catalog — no per-provider contracts, keys, or invoices.
Other video generation models on the same API
Same endpoint, same key — swapping model is a one-string change from seedance-2.5-draft.
Gemini Omni 1.1 Flash API
$0.138 / second
Gemini Omni Flash API
$0.156 / second
Wan 3.0 Text to Video API
Alibaba
$0.20 / second
FLUX 3 API
Black Forest Labs
$0.213 / second
Seedance 2.5 API
ByteDance
$0.35 / second
MiniMax H3 API
MiniMax
$0.163 / second
Browse the full catalog — every model with its provider and per-unit price.