- Supports text-to-video, image-to-video (first frame image)
- Supports 6s and 10s duration, 768p/1080p resolution
- Supports 15 camera movement commands, prompt auto-optimization, and watermark control
Request example
curl --request POST \
--url https://api.openveer.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "MiniMax-Hailuo-2.3",
"prompt": "A cute kitten running on the grass",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": true,
"fast_pretreatment": false,
"watermark": false
}'import requests
url = "https://api.openveer.com/v1/videos/generations"
payload = {
"model": "MiniMax-Hailuo-2.3",
"prompt": "A cute kitten running on the grass",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": True,
"fast_pretreatment": False,
"watermark": False
}
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: "MiniMax-Hailuo-2.3",
prompt: "A cute kitten running on the grass",
duration: 6,
resolution: "768p",
prompt_optimizer: true,
fast_pretreatment: false,
watermark: false
};
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": "MiniMax-Hailuo-2.3",
"prompt": "A cute kitten running on the grass",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": true,
"fast_pretreatment": false,
"watermark": false,
}
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": "MiniMax-Hailuo-2.3",
"prompt": "A cute kitten running on the grass",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": true,
"fast_pretreatment": false,
"watermark": false
}
""";
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" => "MiniMax-Hailuo-2.3",
"prompt" => "A cute kitten running on the grass",
"duration" => 6,
"resolution" => "768p",
"prompt_optimizer" => true,
"fast_pretreatment" => false,
"watermark" => false
];
$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: "MiniMax-Hailuo-2.3",
prompt: "A cute kitten running on the grass",
duration: 6,
resolution: "768p",
prompt_optimizer: true,
fast_pretreatment: false,
watermark: false
}
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": "MiniMax-Hailuo-2.3",
"prompt": "A cute kitten running on the grass",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": true,
"fast_pretreatment": false,
"watermark": false
]
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"": ""MiniMax-Hailuo-2.3"",
""prompt"": ""A cute kitten running on the grass"",
""duration"": 6,
""resolution"": ""768p"",
""prompt_optimizer"": true,
""fast_pretreatment"": false,
""watermark"": false
}";
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 to the request header:
Authorization: Bearer YOUR_API_KEYRequest Parameters
model stringSupported models:
MiniMax-Hailuo-2.3- Hailuo 2.3MiniMax-Hailuo-2.3-Fast- Hailuo 2.3 Fast (lower latency)
MiniMax-Hailuo-2.3-Fast:
With this model, first_frame_image is required.
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 (max 2000 characters)
Describe scenes, actions, styles in detail for better generation results. Supports camera movement commands (see Camera Movement Commands below).
Example: "A cute kitten running on the grass"
duration integerVideo duration (seconds)
Options:
6- 6-second video10- 10-second video
Default: 6
1080p Limitation: When using 1080p resolution, only 6-second duration is supported
resolution stringVideo resolution
Options:
768p- High definition1080p- Full HD (only supports 6-second duration)
Default: 768p
first_frame_image stringFirst frame image for the video
Supports two formats:
- Public URL:
https://example.com/start.jpg - Base64 encoded:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg...
When provided, this image will be used as the starting frame of the video
MiniMax-Hailuo-2.3-Fast:
With this model, first_frame_image is required.
prompt_optimizer booleanWhether to auto-optimize the prompt
When enabled, the system will automatically optimize your prompt for better generation results
Default: true
fast_pretreatment booleanWhether to shorten prompt optimization time
When enabled, processing speed is faster but optimization quality may be slightly affected
Default: false
watermark booleanWhether to add watermark
Default: false
Resolution and Duration Combinations
| Resolution | Supported Duration | Notes |
|---|---|---|
| 768p | 6s, 10s | All supported |
| 1080p | 6s | 10s not supported |
Camera Movement Commands
Use [command] syntax in the prompt to control camera movements. The command labels must be entered exactly as the Chinese labels shown below. 15 commands are supported:
| Category | Commands |
|---|---|
| Pan | [左移] (pan left) [右移] (pan right) |
| Horizontal Rotate | [左摇] (rotate left) [右摇] (rotate right) |
| Push/Pull | [推进] (push in) [拉远] (pull out) |
| Vertical Move | [上升] (rise) [下降] (descend) |
| Vertical Rotate | [上摇] (tilt up) [下摇] (tilt down) |
| Zoom | [变焦推近] (zoom in) [变焦拉远] (zoom out) |
| Other | [晃动] (shake) [跟随] (follow) [固定] (static) |
Usage example:
{
"model": "MiniMax-Hailuo-2.3",
"prompt": "[推进]A cat running in the garden, camera slowly pushing in for a close-up"
}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: Quick Text-to-Video
{
"model": "MiniMax-Hailuo-2.3",
"prompt": "A cute kitten running on the grass, sunny day"
}Case 2: High-Quality 1080p Video
{
"model": "MiniMax-Hailuo-2.3",
"prompt": "City nightscape, neon lights flickering, traffic flowing",
"duration": 6,
"resolution": "1080p",
"prompt_optimizer": true,
"watermark": false
}Case 3: Image-to-Video with First Frame
{
"model": "MiniMax-Hailuo-2.3",
"prompt": "Kitten running towards camera, smiling and blinking",
"first_frame_image": "https://example.com/cat.jpg",
"duration": 6,
"resolution": "1080p"
}Case 4: Camera Movement Commands
{
"model": "MiniMax-Hailuo-2.3",
"prompt": "[推进]A cat running in the garden, camera slowly pushing in for a close-up",
"duration": 6,
"resolution": "768p"
}Case 5: Fast Pretreatment Mode
{
"model": "MiniMax-Hailuo-2.3",
"prompt": "Waves crashing on the beach at sunset",
"duration": 10,
"resolution": "768p",
"prompt_optimizer": true,
"fast_pretreatment": true
}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.