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

# WAN 2.7 Video Edit

> Wan 2.7 Video Edit is a dedicated task mode in Alibaba's Wan video family that edits a source video from text instructions and optional image references.



## OpenAPI

````yaml api-reference/openapi/wan--wan2-7-videoedit.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: WAN 2.7 Video Edit API
  version: 1.0.0
  description: >-
    Wan 2.7 Video Edit is a dedicated task mode in Alibaba's Wan video family
    that edits a source video from text instructions and optional image
    references. In APIPod, the public model ID is wan2.7-videoedit. It supports
    video-to-video, accepts text, image and video inputs, and returns results
    through asynchronous video tasks.
servers:
  - url: https://api.apipod.ai
    description: Production
security: []
paths:
  /v1/videos/generations:
    post:
      tags:
        - WAN 2.7 Video Edit
      summary: Create Generation Task
      description: >-
        Wan 2.7 Video Edit is a dedicated task mode in Alibaba's Wan video
        family that edits a source video from text instructions and optional
        image references. In APIPod, the public model ID is wan2.7-videoedit. It
        supports video-to-video, accepts text, image and video inputs, and
        returns results through asynchronous video tasks.
      operationId: create-wan-wan2-7-videoedit
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: WAN 2.7 Video Edit
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: wan2.7-videoedit
                prompt:
                  type: string
                  title: Prompt
                  maxLength: 5000
                prompt_extend:
                  type: boolean
                  title: Prompt Extend
                  description: >-
                    Describe the content you do not wish to see in the video
                    frame, which can be used to restrict the video frame.
                  default: ''
                negative_prompt:
                  type: string
                  title: Negative Prompt
                  description: >-
                    Describe the content you do not wish to see in the video
                    frame, which can be used to restrict the video frame.
                  default: >-
                    low resolution, errors, worst quality, poor quality,
                    incomplete, extra fingers, poor aspect ratio.
                  maxLength: 500
                video_url:
                  type: string
                  title: Edit Video
                  description: Video file to be edited, 2-10s
                  default: ''
                image_urls:
                  type: array
                  title: Images
                  description: The first frame or reference image.
                  items:
                    type: string
                resolution:
                  type: string
                  title: Resolution
                  description: >-
                    Describe the content you do not wish to see in the video
                    frame, which can be used to restrict the video frame.
                  enum:
                    - 720P
                    - 1080P
                  default: 1080P
                duration:
                  type: integer
                  title: Duration
                  description: >-
                    This parameter only needs to be configured when video
                    truncation is required. If you want the output video to have
                    the same duration as the input video, no setting is needed
                    (or pass the default value 0).
                  enum:
                    - 0
                    - 2
                    - 3
                    - 4
                    - 5
                    - 6
                    - 7
                    - 8
                    - 9
                    - 10
                  default: 0
                audio_setting:
                  type: string
                  title: Audio Setting
                  description: >-
                    Video audio settings. auto (default): The model makes an
                    intelligent judgment based on the prompt content. If the
                    prompt involves audio descriptions, it may regenerate the
                    audio; otherwise, it may retain the original audio of the
                    input material. origin: Forcefully retain the original audio
                    of the input video without regeneration.
                  enum:
                    - auto
                    - origin
                  default: auto
                watermark:
                  type: boolean
                  title: Watermark
                  description: >-
                    Whether to add a watermark logo, with the watermark
                    positioned at the bottom right corner of the video.
                  default: false
              required:
                - model
                - prompt
                - video_url
            example:
              model: wan2.7-videoedit
              prompt: >-
                A premium product photograph on a dark studio set, precise
                typography, soft rim lighting, highly detailed.
              video_url: https://cdn.example.com/source.mp4
              image_urls:
                - https://cdn.example.com/reference-1.jpg
              resolution: 1080P
              duration: 0
      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": "wan2.7-videoedit",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "video_url": "https://cdn.example.com/source.mp4",
              "image_urls": [
                "https://cdn.example.com/reference-1.jpg"
              ],
              "resolution": "1080P",
              "duration": 0
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
              "model": "wan2.7-videoedit",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "video_url": "https://cdn.example.com/source.mp4",
              "image_urls": [
                "https://cdn.example.com/reference-1.jpg"
              ],
              "resolution": "1080P",
              "duration": 0
            }

            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": "wan2.7-videoedit",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "video_url": "https://cdn.example.com/source.mp4",
              "image_urls": [
                "https://cdn.example.com/reference-1.jpg"
              ],
              "resolution": "1080P",
              "duration": 0
            }`), &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": "wan2.7-videoedit",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "video_url": "https://cdn.example.com/source.mp4",
              "image_urls": [
                "https://cdn.example.com/reference-1.jpg"
              ],
              "resolution": "1080P",
              "duration": 0
            });
                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": "wan2.7-videoedit",
                "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
                "video_url": "https://cdn.example.com/source.mp4",
                "image_urls": [
                  "https://cdn.example.com/reference-1.jpg"
                ],
                "resolution": "1080P",
                "duration": 0
              }
              ),
            });


            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.

````