video-edit

Edit a video with Seedance 2.0 by regenerating from frames of it

Edit a video you already have stored with Ideogram by replacing part of it. Reference the source video with video_asset_identifier and mark the span to replace with start_frame_time and end_frame_time, in seconds. Seedance 2.0 generates a new clip for that span from your prompt, and the result is the source video with the generated clip spliced in over the span: everything before start_frame_time, then the generated clip, then everything from end_frame_time on. That edited video is the asset the request produces.

is_start_frame_included and is_end_frame_included anchor the generated clip on the span's own end frames, so it joins the surrounding footage instead of cutting to something unrelated. Anchoring the start opens the clip on the frame already at start_frame_time; anchoring the end lands it on the frame at end_frame_time; anchoring both joins at each seam. At least one must be anchored.

The generated clip is used at its own length, which the model rarely makes exactly the span's, so the edited video is usually a different length from the source. Request a duration close to the span to keep them near each other. The clip is scaled and cropped to fill the source's frame and conformed to its frame rate, so resolution and aspect ratio follow the source rather than being requested.

Video generation always runs asynchronously: the response returns as soon as the request is accepted and carries only a generation_id. Poll for completion and results with GET /v1/generations/{generation_id} using that id, or supply a webhook_url to have the finished result POSTed to your server instead.

Video links are available for a limited period of time; download the video if you want to keep it.

post/v2/video/edit/seedance-2

Query parameters

dry_runboolean

When true, the request is validated and priced but not run: nothing is generated, stored, or billed, and no safety review is performed. The response is a PriceQuote object instead of the usual response for this endpoint. Send exactly the request you would send to generate, so the quote reflects the same options.

Request body

start_frame_timenumber float required

A position within a source video, in seconds from its start. The frame shown at that position is the one selected; a position past the end of the video is rejected.

is_start_frame_includedboolean

Whether the generated clip is anchored on the frame already at start_frame_time, so it opens on the footage it replaces. Set it to false to anchor on the end frame alone, in which case is_end_frame_included must be true.

end_frame_timenumber float required

A position within a source video, in seconds from its start. The frame shown at that position is the one selected; a position past the end of the video is rejected.

is_end_frame_includedboolean

Whether the generated clip is anchored on the frame at end_frame_time, so it lands on the footage that follows the span.

promptstring required

A natural-language prompt describing what the replaced span should show.

resolution'480p' | '720p'

The resolution tier of the generated video.

durationinteger

The length of the generated video in seconds. When omitted, the model picks the best duration for the prompt ("auto").

generate_audioboolean

Whether to generate an audio track for the video. Audio roughly doubles the provider cost and is subject to stricter output moderation.

webhook_urlstring uri

HTTPS URL that Ideogram delivers the generated result to. Ideogram sends a JSON POST to this URL once all images for the request have finished generating. The body mirrors the synchronous generate response: request_id, created, and a data array containing every generated image (url, prompt, resolution, seed, is_image_safe). Each delivery is signed with Ed25519 and verifiable against the public keys at https://api.ideogram.ai/v1/.well-known/jwks.json. Must be HTTPS; private and loopback hosts and the cloud metadata service are rejected.

privateboolean nullable

When true or omitted, the output is kept private to your account. Set to false to publish the output to the public feed. Enterprise accounts always generate privately.

target_collection_idstring

A collection you can write to, by its URL-safe base64 collection id. The output videos are added to it when the request completes.

Example request

{
  "duration": 5,
  "private": true,
  "end_frame_time": "",
  "is_end_frame_included": false,
  "webhook_url": "https://api.example.com/webhooks/ideogram",
  "video_asset_identifier": "",
  "target_collection_id": "target_collection_id",
  "generate_audio": false,
  "is_start_frame_included": true,
  "prompt": "The camera pushes in as the dancer turns towards the light.",
  "resolution": "",
  "start_frame_time": ""
}

Response

An acknowledgement to poll with GET /v1/generations/{generation_id}.

generation_idstring required

URL-safe base64 ID of the accepted generation. Accepted by the GET /v1/generations/{generation_id} polling endpoint.

createdstring date-time required

The time the request was accepted.

Example response

{
  "generation_id": "generation_id",
  "created": "2000-01-23T04:56:07+00:00"
}

Changes