- Supports Text-to-Video and Image-to-Video
- Supports 720p/1080p resolution, 5/10/15 seconds duration
- Supports automatic prompt extension and audio generation
Request example
curl --request POST \
--url https://api.openveer.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "wan2.6",
"prompt": "A cute cat running on the grass",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}'import requests
url = "https://api.openveer.com/v1/videos/generations"
payload = {
"model": "wan2.6",
"prompt": "A cute cat running on the grass",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())const url = "https://api.openveer.com/v1/videos/generations";
const payload = {
model: "wan2.6",
prompt: "A cute cat running on the grass",
aspect_ratio: "16:9",
resolution: "720p",
duration: 5
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.openveer.com/v1/videos/generations"
payload := map[string]interface{}{
"model": "wan2.6",
"prompt": "A cute cat running on the grass",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.openveer.com/v1/videos/generations";
String payload = """
{
"model": "wan2.6",
"prompt": "A cute cat running on the grass",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}<?php
$url = "https://api.openveer.com/v1/videos/generations";
$payload = [
"model" => "wan2.6",
"prompt" => "A cute cat running on the grass",
"aspect_ratio" => "16:9",
"resolution" => "720p",
"duration" => 5
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.openveer.com/v1/videos/generations")
payload = {
model: "wan2.6",
prompt: "A cute cat running on the grass",
aspect_ratio: "16:9",
resolution: "720p",
duration: 5
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.bodyimport Foundation
let url = URL(string: "https://api.openveer.com/v1/videos/generations")!
let payload: [String: Any] = [
"model": "wan2.6",
"prompt": "A cute cat running on the grass",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.openveer.com/v1/videos/generations";
var payload = @"{
""model"": ""wan2.6"",
""prompt"": ""A cute cat running on the grass"",
""aspect_ratio"": ""16:9"",
""resolution"": ""720p"",
""duration"": 5
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}Response example
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ"
}
]
}{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": 500,
"message": "Internal server error. Please try again later",
"type": "server_error"
}
}Authorization
Authorization stringAll API endpoints require Bearer Token authentication
Get your API Key:
Visit the API Key Management Page to get your API Key
Add it to the request header:
Authorization: Bearer YOUR_API_KEYRequest Parameters
model stringVideo generation model name, fixed as wan2.6
nsfw_check booleanWhether to run content moderation before submitting the video task.
true: useomni-moderation-latestto review prompts and input imagesfalseor omitted: do not send a moderation request, adding no moderation cost or latency (default)
prompt stringVideo content description
Required for text-to-video mode. Describe scenes, actions, and styles in detail for better results
Example: "A cute cat stretching in the sunlight"
image_urls string">
Reference image URL array (only 1 image supported)
Required for image-to-video mode. Supports publicly accessible image URLs
Example: ["https://example.com/image.jpg"]
The system automatically selects text-to-video or image-to-video mode based on whether image_urls is included
negative_prompt stringNegative prompt describing unwanted content
Example: "blurry, low quality, distorted"
aspect_ratio stringVideo aspect ratio
Options:
16:9- Landscape (default)9:16- Portrait1:1- Square4:3- Landscape3:4- Portrait
Default: 16:9
Not supported in image-to-video mode
resolution stringVideo resolution
Options:
720p- Standard (default)1080p- High definition
Default: 720p
480p resolution is not supported
Billed per second. Pricing varies by resolution. Please refer to the model marketplace for specific pricing
duration integerVideo duration (seconds)
Supported values: 5, 10, 15 seconds only
Default: 5
seed integerRandom seed for reproducible results
Example: 12345
prompt_extend booleanWhether to automatically extend the prompt
When enabled, the system will automatically optimize and enrich your prompt
audio booleanWhether to automatically add audio
When enabled, the system will generate matching audio for the video
audio_url stringSpecified audio URL
Takes priority over the audio parameter
Audio duration cannot exceed video duration. If audio is shorter than video duration, the first part of the video will have sound while the rest will be silent.
shot_type stringShot type
Options:
single- Single shotmulti- Multiple shots
watermark booleanWhether to add watermark
template stringEffect template name for image-to-video special effects mode
When using effects mode:
* Only one image is required (passed via `image_urls`)
* No prompt is needed (model ignores the `prompt` field)
General Effects:
squish- Squish & Squeezerotation- Rotationpoke- Pokeinflate- Balloon Inflatedissolve- Molecular Dissolvemelt- Heat Wave Melticecream- Ice Cream Planetflying- Magic Levitation
Single Person Effects:
carousel- Time Carouselsingleheart- Love Youdance1- Swing Momentdance2- Dance Move
For more effects, refer to Alibaba Wanxiang Template Documentation
Resolution and Aspect Ratio Combinations
| Aspect Ratio | Description | 720p Size | 1080p Size |
|---|---|---|---|
16:9 |
Landscape (default) | 1280×720 | 1920×1080 |
9:16 |
Portrait | 720×1280 | 1080×1920 |
1:1 |
Square | 960×960 | 1440×1440 |
4:3 |
Landscape | 1088×832 | 1632×1248 |
3:4 |
Portrait | 832×1088 | 1248×1632 |
Response
code integerResponse status code, 200 on success
data arraystatus stringTask status, submitted when initially submitted
task_id stringUnique task identifier for querying task status and results
Use Cases
Case 1: Text-to-Video (Simple Request)
{
"model": "wan2.6",
"prompt": "A cute cat stretching in the sunlight"
}Case 2: Text-to-Video (Full Parameters)
{
"model": "wan2.6",
"prompt": "A cute cat running on the grass",
"negative_prompt": "blurry, low quality, distorted",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"seed": 12345,
"prompt_extend": true,
"audio": true,
"shot_type": "single",
"watermark": false
}Case 3: Image-to-Video
{
"model": "wan2.6",
"prompt": "A kitten running on the ground",
"image_urls": ["https://upload.openveer.com/f/openveer-models-images/9998233432754770-c059992d-9b01-47d5-810d-ea0502ac9279-image_task_01KD7SSXDBCEWZ869D6PF249ZW_0.png"],
"resolution": "1080p",
"duration": 10
}Case 4: Image-to-Video (Base64 Image)
{
"model": "wan2.6",
"prompt": "Make the cat stand up and walk",
"image_urls": ["data:image/png;base64,iVBORw0KGgo..."],
"duration": 5
}Mode Description
Text-to-Video
promptparameter is requiredimage_urlsparameter is not needed
Image-to-Video
image_urlsparameter is required (only 1 image supported)promptparameter is optional, used to describe expected actions
The system automatically selects the mode based on whether image_urls is included in the request
Query Task Results
Video generation is an async task that returns a task_id upon submission. Use the Get Task Status endpoint to query generation progress and results.
This documentation is built and hosted on Mintlify, a developer documentation platform.