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": "viduq3",
    "prompt": "Santa Claus and the bear hug by the lakeside",
    "image_urls": [
      "https://example.com/santa.png",
      "https://example.com/bear.png"
    ],
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'
import requests

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

payload = {
    "model": "viduq3",
    "prompt": "Santa Claus and the bear hug by the lakeside",
    "image_urls": [
        "https://example.com/santa.png",
        "https://example.com/bear.png"
    ],
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "16:9"
}

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: "viduq3",
  prompt: "Santa Claus and the bear hug by the lakeside",
  image_urls: [
    "https://example.com/santa.png",
    "https://example.com/bear.png"
  ],
  duration: 8,
  resolution: "720p",
  aspect_ratio: "16:9"
};

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":        "viduq3",
        "prompt":       "Santa Claus and the bear hug by the lakeside",
        "image_urls":   []string{"https://example.com/santa.png", "https://example.com/bear.png"},
        "duration":     8,
        "resolution":   "720p",
        "aspect_ratio": "16:9",
    }

    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": "viduq3",
          "prompt": "Santa Claus and the bear hug by the lakeside",
          "image_urls": [
            "https://example.com/santa.png",
            "https://example.com/bear.png"
          ],
          "duration": 8,
          "resolution": "720p",
          "aspect_ratio": "16:9"
        }
        """;

        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" => "viduq3",
    "prompt" => "Santa Claus and the bear hug by the lakeside",
    "image_urls" => [
        "https://example.com/santa.png",
        "https://example.com/bear.png"
    ],
    "duration" => 8,
    "resolution" => "720p",
    "aspect_ratio" => "16:9"
];

$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: "viduq3",
  prompt: "Santa Claus and the bear hug by the lakeside",
  image_urls: [
    "https://example.com/santa.png",
    "https://example.com/bear.png"
  ],
  duration: 8,
  resolution: "720p",
  aspect_ratio: "16:9"
}

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": "viduq3",
    "prompt": "Santa Claus and the bear hug by the lakeside",
    "image_urls": [
        "https://example.com/santa.png",
        "https://example.com/bear.png"
    ],
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "16:9"
]

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"": ""viduq3"",
            ""prompt"": ""Santa Claus and the bear hug by the lakeside"",
            ""image_urls"": [
                ""https://example.com/santa.png"",
                ""https://example.com/bear.png""
            ],
            ""duration"": 8,
            ""resolution"": ""720p"",
            ""aspect_ratio"": ""16:9""
        }";

        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_xxxxxxxxxx"
    }
  ]
}
{
  "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": "viduq3",
    "prompt": "Santa Claus and the bear hug by the lakeside",
    "image_urls": [
      "https://example.com/santa.png",
      "https://example.com/bear.png"
    ],
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'
import requests

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

payload = {
    "model": "viduq3",
    "prompt": "Santa Claus and the bear hug by the lakeside",
    "image_urls": [
        "https://example.com/santa.png",
        "https://example.com/bear.png"
    ],
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "16:9"
}

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: "viduq3",
  prompt: "Santa Claus and the bear hug by the lakeside",
  image_urls: [
    "https://example.com/santa.png",
    "https://example.com/bear.png"
  ],
  duration: 8,
  resolution: "720p",
  aspect_ratio: "16:9"
};

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":        "viduq3",
        "prompt":       "Santa Claus and the bear hug by the lakeside",
        "image_urls":   []string{"https://example.com/santa.png", "https://example.com/bear.png"},
        "duration":     8,
        "resolution":   "720p",
        "aspect_ratio": "16:9",
    }

    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": "viduq3",
          "prompt": "Santa Claus and the bear hug by the lakeside",
          "image_urls": [
            "https://example.com/santa.png",
            "https://example.com/bear.png"
          ],
          "duration": 8,
          "resolution": "720p",
          "aspect_ratio": "16:9"
        }
        """;

        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" => "viduq3",
    "prompt" => "Santa Claus and the bear hug by the lakeside",
    "image_urls" => [
        "https://example.com/santa.png",
        "https://example.com/bear.png"
    ],
    "duration" => 8,
    "resolution" => "720p",
    "aspect_ratio" => "16:9"
];

$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: "viduq3",
  prompt: "Santa Claus and the bear hug by the lakeside",
  image_urls: [
    "https://example.com/santa.png",
    "https://example.com/bear.png"
  ],
  duration: 8,
  resolution: "720p",
  aspect_ratio: "16:9"
}

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": "viduq3",
    "prompt": "Santa Claus and the bear hug by the lakeside",
    "image_urls": [
        "https://example.com/santa.png",
        "https://example.com/bear.png"
    ],
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "16:9"
]

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"": ""viduq3"",
            ""prompt"": ""Santa Claus and the bear hug by the lakeside"",
            ""image_urls"": [
                ""https://example.com/santa.png"",
                ""https://example.com/bear.png""
            ],
            ""duration"": 8,
            ""resolution"": ""720p"",
            ""aspect_ratio"": ""16:9""
        }";

        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_xxxxxxxxxx"
    }
  ]
}
{
  "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 videoModel yang didukung:
  • viduq3-mix - Kualitas premium, transisi cerdas lebih kuat, mendukung video pendek 1 detik
  • viduq3 - Pilihan default, peralihan kamera lebih cerdas
Cara memilih: Gunakan viduq3 untuk penggunaan sehari-hari; gunakan viduq3-mix untuk kualitas premium atau efek gerakan 1-2 detik.
prompt
string
wajib
Prompt teks, maksimum 5000 karakterJelaskan aksi dan pergerakan kamera, bukan penampilan (penampilan ditentukan oleh gambar referensi).Contoh: "Santa Claus and the bear hug by the lakeside"
image_urls
array<url>
wajib
Array URL gambar referensi, 1-7 gambarMendukung URL gambar yang dapat diakses publik (http:// atau https://)Contoh: ["https://example.com/santa.png", "https://example.com/bear.png"]
  • Jumlah: 1-7 gambar
  • Format yang didukung: PNG, JPEG, JPG, WebP
  • Ukuran minimum: 128×128
  • Rasio aspek: antara 1:4 dan 4:1
  • Ukuran file maksimum: ≤ 50MB per gambar
  • Harus berupa URL yang dapat diakses publik
duration
integer
default:"5"
Durasi video (detik)
  • viduq3-mix: 1 hingga 16
  • viduq3: 3 hingga 16
Default: 5
viduq3 mendukung minimum 3 detik, viduq3-mix mendukung minimum 1 detik. Harap kirim durasi yang valid berdasarkan model yang dipilih.
resolution
string
default:"720p"
Resolusi video
  • viduq3-mix: 720p (default) / 1080p
  • viduq3: 540p / 720p (default) / 1080p
viduq3-mix tidak mendukung 540p, Gunakan 720p atau 1080p.
aspect_ratio
string
default:"16:9"
Rasio aspek videoOpsi:
  • 16:9 - Lanskap (default)
  • 9:16 - Potret
  • 4:3 - Tradisional
  • 3:4 - Potret tradisional
  • 1:1 - Persegi
seed
integer
Seed acak untuk mengontrol keacakan pembuatanJika tidak disediakan, seed acak akan digunakan.
Menggunakan seed yang sama dengan parameter yang identik akan menghasilkan hasil serupa, tetapi tidak dijamin persis sama.

Perbandingan Model

Fiturviduq3viduq3-mix
Direkomendasikan untukPenggunaan sehari-hari, peralihan kamera multi-sudutKualitas premium, efek gerakan 1-2 detik
Rentang durasi3-16 detik1-16 detik
Resolusi540p / 720p / 1080p720p / 1080p
Gambar referensi1-7 gambar1-7 gambar

Respons

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

Kasus Penggunaan

Kasus 1: Referensi-ke-Video Dasar viduq3

{
  "model": "viduq3",
  "prompt": "Santa Claus and the bear hug by the lakeside",
  "image_urls": [
    "https://example.com/santa.png",
    "https://example.com/bear.png"
  ]
}

Kasus 2: Referensi-ke-Video Kualitas Tinggi viduq3-mix

{
  "model": "viduq3-mix",
  "prompt": "A cyberpunk neon street with the cat from reference image walking by",
  "image_urls": [
    "https://example.com/cat-1.png",
    "https://example.com/cat-2.png",
    "https://example.com/cat-3.png"
  ],
  "duration": 8,
  "resolution": "1080p",
  "aspect_ratio": "16:9",
  "seed": 42
}
Kueri Hasil TugasPembuatan video adalah tugas asinkron yang mengembalikan task_id saat dikirim. Gunakan endpoint Dapatkan Status Tugas untuk mengueri progres dan hasil pembuatan.