DashboardExplore modelsQuick startDocumentationPricing
Playground
API keysAnalyticsBilling
Contact salesStatus
Sume API
Studio1MCP2API3
DashboardExplore modelsQuick startDocumentationPricing
Playground
API keysAnalyticsBilling
Contact salesStatus
Sume API
Explore/ByteDance/Seedance 2.5
Videofrom$0.1028 / s

Seedance 2.5

Generates video from text, an image, references · 480p to 1080p · 4–30 s · native audio

text-to-videoimage-to-videoreference-to-video
View docs
curl -X POST https://api.dev.sume.com/v1/video-router/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.5","prompt":"A sea otter floats on its back in a sunlit kelp cove, cracking a shell on its chest as gentle swells lift it, close-up.","duration":5,"resolution":"480p","aspect_ratio":"16:9","generate_audio":false}'
PlaygroundAPIRequestsAnalytics

Input

prompt What happens in the video.
image_url First frame (HTTPS image).
Drop an image here, or click to choose
Additional settings

Customize your input with more control.

Pricing…

Result Example

Example output of the input shown, made with Seedance 2.5 on Sume. Opening the playground does not charge; Run bills your Sume API balance at the price shown.

Table of contents

About

Generates video from text, an image, references · 480p to 1080p · 4–30 s · native audio

Model id seedance-2.5, sent to POST https://api.dev.sume.com/v1/video-router/generate.

1. Calling the API

Install the client

npm install @sume-com/client

Setup your API key

Set SUME_API_KEY as an environment variable in your server runtime. Make the key in Sume API → API keys.

export SUME_API_KEY="YOUR_API_KEY"

Submit a request

This sends the Playground's request, with the input it holds now. Change the input there and this updates. subscribe submits it, waits for the job and returns the result.

import { createSumeClient } from "@sume-com/client";

const sume = createSumeClient({ baseURL: "https://api.dev.sume.com" });

const response = await sume.subscribe("/v1/video-router/generate", {
  input: {
    "model": "seedance-2.5",
    "prompt": "A sea otter floats on its back in a sunlit kelp cove, cracking a shell on its chest as gentle swells lift it, close-up.",
    "duration": 5,
    "resolution": "480p",
    "aspect_ratio": "16:9",
    "generate_audio": false
  },
});

console.log(response.status, response.video?.url);

2. Authentication

API key

Send your Sume API key as a bearer token from server code only. Keys made under Sume API → API keys spend the workspace balance, the same one Studio spends, and call the model API only.

Authorization: Bearer $SUME_API_KEY

3. Queue

A submit answers at once with the job. Poll its status until it is completed, failed or canceled. Failed and canceled jobs are refunded.

Fetch request status

const response = await fetch(`https://api.dev.sume.com/v1/jobs/${jobId}/status`, {
  headers: { authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const { data: job } = await response.json();

Get the result

A completed job returns its media. A queued or running job answers 409 job_not_completed with the current status; a failed one 409 job_failed with the reason, and a canceled one 409 job_canceled.

const response = await fetch(`https://api.dev.sume.com/v1/jobs/${jobId}/result`, {
  headers: { authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const { data: result } = await response.json();

Cancel a request

A job can be canceled until generation starts.

const response = await fetch(`https://api.dev.sume.com/v1/jobs/${jobId}/cancel`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const { data: job } = await response.json();

4. Files

Hosted files (URL)

Fields that end in _url or _urls take public HTTPS URLs. Some hosts block or rate-limit fetches from servers.

Uploading files

Upload a local file to Sume's storage, then send the URL it returns.

import { readFile } from "node:fs/promises";
import { createSumeClient } from "@sume-com/client";

const sume = createSumeClient({ baseURL: "https://api.dev.sume.com" });

const url = await sume.uploadImage(await readFile("input.png"), "png");

5. Schema

Input

modelstringrequired
"seedance-2.5"
promptstringrequired
What happens in the video.
image_urlstring
First frame (HTTPS image).
end_image_urlstring
Last frame (HTTPS image).
reference_image_urlsstring[]
Reference images (HTTPS).
reference_video_urlsstring[]
Reference videos (HTTPS).
durationinteger
Seconds, 4–30.Default value: 5Range: 4–30
resolutionstring
Output resolution.Default value: "480p"Possible enum values: 480p, 720p, 1080p
aspect_ratiostring
Frame shape.Default value: "16:9"Possible enum values: auto, adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16
generate_audioboolean
Generate a soundtrack with the video.Default value: false
{
  "model": "seedance-2.5",
  "prompt": "A sea otter floats on its back in a sunlit kelp cove, cracking a shell on its chest as gentle swells lift it, close-up.",
  "duration": 5,
  "resolution": "480p",
  "aspect_ratio": "16:9",
  "generate_audio": false
}

Output

data.result.artifactsArtifact[]required
The generated media, in order.
data.jobJobrequired
The job record: id, status, model, input, created_at, started_at and completed_at.

Artifact

urlstringrequired
Public Sume CDN URL for the file. Do not parse the path.
typestringrequired
image, video, audio, model or file.
content_typestringrequired
The file's MIME type.
idstringrequired
Opaque artifact id, safe to log.
widthinteger
Pixels, when known.
heightinteger
Pixels, when known.
duration_msinteger
Length of a video or audio file, when known.
size_bytesinteger
File size, when known.

6. Price before you submit

The estimate is the charge: the same function prices both. This one prices the Playground's input.

const response = await fetch("https://api.dev.sume.com/v1/open/estimate", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    "model": "seedance-2.5",
    "input": {
      "prompt": "A sea otter floats on its back in a sunlit kelp cove, cracking a shell on its chest as gentle swells lift it, close-up.",
      "duration": 5,
      "resolution": "480p",
      "aspect_ratio": "16:9",
      "generate_audio": false
    }
  }),
});
const { data } = await response.json();
console.log(data.usd);

Full reference: /docs

Request history

Updating while a run is going

No requests

Loading this model's requests…

Analytics

Total requests—No requests
Execution p50—No requests
Execution p75—No requests
Execution p90—No requests
Execution p95—No requests
Execution p99—No requests
Success rate—No requests
Startup p50—No requests
Startup p75—No requests
Startup p90—No requests
Startup p95—No requests
Startup p99—No requests

Request counts

Completed 0Failed 0

Loading this model's requests…

End-to-end latency

Total time from request received to response sent.

No latency data available for this time range.

Recent errors

IDWhenTotal timeStatus
No requests foundThere are no requests that match the criteria

Slower requests

IDWhenTotal timeStatus
No requests foundThere are no requests that match the criteria

Pricing

Dollars per unit at each option, from our rate card; a request rounds up to $0.0001. The estimate above is the exact charge.

OptionPrice
480p$0.1028 / s
720p$0.2312 / s
1080p$0.5686 / s

More models by ByteDance

Price, resolution and duration show each model's full range.

ModelTypePriceResolutionDuration
Seedance 2.0 Minivideo$0.0400 – $0.0800 / s480p – 720p4 – 15 s
Seedance 2.0video$0.0711 – $0.3846 / s480p – 1080p4 – 15 s
Seedance 2.0 Fastvideo$0.0572 – $0.1231 / s480p – 720p4 – 15 s
OmniHuman 1.5lipsync$0.1600 / s720p – 1080p2 – 60 s
OmniHuman 2lipsync$0.1050 / s—4 – 60 s
LatentSynclipsync$0.0050 / s—2 – 60 s
Seedream 5.0 Liteimage$0.0339 / image——
Seedream 4.5image$0.0385 / image——
Seedream 4.0image$0.0300 / image——
Seedream 5.0 Proimage$0.0450 – $0.0900 / image1K – 2K—