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"
}
}
Autentikasi
Semua endpoint memerlukan autentikasi Bearer Token Dapatkan API Key: Kunjungi Halaman Manajemen API Key untuk mendapatkan API Key Anda Tambahkan ke header permintaan: Authorization: Bearer YOUR_API_KEY
Parameter Permintaan
Nama model pembuatan video, tetap sebagai wan2.5-preview
Deskripsi konten video Wajib untuk teks-ke-video (tanpa image_urls), opsional tetapi direkomendasikan untuk gambar-ke-videoJelaskan adegan, aksi, dan gaya secara detail untuk hasil yang lebih baik Contoh: "Sunset coastal highway, cinematic shot"
Array URL gambar referensi (hanya 1 gambar didukung) Wajib untuk mode gambar-ke-video, mendukung URL gambar yang dapat diakses publik atau encoding Base64 (data:image/png;base64,...) Contoh: ["https://example.com/image.jpg"] Sistem otomatis memilih mode teks-ke-video atau gambar-ke-video berdasarkan apakah image_urls disertakan. Jangan mengirim image_urls untuk mode teks-ke-video.
Prompt negatif, menjelaskan konten yang tidak diinginkan Maksimum 500 karakter Contoh: "blurry, low quality, distorted"
Resolusi video Opsi:
480p - SD, mendukung size: 16:9, 9:16, 1:1
720p - HD (default), mendukung size: 16:9, 9:16, 1:1, 4:3, 3:4
1080p - FHD, mendukung size: 16:9, 9:16, 1:1, 4:3, 3:4
Default: 720p Resolusi secara langsung memengaruhi harga: 1080p > 720p > 480p.
480p hanya mendukung rasio 16:9, 9:16, 1:1. Mengirim 4:3 atau 3:4 akan menyebabkan error.
Durasi video (detik) Hanya mendukung: 5 atau 10 detik Default: 5
Rasio aspek, hanya berlaku untuk teks-ke-video (tanpa image_urls) Opsi tergantung pada resolution: 480p:
16:9 - Lanskap (default)
9:16 - Potret
1:1 - Persegi
720p / 1080p:
16:9 - Lanskap (default)
9:16 - Potret
1:1 - Persegi
4:3 - Lanskap
3:4 - Potret
Default: 16:9 Untuk gambar-ke-video, rasio aspek ditentukan oleh gambar input. Jangan mengirim size, jika tidak error akan dikembalikan.
Random seed (≥0), menetapkan seed yang sama dapat mereproduksi hasil serupa Contoh: 12345
Apakah mengaktifkan penulisan ulang prompt cerdas Secara signifikan meningkatkan hasil untuk prompt yang lebih pendek, tetapi menambah waktu pemrosesan Default: true
Apakah menambahkan audio secara otomatis Jika diaktifkan, sistem akan membuat audio yang sesuai untuk video Default: true Model ini hanya mendukung audio=true. Mengatur ke false untuk video tanpa suara tidak didukung.
URL audio kustom (wav/mp3, 3-30 detik, ≤ 15MB) Jika audio lebih panjang dari durasi video, audio akan dipotong secara otomatis; jika lebih pendek, bagian sisanya tanpa suara Persyaratan file audio:
Format: wav, mp3
Durasi: 3-30 detik
Ukuran: ≤ 15MB
Apakah menambahkan watermark “AI Dihasilkan” (kanan bawah) Default: false
Kombinasi Resolusi dan Rasio Aspek
Kombinasi size dan resolution dipetakan ke dimensi piksel upstream (hanya berlaku untuk teks-ke-video ):
Rasio Aspek Deskripsi Ukuran 480p Ukuran 720p Ukuran 1080p 16:9Lanskap (default) 832×480 1280×720 1920×1080 9:16Potret 480×832 720×1280 1080×1920 1:1Persegi 624×624 960×960 1440×1440 4:3Lanskap - 1088×832 1632×1248 3:4Potret - 832×1088 1248×1632
480p hanya mendukung rasio 16:9, 9:16, 1:1. Mengirim 4:3 atau 3:4 akan menyebabkan error. 720p dan 1080p mendukung semua 5 rasio.
Respons
Kode status respons, 200 jika berhasil
Array data respons Status tugas, submitted saat pengiriman awal
Pengidentifikasi tugas unik untuk mengueri status dan hasil tugas
Kasus Penggunaan
Kasus 1: Teks-ke-Video (Sederhana)
{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot"
}
Kasus 2: Teks-ke-Video (Parameter Lengkap)
{
"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
}
Kasus 3: Gambar-ke-Video
{
"model" : "wan2.5-preview" ,
"prompt" : "Cat running on the grass" ,
"image_urls" : [ "https://example.com/cat.jpg" ],
"resolution" : "480p" ,
"duration" : 5
}
Kasus 4: Gambar-ke-Video (Base64 Gambar)
{
"model" : "wan2.5-preview" ,
"prompt" : "Make the cat stand up and walk" ,
"image_urls" : [ "data:image/png;base64,iVBORw0KGgo..." ],
"duration" : 5
}
Kasus 5: Audio Kustom
{
"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
}
Deskripsi Mode
Teks-ke-Video
Parameter prompt wajib
Jangan mengirim image_urls
Gunakan size untuk menentukan rasio aspek
Gambar-ke-Video
Parameter image_urls wajib (hanya 1 gambar didukung)
prompt opsional, digunakan untuk menjelaskan aksi yang diharapkan
Rasio aspek ditentukan oleh gambar input, jangan mengirim size
Sistem otomatis memilih mode berdasarkan apakah image_urls disertakan
Kueri Hasil Tugas Pembuatan video adalah tugas asinkron yang mengembalikan task_id saat dikirim. Gunakan endpoint Dapatkan Status Tugas untuk mengueri progres dan hasil pembuatan.