Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
rreAPI Docs

doubao-seedance-2.0-official

Seedance 2.0 Official Channel API — first-party routing, 480p / 720p / 1080p / 4K output, per-second billing. Model ids doubao-seedance-2.0-official and doubao-seedance-2.0-fast-official.

Doubao Seedance 2.0 Official Channel — direct first-party routing, distinct from the standard doubao-seedance-2.0 channel. Two model ids: doubao-seedance-2.0-official (480p / 720p / 1080p / 4k) and doubao-seedance-2.0-fast-official (480p / 720p only). Same async endpoint, same parameter shape as the standard channel — pick the channel via the model id.

Official channel, ReAPI boundary. The upstream is the model vendor's first-party platform. Media inputs must still be public http(s) URLs; base64 / data URI media is not accepted by ReAPI even where upstream docs show base64 examples.

No real-person inputs. This channel rejects source images / videos that appear to contain a real person (upstream privacy policy) — the request fails with 400 (code 80007). For real-person uploads use a Face variant on the standard channel (doubao-seedance-2.0-face / -fast-face).

Tip — synthetic faces pass. The filter blocks only real persons, not AI-generated faces. A portrait generated with Seedream 5.0 (a face-bearing synthetic image) is accepted as a source image on this channel.

Quick example

curl https://reapi.ai/api/v1/videos/generations \
  -H "Authorization: Bearer rk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-official",
    "prompt": "A kitten yawning at the camera, soft morning light",
    "size": "16:9",
    "resolution": "720p",
    "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": "doubao-seedance-2.0-official",
        "prompt": "A kitten yawning at the camera, soft morning light",
        "size": "16:9",
        "resolution": "720p",
        "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: "doubao-seedance-2.0-official",
    prompt: "A kitten yawning at the camera, soft morning light",
    size: "16:9",
    resolution: "720p",
    duration: 5,
  }),
});
console.log(await r.json());
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]any{
        "model":      "doubao-seedance-2.0-official",
        "prompt":     "A kitten yawning at the camera, soft morning light",
        "size":       "16:9",
        "resolution": "720p",
        "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()
    out, _ := io.ReadAll(resp.Body)
    fmt.Println(string(out))
}

Request surface

The public endpoint and async response envelope are identical to the standard channel:

POST /api/v1/videos/generations

Mode is implicit — which media fields you set decides text-to-video, image-to-video, first/last-frame, or reference-driven generation:

FieldOfficial-channel behavior
model"doubao-seedance-2.0-official" or "doubao-seedance-2.0-fast-official"
promptRequired on every request (min 3 chars).
size"16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "adaptive". Default "adaptive".
resolution"480p", "720p", "1080p", "4k". Default "720p". 4k is doubao-seedance-2.0-official only; -fast-official rejects 1080p / 4k (480p / 720p only).
duration4–15 seconds. Default 5.
generate_audioBoolean. Default true.
return_last_frameBoolean. Default false.
tools[{"type": "web_search"}] to enable web search.
image_urlsPublic http(s) URLs, up to 9. Mutually exclusive with image_with_roles.
image_with_rolesFirst / last-frame slots (role: first_frame or last_frame). Cannot combine with video_urls or audio_urls.
video_urlsPublic http(s) URLs, up to 3. Presence switches billing to the cheaper reference tier (see Pricing).
audio_urlsPublic http(s) URLs, up to 3. Must be used together with image_urls or video_urls.

reAPI never silently substitutes one variant for another. Sending resolution: "1080p" to doubao-seedance-2.0-fast-official returns 400 (code 20003), never an auto-downgraded clip.

Differences from doubao-seedance-2.0

Aspectdoubao-seedance-2.0 (standard)doubao-seedance-2.0-official
Upstream channelStandardVendor first-party official
Wire model valuedoubao-seedance-2.0-face / -fast-facedoubao-seedance-2.0-official / -fast-official
Real-person inputsAccepted only on Face variantsNot accepted (no Face variant)
Per-second rateBaselineLower — direct official pricing
Validation error prefixseedance:seedance-official:

Pricing

Per-second × resolution, with a cheaper reference tier when a source video is uploaded. The official channel is priced below the standard channel at the same resolution. See current 480p / 720p / 1080p rates on the Seedance 2.0 model page.

Bill formula (1 credit = $0.001):

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


Validation errors

The response envelope and numeric error-code system match the standard channel. Official-channel validation messages use the seedance-official: prefix. Upstream content rejections (e.g. a real-person source image) surface as 400 with code 80007.

Pattern-match on the numeric code, not the message string.


When to pick which channel

NeedChannel
Lowest unit pricedoubao-seedance-2.0-official / -fast-official
Official first-party direct routedoubao-seedance-2.0-official / -fast-official
Real-person source images / videosdoubao-seedance-2.0-face / -fast-face (standard)

Switching channels = changing the model string in your request body. The response envelope and polling flow are shared; provider-specific validation and pricing differ as documented above.


Table of Contents