Begin exactly from Image 1 and finish on Image 2. In one continuous four-second shot, the same beige vintage compact car switches on its lights, rolls from the wet shoulder into the near lane, and drives away along the forest-road curve. Use one stable, gentle pan only. Preserve the exact car body, beige paint, wheels, forest, road geometry, camera height, mist, and dawn lighting. Keep the movement physically plausible, with restrained tire spray and stable reflections, and settle cleanly into the final composition without morphing. Synchronized audio: one quiet engine start, tires on wet asphalt, light rain, and distant forest ambience. No cuts, no people, no extra vehicles, no readable text, no logos, no products, no advertising, no watermark.
Seedance 2.0 Mini Image-to-Video API
seedance-2.0-mini/image-to-videoSeedance 2.0 Mini Image-to-Video API turns one required start-frame image and one optional end-frame image into a 4–15 second video at 480p or 720p. Place the start frame first and the end frame second in image_urls; aspect_ratio accepts only auto.
Input
Drag and drop files, paste from clipboard, or provide a URL.
Drag and drop files, paste from clipboard, or provide a URL.
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 one public start-frame URL, then retrieve the asynchronous video result.
Connect to the Vidgo API
Store VIDGO_API_KEY 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 a prompt, duration, and one image_urls item in the smallest useful request.
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/image-to-video",
"input": {
"prompt": "Begin exactly from Image 1 and finish on Image 2. In one continuous four-second shot, the same beige vintage compact car switches on its lights, rolls from the wet shoulder into the near lane, and drives away along the forest-road curve. Use one stable, gentle pan only. Preserve the exact car body, beige paint, wheels, forest, road geometry, camera height, mist, and dawn lighting. Keep the movement physically plausible, with restrained tire spray and stable reflections, and settle cleanly into the final composition without morphing. Synchronized audio: one quiet engine start, tires on wet asphalt, light rain, and distant forest ambience. No cuts, no people, no extra vehicles, no readable text, no logos, no products, no advertising, no watermark.",
"duration": 4,
"resolution": "720p",
"aspect_ratio": "auto",
"image_urls": [
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-mini/image-to-video/v1/input-start-frame.png",
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-mini/image-to-video/v1/input-end-frame.png"
],
"generate_audio": true,
"seed": 24082402
}
}'Wait for the result
Poll only non-terminal states or provide callback_url for a flat terminal callback body.
Track status
GET https://api.vidgo.ai/api/generate/status/ZC7XZS2EAVXDCRBQPoll every 2–5 seconds initially, back off for long tasks, and stop on finished or failed. Separate network timeouts from failed task results; callback_url remains an alternative.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "ZC7XZS2EAVXDCRBQ",
"status": "running",
"created_time": "2026-08-24T08:56:39"
}
}{
"code": 200,
"data": {
"task_id": "ZC7XZS2EAVXDCRBQ",
"status": "finished",
"created_time": "2026-08-24T08:56:39",
"progress": 100,
"error_message": null,
"files": [
{
"file_type": "video",
"file_url": "https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-mini/image-to-video/v1/output.mp4"
}
]
}
}Complete runnable example
The expanded script handles submission, polling, failure, timeout, 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/image-to-video",
"input": {
"prompt": "Begin exactly from Image 1 and finish on Image 2. In one continuous four-second shot, the same beige vintage compact car switches on its lights, rolls from the wet shoulder into the near lane, and drives away along the forest-road curve. Use one stable, gentle pan only. Preserve the exact car body, beige paint, wheels, forest, road geometry, camera height, mist, and dawn lighting. Keep the movement physically plausible, with restrained tire spray and stable reflections, and settle cleanly into the final composition without morphing. Synchronized audio: one quiet engine start, tires on wet asphalt, light rain, and distant forest ambience. No cuts, no people, no extra vehicles, no readable text, no logos, no products, no advertising, no watermark.",
"duration": 4,
"resolution": "720p",
"aspect_ratio": "auto",
"image_urls": [
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-mini/image-to-video/v1/input-start-frame.png",
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-mini/image-to-video/v1/input-end-frame.png"
],
"generate_audio": true,
"seed": 24082402
}
}
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/ZC7XZS2EAVXDCRBQ" \
--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 callback_url at the top level. input accepts only the listed common fields and ordered image_urls.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Must be seedance-2.0-mini/image-to-video. |
| callback_url | string (URL) | No | — | Public terminal callback endpoint. |
| input | object | Yes | — | Model-specific input object. |
| input.prompt | string | Yes | — | Trimmed length 1–20,000. |
| input.image_urls | string[] | Yes | — | One Start URL and optional second End URL, in order. |
| input.duration | integer | Yes | — | Inclusive 4–15. |
| input.resolution | string | No | 720p | 480p or 720p. |
| input.aspect_ratio | string | No | — | Omit or send auto only. |
| input.generate_audio | boolean | No | — | Optional generated audio. |
| input.return_last_frame | boolean | No | — | Optional final-frame result. |
| 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 returns progress, every output file, or a terminal error.
| Field | Type | Description |
|---|---|---|
| code | integer | Business code; success uses 0 or 200. |
| message | string | Response message when present. |
| data.task_id | string | Status-query identifier. |
| data.status | string | not_started, running, finished, or failed. |
| data.created_time | string | Creation timestamp. |
| data.progress | integer | Reported progress. |
| data.files[] | array | All successful files. |
| data.files[].file_url | string | Direct result URL. |
| data.files[].file_type | string | video, image, or another returned type. |
| data.files[].watermark_url | string | null | Watermarked URL when available. |
| data.error_message | string | null | Failure detail. |
Task Lifecycle
Only non-terminal states are polled.
not_startedAccepted and queued.
runningGenerating; continue polling.
finishedSuccessful terminal state; read all files.
failedFailed terminal state; stop and read the error.
Polling and Errors
- Authentication401 means the Bearer key is missing or invalid.
- Validation400 means a field, frame count, or ratio is invalid.
- Polling intervalStart around 2–5 seconds and back off for long tasks, 429, or 5xx.
- Terminal statesStop on finished or failed and enforce a client timeout.
- Callback optioncallback_url receives a flat terminal task object; polling remains available.
Model Specifications
| Specification | Value | Details |
|---|---|---|
| Input mode | 1–2 frames | Required Start and optional End in image_urls order. |
| Output | Video + optional last frame | Asynchronous mixed-file result. |
| Resolution | 480p / 720p | 720p is the API default. |
| Duration | 4–15 seconds | Inclusive integer range. |
| Aspect ratio | Auto | Other ratio values are rejected. |
| Billing basis | 10 or 24 credits/s | Output duration at the selected resolution. |
Related Models
Seedance 2.0 Mini Image-to-Video API — Frequently asked questions
What is Seedance 2.0 Mini Image-to-Video API?
Seedance 2.0 Mini Image-to-Video API turns one start frame and one optional end frame into video. The first image_urls item is the start frame and the second is the end frame; a successful submission returns task_id for the asynchronous task.
How do I call Seedance 2.0 Mini Image-to-Video API?
Send POST /api/generate/submit with a Bearer key, set model to seedance-2.0-mini/image-to-video, and provide one or two public HTTP(S) URLs in input.image_urls. Poll the returned task_id or provide callback_url.
How is Seedance 2.0 Mini Image-to-Video API billed?
480p uses 10 credits ($0.050) per output second and 720p uses 24 credits ($0.120) per output second. One or two images use the same rate when duration and resolution are unchanged.
What inputs does Seedance 2.0 Mini Image-to-Video API accept?
input must contain prompt, an integer duration from 4–15, and image_urls with one or two ordered image URLs. resolution accepts 480p or 720p; aspect_ratio must be omitted or set to auto.
How do I retrieve a Seedance 2.0 Mini Image-to-Video API result?
Poll the task only while status is not_started or running. Stop when status becomes finished or failed; data.files contains the video and any other files returned by the service.
How should I choose among the three Seedance 2.0 Mini APIs?
Use Seedance 2.0 Mini Image-to-Video API for a required start frame and optional end frame, Seedance 2.0 Mini Text-to-Video API without source media, or Seedance 2.0 Mini Reference-to-Video API for image, video, or audio references.















