VIDEOS

Extend a Video

Generate a new segment that continues an existing clip. Returns a video object immediately; the completed job's content is the newly generated segment.

POST/v1/videos/extensions

Authorization

Authorizationstringheaderrequired

Bearer token — your API key. Example: Bearer sk-...

Models

ModelSegment durationInput clipMax input resolution
seedance-2.0-mini4–15s2–15s720p
seedance-2.0-fast4–15s2–15s720p
seedance-2.04–15s2–15s1080p (auto-pin cap)
seedance-2.54–30s2–30s1080p

The output resolution pins automatically to the input clip's resolution class, capped at 1080p and clamped to the model's ceiling. Audio-capable models always generate a synchronized track on extensions (there is no audio parameter here).

Input requirements

The input clip must be MP4 or QuickTime, H.264 or H.265 (AAC/MP3 audio if present), 24–60fps, with 300–6000 px sides, up to 200 MB, and within the model's input-clip duration window (see the table). Validation happens synchronously at staging — an unusable clip is a 400, never a failed job. The staged clip is kept alongside the job and cannot be deleted while the job is queued or running.

Segment semantics

seconds is the NEW segment's length, and the completed job's seconds and downloadable content describe the delivered segment — never a stitched input+output total (a documented divergence from OpenAI's stitched semantics). To include original footage, direct the model in the prompt ("…and then end with the original scene").

Billing

Extension jobs bill their entire token count at the model's with-video rate — the token count covers input + output duration, and a per-request minimum applies upstream. The estimated maximum cost is reserved against your credit balance at creation and settles from the actual usage; failed extensions are never charged.

Request body

multipart/form-data
modelstringrequired

A video model with video-input support (e.g. "seedance-2.0"). See the model table below.

promptstringrequired

Text description of the new segment (1–32,000 characters). Passed to the model verbatim after the extension formula.

secondsstringrequired

Required. The NEW segment's duration as an integer string within the model's supported range — never a stitched total, and never "auto".

videoany | objectrequired

The clip to extend, in one of three forms: a multipart file upload, {"id": "video_…"} naming a completed job of yours, or {"url": "https://…"}. Every form is staged and measured before the job is accepted.

Response

idstringrequired

The video ID (e.g. "video_abc123").

object"video"required

Object type — always "video".

modelstringrequired

The model used for the generation.

status"queued" | "in_progress" | "completed" | "failed"required

The current status of the generation job.

queuedin_progresscompletedfailed
progressintegerrequired

Estimated completion percentage. 0 while queued, an elapsed-time estimate (capped at 95) while in progress, 100 on completion.

created_atintegerrequired

Unix timestamp of when the job was created.

completed_atintegerrequired

Unix timestamp of when the job reached a terminal state.

expires_atintegerrequired

Unix timestamp of when the stored video expires. Currently always null — generated videos are retained until you delete them.

promptstringrequired

The prompt used for the generation.

sizestringrequired

Output size as WIDTHxHEIGHT. Shows the requested size while the job is pending, and the actual rendered pixels once completed (some models render close-but-not-exact sizes, e.g. 1248x704 for a 1280x720 request).

secondsstringrequired

Clip duration in seconds. Shows the requested value while pending and the actual rendered duration once completed.

audiobooleanrequired

Whether the video was generated with a synchronized audio track. Always false on models that only produce silent video.

errorobjectrequired

Error details when the job failed; null otherwise.

remixed_from_video_idstringrequired

Always null — remixing is not supported.

Request

curl 'https://api.scx.ai/v1/videos/extensions' \
  -H 'Authorization: Bearer your-scx-api-key' \
  -F model=seedance-2.0 \
  -F prompt='the camera pulls back to reveal the whole valley' \
  -F seconds=8 \
  -F video=@clip.mp4

Response

{
  "id": "video_31b7bd1c-0d6d-4a2f-9f6c-2c4e1c39d1a0",
  "object": "video",
  "model": "seedance-2.0",
  "status": "queued",
  "progress": 0,
  "created_at": 1783652619,
  "completed_at": null,
  "expires_at": null,
  "prompt": "the camera pulls back to reveal the whole valley",
  "size": "auto",
  "seconds": "8",
  "audio": true,
  "error": null,
  "remixed_from_video_id": null
}