seedance-2-0-mini
ByteDance Seedance 2.0 Mini — the low-cost tier of Seedance 2.0. One async video endpoint that auto-routes text-to-video, image-to-video, and reference-to-video by request shape, at 480p / 720p.
ByteDance Seedance 2.0 Mini — the low-cost tier of the Seedance 2.0 family. A single async video endpoint that auto-routes between T2V / I2V / R2V based on which media field your request carries. 480p or 720p, 4–15 second outputs. See current pricing on the model page.
Generation is asynchronous: the POST returns a task id, then poll
GET /api/v1/tasks/{id} until status is completed.
URL-only media. All media inputs must be public http(s) URLs.
base64 / data: URI media is not accepted by ReAPI — even where
upstream docs show base64 examples.
Quick example
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-mini",
"prompt": "A kitten yawning at the camera, soft morning light",
"resolution": "720p",
"aspect_ratio": "16:9",
"duration": 5
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={
"Authorization": "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
json={
"model": "seedance-2.0-mini",
"prompt": "A kitten yawning at the camera, soft morning light",
"resolution": "720p",
"aspect_ratio": "16:9",
"duration": 5,
},
timeout=30,
)
print(resp.json())const r = await fetch("https://reapi.ai/api/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seedance-2.0-mini",
prompt: "A kitten yawning at the camera, soft morning light",
resolution: "720p",
aspect_ratio: "16:9",
duration: 5,
}),
});
console.log(await r.json());package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "seedance-2.0-mini",
"prompt": "A kitten yawning at the camera, soft morning light",
"resolution": "720p",
"aspect_ratio": "16:9",
"duration": 5,
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/videos/generations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer rk_live_xxx")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var out map[string]any
json.NewDecoder(resp.Body).Decode(&out)
fmt.Println(out)
}Endpoint
POST /api/v1/videos/generations
Authorization: Bearer rk_live_xxx
Content-Type: application/jsonSubmitting returns a task id; poll GET /api/v1/tasks/{id}
for the result. Polling does not consume credits.
Variants
Two variants. Pick via model:
| Model id | Resolutions | Request surface |
|---|---|---|
seedance-2.0-mini | 480p / 720p | the one documented below |
doubao-seedance-2.0-eco-mini | 720p / 1080p | the Seedance 2.0 surface |
doubao-seedance-2.0-eco-mini is the economy tier. It adds 1080p, which
the standard Mini does not offer at all, and starts at 720p rather than
480p. It bills on its own per-second rates — see the
model page for the current
numbers.
The two variants do not take the same media fields. The parameter table
below documents seedance-2.0-mini. doubao-seedance-2.0-eco-mini takes the
Seedance 2.0 request surface instead, so a request copied between them is
rejected with 400 (code 20003) on the unknown field. The mapping:
seedance-2.0-mini | doubao-seedance-2.0-eco-mini |
|---|---|
first_frame_url / last_frame_url | image_with_roles with a first_frame / last_frame role |
reference_image_urls | image_urls |
reference_video_urls | video_urls |
reference_audio_urls | audio_urls |
aspect_ratio | size |
web_search | tools: [{ "type": "web_search" }] |
prompt, duration, resolution, generate_audio, bitrate_mode,
watermark and content_filter are spelled the same on both. The full
economy-tier reference is the
Seedance 2.0 request body; everything there
applies except the resolution set in the table above.
Picture quality on the economy tier may be below the standard Mini. The price reflects that. Generation also takes roughly 50–100 s longer than the standard tier. That is a typical range, not a guarantee.
Parameters
Exactly 12 input fields, for seedance-2.0-mini. The mode is implicit — which
media fields you set decides text-to-video, image-to-video, or
reference-driven generation.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | yes | — | Text prompt, 3–20,000 characters. Required in every mode — the channels behind this model cannot run a promptless request, so one is rejected with 400 (code 20003) before anything is charged. |
first_frame_url | string | I2V | — | First-frame image, a single public http(s) URL. Presence selects image-to-video. |
last_frame_url | string | no | — | Optional last-frame image, a public http(s) URL. |
reference_image_urls | string[] | R2V | — | 1–9 reference image URLs. Presence selects reference-to-video. |
reference_video_urls | string[] | no | — | Up to 3 reference video URLs. |
reference_audio_urls | string[] | no | — | Up to 3 reference audio URLs. |
generate_audio | boolean | no | false | Generate an audio track for the output video. |
resolution | enum | no | 720p | 480p · 720p. |
bitrate_mode | enum | no | "default" | default: no processing; standard: smaller files; high: lighter compression. No extra generation charge. |
aspect_ratio | enum | no | 16:9 | 16:9 9:16 1:1 4:3 3:4 21:9 adaptive. |
duration | integer | no | 5 | Output length in seconds, 4–15. |
web_search | boolean | no | false | Allow the model to ground the prompt with web search. |
watermark | boolean | no | false | Stamp an "AI generated" mark in the bottom-right corner of the output. |
content_filter | boolean | no | true | Run the upstream content check. |
All media inputs (first_frame_url, last_frame_url,
reference_image_urls, reference_video_urls, reference_audio_urls)
must be public HTTP(S) URLs — base64 / data: URIs are rejected.
Reference files are also inspected server-side before a task is created and
must be in a format the model accepts: images jpeg / png / webp / bmp / tiff
/ gif / heic / heif; videos an mp4 or mov container with H.264 or H.265 video
and an AAC / MP3 audio track; audio wav or mp3. Anything else (Matroska
.mkv / .mka / .webm, .m4a, VP9 / AV1) is rejected with 400
(code 20003) naming the entry — the check reads the file itself, so the
URL's extension does not matter.
bitrate_mode — enum, default "default"
Available across Seedance 2.0, Fast, Mini, and 2.5, including all channels. This is reAPI output processing after generation.
"default"or omitted: return the original file without processing or re-encoding. This is the default setting."standard": compress for smaller files and faster downloads."high": apply lighter compression to retain more detail thanstandard, usually producing a larger file. It does not enhance the original video.
Processing preserves resolution, frame timing, audio, and the MP4/MOV container. If encoding would increase file size, the original file is kept. The generation charge is unchanged. Processing adds time and supports source files up to 1 GiB; savings vary by video.
Legacy booleans remain accepted: false maps to "default", and true maps
to "standard". Other values return 400 before charging. Processing or
storage failures follow the existing task failure/refund policy; an
unprocessed source URL is not silently substituted after a processing failure.
{ "bitrate_mode": "default" }Modes
Mode is implicit — selected by which inputs you send:
| Mode | Trigger | prompt |
|---|---|---|
| Text-to-video (T2V) | no media | required |
| Image-to-video (I2V) | first_frame_url (optionally last_frame_url) | optional |
| Reference-to-video (R2V) | reference_image_urls (1–9) | optional |
// I2V — animate a first frame
{ "model": "seedance-2.0-mini", "first_frame_url": "https://…/frame.jpg", "resolution": "720p", "duration": 5 }
// R2V — keep subjects consistent across the clip
{ "model": "seedance-2.0-mini", "prompt": "the woman walks through the plaza", "reference_image_urls": ["https://…/a.jpg", "https://…/b.jpg"], "resolution": "720p", "duration": 5 }More examples
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-mini",
"first_frame_url": "https://example.com/frame.jpg",
"resolution": "720p",
"duration": 5
}'curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-mini",
"prompt": "the subject walks through a neon-lit street at night",
"reference_image_urls": [
"https://example.com/a.jpg",
"https://example.com/b.jpg"
],
"resolution": "720p",
"duration": 5
}'Pricing
Per-second, billed by resolution × whether a reference video is uploaded.
A request that carries reference_video_urls bills at a cheaper reference
tier. See current 480p / 720p rates on the
model page.
Bill formula (1 credit = $0.001):
| Input | Billable seconds |
|---|---|
No reference_video_urls (text / image / first-last-frame / reference-image) | duration you sent (default 5) |
With reference_video_urls | duration + ceil(sum of source video seconds) — the vendor processes the input clip(s) AND produces the output; both are billable. Failed probe → 400 PRICING_UNAVAILABLE, no charge. |
Final bill: ceil(per_second_usd × billable_seconds × 1000) credits.
Failed jobs refund automatically.
Output
On success, GET /api/v1/tasks/{id} returns:
{
"id": "task_…",
"model": "seedance-2.0-mini",
"status": "completed",
"output": { "video_urls": ["https://cdn.reapi.ai/media/tasks/…/0.mp4"] },
"error": null
}Errors
| HTTP | code | When |
|---|---|---|
| 400 | 20002 | Missing / invalid parameter (e.g. prompt required in T2V, value out of range) |
| 400 | 20003 | Parameter value out of range, or a reference file in an unsupported format (reference_audio_urls[0] format matroska is not supported (audio must be wav or mp3)) |
| 400 | 80007 | Upstream content rejection (e.g. a flagged source image) |
| 401 | 10001 – 10005 | Auth missing / invalid / revoked |
| 402 | 30001 | Insufficient credits |
| 429 | 50001 | Per-user rate limit exceeded |
Pattern-match on the numeric code, not the message string. Failed
generations are surfaced under error in the polling response and are
refunded automatically. Full catalog: Errors.
Tips
- Pick the mode by inputs, not a flag. Sending
reference_image_urlsswitches to R2V; sendingfirst_frame_urlswitches to I2V; neither → T2V. - Seedance 2.0 Mini is the low-cost tier — for higher resolutions (1080p / 4k)
use
seedance-2-0or its official channel. - Longer
durationscales the bill linearly; start at 5s while iterating.
Related
seedance-2-0— full referenceseedance-2-0-official— Official channel- Tasks — universal polling endpoint
- Errors — full error catalog