Four-second realistic wildlife macro video. Vertical composition, locked camera, tropical rainforest daylight. TWO SEPARATE broad wet leaves are fully visible, one at upper left and one at lower right, separated by a small clear AIR GAP. Exactly ONE red-eyed green tree frog with orange toes crouches at the very tip of the LEFT leaf, facing the RIGHT leaf. The main event is a SINGLE HOP ACROSS THE GAP: within the first second it pushes off with both hind legs; its entire body and all four feet visibly leave the left leaf and travel through the air; it lands once on the separate right leaf by the second second. The right leaf briefly bends under the landing, releasing a few droplets. It then sits still for the remaining time. Show the complete takeoff, airborne body and landing in the same shot. No crawling along a leaf, no extra frog, no transformation. Natural quiet rain with one soft wet-leaf tap at landing; no music, speech, text or logos.
Seedance 1.5 Pro Text to Video API
bytedance/seedance-v1.5-pro/text-to-videoSeedance 1.5 Pro Text to Video turns written scenes into videos with synchronized audio and cinematic camera movement. It follows your scene, dialogue and action instructions to build cohesive short clips with expressive characters and coordinated sound.
Examples
REST API Spec
Quick Start
Use these request and response examples to integrate video generation.
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.5-pro/text-to-video",
"input": {
"prompt": "A ceramic cup rests on a wooden table. Steam rises as the camera slowly moves closer. Gentle room ambience accompanies the scene.",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 4,
"fixed_lens": false,
"generate_audio": true
}
}
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": "example-task-id",
"status": "not_started",
"created_time": "2026-09-27T12:00:00"
}
}{
"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 the example to view submission, polling and error handling together.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "bytedance/seedance-v1.5-pro/text-to-video",
"input": {
"prompt": "A ceramic cup rests on a wooden table. Steam rises as the camera slowly moves closer. Gentle room ambience accompanies the scene.",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 4,
"fixed_lens": false,
"generate_audio": true
}
}
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
doneInput parameters
Set model and optional callback_url at the request root. Place these generation parameters inside input.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | Describe the scene, actions, camera movement and sound in 3–2,500 Unicode characters after trimming surrounding whitespace. |
| aspect_ratio | string | Yes | — | Choose 1:1, 21:9, 4:3, 3:4, 16:9 or 9:16 for the output frame. |
| resolution | string | No | 720p | Choose 480p, 720p or 1080p. Vidgo defaults to 720p when omitted. |
| duration | integer | Yes | — | Set the video duration to the integer 4, 8 or 12 seconds. |
| fixed_lens | boolean | No | — | Set true to keep the camera fixed, or false to allow camera movement. |
| generate_audio | boolean | No | true | Set true for synchronized audio or false for a silent video. Vidgo defaults to true when omitted. |
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 queued.
runningVideo generation in progress.
finishedVideo ready in data.files.
failedRead data.error_message for the failure reason.
Polling & Error Handling
- Poll the taskPoll every 2–10 seconds while status is not_started or running. Stop at finished or failed.
- Resume a status queryAfter a network interruption, retry the status query using the same task_id.
- Receive callbacksSet callback_url to receive finished or failed task results through a POST request.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model | bytedance/seedance-v1.5-pro/text-to-video | Set this value in the root model field. |
| Resolution | 480p / 720p / 1080p | Choose 480p, 720p or 1080p. Vidgo defaults to 720p when omitted. |
| Duration | 4 / 8 / 12 | Set the video duration to the integer 4, 8 or 12 seconds. |
| Generate Audio | true / false | Set true for synchronized audio or false for a silent video. Vidgo defaults to true when omitted. |
Related models
Seedance 1.5 Pro Text to Video API frequently asked questions
What is the Seedance 1.5 Pro Text to Video API?
Seedance 1.5 Pro Text to Video API is ByteDance’s model interface for generating videos from written scene descriptions. It combines expressive movement, coordinated sound and camera direction in short clips. Its joint audio-video generation follows scene, dialogue and action instructions, with fixed-camera control for steady framing. You can call it programmatically or try it in the Playground tab.
Can Seedance 1.5 Pro Text to Video generate synchronized audio?
Set Generate Audio to true and describe the dialogue, ambient sound or action cues in Prompt. Audio and video are generated together, allowing sound to follow the scene’s movement.
How should dialogue be written for Seedance 1.5 Pro Text to Video?
Identify the speaker, put each spoken line in quotation marks and describe the tone and pace. The model can generate voices in multiple languages and dialects with lip movement aligned to speech.
How does Seedance 1.5 Pro Text to Video follow an action sequence?
Establish the character and setting, then describe the action in chronological order. Connect each movement to the same subject and use a camera instruction that follows the scene’s progression.
Can Seedance 1.5 Pro Text to Video create 12-second scenes?
Yes. Set Duration to 12 for a longer action or dialogue beat. You can also choose 4 or 8 seconds and match the prompt’s action sequence to that length.
How does Fixed Lens work in Seedance 1.5 Pro Text to Video?
Set Fixed Lens to true for steady framing. Describe movement through the subject’s actions within that frame; set it to false when you want the camera to follow a described move.
Can Seedance 1.5 Pro Text to Video generate 1080p video?
Yes. Select 1080p in Resolution and choose a 4, 8 or 12-second duration. The same duration options also apply to 480p and 720p output.















