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"
}
}
Аутентификация
Все эндпоинты требуют аутентификации по Bearer Token Получение API Key: Перейдите на страницу управления API Key , чтобы получить ваш API Key Добавьте в заголовок запроса: Authorization: Bearer YOUR_API_KEY
Параметры запроса
Имя модели генерации видео, фиксированное значение wan2.5-preview
Описание содержания видео Обязательный для text-to-video (без image_urls), опциональный, но рекомендуется для image-to-videoПодробно опишите сцены, действия и стили для лучших результатов Пример: "Sunset coastal highway, cinematic shot"
Массив URL опорных изображений (поддерживается только 1 изображение) Обязателен в режиме image-to-video, поддерживает публично доступные URL изображений или Base64-кодирование (data:image/png;base64,...) Пример: ["https://example.com/image.jpg"] Система автоматически выбирает режим text-to-video или image-to-video в зависимости от наличия image_urls. Не передавайте image_urls для режима text-to-video.
Негативный промпт, описывающий нежелательное содержание Максимум 500 символов Пример: "blurry, low quality, distorted"
resolution
string
по умолчанию: "720p"
Разрешение видео Варианты:
480p — SD, поддерживает size: 16:9, 9:16, 1:1
720p — HD (по умолчанию), поддерживает size: 16:9, 9:16, 1:1, 4:3, 3:4
1080p — FHD, поддерживает size: 16:9, 9:16, 1:1, 4:3, 3:4
По умолчанию: 720p Разрешение напрямую влияет на стоимость: 1080p > 720p > 480p.
480p поддерживает только соотношения 16:9, 9:16, 1:1. Передача 4:3 или 3:4 приведёт к ошибке.
Длительность видео (секунды) Поддерживает только: 5 или 10 секунд По умолчанию: 5
size
string
по умолчанию: "16:9"
Соотношение сторон, действует только для text-to-video (без image_urls) Варианты зависят от resolution: 480p:
16:9 — пейзаж (по умолчанию)
9:16 — портрет
1:1 — квадрат
720p / 1080p:
16:9 — пейзаж (по умолчанию)
9:16 — портрет
1:1 — квадрат
4:3 — пейзаж
3:4 — портрет
По умолчанию: 16:9 Для image-to-video соотношение сторон определяется входным изображением. Не передавайте size, иначе будет возвращена ошибка.
Случайное зерно (≥ 0), указание одного и того же зерна позволяет воспроизводить похожие результаты Пример: 12345
prompt_extend
boolean
по умолчанию: "true"
Включить ли умное переписывание промпта Значительно улучшает результаты для коротких промптов, но увеличивает время обработки По умолчанию: true
audio
boolean
по умолчанию: "true"
Автоматически добавлять ли аудио При включении система генерирует подходящее аудио для видео По умолчанию: true Эта модель поддерживает только audio=true. Установка false для видео без звука не поддерживается.
URL пользовательского аудио (wav/mp3, 3–30 секунд, ≤ 15 МБ) Если аудио длиннее длительности видео, оно будет автоматически обрезано; если короче — оставшаяся часть будет без звука Требования к аудиофайлу:
Формат: wav, mp3
Длительность: 3–30 секунд
Размер: ≤ 15 МБ
watermark
boolean
по умолчанию: "false"
Добавлять ли водяной знак «AI Generated» (правый нижний угол) По умолчанию: false
Комбинации разрешения и соотношения сторон
Комбинации size и resolution соответствуют пиксельным размерам восходящего сервиса (действуют только для text-to-video ):
Соотношение сторон Описание Размер 480p Размер 720p Размер 1080p 16:9Пейзаж (по умолчанию) 832×480 1280×720 1920×1080 9:16Портрет 480×832 720×1280 1080×1920 1:1Квадрат 624×624 960×960 1440×1440 4:3Пейзаж - 1088×832 1632×1248 3:4Портрет - 832×1088 1248×1632
480p поддерживает только соотношения 16:9, 9:16, 1:1. Передача 4:3 или 3:4 приведёт к ошибке. 720p и 1080p поддерживают все 5 соотношений.
Ответ
Код статуса ответа, 200 при успехе
Массив данных ответа Показать Элементы массива
Статус задачи, submitted при первичной отправке
Уникальный идентификатор задачи для запроса её статуса и результатов
Сценарии использования
Сценарий 1: Текст в видео (простой)
{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot"
}
Сценарий 2: Текст в видео (полный набор параметров)
{
"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
}
Сценарий 3: Изображение в видео
{
"model" : "wan2.5-preview" ,
"prompt" : "Cat running on the grass" ,
"image_urls" : [ "https://example.com/cat.jpg" ],
"resolution" : "480p" ,
"duration" : 5
}
Сценарий 4: Изображение в видео (изображение Base64)
{
"model" : "wan2.5-preview" ,
"prompt" : "Make the cat stand up and walk" ,
"image_urls" : [ "data:image/png;base64,iVBORw0KGgo..." ],
"duration" : 5
}
Сценарий 5: Пользовательское аудио
{
"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
}
Описание режимов
Текст в видео (Text-to-Video)
Параметр prompt обязателен
Не передавайте image_urls
Используйте size для задания соотношения сторон
Изображение в видео (Image-to-Video)
Параметр image_urls обязателен (поддерживается только 1 изображение)
prompt опционален, используется для описания ожидаемых действий
Соотношение сторон определяется входным изображением, не передавайте size
Система автоматически выбирает режим в зависимости от наличия image_urls
Запрос результатов задачи Генерация видео — асинхронная задача, которая при отправке возвращает task_id. Используйте эндпоинт Получение статуса задачи для запроса прогресса и результатов генерации.