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
Note: endpoint hosts, model IDs and credential scopes are issued with your access package and may be region-specific. The values shown here are representative.

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.

POST /api/v3/contents/generations/tasks
{
  "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.

FieldTypeDescription
modelstringModel ID, e.g. seedance-2-5
contentarrayOrdered input items: text, image, video, audio
resolutionstring480p, 720p, 1080p (4K on 2.0)
durationintegerSeconds; supported values depend on model
ratiostringAspect ratio, e.g. 16:9, 9:16, 1:1
seedintegerReuse a seed for comparable output across runs
callback_urlstringWebhook 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

GET /api/v3/contents/generations/tasks/{id}

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 IDTierMax durationResolution
seedance-2-5Flagship30 s480p / 720p / 1080p
seedance-2-0Standard15 s480p → 4K
seedance-2-0-fastThroughput15 s480p / 720p / 1080p
seedance-2-0-miniVolume15 s480p / 720p

Errors

HTTPCodeMeaning
400invalid_requestMalformed body or unsupported parameter combination
401unauthorizedMissing, revoked or wrong-environment key
402insufficient_balancePrepaid capacity exhausted; top up or move to invoicing
404not_foundUnknown task ID or model
429rate_limitedConcurrency or request-rate ceiling reached
451content_policyInput or output rejected by moderation
5xxupstream_errorRetry 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.