Seedance 2.0 Fast Video Generation API
Seedance 2.0 Fast parameters, reference media, asynchronous tasks, authenticated downloads and duration billing on APIMaster.
Seedance 2.0 Fast video generation
Use seedance-2.0-fast for text-to-video, image-to-video, first/last-frame generation, and video or audio references. Fast supports 480p and 720p, with output durations from 4 to 15 seconds.
For first/last-frame generation, explicitly set
aspect_ratio: "adaptive". Reference audio must accompany an image or video. Keep your APIMaster API key on your server.
Endpoints and authentication
Base URL: https://apimaster.ai/v1. Send Authorization: Bearer YOUR_API_KEY when submitting, querying, and downloading.
| Operation | Method and path |
|---|---|
| Create video | POST /v1/videos/generations |
| Query compatible result | GET /v1/video/generations/{task_id} |
| Query OpenAI-style result | GET /v1/videos/{task_id} |
| Download video | GET /v1/videos/{task_id}/content |
| Download requested last frame | GET /v1/videos/{task_id}/last-frame |
Use the public task_id returned by APIMaster. Video tasks and media-review tasks are different resources: use the video query endpoints above for videos. An accepted request creates one asynchronous task; HTTP success does not mean the video has finished.
Parameters
| Field | Type | Required / default | Description |
|---|---|---|---|
model |
string | Required | seedance-2.0-fast |
prompt |
string | Required | Up to 4000 characters. Describe the subject, motion, scene, camera, and desired audio; concise prompts are easier to control. |
duration |
integer | 5 |
Output length, 4–15 seconds. -1 is not supported. |
resolution |
string | 720p |
480p or 720p; 1080p and 4k are not supported. |
aspect_ratio |
string | 16:9 |
16:9, 9:16, 1:1, 4:3, 3:4, 21:9, or adaptive. |
ratio |
string | Same as aspect_ratio |
APIMaster alias. If both appear, their values must match. |
size |
string | Same as aspect_ratio |
A ratio such as 16:9 or adaptive. Prefer aspect_ratio and resolution to express the two dimensions separately. Conflicting specifications return 400. |
seed |
integer | Omitted | Controls variation; matching seeds do not guarantee identical output. |
generate_audio |
boolean | true |
Generate accompanying audio; use false for silent output. |
image_urls |
string[] | Omitted | Up to 9 reference images. Public image URLs or approved APIMaster asset:// IDs. |
image_with_roles |
object[] | Omitted | Image objects with url and role; cannot appear together with image_urls. See role rules below. |
video_urls |
string[] | Omitted | Up to 3 reference videos, with a total billable input duration of at most 15 seconds. See material requirements. |
audio_urls |
string[] | Omitted | Up to 3 reference audio files, combined duration at most 15 seconds. Requires image or video references. |
return_last_frame |
boolean | false |
On successful completion, return an authenticated APIMaster last-frame download URL when the result includes a last frame. |
nsfw_check |
boolean | false |
Request text/image content moderation before generation. Videos and audio are not included in this moderation pass. |
tools |
object[] | Omitted | Search tool declaration: [{"type":"web_search"}]. |
Draft generation and draft upgrades are exclusive to Seedance 2.5. Do not pass draft: true or draft_task_id to this model.
Reference materials
Provide publicly accessible HTTPS URLs, or approved IDs from your APIMaster media library. Files behind login pages or requiring your own authorization headers cannot be fetched. Successful image upload does not imply content approval or compliance with every model requirement.
| Material | Requirements |
|---|---|
| Reference images | Up to 9; use readable RGB JPEG/PNG images. The APIMaster image-upload endpoint has its own 20 MiB limit and accepts JPEG, PNG, GIF, and WebP. |
| Reference videos | Up to 3; MP4/MOV, H.264/H.265 video; AAC/MP3 audio when present. Use 480p–720p reference video, Combined reference duration must fit within 15 billable seconds. APIMaster verifies accessible MP4/MOV duration before charging; input clip durations are rounded up to whole seconds for this check and billing. |
| Reference audio | Up to 3; WAV or MP3, at most 20 MB per file, combined duration at most 15 seconds. Always accompany an image or video reference. |
Use clear images with sufficient detail, avoid corrupt or incomplete files, and keep reference-video motion consistent with your prompt. Media can fail asynchronous format or content review even when the submission is accepted.
Image roles
role |
Meaning |
|---|---|
first_frame |
Starting frame; at most one |
last_frame |
Ending frame; at most one, and requires a first frame |
reference_image |
Reference image, including approved character assets |
For first/last-frame tasks, set aspect_ratio to adaptive and omit video_urls and audio_urls. Use image_with_roles for explicit roles; do not also pass image_urls.
{
"model": "seedance-2.0-fast",
"prompt": "A paper boat drifts gently from the starting composition to the ending composition",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "adaptive",
"image_with_roles": [
{"url": "https://your-storage.example/start.png", "role": "first_frame"},
{"url": "https://your-storage.example/end.png", "role": "last_frame"}
],
"generate_audio": false
}
Uploads and media library
Upload a local image with POST /v1/uploads/images using multipart field file and Bearer authorization. The returned top-level url can be used as a public image input.
curl "https://apimaster.ai/v1/uploads/images" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@reference.png"
For reusable or character materials, create a group with POST /v1/seedance2/private-avatar/groups, submit materials with POST /v1/seedance2/private-avatar/assets, query review with GET /v1/tasks/{asset_task_id}, and use only Active assets as asset://{asset_id}. These resources belong to your account. Specify model: "seedance-2.0-fast" explicitly. Asset IDs from another platform or account cannot be used here.
See the media-library workflow for creation, submission, review, partial failures, and deletion. The upload and asset-management endpoints are shared; the generation limits on this page apply to Fast. A failed review may return no detailed reason; use clear compliant material in a supported format and submit a new review. Do not repeatedly recreate a task while an existing review is still processing.
Submit a video
curl "https://apimaster.ai/v1/videos/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model":"seedance-2.0-fast",
"prompt":"A small paper boat on calm water at sunrise, gentle tracking shot",
"duration":5,
"resolution":"720p",
"aspect_ratio":"16:9",
"generate_audio":true,
"return_last_frame":true
}'
Creation response:
{"code":200,"data":[{"status":"submitted","task_id":"task_PUBLIC_VIDEO_ID"}]}
A submit timeout is ambiguous: the request may have been accepted. Check your task history before resubmitting; another successful submission creates a separate billable task.
Video and audio references
{
"model": "seedance-2.0-fast",
"prompt": "Follow the reference motion and keep the scene consistent with the image",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "adaptive",
"image_urls": ["https://your-storage.example/reference.png"],
"video_urls": ["https://your-storage.example/reference.mp4"],
"audio_urls": ["https://your-storage.example/reference.mp3"],
"generate_audio": true
}
Query and download
Poll every 3–5 seconds. Stop when successful or failed.
curl "https://apimaster.ai/v1/video/generations/task_PUBLIC_VIDEO_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
Compatible query success:
{
"code":"success",
"message":"",
"data":{
"error":null,
"format":"mp4",
"metadata":null,
"status":"succeeded",
"task_id":"task_PUBLIC_VIDEO_ID",
"url":"https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/content",
"actual_time":118,
"last_frame_url":"https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/last-frame"
}
}
The example includes optional completion fields. actual_time is submission-to-completion elapsed time in seconds, not the billable video duration. last_frame_url is omitted if a last frame was not requested or is unavailable. Failed tasks do not include success-only elapsed-time or last-frame fields.
OpenAI-style query:
curl "https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
| Meaning | Compatible data.status |
OpenAI-style status |
|---|---|---|
| Waiting | queued |
queued |
| Generating | processing |
in_progress |
| Success | succeeded |
completed |
| Failure | failed |
failed |
The OpenAI-style object uses id for the public task ID and url for the video download URL. Optional actual_time and last_frame_url appear at the top level. On failure, read error.message in the corresponding result object. Responses do not include monetary fields.
Download with the same account's API key. Opening a result URL without authorization is insufficient. Save the output promptly.
curl -L "https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/content" \
-H "Authorization: Bearer YOUR_API_KEY" -o output.mp4
curl -L "https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/last-frame" \
-H "Authorization: Bearer YOUR_API_KEY" -o last-frame.jpg
Python full workflow
import os
import time
import requests
base = "https://apimaster.ai/v1"
headers = {"Authorization": f"Bearer {os.environ['APIMASTER_API_KEY']}"}
response = requests.post(base + "/videos/generations", headers=headers, json={
"model": "seedance-2.0-fast",
"prompt": "A small paper boat on calm water at sunrise",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
"return_last_frame": True,
}, timeout=90)
response.raise_for_status()
task_id = response.json()["data"][0]["task_id"]
for _ in range(240):
response = requests.get(base + "/video/generations/" + task_id,
headers=headers, timeout=30)
response.raise_for_status()
task = response.json()["data"]
if task["status"] == "failed":
raise RuntimeError((task.get("error") or {}).get("message", "Video failed"))
if task["status"] == "succeeded":
print("Elapsed seconds:", task.get("actual_time"))
for field, filename in [("url", "output.mp4"), ("last_frame_url", "last-frame.jpg")]:
if task.get(field):
with requests.get(task[field], headers=headers, stream=True, timeout=120) as result:
result.raise_for_status()
with open(filename, "wb") as out:
for chunk in result.iter_content(1024 * 1024):
out.write(chunk)
break
time.sleep(5)
else:
raise TimeoutError("Task still processing; query the same task_id later")
Duration billing
There are four tiers: 480P, 720P, 480P-input, and 720P-input. A tier labeled “uploaded videos” means that the request contains reference-video input. Select the input tier for the requested output resolution even if image/audio references are also present.
- Without reference video: generated video seconds × the corresponding resolution's unit price.
- With reference video: (total reference-video seconds + generated video seconds) × the corresponding input-tier unit price.
- The configured base unit price is multiplied by the applicable channel and account/group coefficients to obtain your final unit price. Check your model card and wallet consumption records for the applicable price.
For example, a 4-second reference video and a 5-second output use 9 billable seconds at the input tier. The input-tier unit price can differ from the regular tier; do not calculate only the output duration or apply the regular tier to video references. Images and audio do not add reference-video seconds. Generated audio does not introduce a separate sound/silent tier for these four configured prices.
Submission reserves the requested output duration, plus verified input-video duration when present. Omitted output duration reserves 5 output seconds. The task retains its submission-time tariff; completion reconciles actual duration. Failed generation refunds the video task charge.
Errors and troubleshooting
Invalid requests return an HTTP error. Read the JSON error message as well as the status code. Parameter validation uses APIMaster's error wrapper, for example:
{"code":"invalid_request","message":"First/last-frame tasks require adaptive aspect_ratio","data":null}
| Problem | Action |
|---|---|
| Unsupported resolution / duration | Choose 480p or 720p, and an integer duration from 4 to 15. |
| Conflicting ratio or size | Use consistent aspect_ratio, ratio, size, and resolution; preferably keep only the explicit ratio/resolution pair. |
| First/last-frame constraints | Use adaptive, at most one of each role, and omit video/audio references. |
| Reference video cannot be inspected | Supply an accessible complete MP4/MOV with a valid duration. |
| Reference audio without image/video | Add image/video references or remove the audio reference. |
| Content moderation rejection | Modify the text or image and submit a new request. A moderation-service failure may allow generation to continue; this is not an absolute safety guarantee. |
FormatUnsupported / Asynchronous format/content rejection |
Read the failed task's error.message, check formats and material requirements, and replace the source. |
401 |
Provide a valid Bearer API key. |
| Insufficient balance | Top up or use a key with sufficient quota. |
429 / temporary service error |
Wait and retry with backoff; avoid duplicate submissions after an ambiguous timeout. |
Synchronous invalid-parameter requests do not create video tasks or charge generation. Accepted tasks can still fail asynchronously; check the final task status before using a result.
See also: Video generation overview, Seedance 2.0, Seedance 2.0 Mini, and Seedance 2.5.
