API reference · ByteDance
bytedance/seedance/2.5/reference-to-video
Integrate this model through SandBase's unified API, with production-ready schemas and examples.
Production endpoint
Send your first request
OpenAI-compatible endpoint with unified authentication and usage tracking.
POST
https://api.sandbase.ai/v1/runModel ID
bytedance/seedance/2.5/reference-to-video01
Input Schema
12 parameters · 0 required · 12 optional
| Parameter | Type | Required | Description |
|---|---|---|---|
seed | integer | Optional | Random seed for reproducible results. Omit or use -1 for a random seed. · Min: -1 · Max: 4294967295 |
draft | boolean | Optional | Draft mode step 1: render a fast, low-cost 480p draft (overrides `resolution`, billed at the 480p rate). Pass the result's `outputs[0].draft_id` back as `draft_id` within 7 days to render the same shot at 1080p. · Default: false |
audios | string[] | Optional | The URLs of reference audio files to guide video generation. |
images | string[] | Optional | The URLs of reference images to guide video generation. Refer to them in the prompt as @Image1, @Image2, etc. |
prompt | string | Optional | The text prompt to generate a video from. · Min length: 3 · Max length: 50000 · Default: "Use Image1 as the visual reference and Video1 as the motion reference. Create a peaceful cinematic shoreline scene with rolling ocean waves at golden hour, soft foam, natural water movement, and no people." |
videos | string[] | Optional | The URLs of reference videos to guide video generation. Up to 10 MP4 or MOV files; combined duration must not exceed 30 seconds. |
draft_id | string | Optional | Draft mode step 2: the `outputs[0].draft_id` of a succeeded draft from this same model (created with `draft: true` in the last 7 days). Renders the same shot at 1080p, billed at the 1080p rate for the actual output length. The prompt, media, duration, aspect ratio, seed, audio setting and task type are reused from the draft; any such fields sent with `draft_id` are ignored. · Min length: 1 |
duration | any | Optional | Output duration in seconds (4-30), or `auto` to let the model pick a length from the prompt and inputs. `auto` is pre-authorized at 30 seconds and billed on the actual output length. When a reference video is edited or extended, use `auto` with `adaptive` aspect ratio so the output follows the source clip. · Options: auto, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 · Default: 5 auto456789101112131415161718192021222324252627282930 |
task_type | string | Optional | `reference` generates a new video from the references, `edit` edits a reference video (replace subjects, add or remove objects, repaint), `extend` extends a reference video forward or backward, `auto` (or omitted) lets the model infer it from the prompt. `edit` and `extend` require at least one video; `edit` forces `adaptive` aspect ratio and `auto` duration, `extend` forces `adaptive` aspect ratio. Write the prompt to match, otherwise the task can fail with a task-type mismatch. · Options: auto, reference, edit, extend autoreferenceeditextend |
resolution | string | Optional | The resolution of the video to generate. · Options: 480p, 720p, 1080p · Default: "720p" 480p720p1080p |
aspect_ratio | string | Optional | Output aspect ratio. Omit to let the model choose from the prompt and reference inputs. · Options: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive 16:99:161:14:33:421:9adaptive |
generate_audio | boolean | Optional | Whether to generate synchronized audio (voice, SFX, BGM) for the video. · Default: true |
02
Output Schema
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the generation task |
status | string | Task status: pending, running, completed, failed, timeout |
model | string | Model used for the generation |
outputs | array | Array of output items |
outputs[].url | string | URL of the generated artifact |
outputs[].content_type | string | MIME type (e.g. image/png, video/mp4) |
error | object | null | Error details if failed, null on success |
error.type | string | Machine-readable error type code |
error.message | string | Human-readable error description |
Async Workflow
This model uses asynchronous execution. Submit a request and poll for the result.
- Submit — POST to /v1/run, receive an
id - Poll — GET /v1/run/{id} until status is
completed,failed, ortimeout - Retrieve — Read
outputsfrom the completed response
03
Code Examples
Ready-to-run snippets
const apiKey = process.env.SANDBASE_API_KEY;
const response = await fetch("https://api.sandbase.ai/v1/run", {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "bytedance/seedance/2.5/reference-to-video",
"draft": false,
"images": [
"https://static.sandbase.ai/examples/bytedance/seedance/2.0/reference-to-video/input_image_safe_ocean_0.jpg"
],
"prompt": "Use Image1 as the visual reference and Video1 as the motion reference. Create a peaceful cinematic shoreline scene with rolling ocean waves at golden hour, soft foam, natural water movement, and no people.",
"videos": [
"https://static.sandbase.ai/examples/pixverse/sound-effects/input_video_0.mp4"
],
"duration": 5,
"resolution": "720p",
"generate_audio": true
}),
});
if (!response.ok) throw new Error(await response.text());
let result = await response.json();
for (let attempt = 0; attempt < 120 && !["completed", "failed", "timeout"].includes(result.status); attempt++) {
await new Promise((resolve) => setTimeout(resolve, 2_000));
const poll = await fetch(`https://api.sandbase.ai/v1/run/${result.id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!poll.ok) throw new Error(await poll.text());
result = await poll.json();
}
if (result.status !== "completed") throw new Error(`Generation ended: ${result.status}`);
console.log(result);