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.
Parameters
Exactly 12 input fields. 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 | T2V: yes · I2V / R2V: no | — | Text prompt. Required for text-to-video; optional when a first_frame_url or reference_image_urls is set. |
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. |
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. |
nsfw_checker | boolean | no | true | Run the upstream NSFW 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.
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 | 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