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

> Seedance 2.5 Draft is a two-stage workflow: submit a normal request to create a low-cost 480p draft preview, then submit the completed draft's task ID as...



## OpenAPI

````yaml api-reference/openapi/seedance--2-5-draft.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Seedance 2.5 Draft API
  version: 1.0.0
  description: >-
    Seedance 2.5 Draft is a two-stage workflow: submit a normal request to
    create a low-cost 480p draft preview, then submit the completed draft's task
    ID as draft_task_id to render the 1080p final video. The final video reuses
    the draft prompt, media, duration, aspect ratio, seed, and audio setting,
    and always runs on the same generation account as the draft. In APIPod, the
    public model ID is seedance-2.5-draft, 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 Draft
      summary: Create Generation Task
      description: >-
        Seedance 2.5 Draft is a two-stage workflow: submit a normal request to
        create a low-cost 480p draft preview, then submit the completed draft's
        task ID as draft_task_id to render the 1080p final video. The final
        video reuses the draft prompt, media, duration, aspect ratio, seed, and
        audio setting, and always runs on the same generation account as the
        draft. In APIPod, the public model ID is seedance-2.5-draft, and results
        are returned through asynchronous video tasks.
      operationId: create-seedance-2-5-draft
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Seedance 2.5 Draft
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: seedance-2.5-draft
                draft_task_id:
                  type: string
                  title: Draft Task ID
                  description: >-
                    The data.task_id of a completed draft (from GET
                    /v1/videos/status/{task_id}), created by the same user
                    within the last 7 days. When set, creates the 1080p final
                    video; only resolution, output_format, watermark, and
                    callback_url may be sent alongside it. Do not send an
                    upstream task ID.
                prompt:
                  type: string
                  title: Prompt
                  description: >-
                    Draft stage: text instructions, up to 30000 characters;
                    required unless media is provided. Final stage: not allowed
                    (reused from the draft).
                  maxLength: 30000
                image_urls:
                  type: array
                  title: Image Urls
                  description: >-
                    Draft stage: reference image URLs, up to 30 images (1-2
                    images without other media are treated as first/last
                    frames). Final stage: not allowed.
                  maxItems: 30
                  items:
                    type: string
                video_urls:
                  type: array
                  title: Video Urls
                  description: >-
                    Draft stage: reference video URLs, up to 10 videos. When
                    videos are present, billing adds the total input-video
                    duration. Final stage: not allowed.
                  maxItems: 10
                  items:
                    type: string
                audio_urls:
                  type: array
                  title: Audio Urls
                  description: >-
                    Draft stage: reference audio URLs, up to 10 audios; audio
                    needs at least one image or video reference. Final stage:
                    not allowed.
                  maxItems: 10
                  items:
                    type: string
                duration:
                  type: integer
                  title: Duration
                  description: >-
                    Draft stage: output duration in seconds, 4-30 (default 4);
                    duration=-1 is not supported. Final stage: not allowed - the
                    draft duration is reused and billed.
                  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
                aspect_ratio:
                  type: string
                  title: Aspect Ratio
                  description: >-
                    Draft stage: output aspect ratio (default adaptive). Final
                    stage: not allowed (reused from the draft).
                  enum:
                    - adaptive
                    - 969
                    - 243
                    - 61
                    - 184
                    - 556
                    - 1269
                  default: adaptive
                resolution:
                  type: string
                  title: Resolution
                  description: >-
                    Draft previews support only 480p (filled in when omitted).
                    Final videos created with draft_task_id support only 1080p
                    (filled in when omitted).
                  enum:
                    - 480p
                    - 1080p
                generate_audio:
                  type: boolean
                  title: Generate Audio
                  description: >-
                    Draft stage: whether to generate synchronized audio (default
                    true). Final stage: not allowed (reused from the draft).
                  default: true
                output_format:
                  type: string
                  title: Output Format
                  description: >-
                    Output container format, mp4 (default) or mov. Allowed in
                    both stages.
                  enum:
                    - mp4
                    - mov
                  default: mp4
              required:
                - model
            example:
              model: seedance-2.5-draft
              prompt: >-
                A cinematic tracking shot through a rain-soaked neon street,
                realistic motion, synchronized ambient sound.
              duration: 4
              aspect_ratio: adaptive
              resolution: 480p
              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-draft",
              "prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
              "duration": 4,
              "aspect_ratio": "adaptive",
              "resolution": "480p",
              "generate_audio": true
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
              "model": "seedance-2.5-draft",
              "prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
              "duration": 4,
              "aspect_ratio": "adaptive",
              "resolution": "480p",
              "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-draft",
              "prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
              "duration": 4,
              "aspect_ratio": "adaptive",
              "resolution": "480p",
              "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-draft",
              "prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
              "duration": 4,
              "aspect_ratio": "adaptive",
              "resolution": "480p",
              "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-draft",
                "prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
                "duration": 4,
                "aspect_ratio": "adaptive",
                "resolution": "480p",
                "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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.