# alibaba/wan-3.0-prime/video-edit

> Wan 3.0 Prime Video Edit edits existing videos with text prompts and optional reference images or audio, supporting prompt-guided scene changes, visual refinements, and multimodal video editing. Inputs longer than 15 seconds are trimmed to the first 15 seconds, with output aspect ratio automatically matched to the input video. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

## Overview

- **Endpoint**: `https://api.wavespeed.ai/api/v3/alibaba/wan-3.0-prime/video-edit`
- **Polling/result URL**: `https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result`
- **Model ID**: `alibaba/wan-3.0-prime/video-edit`
- **Category**: video-to-video

## API Information

This model can be used via our HTTP API or more conveniently via our client libraries.
The API is asynchronous: submit a prediction, then poll its result URL until it completes.

### Input Schema

The API accepts the following input parameters:

- **`prompt`** (`string`, _required_):
  Describe the edit you want applied to the input video.

- **`video`** (`string`, _required_):
  URL of the input video to edit. Videos longer than 15s are trimmed to 15s.

- **`reference_images`** (`array of string`, _optional_):
  Optional reference images to guide the edit (up to 10).

- **`reference_audios`** (`array of string`, _optional_):
  Array of reference audio URLs (up to 5). Total input audio duration must not exceed 15 seconds.

- **`resolution`** (`string`, _optional_):
  Output video resolution.
  - Default: `"720p"`
  - Options: "480p", "720p", "1080p"

- **`duration`** (`integer`, _optional_):
  Output duration (2-15 seconds). When omitted, follows the input duration rounded up and clamped to 2-15 seconds.
  - Range: `2` to `15`

- **`generate_audio`** (`boolean`, _optional_):
  Whether to generate native audio for the edited output. Defaults to true. When set to false, the input video's audio track is preserved on the output instead.
  - Default: `true`

- **`enable_prompt_expansion`** (`boolean`, _optional_):
  If set to true, the prompt optimizer will be enabled.
  - Default: `false`

- **`seed`** (`integer`, _optional_):
  The random seed to use for the generation. -1 means a random seed will be used.



**Required Parameters Example**:

```json
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}
```

**Full Example**:

```json
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "reference_images": [],
  "reference_audios": [],
  "resolution": "720p",
  "duration": 2,
  "generate_audio": true,
  "enable_prompt_expansion": false,
  "seed": 0
}
```

### Result Data Schema

The `data` object returned by the API has the following fields:

- **`created_at`** (`string (date-time)`, _optional_):
  ISO timestamp of when the request was created (e.g., "2023-04-01T12:34:56.789Z").

- **`id`** (`string`, _optional_):
  Unique identifier for the prediction, the ID of the prediction to get.

- **`model`** (`string`, _optional_):
  Model ID used for the prediction.

- **`outputs`** (`array of string | object`, _optional_):
  Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.

- **`status`** (`string`, _optional_):
  Status of the task: created, processing, completed, or failed.

- **`urls`** (`object`, _optional_):
  Object containing related API endpoints.



**Example `data` Object**:

```json
{
  "created_at": "example",
  "id": "example",
  "model": "example",
  "outputs": [],
  "status": "example",
  "urls": {}
}
```

## Usage Examples

The examples use `jq` to read JSON. Set your API key first:

```bash
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
```

### 1. Submit a prediction

```bash
REQUEST_BODY=$(cat <<'JSON'
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}
JSON
)

SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --request POST \
  --url https://api.wavespeed.ai/api/v3/alibaba/wan-3.0-prime/video-edit \
  --header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  --header "Content-Type: application/json" \
  --data "${REQUEST_BODY}")

printf '%s\n' "${SUBMIT_RESPONSE}" | jq .
```

The response contains the prediction ID in `data.id`.

### 2. Poll until complete and read `outputs`

```bash
PREDICTION_ID=$(printf '%s' "${SUBMIT_RESPONSE}" | jq -r '.data.id')
if [ -z "${PREDICTION_ID}" ] || [ "${PREDICTION_ID}" = "null" ]; then
  printf 'Submission response did not contain data.id\n' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    --request GET \
    --url "${RESULT_URL}" \
    --header "Authorization: Bearer ${WAVESPEED_API_KEY}")

  RESULT=$(printf '%s' "${RESPONSE}" | jq -e '.data')
  STATUS=$(printf '%s' "${RESULT}" | jq -er '.status')
  case "${STATUS}" in
    completed)
      # Generated files are returned in the outputs array.
      printf '%s\n' "${RESULT}" | jq '.outputs'
      break
      ;;
    failed|cancelled|timeout|deleted)
      printf '%s\n' "${RESULT}" | jq '{status, error, code}'
      exit 1
      ;;
    *)
      sleep 2
      ;;
  esac
done
```

## Additional Resources

### Documentation

- [Model Playground](https://wavespeed.ai/models/alibaba/wan-3.0-prime/video-edit)
- [API Documentation](https://wavespeed.ai/docs/docs-api/alibaba/alibaba-wan-3.0-prime-video-edit)
