Langsung ke konten utama
POST
/
v1
/
videos
/
generations
curl --request POST \
  --url https://api.apimart.ai/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "wan2.7-videoedit",
    "video_urls": ["https://cdn.example.com/original.mp4"],
    "prompt": "Replace the background with a snowy mountain scene",
    "resolution": "1080P"
  }'
import requests

url = "https://api.apimart.ai/v1/videos/generations"

payload = {
    "model": "wan2.7-videoedit",
    "video_urls": ["https://cdn.example.com/original.mp4"],
    "prompt": "Replace the background with a snowy mountain scene",
    "resolution": "1080P"
}

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.7-videoedit",
  video_urls: ["https://cdn.example.com/original.mp4"],
  prompt: "Replace the background with a snowy mountain scene",
  resolution: "1080P"
};

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.7-videoedit",
        "video_urls": []string{"https://cdn.example.com/original.mp4"},
        "prompt":     "Replace the background with a snowy mountain scene",
        "resolution": "1080P",
    }

    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.7-videoedit",
          "video_urls": ["https://cdn.example.com/original.mp4"],
          "prompt": "Replace the background with a snowy mountain scene",
          "resolution": "1080P"
        }
        """;

        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.7-videoedit",
    "video_urls" => ["https://cdn.example.com/original.mp4"],
    "prompt" => "Replace the background with a snowy mountain scene",
    "resolution" => "1080P"
];

$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.7-videoedit",
  video_urls: ["https://cdn.example.com/original.mp4"],
  prompt: "Replace the background with a snowy mountain scene",
  resolution: "1080P"
}

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.7-videoedit",
    "video_urls": ["https://cdn.example.com/original.mp4"],
    "prompt": "Replace the background with a snowy mountain scene",
    "resolution": "1080P"
]

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.7-videoedit"",
            ""video_urls"": [""https://cdn.example.com/original.mp4""],
            ""prompt"": ""Replace the background with a snowy mountain scene"",
            ""resolution"": ""1080P""
        }";

        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": "Invalid authentication credentials",
    "type": "authentication_error"
  }
}
{
  "error": {
    "code": 402,
    "message": "Insufficient balance. Please top up your account",
    "type": "payment_required"
  }
}
{
  "error": {
    "code": 429,
    "message": "Rate limit exceeded. Please try again later",
    "type": "rate_limit_error"
  }
}
{
  "error": {
    "code": 500,
    "message": "Internal server error. Please try again later",
    "type": "server_error"
  }
}
curl --request POST \
  --url https://api.apimart.ai/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "wan2.7-videoedit",
    "video_urls": ["https://cdn.example.com/original.mp4"],
    "prompt": "Replace the background with a snowy mountain scene",
    "resolution": "1080P"
  }'
import requests

url = "https://api.apimart.ai/v1/videos/generations"

payload = {
    "model": "wan2.7-videoedit",
    "video_urls": ["https://cdn.example.com/original.mp4"],
    "prompt": "Replace the background with a snowy mountain scene",
    "resolution": "1080P"
}

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.7-videoedit",
  video_urls: ["https://cdn.example.com/original.mp4"],
  prompt: "Replace the background with a snowy mountain scene",
  resolution: "1080P"
};

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.7-videoedit",
        "video_urls": []string{"https://cdn.example.com/original.mp4"},
        "prompt":     "Replace the background with a snowy mountain scene",
        "resolution": "1080P",
    }

    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.7-videoedit",
          "video_urls": ["https://cdn.example.com/original.mp4"],
          "prompt": "Replace the background with a snowy mountain scene",
          "resolution": "1080P"
        }
        """;

        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.7-videoedit",
    "video_urls" => ["https://cdn.example.com/original.mp4"],
    "prompt" => "Replace the background with a snowy mountain scene",
    "resolution" => "1080P"
];

$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.7-videoedit",
  video_urls: ["https://cdn.example.com/original.mp4"],
  prompt: "Replace the background with a snowy mountain scene",
  resolution: "1080P"
}

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.7-videoedit",
    "video_urls": ["https://cdn.example.com/original.mp4"],
    "prompt": "Replace the background with a snowy mountain scene",
    "resolution": "1080P"
]

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.7-videoedit"",
            ""video_urls"": [""https://cdn.example.com/original.mp4""],
            ""prompt"": ""Replace the background with a snowy mountain scene"",
            ""resolution"": ""1080P""
        }";

        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": "Invalid authentication credentials",
    "type": "authentication_error"
  }
}
{
  "error": {
    "code": 402,
    "message": "Insufficient balance. Please top up your account",
    "type": "payment_required"
  }
}
{
  "error": {
    "code": 429,
    "message": "Rate limit exceeded. Please try again later",
    "type": "rate_limit_error"
  }
}
{
  "error": {
    "code": 500,
    "message": "Internal server error. Please try again later",
    "type": "server_error"
  }
}

Otorisasi

Authorization
string
wajib
Semua endpoint API memerlukan autentikasi Bearer TokenDapatkan API Key Anda:Kunjungi Halaman Manajemen API Key untuk mendapatkan API Key AndaTambahkan ke header permintaan:
Authorization: Bearer YOUR_API_KEY

Parameter Permintaan

model
string
wajib
Nama model pembuatan video, tetap sebagai wan2.7-videoedit
video_urls
array<string>
wajib
Array URL video sumber untuk pengeditan
Hanya video ke-1 yang digunakan
Batasan video:
  • Format: mp4, mov
  • Durasi: 2–10 detik
  • Resolusi: lebar dan tinggi dalam rentang [240, 4096] piksel
  • Rasio aspek: 1:8 – 8:1
  • Ukuran file: hingga 100MB
prompt
string
Instruksi pengeditan yang menjelaskan perubahan yang diinginkan, hingga 5000 karakter
Jika dihilangkan, model akan melakukan transfer gaya default
Contoh: "Change the character's outfit to a red gown", "Replace the background with a snowy mountain scene"
negative_prompt
string
Prompt negatif yang menjelaskan konten yang tidak diinginkan, hingga 500 karakter
image_urls
array<string>
Array URL gambar referensi, hingga 4 gambarDigunakan untuk menentukan gaya atau tampilan target (misalnya, gaya referensi untuk transfer gaya)
resolution
string
default:"1080P"
Resolusi video outputOpsi:
  • 720P - Standar
  • 1080P - Definisi tinggi (default)
duration
integer
default:"0"
Durasi video output (detik)
  • 0 (default): pertahankan durasi penuh video asli
  • Bilangan bulat antara 2-10: ambil durasi yang ditentukan dari awal
Ketika duration=0, penagihan didasarkan pada durasi aktual video outputDurasi yang ditentukan tidak boleh melebihi durasi video video_urls asli
size
string
Rasio aspek outputFormat yang didukung:
  • 16:9 - Lanskap layar lebar
  • 9:16 - Potret
  • 1:1 - Persegi
  • 4:3 - Lanskap
  • 3:4 - Potret
Jika dihilangkan, rasio aspek mengikuti video input
prompt_extend
boolean
default:"true"
Apakah mengaktifkan penulisan ulang prompt cerdasSecara signifikan meningkatkan hasil untuk prompt pendek, namun menambah waktu pemrosesanDefault: true
watermark
boolean
default:"false"
Apakah akan menambahkan watermark “AI Generated” ke video yang dihasilkan
  • true: tambahkan watermark
  • false: tanpa watermark (default)
seed
integer
Seed bilangan bulat yang digunakan untuk mengontrol keacakan konten yang dihasilkanRentang nilai: bilangan bulat ≥0
  • Untuk permintaan yang identik, model menghasilkan hasil yang berbeda saat menerima nilai seed yang berbeda (misalnya, menghilangkan seed)
  • Untuk permintaan yang identik, model menghasilkan hasil yang serupa saat menerima nilai seed yang sama, namun konsistensi yang tepat tidak dijamin
metadata
object
Objek parameter tambahan

Respons

code
integer
Kode status respons, 200 jika berhasil
data
array
Respons data array

Kasus Penggunaan

Kasus 1: Pengeditan Video Dasar (Paling Sederhana)

{
  "model": "wan2.7-videoedit",
  "video_urls": ["https://cdn.example.com/original.mp4"],
  "prompt": "Replace the background with a snowy mountain scene"
}

Kasus 2: Transfer Gaya (Dengan Gambar Referensi)

{
  "model": "wan2.7-videoedit",
  "prompt": "Transfer the video style to the anime style of the reference image",
  "video_urls": ["https://cdn.example.com/original.mp4"],
  "image_urls": [
    "https://cdn.example.com/anime_style.jpg"
  ],
  "resolution": "1080P",
  "watermark": false
}

Kasus 3: Pertahankan Audio Video Asli

Cocok untuk video dengan suara latar atau dialog penting:
{
  "model": "wan2.7-videoedit",
  "video_urls": ["https://cdn.example.com/speech.mp4"],
  "prompt": "Replace the background with a mountain path",
  "metadata": { "audio_setting": "origin" }
}

Kasus 4: Parameter Lengkap

{
  "model": "wan2.7-videoedit",
  "prompt": "Change the character's outfit to a red gown",
  "negative_prompt": "blurry, distorted",
  "video_urls": ["https://cdn.example.com/original.mp4"],
  "image_urls": ["https://cdn.example.com/reference.jpg"],
  "resolution": "1080P",
  "duration": 0,
  "size": "16:9",
  "prompt_extend": true,
  "watermark": false,
  "seed": 888,
  "metadata": {
    "audio_setting": "origin"
  }
}

Penanganan Audio

audio_settingDeskripsiSkenario yang Cocok
auto (default)AI membuat ulang audio yang sesuai berdasarkan konten video yang dieditPerubahan gaya visual besar saat Anda ingin audio ikut diperbarui
originPaksa pertahankan trek audio video asliVideo dengan musik latar atau dialog penting
Kueri Hasil TugasPembuatan video adalah tugas asinkron yang mengembalikan task_id saat dikirim. Gunakan endpoint Dapatkan Status Tugas untuk mengueri progres dan hasil pembuatan.