cURL
Python
JavaScript
Go
Java
PHP
Ruby
Swift
C#
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "wan2.5-preview",
"prompt": "Sunset coastal highway, cinematic shot",
"size": "16:9",
"resolution": "720p",
"duration": 5
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot" ,
"size" : "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.apimart.ai/v1/videos/generations" ;
const payload = {
model: "wan2.5-preview" ,
prompt: "Sunset coastal highway, cinematic shot" ,
size: "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.apimart.ai/v1/videos/generations"
payload := map [ string ] interface {}{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot" ,
"size" : "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.apimart.ai/v1/videos/generations" ;
String payload = """
{
"model": "wan2.5-preview",
"prompt": "Sunset coastal highway, cinematic shot",
"size": "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.apimart.ai/v1/videos/generations" ;
$payload = [
"model" => "wan2.5-preview" ,
"prompt" => "Sunset coastal highway, cinematic shot" ,
"size" => "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.apimart.ai/v1/videos/generations" )
payload = {
model: "wan2.5-preview" ,
prompt: "Sunset coastal highway, cinematic shot" ,
size: "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. body
import Foundation
let url = URL ( string : "https://api.apimart.ai/v1/videos/generations" ) !
let payload: [ String : Any ] = [
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot" ,
"size" : "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.apimart.ai/v1/videos/generations" ;
var payload = @"{
"" model "" : "" wan2.5-preview "" ,
"" prompt "" : "" Sunset coastal highway, cinematic shot "" ,
"" size "" : "" 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 );
}
}
{
"code" : 200 ,
"data" : [
{
"status" : "submitted" ,
"task_id" : "task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ"
}
]
}
{
"error" : {
"code" : 400 ,
"message" : "Invalid request parameters" ,
"type" : "invalid_request_error"
}
}
{
"error" : {
"code" : 401 ,
"message" : "Authentication failed, please check your API key" ,
"type" : "authentication_error"
}
}
{
"error" : {
"code" : 402 ,
"message" : "Insufficient balance, please top up" ,
"type" : "payment_required"
}
}
{
"error" : {
"code" : 429 ,
"message" : "Too many requests, please try again later" ,
"type" : "rate_limit_error"
}
}
{
"error" : {
"code" : 500 ,
"message" : "Internal server error. Please try again later" ,
"type" : "server_error"
}
}
Authentication
All endpoints require Bearer Token authentication Get API Key: Visit the API Key Management Page to get your API Key Add to request header: Authorization: Bearer YOUR_API_KEY
Request Parameters
Video generation model name, fixed as wan2.5-preview
Video content description Required for text-to-video (without image_urls), optional but recommended for image-to-videoDescribe scenes, actions, styles in detail for better results Example: "Sunset coastal highway, cinematic shot"
Reference image URL array (only 1 image supported) Required for image-to-video mode, supports publicly accessible image URLs or Base64 encoding (data:image/png;base64,...) 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. Do not pass image_urls for text-to-video mode.
Negative prompt, describes unwanted content Maximum 500 characters Example: "blurry, low quality, distorted"
Video resolution Options:
480p - SD, supports size: 16:9, 9:16, 1:1
720p - HD (default), supports size: 16:9, 9:16, 1:1, 4:3, 3:4
1080p - FHD, supports size: 16:9, 9:16, 1:1, 4:3, 3:4
Default: 720p Resolution directly affects pricing: 1080p > 720p > 480p.
480p only supports 16:9, 9:16, 1:1 ratios. Passing 4:3 or 3:4 will result in an error.
Video duration (seconds) Only supports: 5 or 10 seconds Default: 5
Aspect ratio, only effective for text-to-video (without image_urls) Options depend on resolution: 480p:
16:9 - Landscape (default)
9:16 - Portrait
1:1 - Square
720p / 1080p:
16:9 - Landscape (default)
9:16 - Portrait
1:1 - Square
4:3 - Landscape
3:4 - Portrait
Default: 16:9 For image-to-video, the aspect ratio is determined by the input image. Do not pass size, otherwise an error will be returned.
Random seed (≥0), specifying the same seed can reproduce similar results Example: 12345
Whether to enable smart prompt rewriting Significantly improves results for shorter prompts, but increases processing time Default: true
Whether to automatically add audio When enabled, the system will generate matching audio for the video Default: true This model only supports audio=true. Setting to false for silent video is not supported.
Custom audio URL (wav/mp3, 3-30 seconds, ≤ 15MB) If the audio is longer than the video duration, it will be automatically trimmed; if shorter, the remaining part will be silent Audio file requirements:
Format: wav, mp3
Duration: 3-30 seconds
Size: ≤ 15MB
Whether to add an “AI Generated” watermark (bottom right) Default: false
Resolution and Aspect Ratio Combinations
size and resolution combinations map to upstream pixel dimensions (only effective for text-to-video ):
Aspect Ratio Description 480p Size 720p Size 1080p Size 16:9Landscape (default) 832×480 1280×720 1920×1080 9:16Portrait 480×832 720×1280 1080×1920 1:1Square 624×624 960×960 1440×1440 4:3Landscape - 1088×832 1632×1248 3:4Portrait - 832×1088 1248×1632
480p only supports 16:9, 9:16, 1:1 ratios. Passing 4:3 or 3:4 will result in an error. 720p and 1080p support all 5 ratios.
Response
Response status code, 200 on success
Response data array Task status, submitted on initial submission
Unique task identifier for querying task status and results
Use Cases
Case 1: Text-to-Video (Simple)
{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot"
}
Case 2: Text-to-Video (Full Parameters)
{
"model" : "wan2.5-preview" ,
"prompt" : "City night scene, neon lights and rain-soaked streets" ,
"negative_prompt" : "blurry, low quality, distorted" ,
"size" : "16:9" ,
"resolution" : "720p" ,
"duration" : 5 ,
"seed" : 12345 ,
"prompt_extend" : true ,
"audio" : true ,
"watermark" : false
}
Case 3: Image-to-Video
{
"model" : "wan2.5-preview" ,
"prompt" : "Cat running on the grass" ,
"image_urls" : [ "https://example.com/cat.jpg" ],
"resolution" : "480p" ,
"duration" : 5
}
Case 4: Image-to-Video (Base64 Image)
{
"model" : "wan2.5-preview" ,
"prompt" : "Make the cat stand up and walk" ,
"image_urls" : [ "data:image/png;base64,iVBORw0KGgo..." ],
"duration" : 5
}
Case 5: Custom Audio
{
"model" : "wan2.5-preview" ,
"prompt" : "Person dancing to the music" ,
"image_urls" : [ "https://example.com/dancer.jpg" ],
"audio_url" : "https://example.com/music.mp3" ,
"resolution" : "720p" ,
"duration" : 10
}
Mode Description
Text-to-Video
prompt parameter is required
Do not pass image_urls
Use size to specify aspect ratio
Image-to-Video
image_urls parameter is required (only 1 image supported)
prompt is optional, used to describe expected actions
Aspect ratio is determined by the input image, do not pass size
The system automatically selects the mode based on whether image_urls is included
Query Task Results Video generation is an asynchronous task that returns a task_id upon submission. Use the Get Task Status endpoint to query generation progress and results.