One continuous cinematic five-second shot inside a Nordic night sleeper-train compartment. An adult Nordic woman with fair skin and a charcoal wool sweater sits in three-quarter profile at the window, her hands resting on her lap. Outside, a blizzard and dark conifer trunks stream past. Begin as a medium shot of her quiet face and the window, then slowly push in until the glass fills the frame. Warm amber cabin lamps and cold blue snowlight must stay physically consistent on the glass as layered reflections. Keep her anatomy, sweater knit, and seat geometry stable. No cuts, no other passengers, no readable text, no logos, no brands, no advertising, no watermark.
Seedance 1.0 Pro Text to Video API
bytedance/seedance/v1/pro/text-to-videoSeedance 1.0 Pro Text to Video transforms natural language prompts into high-fidelity cinematic video, with 720p and 1080p resolutions, 5-second and 10-second durations, and realistic physical motion simulation. It faithfully adheres to detailed scene prompts up to 10,000 Unicode characters while preserving consistent subject appearance, lighting, and environmental continuity across smooth camera movements.
Examples
REST API Spec
Quick Start
API structure examples, not actual generation results. Replace the example prompt and media URLs.
Step 1: Configure API authentication
Obtain an API key from the dashboard and include Authorization: Bearer <API_KEY> in every request header.
- Submission Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Auth Header
- Authorization: Bearer VIDGO_API_KEY
Step 2: Submit a generation task
POST /api/generate/submit. Pass model and optional callback_url at the root level, with generation parameters inside input.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "bytedance/seedance/v1/pro/text-to-video",
"input": {
"prompt": "One continuous cinematic five-second shot inside a Nordic night sleeper-train compartment. An adult Nordic woman with fair skin and a charcoal wool sweater sits in three-quarter profile at the window, her hands resting on her lap. Outside, a blizzard and dark conifer trunks stream past. Begin as a medium shot of her quiet face and the window, then slowly push in until the glass fills the frame. Warm amber cabin lamps and cold blue snowlight must stay physically consistent on the glass as layered reflections. Keep her anatomy, sweater knit, and seat geometry stable. No cuts, no other passengers, no readable text, no logos, no brands, no advertising, no watermark.",
"resolution": "720p",
"duration": 5
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Step 3: Poll for task completion
Poll status with task_id; continue while not_started or running, and stop on finished or failed. Read video URLs from data.files[].file_url on success, or data.error_message on failure.
Status Endpoint
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll status using task_id; continue while not_started or running, stop when finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "ZWY8D7HA9YAXUSPM",
"status": "running",
"created_time": "2026-09-22T19:06:20"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete end-to-end script example
Expand to view a production-ready script with retry logic, error handling, and timeout safeguards.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "bytedance/seedance/v1/pro/text-to-video",
"input": {
"prompt": "One continuous cinematic five-second shot inside a Nordic night sleeper-train compartment. An adult Nordic woman with fair skin and a charcoal wool sweater sits in three-quarter profile at the window, her hands resting on her lap. Outside, a blizzard and dark conifer trunks stream past. Begin as a medium shot of her quiet face and the window, then slowly push in until the glass fills the frame. Warm amber cabin lamps and cold blue snowlight must stay physically consistent on the glass as layered reflections. Keep her anatomy, sweater knit, and seat geometry stable. No cuts, no other passengers, no readable text, no logos, no brands, no advertising, no watermark.",
"resolution": "720p",
"duration": 5
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters (input object)
Pass model and optional callback_url at the root and these fields inside input. Only the documented fields and types are accepted; defaults apply only when omitted. Unknown fields, aspect ratio, audio, start/end frames and fixed lens fields are rejected, including null or empty values.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | Required string containing 1–10,000 Unicode characters after trimming surrounding whitespace. Non-string and blank prompts are rejected. |
| resolution | string | No | 720p | Only the strings 720p and 1080p are supported. Defaults to 720p only when omitted; aliases, different casing, surrounding whitespace, null and empty strings are rejected. |
| duration | integer | No | 5 | Only numeric integers 5 and 10 seconds are supported. Defaults to 5 only when omitted; strings, booleans, null and fractional values are rejected. Numeric 5.0 is equivalent to 5. |
Response Fields (query result)
Task details returned when polling GET /api/generate/status/{task_id}:
| Field | Type | Description |
|---|---|---|
| code | integer | Business response code, 200 on success. |
| data.task_id | string | Globally unique asynchronous task identifier. |
| data.status | string | Execution status: not_started, running, finished, or failed. |
| data.files | array | Generated video files upon completion, each with file_url and file_type. |
| data.error_message | string | null | Error description if task fails. |
Task Lifecycle
Clients should inspect the status field and stop polling when reaching finished or failed:
not_startedTask received and queued for execution.
runningGeneration is in progress.
finishedGeneration complete; retrieve video URL from data.files.
failedGeneration failed; inspect data.error_message; deducted credits are refunded per standard policy.
Polling & Error Handling
- Recommended Polling IntervalThe playground increases the polling interval from 2 seconds up to 10 seconds and stops on finished or failed.
- Network Fluctuations & RetriesA failed status query does not mean generation failed. Retry the status query for the same task without resubmitting.
- Asynchronous Webhook CallbackProvide callback_url at the root of the request payload to receive the completed task result automatically via POST.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model ID | bytedance/seedance/v1/pro/text-to-video | Root-level model field. |
| Resolution | 720p / 1080p | Only the strings 720p and 1080p are supported. Defaults to 720p only when omitted; aliases, different casing, surrounding whitespace, null and empty strings are rejected. |
| Duration | 5 / 10s | Only numeric integers 5 and 10 seconds are supported. Defaults to 5 only when omitted; strings, booleans, null and fractional values are rejected. Numeric 5.0 is equivalent to 5. |
Related Models
Seedance 1.0 Pro Text to Video API frequently asked questions
What is the Seedance 1.0 Pro Text to Video API?
Seedance 1.0 Pro Text to Video is a ByteDance model for text-to-video generation. It produces high-fidelity videos in 720p and 1080p resolutions directly from natural language prompts, supporting 5-second and 10-second durations with realistic physical dynamics and camera trajectory control. Built on ByteDance's advanced video generation architecture, it preserves lighting consistency and temporal coherence while strictly adhering to sequential action and spatial descriptions. You can call it programmatically or try it from the playground above.
Does Seedance 1.0 Pro Text to Video support 10-second videos?
Yes. The model provides both 5-second and 10-second duration settings (defaulting to 5 seconds). Choosing 10 seconds allows for richer narrative progression, multi-stage character movement, and smoother camera transitions within a single generation.
What resolutions does Seedance 1.0 Pro Text to Video support?
This endpoint supports 720p and 1080p output resolutions. Omitted resolution parameters default to 720p; select 1080p when generating high-definition assets for commercial displays or cinematic productions.
How long can text prompts be for Seedance 1.0 Pro Text to Video?
After trimming surrounding whitespace, prompts can range from 1 to 10,000 Unicode characters. This generous ceiling lets you provide comprehensive scene descriptions, lighting instructions, character actions, and multi-beat camera framing.
How is Seedance 1.0 Pro Text to Video priced?
Pricing is billed per generation based on resolution and duration (1 credit = $0.005). At 720p, 5 seconds costs 21 credits ($0.105) and 10 seconds costs 42 credits ($0.210). At 1080p, 5 seconds costs 43 credits ($0.215) and 10 seconds costs 86 credits ($0.430). Unsuccessful tasks are automatically refunded.
Can you control camera motion with prompts in Seedance 1.0 Pro Text to Video?
Yes. You can include standard cinematic camera terminology in your prompt (such as 'slow camera push in', 'tracking shot following the character', or 'aerial panoramic pan'), and the model will synchronize camera movement with the subject's action.
How do you maintain scene continuity during character actions in Seedance 1.0 Pro Text to Video?
Anchor the character appearance and surrounding setting clearly at the beginning of your prompt, then describe actions chronologically. Avoid conflicting camera directions or abrupt cuts within the same clip to maintain seamless temporal continuity.















