Generate video

POST /v1/videos/generations membuat video dari deskripsi teks. Permintaan bersifat sinkron: respons dikirim setelah video selesai, yang biasanya memakan beberapa menit.

Permintaan

FieldWajibKeterangan
modelyaID model bertipe video.
promptyaDeskripsi video, maksimal 4.000 karakter.
duration_secondsyaDurasi dalam detik (alias duration). Maksimal max_duration_seconds model, atau 15 bila model tidak menyebutkannya.
resolutionyaSalah satu kunci pricing.resolutions model, misalnya 720P. Harga per detik bergantung pada resolusi.
ntidakJumlah video, bawaan 1. Batas per model ada di max_videos_per_request.
aspect_ratiotidakMisalnya 16:9 atau 9:16.
audiotidaktrue atau false.

duration_seconds dan resolution wajib diisi supaya biaya selalu sesuai yang Anda maksud. Field lain seperti image_url tidak diteruskan.

Contoh

curl https://api.markas.ai.id/v1/videos/generations \
  -H "Authorization: Bearer $MARKASAI_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 900 \
  -d '{
    "model": "VIDEO_MODEL_ID",
    "prompt": "ombak pantai saat matahari terbenam",
    "duration_seconds": 5,
    "resolution": "720P",
    "aspect_ratio": "16:9"
  }'
import os, requests

resp = requests.post(
    "https://api.markas.ai.id/v1/videos/generations",
    headers={"Authorization": f"Bearer {os.environ['MARKASAI_API_KEY']}"},
    json={
        "model": "VIDEO_MODEL_ID",
        "prompt": "ombak pantai saat matahari terbenam",
        "duration_seconds": 5,
        "resolution": "720P",
    },
    timeout=900,
)
resp.raise_for_status()
for video in resp.json()["videos"]:
    print(video["url"])
const resp = await fetch("https://api.markas.ai.id/v1/videos/generations", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MARKASAI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "VIDEO_MODEL_ID",
    prompt: "ombak pantai saat matahari terbenam",
    duration_seconds: 5,
    resolution: "720P",
  }),
  signal: AbortSignal.timeout(900_000),
});
if (!resp.ok) throw new Error(await resp.text());
const result = await resp.json();
console.log(result.videos.map((v) => v.url));

Respons

200 OK
{
  "id": "vid_...",
  "status": "completed",
  "created": 1790000000,
  "duration_seconds": 5,
  "videos": [{"url": "https://...", "duration_seconds": 5}]
}

videos[].url adalah alamat HTTPS dari CDN penyedia. Unduh dan simpan video di penyimpanan Anda sendiri.

Penagihan

  • Saldo n × durasi × harga per detik (resolusi) ditahan di awal.
  • Yang ditagih adalah durasi yang dilaporkan penyedia, tidak pernah lebih dari durasi yang diminta, dikali harga per detik.
  • Permintaan yang gagal tidak ditagih. Memutus koneksi tidak membatalkan pembuatan video: video tetap dibuat dan ditagih.

Batas waktu dan kapasitas

  • Pasang batas waktu klien yang panjang (beberapa menit), seperti pada contoh.
  • Jumlah video yang diproses bersamaan dibatasi. Saat penuh, permintaan dijawab 503 overloaded dengan header Retry-After.