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"
}
}
Autenticação
Todos os endpoints exigem autenticação via Bearer Token Obtenha a chave de API: Acesse a página de gerenciamento de chaves de API para obter sua chave de API Adicione ao cabeçalho da requisição: Authorization: Bearer YOUR_API_KEY
Parâmetros da requisição
Nome do modelo de geração de vídeo, fixo como wan2.5-preview
Descrição do conteúdo do vídeo Obrigatório para text-to-video (sem image_urls), opcional, mas recomendado para image-to-videoDescreva cenas, ações e estilos em detalhes para obter melhores resultados Exemplo: "Sunset coastal highway, cinematic shot"
Array de URLs de imagens de referência (apenas 1 imagem suportada) Obrigatório para o modo image-to-video, suporta URLs de imagens publicamente acessíveis ou codificação Base64 (data:image/png;base64,...) Exemplo: ["https://example.com/image.jpg"] O sistema seleciona automaticamente o modo text-to-video ou image-to-video com base na presença de image_urls. Não passe image_urls para o modo text-to-video.
Prompt negativo, descreve conteúdo indesejado Máximo de 500 caracteres Exemplo: "blurry, low quality, distorted"
Resolução do vídeo Opções:
480p - SD, suporta size: 16:9, 9:16, 1:1
720p - HD (padrão), suporta size: 16:9, 9:16, 1:1, 4:3, 3:4
1080p - FHD, suporta size: 16:9, 9:16, 1:1, 4:3, 3:4
Padrão: 720p A resolução afeta diretamente o preço: 1080p > 720p > 480p.
480p suporta apenas as proporções 16:9, 9:16, 1:1. Passar 4:3 ou 3:4 resultará em erro.
Duração do vídeo (segundos) Suporta apenas: 5 ou 10 segundos Padrão: 5
Proporção, efetiva apenas para text-to-video (sem image_urls) As opções dependem de resolution: 480p:
16:9 - Paisagem (padrão)
9:16 - Retrato
1:1 - Quadrado
720p / 1080p:
16:9 - Paisagem (padrão)
9:16 - Retrato
1:1 - Quadrado
4:3 - Paisagem
3:4 - Retrato
Padrão: 16:9 Para image-to-video, a proporção é determinada pela imagem de entrada. Não passe size, caso contrário um erro será retornado.
Seed aleatório (≥0), especificar o mesmo seed pode reproduzir resultados semelhantes Exemplo: 12345
Se deve ativar a reescrita inteligente do prompt Melhora significativamente os resultados para prompts mais curtos, mas aumenta o tempo de processamento Padrão: true
Se deve adicionar áudio automaticamente Quando ativado, o sistema gerará áudio correspondente para o vídeo Padrão: true Este modelo suporta apenas audio=true. Definir como false para vídeo silencioso não é suportado.
URL de áudio personalizado (wav/mp3, 3-30 segundos, ≤ 15MB) Se o áudio for mais longo que a duração do vídeo, ele será automaticamente cortado; se for mais curto, a parte restante ficará silenciosa Requisitos do arquivo de áudio:
Formato: wav, mp3
Duração: 3-30 segundos
Tamanho: ≤ 15MB
Se deve adicionar uma marca d’água “AI Generated” (canto inferior direito) Padrão: false
Combinações de resolução e proporção
As combinações de size e resolution correspondem às dimensões de pixel upstream (efetivas apenas para text-to-video ):
Proporção Descrição Tamanho 480p Tamanho 720p Tamanho 1080p 16:9Paisagem (padrão) 832×480 1280×720 1920×1080 9:16Retrato 480×832 720×1280 1080×1920 1:1Quadrado 624×624 960×960 1440×1440 4:3Paisagem - 1088×832 1632×1248 3:4Retrato - 832×1088 1248×1632
480p suporta apenas as proporções 16:9, 9:16, 1:1. Passar 4:3 ou 3:4 resultará em erro. 720p e 1080p suportam todas as 5 proporções.
Resposta
Código de status da resposta, 200 em caso de sucesso
Array de dados da resposta Mostrar Elementos do array
Status da tarefa, submitted no envio inicial
Identificador único da tarefa para consultar o status e os resultados
Casos de uso
Caso 1: Texto para vídeo (Simples)
{
"model" : "wan2.5-preview" ,
"prompt" : "Sunset coastal highway, cinematic shot"
}
Caso 2: Texto para vídeo (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: Imagem para vídeo
{
"model" : "wan2.5-preview" ,
"prompt" : "Cat running on the grass" ,
"image_urls" : [ "https://example.com/cat.jpg" ],
"resolution" : "480p" ,
"duration" : 5
}
Caso 4: Imagem para vídeo (Imagem Base64)
{
"model" : "wan2.5-preview" ,
"prompt" : "Make the cat stand up and walk" ,
"image_urls" : [ "data:image/png;base64,iVBORw0KGgo..." ],
"duration" : 5
}
Caso 5: Áudio 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
}
Descrição dos modos
Texto para vídeo (Text-to-Video)
O parâmetro prompt é obrigatório
Não passe image_urls
Use size para especificar a proporção
Imagem para vídeo (Image-to-Video)
O parâmetro image_urls é obrigatório (apenas 1 imagem suportada)
prompt é opcional, usado para descrever as ações esperadas
A proporção é determinada pela imagem de entrada, não passe size
O sistema seleciona automaticamente o modo com base na presença de image_urls
Consultar resultados da tarefa A geração de vídeos é uma tarefa assíncrona que retorna um task_id no envio. Use o endpoint Obter status da tarefa para consultar o progresso e os resultados da geração.