Wan 2.7 - Text to Video
Generate cinematic video directly from a text prompt using Alibaba Cloud's Wan 2.7 model, with optional custom soundtrack, aspect-ratio control, and multi-shot narrative support (describe timestamped shots directly in the prompt).
Note: To attach a custom soundtrack, the audio file must first be uploaded using the Asset API before processing. The audioUrl parameter should contain the path returned from the Asset API upload.
Endpoint
Request Headers
| Field | Value |
|---|---|
| API-KEY | <api-key> |
| Content-Type | application/json |
Request Parameters
| Field Name | Type | Example | Description | Required |
|---|---|---|---|---|
| type | string | TEXT_TO_VIDEO | Feature identifier | ✔️ |
| model | string | wan2.7-t2v | AI model to use | ✔️ |
| conversationId | string | TEXT_TO_VIDEO | Conversation context | ✔️ |
| promptObject.prompt | string | A river flowing gently through a deep canyon at midday | Text description of the video to generate. Max 5000 characters | ✔️ |
| promptObject.resolution | string | 1080P | Output resolution: 720P or 1080P. Higher resolution costs more credits | ✔️ |
| promptObject.ratio | string | 16:9 | Aspect ratio of the output video: 16:9, 9:16, 1:1, 4:3, 3:4 | ❌ |
| promptObject.duration | number | 5 | Video duration in seconds. Integer from 2 to 15. Credits are charged per second at the selected resolution | ✔️ |
| promptObject.prompt_extend | boolean | true | Enables prompt rewriting. When enabled, an LLM rewrites the input prompt to improve generation quality. Best for short prompts, but adds latency | ❌ |
| promptObject.negativePrompt | string | blurry, low quality | Text describing what to avoid in the video. Max 500 characters | ❌ |
| promptObject.seed | number | 123 | Random seed for reproducible generation. Integer from 0 to 2147483647. Omit for a random result | ❌ |
| promptObject.audioUrl | string | audio/2026_07_20_soundtrack.mp3 | S3 path to a custom soundtrack, from Asset API upload. WAV or MP3, 2-30 seconds, up to 15MB. If the audio is longer than duration, only the first duration seconds are used; if shorter, the remaining video is silent | ❌ |
| promptObject.watermark | boolean | false | Whether to add an AI-generated watermark to the output video | ❌ |
Code Examples
- cURL
- JavaScript
- Python
curl --location 'https://api.1min.ai/api/features' \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"type": "TEXT_TO_VIDEO",
"model": "wan2.7-t2v",
"conversationId": "TEXT_TO_VIDEO",
"promptObject": {
"prompt": "A river flowing gently through a deep canyon at midday",
"resolution": "1080P",
"ratio": "16:9",
"duration": 5,
"prompt_extend": true,
"negativePrompt": "blurry, low quality"
}
}'
fetch('https://api.1min.ai/api/features', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'API-KEY': 'YOUR_API_KEY'
},
body: JSON.stringify({
type: 'TEXT_TO_VIDEO',
model: 'wan2.7-t2v',
conversationId: 'TEXT_TO_VIDEO',
promptObject: {
prompt: 'A river flowing gently through a deep canyon at midday',
resolution: '1080P',
ratio: '16:9',
duration: 5,
prompt_extend: true,
negativePrompt: 'blurry, low quality'
}
})
})
import requests
url = "https://api.1min.ai/api/features"
headers = {
"Content-Type": "application/json",
"API-KEY": "YOUR_API_KEY"
}
data = {
"type": "TEXT_TO_VIDEO",
"model": "wan2.7-t2v",
"conversationId": "TEXT_TO_VIDEO",
"promptObject": {
"prompt": "A river flowing gently through a deep canyon at midday",
"resolution": "1080P",
"ratio": "16:9",
"duration": 5,
"prompt_extend": True,
"negativePrompt": "blurry, low quality"
}
}
response = requests.post(url, headers=headers, json=data)
Example with Custom Soundtrack
- cURL
- JavaScript
- Python
curl --location 'https://api.1min.ai/api/features' \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"type": "TEXT_TO_VIDEO",
"model": "wan2.7-t2v",
"conversationId": "TEXT_TO_VIDEO",
"promptObject": {
"prompt": "A forest with sunlight streaming through tall trees",
"resolution": "1080P",
"ratio": "1:1",
"duration": 15,
"prompt_extend": true,
"seed": 555,
"negativePrompt": "blurry, artifacts",
"audioUrl": "audio/2026_07_20_soundtrack.mp3"
}
}'
fetch('https://api.1min.ai/api/features', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'API-KEY': 'YOUR_API_KEY'
},
body: JSON.stringify({
type: 'TEXT_TO_VIDEO',
model: 'wan2.7-t2v',
conversationId: 'TEXT_TO_VIDEO',
promptObject: {
prompt: 'A forest with sunlight streaming through tall trees',
resolution: '1080P',
ratio: '1:1',
duration: 15,
prompt_extend: true,
seed: 555,
negativePrompt: 'blurry, artifacts',
audioUrl: 'audio/2026_07_20_soundtrack.mp3'
}
})
})
import requests
url = "https://api.1min.ai/api/features"
headers = {
"Content-Type": "application/json",
"API-KEY": "YOUR_API_KEY"
}
data = {
"type": "TEXT_TO_VIDEO",
"model": "wan2.7-t2v",
"conversationId": "TEXT_TO_VIDEO",
"promptObject": {
"prompt": "A forest with sunlight streaming through tall trees",
"resolution": "1080P",
"ratio": "1:1",
"duration": 15,
"prompt_extend": True,
"seed": 555,
"negativePrompt": "blurry, artifacts",
"audioUrl": "audio/2026_07_20_soundtrack.mp3"
}
}
response = requests.post(url, headers=headers, json=data)
Interactive Playground
API Playground
https://api.1min.ai/api/featuresVideo duration in seconds (2-15)
Rewrite the prompt with an LLM to improve generation quality
Fixed seed for reproducible generation. Leave empty for random
Path to a custom soundtrack uploaded via Asset API (WAV/MP3, 2-30s, up to 15MB)
Add an AI-generated watermark to the output video
Generated cURL Command:
curl -X POST "https://api.1min.ai/api/features" \
-H "API-KEY: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"type": "TEXT_TO_VIDEO",
"model": "wan2.7-t2v",
"conversationId": "TEXT_TO_VIDEO",
"promptObject": {
"prompt": "A river flowing gently through a deep canyon at midday",
"resolution": "1080P",
"ratio": "16:9",
"duration": 5,
"prompt_extend": true,
"negativePrompt": "blurry, low quality"
}
}'
Response
{
"aiRecord": {
"uuid": "b574969b-4992-4173-9e62-7ebd4782103e",
"userId": "2f57c2a4-1fff-48e7-972f-3c1d6c59bced",
"teamId": "eb48d89f-1bb7-4d82-9b25-481971a0e97a",
"teamUser": {
"teamId": "eb48d89f-1bb7-4d82-9b25-481971a0e97a",
"userId": "2f57c2a4-1fff-48e7-972f-3c1d6c59bced",
"userName": "John",
"userAvatar": "https://lh3.googleusercontent.com/a/ACg8ocLqgsNsHRfmWF9d-E1RvJetVsEzxNOsOg-NXWNTpMxLDPJbwELI=s96-c",
"status": "ACTIVE",
"role": "ADMIN",
"creditLimit": 100000000,
"usedCredit": 17872338,
"createdAt": "2025-11-25T11:04:08.620Z",
"createdBy": "SYSTEM",
"updatedAt": "2025-11-26T09:20:02.221Z",
"updatedBy": "SYSTEM"
},
"model": "wan2.7-t2v",
"type": "TEXT_TO_VIDEO",
"metadata": {
"credit": 1500000,
"duration": 5,
"resolution": "720P",
"executionTime": 102.554
},
"rating": null,
"feedback": null,
"conversationId": null,
"status": "SUCCESS",
"createdAt": "2026-07-20T16:47:28.018Z",
"aiRecordDetail": {
"promptObject": {
"seed": 123,
"ratio": "16:9",
"prompt": "A river flowing gently through a deep canyon at midday",
"duration": 5,
"resolution": "720P",
"prompt_extend": true,
"negativePrompt": "water"
},
"resultObject": [
"development/videos/2026_07_20_23_48_59_722_158922.mp4"
],
"responseObject": {}
},
"additionalData": null,
"temporaryUrl": "https://s3.us-east-1.amazonaws.com/asset.1min.ai/development/videos/2026_07_20_23_48_59_722_158922.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=..."
}
}