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"
}
}
Authentification
Tous les endpoints requièrent une authentification par Bearer Token Obtenez votre API Key : Visitez la page de gestion des API Keys pour obtenir votre API Key Ajoutez-la à l’en-tête de la requête : Authorization: Bearer YOUR_API_KEY
Paramètres de la requête
Nom du modèle de génération vidéo, fixé à wan2.5-preview
Description du contenu de la vidéo Obligatoire pour text-to-video (sans image_urls), optionnel mais recommandé pour image-to-videoDécrivez les scènes, actions et styles en détail pour de meilleurs résultats Exemple : "Sunset coastal highway, cinematic shot"
Tableau d’URLs d’images de référence (1 seule image prise en charge) Obligatoire en mode image-to-video, prend en charge les URLs d’images accessibles publiquement ou l’encodage Base64 (data:image/png;base64,...) Exemple : ["https://example.com/image.jpg"] Le système sélectionne automatiquement le mode text-to-video ou image-to-video selon que image_urls est inclus. Ne transmettez pas image_urls en mode text-to-video.
Prompt négatif décrivant le contenu indésirable Maximum 500 caractères Exemple : "blurry, low quality, distorted"
Résolution de la vidéo Options :
480p — SD, prend en charge size : 16:9, 9:16, 1:1
720p — HD (par défaut), prend en charge size : 16:9, 9:16, 1:1, 4:3, 3:4
1080p — FHD, prend en charge size : 16:9, 9:16, 1:1, 4:3, 3:4
Par défaut : 720p La résolution influe directement sur le tarif : 1080p > 720p > 480p.
480p ne prend en charge que les rapports 16:9, 9:16, 1:1. Transmettre 4:3 ou 3:4 entraînera une erreur.
Durée de la vidéo (secondes) Prend en charge uniquement : 5 ou 10 secondes Par défaut : 5
Rapport d’aspect, effectif uniquement pour text-to-video (sans image_urls) Les options dépendent de resolution : 480p :
16:9 — paysage (par défaut)
9:16 — portrait
1:1 — carré
720p / 1080p :
16:9 — paysage (par défaut)
9:16 — portrait
1:1 — carré
4:3 — paysage
3:4 — portrait
Par défaut : 16:9 Pour image-to-video, le rapport d’aspect est déterminé par l’image d’entrée. Ne transmettez pas size, sinon une erreur sera renvoyée.
Graine aléatoire (≥ 0), spécifier la même graine permet de reproduire des résultats similaires Exemple : 12345
Activer la réécriture intelligente du prompt Améliore significativement les résultats pour les prompts courts, mais augmente le temps de traitement Par défaut : true
Ajouter automatiquement un audio Lorsqu’activé, le système génère un audio adapté à la vidéo Par défaut : true Ce modèle prend uniquement en charge audio=true. Définir false pour une vidéo silencieuse n’est pas pris en charge.
URL d’audio personnalisé (wav/mp3, 3–30 secondes, ≤ 15 Mo) Si l’audio est plus long que la durée de la vidéo, il sera automatiquement tronqué ; s’il est plus court, la partie restante sera silencieuse Exigences du fichier audio :
Format : wav, mp3
Durée : 3–30 secondes
Taille : ≤ 15 Mo
Ajouter un filigrane « AI Generated » (en bas à droite) Par défaut : false
Combinaisons résolution / rapport d’aspect
Les combinaisons size et resolution correspondent aux dimensions en pixels en amont (effectif uniquement pour text-to-video ) :
Rapport d’aspect Description Taille 480p Taille 720p Taille 1080p 16:9Paysage (par défaut) 832×480 1280×720 1920×1080 9:16Portrait 480×832 720×1280 1080×1920 1:1Carré 624×624 960×960 1440×1440 4:3Paysage - 1088×832 1632×1248 3:4Portrait - 832×1088 1248×1632
480p ne prend en charge que les rapports 16:9, 9:16, 1:1. Transmettre 4:3 ou 3:4 entraînera une erreur. 720p et 1080p prennent en charge les 5 rapports.
Réponse
Code de statut de la réponse, 200 en cas de succès
Tableau de données de la réponse Afficher Éléments du tableau
Statut de la tâche, submitted lors de la soumission initiale
Identifiant unique de la tâche pour interroger son statut et ses résultats
Cas d’utilisation
Cas 1 : Texte vers vidéo (simple)
{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot"
}
Cas 2 : Texte vers vidéo (paramètres complets)
{
"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
}
Cas 3 : Image vers vidéo
{
"model" : "wan2.5-preview" ,
"prompt" : "Cat running on the grass" ,
"image_urls" : [ "https://example.com/cat.jpg" ],
"resolution" : "480p" ,
"duration" : 5
}
Cas 4 : Image vers vidéo (image Base64)
{
"model" : "wan2.5-preview" ,
"prompt" : "Make the cat stand up and walk" ,
"image_urls" : [ "data:image/png;base64,iVBORw0KGgo..." ],
"duration" : 5
}
Cas 5 : Audio personnalisé
{
"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
}
Description des modes
Texte vers vidéo (Text-to-Video)
Le paramètre prompt est obligatoire
Ne transmettez pas image_urls
Utilisez size pour spécifier le rapport d’aspect
Image vers vidéo (Image-to-Video)
Le paramètre image_urls est obligatoire (1 seule image prise en charge)
prompt est optionnel, utilisé pour décrire les actions attendues
Le rapport d’aspect est déterminé par l’image d’entrée, ne transmettez pas size
Le système sélectionne automatiquement le mode selon que image_urls est inclus
Interroger les résultats de la tâche La génération vidéo est une tâche asynchrone qui renvoie un task_id lors de la soumission. Utilisez l’endpoint Obtenir le statut de la tâche pour interroger la progression et les résultats de la génération.