> ## 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 Extend

> Seedance 2.5 Video Extend pins the omni-reference task type to video extension: provide the source video, describe the forward or backward continuation, and the output aspect ratio automatically follows the source video.

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

## Extension Constraints

Seedance 2.5 Video Extend is the video-extension sub-task of the omni-reference family on the official discount route. Sending the source video plus explicit continuation wording pins `omni_reference_task_type=extend` 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.
* **Duration**: 4-30 seconds (default 4), covering the extension length.
* **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 continuation wording such as extend the video forward or continue the story backward, and address materials explicitly with `@视频N` / `@图N` tokens (for example, `延长@视频1`). Ambiguous extend-or-edit intents 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).
</Note>

Want to edit a video in place instead? Use [Seedance 2.5 Video Edit](/seedance/2-5-video-edit).


## OpenAPI

````yaml api-reference/openapi/seedance--2-5-video-extend.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Seedance 2.5 Video Extend API
  version: 1.0.0
  description: >-
    Seedance 2.5 Video Extend pins the upstream omni-reference task type to
    video extension. Provide the source video and describe the continuation
    (forward or backward); the output is 4-30 seconds, the aspect ratio
    automatically follows the source video (not settable - the field is not
    exposed and any passed value is ignored), and the required source video is
    validated at submission time instead of failing asynchronously. In APIPod,
    the public model ID is seedance-2.5-extend, 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 Extend
      summary: Create Generation Task
      description: >-
        Seedance 2.5 Video Extend pins the upstream omni-reference task type to
        video extension. Provide the source video and describe the continuation
        (forward or backward); the output is 4-30 seconds, the aspect ratio
        automatically follows the source video (not settable - the field is not
        exposed and any passed value is ignored), and the required source video
        is validated at submission time instead of failing asynchronously. In
        APIPod, the public model ID is seedance-2.5-extend, and results are
        returned through asynchronous video tasks.
      operationId: create-seedance-2-5-video-extend
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Seedance 2.5 Video Extend
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: seedance-2.5-extend
                prompt:
                  type: string
                  title: Prompt
                  description: >-
                    Continuation instructions, up to 30000 characters. Use
                    explicit extension wording such as extend the video forward
                    or continue the story backward, 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 extend); 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
                duration:
                  type: integer
                  title: Duration
                  description: Output video duration in seconds, from 4 to 30.
                  enum:
                    - 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: 4
                  minimum: 4
                  maximum: 30
                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-extend
              prompt: 延长@视频1，窗户打开后进入@视频2的美术馆室内，最后镜头进入@视频3的画内
              video_urls:
                - >-
                  https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/r2v_extend_video1_75.mov
                - >-
                  https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4
                - >-
                  https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4
              duration: 11
              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-extend",
              "prompt": "延长@视频1，窗户打开后进入@视频2的美术馆室内，最后镜头进入@视频3的画内",
              "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/r2v_extend_video1_75.mov", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4"],
              "duration": 11,
              "resolution": "480p",
              "web_search": false,
              "generate_audio": true
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
                "model": "seedance-2.5-extend",
                "prompt": "延长@视频1，窗户打开后进入@视频2的美术馆室内，最后镜头进入@视频3的画内",
                "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/r2v_extend_video1_75.mov", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4"],
                "duration": 11,
                "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-extend",
                  "prompt": "延长@视频1，窗户打开后进入@视频2的美术馆室内，最后镜头进入@视频3的画内",
                  "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/r2v_extend_video1_75.mov", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4"],
                  "duration": 11,
                  "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-extend",
                    "prompt": "延长@视频1，窗户打开后进入@视频2的美术馆室内，最后镜头进入@视频3的画内",
                    "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/r2v_extend_video1_75.mov", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4"],
                    "duration": 11,
                    "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-extend",
                  "prompt": "延长@视频1，窗户打开后进入@视频2的美术馆室内，最后镜头进入@视频3的画内",
                  "video_urls": ["https://arkdocs.tos-cn-beijing.volces.com/videos/video-generation/r2v_extend_video1_75.mov", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4", "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4"],
                  "duration": 11,
                  "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.

````