One continuous four-second shot in a rain-wet night market. A fictional adult courier in an amber raincoat starts a small unbranded red delivery scooter beside a steaming noodle stall and pulls away. The camera tracks low beside the rear wheel from a medium-wide view to a medium view. Keep the courier, raincoat, scooter, stall, and camera direction consistent. Use believable acceleration, restrained tire spray, wet neon reflections, and natural cloth motion. Synchronized audio: one engine start, light rain on the awning, tire hiss on wet pavement, and quiet cooking sizzle. No cuts, no extra people entering frame, no dialogue, no readable text, no logos, no products, no advertising, no watermark.
Seedance 2.0 Mini Text-to-Video API
bytedance/seedance-2.0-mini/text-to-videoSeedance 2.0 Mini Text-to-Video API turns a text prompt into a 4–15 second video at 480p or 720p. A request can set one of seven aspect ratios and include generate_audio, return_last_frame, web_search, and seed; image, video, and audio inputs are not accepted.
Input
Generate audio
Ask the model to generate an audio track with the video.
Advanced
Return last frame
Keep the video result and request the final frame as an additional file.
Web search
Send the optional web_search Boolean field.
Output
IdleYour generated files will appear here
Set the inputs, choose a duration, then run the asynchronous video task.
Continue with
Examples
REST API
Quick Start
Authenticate, submit the smallest useful text request, then retrieve the asynchronous video result.
Connect to the Vidgo API
Create an API key, keep it on your server, and send it as a Bearer token.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Send the model ID and required input fields. A successful response returns a task_id immediately.
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "seedance-2.0-mini/text-to-video",
"callback_url": "https://webhook.site/b3fc9007-e1ec-4df1-97da-fd65c209e5d6",
"input": {
"prompt": "One continuous four-second shot in a rain-wet night market. A fictional adult courier in an amber raincoat starts a small unbranded red delivery scooter beside a steaming noodle stall and pulls away. The camera tracks low beside the rear wheel from a medium-wide view to a medium view. Keep the courier, raincoat, scooter, stall, and camera direction consistent. Use believable acceleration, restrained tire spray, wet neon reflections, and natural cloth motion. Synchronized audio: one engine start, light rain on the awning, tire hiss on wet pavement, and quiet cooking sizzle. No cuts, no extra people entering frame, no dialogue, no readable text, no logos, no products, no advertising, no watermark.",
"duration": 4,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"return_last_frame": true,
"seed": 24082401
}
}'Wait for the result
Poll only for not_started or running, or provide callback_url and handle the flat terminal callback body.
Track status
GET https://api.vidgo.ai/api/generate/status/5I2XP283UB2BTW3RStart near a 2–5 second interval and back off for long jobs. Stop on finished or failed. Network timeouts are transport errors; a failed task is a terminal business result. callback_url receives a flat terminal task object.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "5I2XP283UB2BTW3R",
"status": "running",
"created_time": "2026-08-24T08:50:43"
}
}{
"code": 200,
"data": {
"task_id": "5I2XP283UB2BTW3R",
"status": "finished",
"created_time": "2026-08-24T08:50:43",
"progress": 100,
"error_message": null,
"files": [
{
"file_type": "video",
"file_url": "https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-mini/text-to-video/v1/output.mp4"
}
]
}
}Complete runnable example
This script combines submission, polling, terminal-state handling, timeout behavior, and result extraction.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "seedance-2.0-mini/text-to-video",
"callback_url": "https://webhook.site/b3fc9007-e1ec-4df1-97da-fd65c209e5d6",
"input": {
"prompt": "One continuous four-second shot in a rain-wet night market. A fictional adult courier in an amber raincoat starts a small unbranded red delivery scooter beside a steaming noodle stall and pulls away. The camera tracks low beside the rear wheel from a medium-wide view to a medium view. Keep the courier, raincoat, scooter, stall, and camera direction consistent. Use believable acceleration, restrained tire spray, wet neon reflections, and natural cloth motion. Synchronized audio: one engine start, light rain on the awning, tire hiss on wet pavement, and quiet cooking sizzle. No cuts, no extra people entering frame, no dialogue, no readable text, no logos, no products, no advertising, no watermark.",
"duration": 4,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"return_last_frame": true,
"seed": 24082401
}
}
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')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/5I2XP283UB2BTW3R" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
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 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters
Send model and optional callback_url at the top level; put only the listed generation fields inside input. Media fields are rejected.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Must be seedance-2.0-mini/text-to-video. |
| callback_url | string (URL) | No | — | Public callback endpoint for the terminal task result. |
| input | object | Yes | — | Container for model-specific fields. |
| input.prompt | string | Yes | — | Trimmed length 1–20,000. |
| input.duration | integer | Yes | — | Inclusive range 4–15; booleans and decimals are invalid. |
| input.resolution | string | No | 720p | 480p or 720p. |
| input.aspect_ratio | string | No | — | auto, 21:9, 16:9, 4:3, 1:1, 3:4, or 9:16. |
| input.generate_audio | boolean | No | — | Request generated audio. |
| input.return_last_frame | boolean | No | — | Request an additional final-frame file. |
| input.web_search | boolean | No | — | Optional Boolean field. |
| input.seed | integer | No | — | Optional integer with no published range. |
Response Fields
Submission returns task identity. Status responses add progress, files, watermark URLs, or a failure message.
| Field | Type | Description |
|---|---|---|
| code | integer | Business result code; successful responses use 0 or 200. |
| message | string | Human-readable response or error message when present. |
| data.task_id | string | Identifier used in the status path. |
| data.status | string | not_started, running, finished, or failed. |
| data.created_time | string | Task creation timestamp. |
| data.progress | integer | Reported completion percentage. |
| data.files[] | array | All successful output files. |
| data.files[].file_url | string | Direct result URL. |
| data.files[].file_type | string | Media type such as video or image. |
| data.files[].watermark_url | string | null | Watermarked URL when available. |
| data.error_message | string | null | Failure detail for failed tasks. |
Task Lifecycle
Only not_started and running are pollable. finished and failed are terminal.
not_startedAccepted and waiting to begin.
runningGeneration is active; continue polling with backoff.
finishedSuccessful terminal state; read every returned file.
failedFailed terminal state; read error_message and stop.
Polling and Errors
- Authentication401 means the Bearer key is missing or invalid; correct it before retrying.
- Validation400 means the payload violates the contract; fix the named field.
- Polling intervalStart around 2–5 seconds and increase the delay for long jobs or 5xx/429 responses.
- Terminal statesStop immediately on finished or failed, and enforce a client timeout.
- Callback optionProvide top-level callback_url for the final flat task object; polling remains available.
Model Specifications
| Specification | Value | Details |
|---|---|---|
| Input mode | Text | Prompt only; media fields are rejected. |
| Output | Video + optional last frame | An asynchronous task may return multiple files. |
| Resolution | 480p / 720p | 720p is the API default. |
| Duration | 4–15 seconds | Every integer in the inclusive range is accepted. |
| Aspect ratio | Auto + 6 fixed | Seven accepted composition values. |
| Billing basis | 10 or 24 credits/s | Output seconds at the selected resolution. |
Seedance 2.0 Mini Text-to-Video API overview
Seedance 2.0 Mini Text-to-Video API requires a text prompt and no source media. The prompt can name the subject, setting, action, camera, lighting, and sound; the asynchronous task returns files through status polling or callback_url.
Why use Seedance 2.0 Mini Text-to-Video API?
Submit only a text prompt.Use prompt to describe the subject, setting, action, camera, lighting, and sound without uploading source media.
Choose an integer duration from 4–15 seconds.duration accepts every integer from 4 through 15, including both limits.
Choose from seven aspect ratios.aspect_ratio accepts auto, 16:9, 9:16, 1:1, 21:9, 4:3, and 3:4.
Request audio and a final-frame file.generate_audio requests an audio track; return_last_frame requests an additional final-frame file.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Required | Trimmed scene description from 1 through 20,000 characters. |
| duration | Required | Integer output duration from 4 through 15 seconds; the Playground starts at 5 seconds. |
| resolution | Optional | Output resolution. The API defaults to 720p and the Playground also starts at 720p. Default 720p480p |
| aspect_ratio | Optional | Auto or one of six fixed output ratios; the Playground starts at Auto. auto16:99:161:121:94:33:4 |
| generate_audio | Optional | Boolean audio-generation request. The Playground sends true by default; the API has no declared default. |
| return_last_frame | Optional | Boolean request for an additional final-frame result. The Playground omits it until enabled. |
| web_search | Optional | Boolean field. The Playground omits web_search until enabled. |
| seed | Optional | Integer seed with no public minimum or maximum. Empty Playground values are omitted. |
How to Use
Define the subjectName the subject, setting, and details that must stay visible.
Direct the actionDescribe one subject action, how the action begins, and where the action ends.
Set the cameraSeparate subject motion from shot size and camera movement.
Add light, mood, and soundSpecify lighting, atmosphere, and intended audio cues before submission.
Submit and trackRun the request, then poll the task ID or receive the terminal callback.
Pricing
Text-to-Video is billed only by output duration and resolution. One credit equals $0.005; optional audio, last frame, web search, and seed do not change the current rate.
| Usage | Rate | Details |
|---|---|---|
| 480p output | 10 credits / output second | $0.050/s. A 5 second output uses 50 credits ($0.250). |
| 720p output | 24 credits / output second | $0.120/s. A 5 second output uses 120 credits ($0.600). |
Best Use Cases
Storyboard previewsTurn a written shot into a 4–15 second video for checking action, camera direction, and framing before production.
Social variantsGenerate the same idea in landscape, square, portrait, or vertical compositions.
Camera-direction comparisonsSubmit separate prompts for locked, tracking, pushing, or orbiting camera movement and compare the returned videos.
Video drafts with audioName dialogue, sound effects, or ambience in prompt and set generate_audio to true.
Pro Tips
- Write in this order: subject and setting, action, camera, lighting, mood, then sound.
- Use concrete motion verbs and keep subject movement separate from camera movement.
- Give short clips one main action instead of several competing events.
- Describe the opening, development, and final beat when timing matters.
- Choose the delivery ratio before describing framing and empty space.
Notes
- Seedance 2.0 Mini Text-to-Video API does not accept image, video, audio, or reference-media fields.
- Duration is required even though the Playground supplies a 5 second starting value.
- The API defaults resolution to 720p; other Playground starting values are not API defaults.
- Tasks are asynchronous. Poll only while status is not_started or running.
Related Models
Seedance 2.0 Mini Text-to-Video API — Frequently asked questions
What is Seedance 2.0 Mini Text-to-Video API?
Seedance 2.0 Mini Text-to-Video API turns a text prompt into video. A successful submission returns task_id; after completion, data.files contains the video and can include a final-frame image when return_last_frame is true and the service returns that file.
How do I call Seedance 2.0 Mini Text-to-Video API?
Send POST /api/generate/submit with Authorization: Bearer VIDGO_API_KEY, set model to seedance-2.0-mini/text-to-video, and place prompt, duration, and other generation fields inside input. Poll the returned task_id or provide callback_url.
How is Seedance 2.0 Mini Text-to-Video API billed?
480p uses 10 credits ($0.050) per output second and 720p uses 24 credits ($0.120) per output second. The Run button displays both credits and the USD reference amount for the current request.
What inputs does Seedance 2.0 Mini Text-to-Video API accept?
prompt accepts 1–20,000 characters after trimming, duration accepts an integer from 4–15, resolution accepts 480p or 720p, and aspect_ratio accepts seven values. Optional fields include generate_audio, return_last_frame, web_search, and an integer seed.
How do I retrieve a Seedance 2.0 Mini Text-to-Video API result?
Poll GET /api/generate/status/{task_id} only while status is not_started or running. Stop on finished or failed; successful file URLs are in data.files[].file_url.
How should I choose among the three Seedance 2.0 Mini APIs?
Use Seedance 2.0 Mini Text-to-Video API without source media, Seedance 2.0 Mini Image-to-Video API for a required start frame and optional end frame, or Seedance 2.0 Mini Reference-to-Video API for image, video, or audio references.


