> ## 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 Text to Video

> Wan 2.7 Text to Video is a dedicated task mode in Alibaba's Wan video family that creates video directly from text prompts without source media.



## OpenAPI

````yaml api-reference/openapi/wan--wan2-7-t2v.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: WAN 2.7 Text to Video API
  version: 1.0.0
  description: >-
    Wan 2.7 Text to Video is a dedicated task mode in Alibaba's Wan video family
    that creates video directly from text prompts without source media. In
    APIPod, the public model ID is wan2.7-t2v. It supports text-to-video,
    accepts text 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 Text to Video
      summary: Create Generation Task
      description: >-
        Wan 2.7 Text to Video is a dedicated task mode in Alibaba's Wan video
        family that creates video directly from text prompts without source
        media. In APIPod, the public model ID is wan2.7-t2v. It supports
        text-to-video, accepts text inputs, and returns results through
        asynchronous video tasks.
      operationId: create-wan-wan2-7-t2v
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: WAN 2.7 Text to Video
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: wan2.7-t2v
                prompt:
                  type: string
                  title: Prompt
                  description: Describe the content of the video to be generated.
                  maxLength: 5000
                prompt_extend:
                  type: boolean
                  title: Prompt Extend
                  description: >-
                    Whether to enable intelligent prompt rewriting. After
                    enabling, a large model will be used to intelligently
                    rewrite the input prompt. The generation effect is
                    significantly improved for short prompts, but it will
                    increase time consumption.
                  default: true
                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
                audio_url:
                  type: string
                  title: Audio Url
                  description: >-
                    The model will generate a video using this audio. If the
                    audio length exceeds the duration value (e.g., 5 seconds),
                    the first 5 seconds will be automatically captured and the
                    rest discarded. If the audio length is shorter than the
                    video duration, the part beyond the audio length will be
                    silent video. For example, if the audio is 3 seconds long
                    and the video duration is 5 seconds, the output video will
                    have sound in the first 3 seconds and be silent in the
                    remaining 2 seconds.
                  default: ''
                resolution:
                  type: string
                  title: Resolution
                  description: >-
                    Resolution levels for video generation, used to control the
                    clarity (total pixels) of the video
                  enum:
                    - 720P
                    - 1080P
                  default: 1080P
                aspect_ratio:
                  type: string
                  title: Aspect Ratio
                  description: Aspect ratio of the generated video.
                  enum:
                    - '16:9'
                    - '9:16'
                    - '1:1'
                    - '4:3'
                    - '3:4'
                  default: '16:9'
                duration:
                  type: integer
                  title: Duration
                  description: Duration of the generated video.
                  default: 5
                  minimum: 2
                  maximum: 15
                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
            example:
              model: wan2.7-t2v
              prompt: >-
                A premium product photograph on a dark studio set, precise
                typography, soft rim lighting, highly detailed.
              resolution: 1080P
              aspect_ratio: '16:9'
              duration: 5
      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-t2v",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "resolution": "1080P",
              "aspect_ratio": "16:9",
              "duration": 5
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
              "model": "wan2.7-t2v",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "resolution": "1080P",
              "aspect_ratio": "16:9",
              "duration": 5
            }

            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-t2v",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "resolution": "1080P",
              "aspect_ratio": "16:9",
              "duration": 5
            }`), &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-t2v",
              "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
              "resolution": "1080P",
              "aspect_ratio": "16:9",
              "duration": 5
            });
                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-t2v",
                "prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
                "resolution": "1080P",
                "aspect_ratio": "16:9",
                "duration": 5
              }
              ),
            });


            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.

````