Seedance 2.0 API
Text- and image-to-video with sound, billed per clip
seedance-2-0Async taskImage inputNative audiovideoLive price on TokPort: $0.64 per clipCalling the API
Base URL https://api.tokport.io, authenticated with Authorization: Bearer <key>. Create a key in your dashboard; the examples read it from TOKPORT_API_KEY. Every response carries an X-Oneapi-Request-Id header you can search in your usage log.
Text to video
POST /v1/videos · asynccurl https://api.tokport.io/v1/videos \
-H "Authorization: Bearer $TOKPORT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"seedance-2-0","prompt":"slow dolly-in on a coral reef at sunrise, sunbeams through the water","seconds":"5","ratio":"16:9"}'
# poll until status is "completed", then download
curl https://api.tokport.io/v1/videos/{id} -H "Authorization: Bearer $TOKPORT_API_KEY"
curl https://api.tokport.io/v1/videos/{id}/content -H "Authorization: Bearer $TOKPORT_API_KEY" -o clip.mp4Asynchronous. The submit response returns a task `id` with status `queued`. Poll `GET /v1/videos/{id}` until `status` is `completed` (progress 0–100), then download bytes from `GET /v1/videos/{id}/content`. Failed tasks are refunded.
Example response
{
"id": "task_gz9n3dcAaaJ942r9iXjyLzvW7CU9W9eG",
"object": "video",
"model": "seedance-2-0",
"status": "queued",
"progress": 0,
"created_at": 1791535189
}All fields: schema.
Image to video
POST /v1/videos · asynccurl https://api.tokport.io/v1/videos \
-H "Authorization: Bearer $TOKPORT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"seedance-2-0","image":"https://example.com/frame.png","prompt":"slow dolly-in on a coral reef at sunrise, sunbeams through the water","seconds":"5","ratio":"16:9"}'
# poll until status is "completed", then download
curl https://api.tokport.io/v1/videos/{id} -H "Authorization: Bearer $TOKPORT_API_KEY"
curl https://api.tokport.io/v1/videos/{id}/content -H "Authorization: Bearer $TOKPORT_API_KEY" -o clip.mp4Asynchronous. The submit response returns a task `id` with status `queued`. Poll `GET /v1/videos/{id}` until `status` is `completed` (progress 0–100), then download bytes from `GET /v1/videos/{id}/content`. Failed tasks are refunded.
Example response
{
"id": "task_gz9n3dcAaaJ942r9iXjyLzvW7CU9W9eG",
"object": "video",
"model": "seedance-2-0",
"status": "queued",
"progress": 0,
"created_at": 1791535189
}All fields: schema.
Errors
Errors are OpenAI-shaped: {"error": {"message", "type", "code"}}. Failed requests and failed tasks are not billed. See errors & limits.