> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apipod.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Seedance 2.5 Video Edit

> Seedance 2.5 Video Edit pins the omni-reference task type to video editing: provide the source video, describe the edit, and the output duration and aspect ratio automatically follow the source video.

<Warning title="Conditional validation">At least one reference video (the source video to edit) is required.</Warning>

## Editing Constraints

Seedance 2.5 Video Edit is the video-editing sub-task of the omni-reference family on the official discount route. Sending the source video plus explicit edit instructions pins `omni_reference_task_type=edit` upstream, so the provider validates the constraints at submission time and rejects incompatible parameters immediately with a 400, instead of failing asynchronously minutes later.

* **Source video**: at least one reference video is required; the source video must be 4-30 seconds long (validated by the provider per video).
* **Duration**: not settable. The model keeps the output length consistent with the source video. The field is not part of the contract - any passed value is silently ignored and -1 is always sent upstream.
* **Aspect ratio**: not settable. The output keeps the source video aspect ratio; the field is not part of the contract and any passed value is silently ignored (adaptive is always sent).
* **Reference materials**: up to 30 images, 10 videos, and 10 audios; audio cannot be provided on its own.
* **Prompt wording**: use explicit edit verbs such as replace, remove, restyle, or change into, and address materials explicitly with `@视频N` / `@图N` tokens (for example, `删除 @视频1中的所有人，除了主角。`). Ambiguous edit-or-extend prompts may still be re-judged by the model.

<Note>
  Note: When video input is enabled, the unit price is lower because the billing formula differs: without video = unit price × output duration; with video = unit price × (input duration + output duration). Since the output duration follows the source video, the estimated output duration is probed from the source video at billing time.
</Note>

Want to prolong a video instead? Use [Seedance 2.5 Video Extend](/seedance/2-5-video-extend).


## OpenAPI

````yaml api-reference/openapi/seedance--2-5-video-edit.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Seedance 2.5 Video Edit API
  version: 1.0.0
  description: >-
    Seedance 2.5 Video Edit pins the upstream omni-reference task type to video
    editing. Provide the source video (4-30 seconds) plus optional reference
    images or audios and describe the edit; the output keeps the source
    timeline, aspect ratio, and duration - duration and aspect_ratio are not
    settable (the fields are not exposed and any passed values are ignored). The
    required source video is validated at submission time, so missing materials
    fail fast instead of erroring asynchronously. In APIPod, the public model ID
    is seedance-2.5-edit, and results are returned through asynchronous video
    tasks.
servers:
  - url: https://api.apipod.ai
    description: Production
security: []
paths:
  /v1/videos/generations:
    post:
      tags:
        - Seedance 2.5 Video Edit
      summary: Create Generation Task
      description: >-
        Seedance 2.5 Video Edit pins the upstream omni-reference task type to
        video editing. Provide the source video (4-30 seconds) plus optional
        reference images or audios and describe the edit; the output keeps the
        source timeline, aspect ratio, and duration - duration and aspect_ratio
        are not settable (the fields are not exposed and any passed values are
        ignored). The required source video is validated at submission time, so
        missing materials fail fast instead of erroring asynchronously. In
        APIPod, the public model ID is seedance-2.5-edit, and results are
        returned through asynchronous video tasks.
      operationId: create-seedance-2-5-video-edit
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Seedance 2.5 Video Edit
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: seedance-2.5-edit
                prompt:
                  type: string
                  title: Prompt
                  description: >-
                    Editing instructions, up to 30000 characters. Use explicit
                    edit verbs such as replace, remove, restyle, or change into,
                    and address materials explicitly with @视频N / @图N tokens (for
                    example, 删除 @视频1中的所有人). It is recommended to keep the prompt
                    to no more than 500 Chinese characters or 1,000 English
                    words.
                  maxLength: 30000
                image_urls:
                  type: array
                  title: Image Urls
                  description: >-
                    Optional reference image URLs (for example the character or
                    style to keep). Up to 30 images are supported; each image
                    must be smaller than 30 MB.
                  maxItems: 30
                  items:
                    type: string
                video_urls:
                  type: array
                  title: Video Urls
                  description: >-
                    Reference video URLs. At least one is required (the source
                    video to edit, 4-30 seconds); up to 10 videos are supported.
                  minItems: 1
                  maxItems: 10
                  items:
                    type: string
                audio_urls:
                  type: array
                  title: Audio Urls
                  description: >-
                    Optional reference audio URLs. Up to 10 audios are
                    supported; each audio lasts 2-30 seconds. Audio cannot be
                    provided on its own.
                  maxItems: 10
                  items:
                    type: string
                resolution:
                  type: string
                  title: Resolution
                  description: Generate video resolution.
                  enum:
                    - 480p
                    - 720p
                    - 1080p
                  default: 720p
                generate_audio:
                  type: boolean
                  title: Generate Audio
                  description: >-
                    Controls whether the generated video contains audio
                    synchronized with the visuals.
                  default: true
              required:
                - model
                - prompt
                - video_urls
            example:
              model: seedance-2.5-edit
              prompt: 视频编辑：删除 @视频1中的所有人，除了主角。
              video_urls:
                - >-
                  https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/seedance2.5_edit_input.mov
              resolution: 480p
              web_search: false
              generate_audio: true
      responses:
        '200':
          description: Task accepted
          content:
            application/json:
              schema:
                type: object
                title: Task Submit Response
                description: Standard response for task submission
                properties:
                  code:
                    type: integer
                  data:
                    type: object
                    title: Task Submit Data
                    description: Data content for task submission
                    properties:
                      task_id:
                        type: string
                        description: generatation task id
                  message:
                    type: string
                required:
                  - code
                  - message
                  - data
                example:
                  code: 200
                  message: success
                  data:
                    task_id: vid_task_01JEXAMPLE
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |-
            curl https://api.apipod.ai/v1/videos/generations \
              -H "Authorization: Bearer $APIPOD_API_KEY" \
              -H "Content-Type: application/json" \
              -d '{
              "model": "seedance-2.5-edit",
              "prompt": "视频编辑：删除 @视频1中的所有人，除了主角。",
              "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/seedance2.5_edit_input.mov"],
              "resolution": "480p",
              "web_search": false,
              "generate_audio": true
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
                "model": "seedance-2.5-edit",
                "prompt": "视频编辑：删除 @视频1中的所有人，除了主角。",
                "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/seedance2.5_edit_input.mov"],
                  "resolution": "480p",
                  "web_search": False,
                  "generate_audio": True
            }

            response = requests.post(
                "https://api.apipod.ai/v1/videos/generations",
                headers={
                    "Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
                    "Content-Type": "application/json",
                },
                json=payload,
                timeout=60,
            )
            response.raise_for_status()
            print(response.json())
        - lang: Go
          label: Go
          source: |-
            package main
            import (
                "bytes"
                "encoding/json"
                "fmt"
                "net/http"
                "os"
            )

            func main() {
                payload := map[string]any{}
                if err := json.Unmarshal([]byte(`{
                  "model": "seedance-2.5-edit",
                  "prompt": "视频编辑：删除 @视频1中的所有人，除了主角。",
                  "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/seedance2.5_edit_input.mov"],
                      "resolution": "480p",
                      "web_search": false,
                      "generate_audio": true
                }`), &payload); err != nil {
                    panic(err)
                }
                body, err := json.Marshal(payload)
                if err != nil {
                    panic(err)
                }

                req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
                if err != nil {
                    panic(err)
                }
                req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
                req.Header.Set("Content-Type", "application/json")

                resp, err := http.DefaultClient.Do(req)
                if err != nil {
                    panic(err)
                }
                defer resp.Body.Close()
                fmt.Println(resp.Status)
            }
        - lang: Rust
          label: Rust
          source: |-
            use reqwest::Client;
            use serde_json::json;
            use std::env;

            #[tokio::main]
            async fn main() -> Result<(), Box<dyn std::error::Error>> {
                let payload = json!({
                    "model": "seedance-2.5-edit",
                    "prompt": "视频编辑：删除 @视频1中的所有人，除了主角。",
                    "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/seedance2.5_edit_input.mov"],
                          "resolution": "480p",
                          "web_search": false,
                          "generate_audio": true
                });
                let response = Client::new()
                    .post("https://api.apipod.ai/v1/videos/generations")
                    .bearer_auth(env::var("APIPOD_API_KEY")?)
                    .json(&payload)
                    .send()
                    .await?
                    .error_for_status()?;

                println!("{}", response.text().await?);
                Ok(())
            }
        - lang: JavaScript
          label: JavaScript
          source: >-
            const response = await
            fetch("https://api.apipod.ai/v1/videos/generations", {
              method: "POST",
              headers: {
                Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
                "Content-Type": "application/json",
              },
              body: JSON.stringify(
                {
                  "model": "seedance-2.5-edit",
                  "prompt": "视频编辑：删除 @视频1中的所有人，除了主角。",
                  "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/seedance2.5_edit_input.mov"],
                      "resolution": "480p",
                      "web_search": false,
                      "generate_audio": true
                }
              ),
            });


            if (!response.ok) {
              throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
            }


            console.log(await response.json());
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: APIPod API key
      description: Use your APIPod API key as a Bearer token in the Authorization header.

````