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"
}
}
Autenticación
Todos los endpoints requieren autenticación mediante Bearer Token Obtener API Key: Visite la página de gestión de API Keys para obtener su API Key Añadir al encabezado de la solicitud: Authorization: Bearer YOUR_API_KEY
Parámetros de la solicitud
Nombre del modelo de generación de video, fijado como wan2.5-preview
Descripción del contenido del video Obligatorio para text-to-video (sin image_urls), opcional pero recomendado para image-to-videoDescriba escenas, acciones y estilos en detalle para obtener mejores resultados Ejemplo: "Sunset coastal highway, cinematic shot"
Array de URLs de imágenes de referencia (solo se admite 1 imagen) Requerido para el modo image-to-video, admite URLs de imágenes accesibles públicamente o codificación Base64 (data:image/png;base64,...) Ejemplo: ["https://example.com/image.jpg"] El sistema selecciona automáticamente el modo text-to-video o image-to-video según si se incluye image_urls. No envíe image_urls para el modo text-to-video.
Prompt negativo, describe contenido no deseado Máximo 500 caracteres Ejemplo: "blurry, low quality, distorted"
resolution
string
predeterminado: "720p"
Resolución del video Opciones:
480p - SD, admite size: 16:9, 9:16, 1:1
720p - HD (por defecto), admite size: 16:9, 9:16, 1:1, 4:3, 3:4
1080p - FHD, admite size: 16:9, 9:16, 1:1, 4:3, 3:4
Por defecto: 720p La resolución afecta directamente al precio: 1080p > 720p > 480p.
480p solo admite las proporciones 16:9, 9:16, 1:1. Pasar 4:3 o 3:4 provocará un error.
duration
integer
predeterminado: "5"
Duración del video (segundos) Solo admite: 5 o 10 segundos Por defecto: 5
size
string
predeterminado: "16:9"
Proporción de aspecto, solo efectiva para text-to-video (sin image_urls) Las opciones dependen de resolution: 480p:
16:9 - Paisaje (por defecto)
9:16 - Retrato
1:1 - Cuadrado
720p / 1080p:
16:9 - Paisaje (por defecto)
9:16 - Retrato
1:1 - Cuadrado
4:3 - Paisaje
3:4 - Retrato
Por defecto: 16:9 Para image-to-video, la proporción de aspecto la determina la imagen de entrada. No envíe size, de lo contrario se devolverá un error.
Semilla aleatoria (≥0), especificar la misma semilla puede reproducir resultados similares Ejemplo: 12345
prompt_extend
boolean
predeterminado: "true"
Si se debe activar la reescritura inteligente del prompt Mejora significativamente los resultados para prompts cortos, pero aumenta el tiempo de procesamiento Por defecto: true
audio
boolean
predeterminado: "true"
Si se debe añadir audio automáticamente Cuando está activado, el sistema generará audio que coincida con el video Por defecto: true Este modelo solo admite audio=true. No se admite establecerlo en false para video silencioso.
URL de audio personalizado (wav/mp3, 3-30 segundos, ≤ 15MB) Si el audio es más largo que la duración del video, será recortado automáticamente; si es más corto, la parte restante quedará en silencio Requisitos del archivo de audio:
Formato: wav, mp3
Duración: 3-30 segundos
Tamaño: ≤ 15MB
watermark
boolean
predeterminado: "false"
Si se debe añadir una marca de agua “AI Generated” (esquina inferior derecha) Por defecto: false
Combinaciones de resolución y proporción de aspecto
Las combinaciones de size y resolution se asignan a dimensiones de píxeles upstream (solo efectivas para text-to-video ):
Proporción de aspecto Descripción Tamaño 480p Tamaño 720p Tamaño 1080p 16:9Paisaje (por defecto) 832×480 1280×720 1920×1080 9:16Retrato 480×832 720×1280 1080×1920 1:1Cuadrado 624×624 960×960 1440×1440 4:3Paisaje - 1088×832 1632×1248 3:4Retrato - 832×1088 1248×1632
480p solo admite las proporciones 16:9, 9:16, 1:1. Pasar 4:3 o 3:4 provocará un error. 720p y 1080p admiten las 5 proporciones.
Respuesta
Código de estado de la respuesta, 200 en caso de éxito
Array de datos de la respuesta Mostrar Elementos del array
Estado de la tarea, submitted al enviarse inicialmente
Identificador único de la tarea para consultar el estado y los resultados
Casos de uso
Caso 1: Texto a video (simple)
{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot"
}
Caso 2: Texto a video (parámetros completos)
{
"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
}
Caso 3: Imagen a video
{
"model" : "wan2.5-preview" ,
"prompt" : "Cat running on the grass" ,
"image_urls" : [ "https://example.com/cat.jpg" ],
"resolution" : "480p" ,
"duration" : 5
}
Caso 4: Imagen a video (imagen Base64)
{
"model" : "wan2.5-preview" ,
"prompt" : "Make the cat stand up and walk" ,
"image_urls" : [ "data:image/png;base64,iVBORw0KGgo..." ],
"duration" : 5
}
Caso 5: Audio personalizado
{
"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
}
Descripción de modos
Texto a video (Text-to-Video)
El parámetro prompt es obligatorio
No envíe image_urls
Use size para especificar la proporción de aspecto
Imagen a video (Image-to-Video)
El parámetro image_urls es obligatorio (solo se admite 1 imagen)
prompt es opcional, se usa para describir las acciones esperadas
La proporción de aspecto la determina la imagen de entrada, no envíe size
El sistema selecciona automáticamente el modo según si se incluye image_urls
Consultar resultados de la tarea La generación de video es una tarea asíncrona que devuelve un task_id al enviarse. Use el endpoint Obtener estado de la tarea para consultar el progreso y los resultados de la generación.