---
title: Wan Image-to-Video
url: https://runapi.ai/docs/api/wan/image-to-video.md
canonical: https://runapi.ai/docs/api/wan/image-to-video
locale: en
---

# Wan Image-to-Video

## Overview

Create an asynchronous text-to-video task with a supported model. Use the returned task ID to retrieve its state, or provide callback_url for terminal delivery.

### Quick start

1. Create an API key and set it as RUNAPI_API_KEY.
2. Choose a supported model and send a POST request whose body matches that model's schema.
3. Store the returned task ID, then poll until a terminal state or handle the terminal callback.

## Endpoint

POST /api/v1/wan/image_to_video

Base URL: https://runapi.ai

API version: v1

Authentication: Authorization: Bearer YOUR_API_TOKEN

## Supported models

Open a model page for current pricing, rate limits, and commercial-usage details.

- [wan-2.2-a14b-image-to-video-turbo](/models/wan/2.2-a14b-image-to-video-turbo)
- [wan-2.5-image-to-video](/models/wan/2.5-image-to-video)
- [wan-2.6-flash-image-to-video](/models/wan/2.6-flash-image-to-video)
- [wan-2.6-image-to-video](/models/wan/2.6-image-to-video)
- [wan-2.7-image-to-video](/models/wan/2.7-image-to-video)

## Request schema

Fields and allowed values depend on the selected model. When supplied, callback_url receives a terminal task delivery.

### wan-2.2-a14b-image-to-video-turbo

```json
{
  "acceleration": {
    "type": "string"
  },
  "aspect_ratio": {
    "type": "string"
  },
  "audio": {
    "type": "boolean"
  },
  "background_audio_url": {
    "type": "string"
  },
  "callback_url": {
    "type": "string"
  },
  "driving_audio_url": {
    "type": "string"
  },
  "duration_seconds": {
    "type": "integer"
  },
  "enable_prompt_expansion": {
    "type": "boolean"
  },
  "enable_safety_checker": {
    "type": "boolean"
  },
  "first_frame_image_url": {
    "required": true,
    "type": "string"
  },
  "last_frame_image_url": {
    "type": "string"
  },
  "model": {
    "type": "string"
  },
  "multi_shots": {
    "type": "boolean"
  },
  "negative_prompt": {
    "type": "string"
  },
  "output_resolution": {
    "enum": [
      "480p",
      "720p"
    ],
    "type": "string"
  },
  "prompt": {
    "type": "string"
  },
  "ratio": {
    "type": "string"
  },
  "seed": {
    "type": "integer"
  },
  "source_video_url": {
    "type": "string"
  },
  "watermark": {
    "type": "boolean"
  }
}
```

### wan-2.5-image-to-video

```json
{
  "acceleration": {
    "type": "string"
  },
  "aspect_ratio": {
    "type": "string"
  },
  "audio": {
    "type": "boolean"
  },
  "background_audio_url": {
    "type": "string"
  },
  "callback_url": {
    "type": "string"
  },
  "driving_audio_url": {
    "type": "string"
  },
  "duration_seconds": {
    "required": true,
    "type": "integer"
  },
  "enable_prompt_expansion": {
    "type": "boolean"
  },
  "enable_safety_checker": {
    "type": "boolean"
  },
  "first_frame_image_url": {
    "required": true,
    "type": "string"
  },
  "last_frame_image_url": {
    "type": "string"
  },
  "model": {
    "type": "string"
  },
  "multi_shots": {
    "type": "boolean"
  },
  "negative_prompt": {
    "type": "string"
  },
  "output_resolution": {
    "enum": [
      "720p",
      "1080p"
    ],
    "type": "string"
  },
  "prompt": {
    "type": "string"
  },
  "ratio": {
    "type": "string"
  },
  "seed": {
    "type": "integer"
  },
  "source_video_url": {
    "type": "string"
  },
  "watermark": {
    "type": "boolean"
  }
}
```

### wan-2.6-flash-image-to-video

```json
{
  "acceleration": {
    "type": "string"
  },
  "aspect_ratio": {
    "type": "string"
  },
  "audio": {
    "required": true,
    "type": "boolean"
  },
  "background_audio_url": {
    "type": "string"
  },
  "callback_url": {
    "type": "string"
  },
  "driving_audio_url": {
    "type": "string"
  },
  "duration_seconds": {
    "type": "integer"
  },
  "enable_prompt_expansion": {
    "type": "boolean"
  },
  "enable_safety_checker": {
    "type": "boolean"
  },
  "first_frame_image_url": {
    "required": true,
    "type": "string"
  },
  "last_frame_image_url": {
    "type": "string"
  },
  "model": {
    "type": "string"
  },
  "multi_shots": {
    "type": "boolean"
  },
  "negative_prompt": {
    "type": "string"
  },
  "output_resolution": {
    "enum": [
      "720p",
      "1080p"
    ],
    "type": "string"
  },
  "prompt": {
    "required": true,
    "type": "string"
  },
  "ratio": {
    "type": "string"
  },
  "source_video_url": {
    "type": "string"
  },
  "watermark": {
    "type": "boolean"
  }
}
```

### wan-2.6-image-to-video

```json
{
  "acceleration": {
    "type": "string"
  },
  "aspect_ratio": {
    "type": "string"
  },
  "audio": {
    "type": "boolean"
  },
  "background_audio_url": {
    "type": "string"
  },
  "callback_url": {
    "type": "string"
  },
  "driving_audio_url": {
    "type": "string"
  },
  "duration_seconds": {
    "type": "integer"
  },
  "enable_prompt_expansion": {
    "type": "boolean"
  },
  "enable_safety_checker": {
    "type": "boolean"
  },
  "first_frame_image_url": {
    "required": true,
    "type": "string"
  },
  "last_frame_image_url": {
    "type": "string"
  },
  "model": {
    "type": "string"
  },
  "multi_shots": {
    "type": "boolean"
  },
  "negative_prompt": {
    "type": "string"
  },
  "output_resolution": {
    "enum": [
      "720p",
      "1080p"
    ],
    "type": "string"
  },
  "prompt": {
    "required": true,
    "type": "string"
  },
  "ratio": {
    "type": "string"
  },
  "source_video_url": {
    "type": "string"
  },
  "watermark": {
    "type": "boolean"
  }
}
```

### wan-2.7-image-to-video

```json
{
  "acceleration": {
    "type": "string"
  },
  "aspect_ratio": {
    "type": "string"
  },
  "audio": {
    "type": "boolean"
  },
  "background_audio_url": {
    "type": "string"
  },
  "callback_url": {
    "type": "string"
  },
  "driving_audio_url": {
    "type": "string"
  },
  "duration_seconds": {
    "type": "integer"
  },
  "enable_prompt_expansion": {
    "type": "boolean"
  },
  "enable_safety_checker": {
    "type": "boolean"
  },
  "first_frame_image_url": {
    "type": "string"
  },
  "last_frame_image_url": {
    "type": "string"
  },
  "model": {
    "type": "string"
  },
  "multi_shots": {
    "type": "boolean"
  },
  "negative_prompt": {
    "type": "string"
  },
  "output_resolution": {
    "enum": [
      "720p",
      "1080p"
    ],
    "type": "string"
  },
  "prompt": {
    "required": true,
    "type": "string"
  },
  "ratio": {
    "type": "string"
  },
  "seed": {
    "type": "integer"
  },
  "source_video_url": {
    "type": "string"
  },
  "watermark": {
    "type": "boolean"
  }
}
```

## Create acceptance

HTTP 202 - POST /api/v1/wan/image_to_video

```json
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "processing"
}
```

## Polling processing

HTTP 200 - GET /api/v1/wan/image_to_video/:id

```json
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "processing"
}
```

## Polling completed

HTTP 200 - GET /api/v1/wan/image_to_video/:id

```json
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "completed",
  "videos": [
    {
      "url": "https://file.runapi.ai/reference-video.mp4"
    }
  ]
}
```

## Polling failed

HTTP 200 - GET /api/v1/wan/image_to_video/:id

```json
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "error": "Task processing failed.",
  "id": "tsk_reference_demo",
  "status": "failed"
}
```

## Customer callback: completed

HTTP 200 - POST callback_url

```json
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "completed",
  "videos": [
    {
      "url": "https://file.runapi.ai/reference-video.mp4"
    }
  ]
}
```

## Customer callback: failed

HTTP 200 - POST callback_url

```json
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "error": {
    "code": "generation_failed",
    "message": "Task processing failed."
  },
  "id": "tsk_reference_demo",
  "status": "failed"
}
```

## Errors

HTTP 400

```json
{
  "error": {
    "code": "invalid_request",
    "message": "A required request field is missing."
  }
}
```

## Generated Code Samples

Use cURL directly, or install an SDK for your language. Each sample submits the validated request shown in this reference.

### curl

```curl
curl -X POST https://runapi.ai/api/v1/wan/image_to_video \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"model":"wan-2.2-a14b-image-to-video-turbo","first_frame_image_url":"https://file.runapi.ai/first-frame.png","prompt":"Gentle ocean waves move in the background."}'
```

## Related Guides

- [Authentication](/docs/guides/authentication)
- [Task API quickstart](/docs/guides/task-api/quickstart)
