curl --request POST \
--url https://api.krea.ai/generate/video/bytedance/seedance-2-5 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water."
}
'import requests
url = "https://api.krea.ai/generate/video/bytedance/seedance-2-5"
payload = { "prompt": "A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water." }
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({
prompt: 'A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.'
})
};
fetch('https://api.krea.ai/generate/video/bytedance/seedance-2-5', 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.krea.ai/generate/video/bytedance/seedance-2-5",
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([
'prompt' => 'A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.'
]),
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.krea.ai/generate/video/bytedance/seedance-2-5"
payload := strings.NewReader("{\n \"prompt\": \"A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.\"\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.krea.ai/generate/video/bytedance/seedance-2-5")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.krea.ai/generate/video/bytedance/seedance-2-5")
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 \"prompt\": \"A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.\"\n}"
response = http.request(request)
puts response.read_body{
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "backlogged",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": null,
"result": null,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Seedance 2.5*
Most advanced Seedance with 30s clips, native audio, and up to 50 references. Default choice for most video generations — quality is head and shoulders above other models, it supports durations up to 30 seconds, and it outputs up to 1080p. Reach for this first unless the user asks for a specific model, needs 4k output, or cost is the priority.
- This API endpoint includes Krea prompt enhancement in addition to the base Seedance 2.5 model.
curl --request POST \
--url https://api.krea.ai/generate/video/bytedance/seedance-2-5 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water."
}
'import requests
url = "https://api.krea.ai/generate/video/bytedance/seedance-2-5"
payload = { "prompt": "A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water." }
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({
prompt: 'A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.'
})
};
fetch('https://api.krea.ai/generate/video/bytedance/seedance-2-5', 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.krea.ai/generate/video/bytedance/seedance-2-5",
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([
'prompt' => 'A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.'
]),
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.krea.ai/generate/video/bytedance/seedance-2-5"
payload := strings.NewReader("{\n \"prompt\": \"A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.\"\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.krea.ai/generate/video/bytedance/seedance-2-5")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.krea.ai/generate/video/bytedance/seedance-2-5")
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 \"prompt\": \"A tranquil bay with colorful fishing boats anchored, their reflections mirrored in the still water.\"\n}"
response = http.request(request)
puts response.read_body{
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "backlogged",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": null,
"result": null,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Pricing
| Resolution | Video Reference | Price |
|---|---|---|
| 480p | Yes | $0.0614/sec |
| 480p | No | $0.1027/sec |
| 720p | Yes | $0.1382/sec |
| 720p | No | $0.2311/sec |
| 1080p | Yes | $0.3402/sec |
| 1080p | No | $0.5686/sec |
Deprecated request aliases
Deprecated request aliases
| Deprecated | Use instead | Accepted until |
|---|---|---|
startImage | start_image | 2026-06-19 |
aspectRatio | aspect_ratio | 2026-06-19 |
endImage | end_image | 2026-06-19 |
referenceImages | reference_images | 2026-06-19 |
referenceVideos | reference_videos | 2026-06-19 |
referenceAudios | reference_audios | 2026-06-19 |
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
URL to receive a POST request when the job completes. The webhook will receive the job data including results.
Body
Can be an external URL, base64 data URI, or uploaded asset URL.
102416:9, 4:3, 1:1, 3:4, 9:16, 21:9 Can be an external URL, base64 data URI, or uploaded asset URL.
102430Can be an external URL, base64 data URI, or uploaded asset URL.
102410Can be an external URL, base64 data URI, or uploaded asset URL.
102410Can be an external URL, base64 data URI, or uploaded asset URL.
10244 <= x <= 30480p, 720p, 1080p -9007199254740991 <= x <= 9007199254740991Deprecated and ignored. Accepted until 2026-10-30T00:00:00Z, then rejected. Remove this field from requests.
12Show child attributes
Show child attributes
When true, rewrites the prompt for Seedance 2 using Krea prompt enhancement before video generation.
When true, generates a fast 480p draft of the video instead of a full-quality one, billed at the 480p rate. Use it to validate scene structure, motion, and prompt intent cheaply before rerunning with draft off. Any resolution sent alongside is ignored.
Response
The resulting job data. This will be returned in a pending state until the job is completed. See /jobs/{id} for retrieving the results.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$backlogged, queued, scheduled, processing, sampling, intermediate-complete, completed, failed, cancelled ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$Show child attributes
Show child attributes
Was this page helpful?