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": "Coastal cliffs, with nests of storks perched precariously."
}
'import requests
url = "https://api.krea.ai/generate/video/bytedance/seedance-2-5"
payload = { "prompt": "Coastal cliffs, with nests of storks perched precariously." }
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: 'Coastal cliffs, with nests of storks perched precariously.'})
};
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' => 'Coastal cliffs, with nests of storks perched precariously.'
]),
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\": \"Coastal cliffs, with nests of storks perched precariously.\"\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\": \"Coastal cliffs, with nests of storks perched precariously.\"\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\": \"Coastal cliffs, with nests of storks perched precariously.\"\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": "Coastal cliffs, with nests of storks perched precariously."
}
'import requests
url = "https://api.krea.ai/generate/video/bytedance/seedance-2-5"
payload = { "prompt": "Coastal cliffs, with nests of storks perched precariously." }
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: 'Coastal cliffs, with nests of storks perched precariously.'})
};
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' => 'Coastal cliffs, with nests of storks perched precariously.'
]),
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\": \"Coastal cliffs, with nests of storks perched precariously.\"\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\": \"Coastal cliffs, with nests of storks perched precariously.\"\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\": \"Coastal cliffs, with nests of storks perched precariously.\"\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.0645/sec |
| 480p | No | $0.1078/sec |
| 720p | Yes | $0.1452/sec |
| 720p | No | $0.2427/sec |
| 1080p | Yes | $0.2572/sec |
| 1080p | No | $0.4299/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 |
generateAudio | generate_audio | 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 <= 900719925474099112Show child attributes
Show child attributes
When true, rewrites the prompt for Seedance 2 using Krea prompt enhancement before video generation.
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?