doubao-seedance-2.0-official
Doubao Seedance 2.0 Official Channel — direct first-party Volcengine Ark (火山方舟) routing with ReAPI's URL-only media contract.
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 Volcengine Ark
(火山方舟) first-party. 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/generationsMode is implicit — which media fields you set decides text-to-video, image-to-video, first/last-frame, or reference-driven generation:
| Field | Official-channel behavior |
|---|---|
model | "doubao-seedance-2.0-official" or "doubao-seedance-2.0-fast-official" |
prompt | Required 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). |
duration | 4–15 seconds. Default 5. |
generate_audio | Boolean. Default true. |
return_last_frame | Boolean. Default false. |
tools | [{"type": "web_search"}] to enable web search. |
image_urls | Public http(s) URLs, up to 9. Mutually exclusive with image_with_roles. |
image_with_roles | First / last-frame slots (role: first_frame or last_frame). Cannot combine with video_urls or audio_urls. |
video_urls | Public http(s) URLs, up to 3. Presence switches billing to the cheaper reference tier (see Pricing). |
audio_urls | Public 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
| Aspect | doubao-seedance-2.0 (standard) | doubao-seedance-2.0-official |
|---|---|---|
| Upstream channel | Standard | Volcengine Ark (火山方舟) official |
Wire model value | doubao-seedance-2.0-face / -fast-face | doubao-seedance-2.0-official / -fast-official |
| Real-person inputs | Accepted only on Face variants | Not accepted (no Face variant) |
| Per-second rate | Baseline | Lower — direct official pricing |
| Validation error prefix | seedance: | 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):
| Input | Billable seconds |
|---|---|
No video_urls (text / image / first-last-frame / audio reference) | duration you sent (default 5) |
With 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.
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
| Need | Channel |
|---|---|
| Lowest unit price | doubao-seedance-2.0-official / -fast-official |
| Official Volcengine Ark direct route | doubao-seedance-2.0-official / -fast-official |
| Real-person source images / videos | doubao-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.