Seedance 2.0 Fast R2V
curl --request POST \
--url https://api.snapgen.org/v1/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"seconds": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"image_urls": [
"<string>"
],
"video_urls": [
"<string>"
],
"audio_urls": [
"<string>"
],
"generate_audio": true
}
'import requests
url = "https://api.snapgen.org/v1/videos"
payload = {
"model": "<string>",
"prompt": "<string>",
"seconds": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"image_urls": ["<string>"],
"video_urls": ["<string>"],
"audio_urls": ["<string>"],
"generate_audio": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
seconds: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
image_urls: ['<string>'],
video_urls: ['<string>'],
audio_urls: ['<string>'],
generate_audio: true
})
};
fetch('https://api.snapgen.org/v1/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snapgen.org/v1/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'seconds' => '<string>',
'aspect_ratio' => '<string>',
'resolution' => '<string>',
'image_urls' => [
'<string>'
],
'video_urls' => [
'<string>'
],
'audio_urls' => [
'<string>'
],
'generate_audio' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.snapgen.org/v1/videos"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"seconds\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.snapgen.org/v1/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"seconds\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snapgen.org/v1/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"seconds\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true\n}"
response = http.request(request)
puts response.read_bodySeedance 2.0
Seedance 2.0 Fast R2V
Seedance 2.0 Fast R2V video API via SnapGen: reference-to-video mode of Seedance 2.0 Fast with image, video, and audio references, billed from prepaid balance.
POST
/
v1
/
videos
Seedance 2.0 Fast R2V
curl --request POST \
--url https://api.snapgen.org/v1/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"seconds": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"image_urls": [
"<string>"
],
"video_urls": [
"<string>"
],
"audio_urls": [
"<string>"
],
"generate_audio": true
}
'import requests
url = "https://api.snapgen.org/v1/videos"
payload = {
"model": "<string>",
"prompt": "<string>",
"seconds": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"image_urls": ["<string>"],
"video_urls": ["<string>"],
"audio_urls": ["<string>"],
"generate_audio": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
seconds: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
image_urls: ['<string>'],
video_urls: ['<string>'],
audio_urls: ['<string>'],
generate_audio: true
})
};
fetch('https://api.snapgen.org/v1/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snapgen.org/v1/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'seconds' => '<string>',
'aspect_ratio' => '<string>',
'resolution' => '<string>',
'image_urls' => [
'<string>'
],
'video_urls' => [
'<string>'
],
'audio_urls' => [
'<string>'
],
'generate_audio' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.snapgen.org/v1/videos"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"seconds\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.snapgen.org/v1/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"seconds\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snapgen.org/v1/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"seconds\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true\n}"
response = http.request(request)
puts response.read_bodyseedance-2.0-fast-r2v is the reference-to-video mode of Seedance 2.0 Fast with image, video, and audio references.
| Property | Value |
|---|---|
| Model ID | seedance-2.0-fast-r2v |
| Input | prompt + images + video + audio |
| Output | 480p, 720p video with native audio |
| Duration | 4 to 15 seconds |
| Price | 480p: $0.07 per second; 720p: $0.135 per second |
| Reference video billing | Billed seconds = output seconds + reference seconds, measured by the gateway (15 s billed if a clip cannot be measured) |
string
required
Set to
seedance-2.0-fast-r2v.string
required
Describe the subject, action, camera movement, lighting, and audio intent.
string
default:"10"
Output length: 4 to 15 seconds.
string
One of
21:9, 16:9, 4:3, 1:1, 3:4, 9:16, adaptive. adaptive follows the input image or video. Send it explicitly; do not send a pixel size.string
default:"720p"
One of
480p, 720p. The price depends on the resolution.string[]
Up to 9 public
http/https image URLs, each up to 30 MB (JPEG, PNG, WEBP, BMP, GIF).string[]
Up to 3 public source or reference clips, each up to 50 MB (MP4, MOV).
The gateway reads each clip’s length from its MP4/MOV header with HTTP range requests and bills that length, rounded up to whole seconds (up to 15 s). Host clips where range requests work, such as S3, R2, or most CDNs; a clip that cannot be measured bills 15 s.
string[]
Up to 3 public reference audio URLs, each up to 15 MB (MP3, WAV).
boolean
default:"true"
Set to
false for a silent video.Request
curl https://api.snapgen.org/v1/videos \
-H "Authorization: Bearer $SNAPGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast-r2v",
"prompt": "The dancer from the reference performs the routine on a beach at dusk",
"seconds": "5",
"aspect_ratio": "21:9",
"resolution": "720p",
"image_urls": ["https://example.com/reference.jpg"]
}'
id. Poll and download with the same model:
curl "https://api.snapgen.org/v1/videos/$VIDEO_ID?model=seedance-2.0-fast-r2v" \
-H "Authorization: Bearer $SNAPGEN_API_KEY"
curl -L "https://api.snapgen.org/v1/videos/$VIDEO_ID/content?model=seedance-2.0-fast-r2v" \
-H "Authorization: Bearer $SNAPGEN_API_KEY" \
--output video.mp4
Price examples
| Resolution | Per second | 5-second clip |
|---|---|---|
| 480p | $0.07 | $0.35 |
| 720p | $0.135 | $0.675 |
Media inputs must be public
http or https URLs. Private network addresses and
local files are rejected. Failed generations are not charged.