GPT Image 2.5 is live — OpenAI's newest image model, targeted edits that leave the rest of the frame alone
rreAPI Docs

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/json

Submitting 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 idResolutionsRequest surface
seedance-2.0-mini480p / 720pthe one documented below
doubao-seedance-2.0-eco-mini720p / 1080pthe 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-minidoubao-seedance-2.0-eco-mini
first_frame_url / last_frame_urlimage_with_roles with a first_frame / last_frame role
reference_image_urlsimage_urls
reference_video_urlsvideo_urls
reference_audio_urlsaudio_urls
aspect_ratiosize
web_searchtools: [{ "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.

ParameterTypeRequiredDefaultDescription
promptstringyesText 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_urlstringI2VFirst-frame image, a single public http(s) URL. Presence selects image-to-video.
last_frame_urlstringnoOptional last-frame image, a public http(s) URL.
reference_image_urlsstring[]R2V1–9 reference image URLs. Presence selects reference-to-video.
reference_video_urlsstring[]noUp to 3 reference video URLs.
reference_audio_urlsstring[]noUp to 3 reference audio URLs.
generate_audiobooleannofalseGenerate an audio track for the output video.
resolutionenumno720p480p · 720p.
bitrate_modeenumno"default"default: no processing; standard: smaller files; high: lighter compression. No extra generation charge.
aspect_ratioenumno16:916:9 9:16 1:1 4:3 3:4 21:9 adaptive.
durationintegerno5Output length in seconds, 415.
web_searchbooleannofalseAllow the model to ground the prompt with web search.
watermarkbooleannofalseStamp an "AI generated" mark in the bottom-right corner of the output.
content_filterbooleannotrueRun 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 than standard, 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:

ModeTriggerprompt
Text-to-video (T2V)no mediarequired
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):

InputBillable seconds
No reference_video_urls (text / image / first-last-frame / reference-image)duration you sent (default 5)
With reference_video_urlsduration + 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

HTTPcodeWhen
40020002Missing / invalid parameter (e.g. prompt required in T2V, value out of range)
40020003Parameter 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))
40080007Upstream content rejection (e.g. a flagged source image)
4011000110005Auth missing / invalid / revoked
40230001Insufficient credits
42950001Per-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_urls switches to R2V; sending first_frame_url switches to I2V; neither → T2V.
  • Seedance 2.0 Mini is the low-cost tier — for higher resolutions (1080p / 4k) use seedance-2-0 or its official channel.
  • Longer duration scales the bill linearly; start at 5s while iterating.

Table of Contents