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
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",
"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",
"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. |
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.















