Documentation
Seedance API reference
Asynchronous video generation over HTTP. Submit a task, poll for completion, receive a signed URL. This page covers the request shapes, model IDs, error handling and billing behaviour that matter in production.
Last updated: November 2026
Overview
Every generation is a task. You submit a task with a model, a set of inputs and output parameters; the API returns a task identifier immediately. You then poll the task (or receive a webhook) until it reaches a terminal state and returns output URLs.
- Transport: HTTPS, JSON request and response bodies
- Model: asynchronous task submission with status polling
- Outputs: MP4 delivered over time-limited signed URLs
- Idempotency: optional per-request key so retries do not double-bill
Authentication
Authenticate with a bearer token in the Authorization header. Keys are scoped to an account and an environment; production and test keys are separate.
Authorization: Bearer $TSC_API_KEY
- Store keys in a secret manager, never in client-side code
- Rotate keys on a schedule; old keys remain valid for a short grace window
- Requests with a missing or revoked key return
401
Quickstart
Submit a ten-second 1080p generation, then read the task until it succeeds.
{
"model": "seedance-2-5",
"content": [
{ "type": "text", "text": "Dolly-in on a rain-slick alley, neon reflections, 35mm" }
],
"resolution": "1080p",
"duration": 10
}
Response:
{
"id": "cgt-8f2a4c1d",
"status": "queued",
"created_at": 1762905600,
"model": "seedance-2-5"
}
Create a task
Required fields are model and content. Everything else has a documented default.
| Field | Type | Description |
|---|---|---|
model | string | Model ID, e.g. seedance-2-5 |
content | array | Ordered input items: text, image, video, audio |
resolution | string | 480p, 720p, 1080p (4K on 2.0) |
duration | integer | Seconds; supported values depend on model |
ratio | string | Aspect ratio, e.g. 16:9, 9:16, 1:1 |
seed | integer | Reuse a seed for comparable output across runs |
callback_url | string | Webhook destination for terminal state |
Reference inputs are additive: mixing a first-frame image with a style reference and a motion clip is a supported combination on 2.0 and 2.5. Seedance 2.5 accepts up to 50 multimodal references in one request.
Poll status
Status values: queued, running, succeeded, failed, cancelled. On success the response includes output URLs; on failure it includes a machine-readable error.code.
- Poll with exponential backoff starting around 2 seconds
- Prefer webhooks for long-running or high-volume pipelines
- Output URLs are time-limited — copy assets to your own storage on receipt
Model IDs
| Model ID | Tier | Max duration | Resolution |
|---|---|---|---|
seedance-2-5 | Flagship | 30 s | 480p / 720p / 1080p |
seedance-2-0 | Standard | 15 s | 480p → 4K |
seedance-2-0-fast | Throughput | 15 s | 480p / 720p / 1080p |
seedance-2-0-mini | Volume | 15 s | 480p / 720p |
Errors
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed body or unsupported parameter combination |
| 401 | unauthorized | Missing, revoked or wrong-environment key |
| 402 | insufficient_balance | Prepaid capacity exhausted; top up or move to invoicing |
| 404 | not_found | Unknown task ID or model |
| 429 | rate_limited | Concurrency or request-rate ceiling reached |
| 451 | content_policy | Input or output rejected by moderation |
| 5xx | upstream_error | Retry with backoff; failed tasks are not billed |
Billing
Usage is metered per successful generation and depends on model tier, resolution, duration and whether a video input is included. Failed or policy-rejected tasks are not billed. You can run on prepaid capacity or consolidated monthly invoicing; both appear as line items on a single USD invoice.
Rate limits
Concurrency is the primary control, not requests per minute: each tier has a maximum number of simultaneous render slots. Reserved capacity is available under committed-volume agreements. If you need to burst, tell your account manager the shape of the workload — campaign launches behave differently from steady-state catalog rendering.
Support
Integration questions go to [email protected]; commercial terms to [email protected]. Include the task ID and a timestamp in any bug report — it shortens the loop considerably.