API Free WeekHundreds of APIs are free to call this week.Browse free APIs
API reference · ByteDance

bytedance/seedance/2.5/image-to-video

Integrate this model through SandBase's unified API, with production-ready schemas and examples.

VIDEOAsyncOpen model
Production endpoint

Send your first request

OpenAI-compatible endpoint with unified authentication and usage tracking.

POSThttps://api.sandbase.ai/v1/run
Model IDbytedance/seedance/2.5/image-to-video
01

Input Schema

9 parameters · 0 required · 9 optional

ParameterTypeRequiredDescription
seedintegerOptionalRandom seed for reproducible results. Omit or use -1 for a random seed. · Min: -1 · Max: 4294967295
draftbooleanOptionalDraft 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
imagestringOptionalThe URL of the starting image for video generation.
promptstringOptionalThe text prompt to generate a video from. · Min length: 3 · Max length: 50000 · Default: "Create a 360-degree orbiting camera shot based on this photo."
draft_idstringOptionalDraft 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
durationanyOptionalOutput 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. · 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
end_imagestringOptionalThe URL of the ending image for video generation.
resolutionstringOptionalThe resolution of the video to generate. · Options: 480p, 720p, 1080p · Default: "720p"
480p720p1080p
generate_audiobooleanOptionalWhether to generate synchronized audio (voice, SFX, BGM) for the video. · Default: true
02

Output Schema

FieldTypeDescription
idstringUnique identifier for the generation task
statusstringTask status: pending, running, completed, failed, timeout
modelstringModel used for the generation
outputsarrayArray of output items
outputs[].urlstringURL of the generated artifact
outputs[].content_typestringMIME type (e.g. image/png, video/mp4)
errorobject | nullError details if failed, null on success
error.typestringMachine-readable error type code
error.messagestringHuman-readable error description

Async Workflow

This model uses asynchronous execution. Submit a request and poll for the result.

  1. Submit — POST to /v1/run, receive an id
  2. Poll — GET /v1/run/{id} until status is completed, failed, or timeout
  3. Retrieve — Read outputs from 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/image-to-video",
    "draft": false,
    "image": "https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/f8fc1008f23a4908b7c897e8b7eb87df~tplv-goo7wpa0wc-image.image",
    "prompt": "Create a 360-degree orbiting camera shot based on this photo.",
    "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);