API Publik

Buat video, gambar, dan musik dari kode Anda sendiri

Buat kunci, kirim permintaan dengan otentikasi Bearer, dan pantau tugas sampai file Anda siap. Model, harga, batas rencana, dan pengembalian dana sama seperti studio NovaMotions AI, dengan saldo kredit bersama.

URL Dasarhttps://novamotions.com/api/v1

Mulai cepat

Tiga langkah dari nol hingga video selesai. Setiap permintaan menggunakan HTTPS biasa dengan JSON, jadi bahasa atau alat apa pun bisa digunakan.

  1. 1

    Buat kunci

    Buka halaman API di akun Anda dan buat kunci. Kunci lengkap hanya ditampilkan sekali, jadi simpan di variabel lingkungan bernama API_KEY.

  2. 2

    Kirim tugas

    Kirim model, prompt, dan opsi apa pun. Kredit dikenakan sekali saat pengiriman, dan respons memberi tahu berapa banyak yang digunakan dan sisa saldo.

    curl -X POST https://novamotions.com/api/v1/videos \
      -H "Authorization: Bearer $API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "seedance-2-pro",
        "prompt": "Pengambilan gambar dolly lambat melewati jalan neon hujan di malam hari, pantulan di aspal basah, sinematik",
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "16:9"
      }'
  3. 3

    Pantau sampai siap

    Periksa tugas setiap beberapa detik. Saat status berhasil, unduh file dari output_url. Jika gagal, kredit sudah dikembalikan ke saldo Anda.

    TASK_ID=your_task_id
    while true
    do
      TASK=$(curl -s https://novamotions.com/api/v1/tasks/$TASK_ID -H "Authorization: Bearer $API_KEY")
      STATUS=$(echo "$TASK" | jq -r .status)
      echo "$STATUS"
      if [ "$STATUS" = "succeeded" ] || [ "$STATUS" = "failed" ]
      then
        echo "$TASK" | jq
        break
      fi
      sleep 5
    done

Otentikasi

Kirim kunci Anda di header Authorization setiap permintaan. Kunci dimulai dengan nm_live_ dan milik satu akun.

HTTP
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json
URL Dasar
Semua endpoint berada di bawah https://novamotions.com/api/v1 dan mengembalikan JSON.
Jaga kerahasiaan kunci
Panggil API dari server Anda, jangan dari browser atau aplikasi seluler. Kunci yang dicabut langsung berhenti berfungsi.
Satu saldo
Panggilan API menggunakan kredit pemilik kunci, saldo yang sama dengan yang digunakan studio. Batas rencana per generasi juga berlaku.
URL Media
Gambar, video, dan audio yang Anda kirim harus berupa URL https publik yang dapat dimuat tanpa cookie atau login.

Daftar model

GET/api/v1/models

Setiap model yang disediakan API, dengan mode, durasi, resolusi, rasio aspek, dukungan audio, batas referensi, dan harga terendah dalam kredit. Gunakan ini untuk membuat pemilih model daripada mengkode opsi secara statis.

Permintaan

curl https://novamotions.com/api/v1/models \
  -H "Authorization: Bearer $API_KEY"

Respons

JSON
{
  "object": "list",
  "data": [
    {
      "slug": "seedance-2-pro",
      "name": "Seedance 2.0 Pro",
      "kind": "video",
      "endpoint": "/api/v1/videos",
      "available": true,
      "modes": [
        "text-to-video",
        "image-to-video",
        "reference-to-video"
      ],
      "durations": [
        4,
        5,
        6,
        8,
        10,
        12,
        15
      ],
      "default_duration": 5,
      "resolutions": [
        "480p",
        "720p",
        "1080p",
        "4K"
      ],
      "aspect_ratios": [
        "16:9",
        "9:16",
        "1:1",
        "4:3",
        "3:4",
        "21:9"
      ],
      "audio": {
        "supported": true,
        "extra_credits": 20
      },
      "references": {
        "images": 9,
        "videos": 3,
        "audio": 3,
        "end_frame": true
      },
      "max_count": 4,
      "prompt_max_length": 10000,
      "from_credits": 35
    }
  ]
}

Periksa saldo

GET/api/v1/balance

Kredit yang dapat digunakan pemilik kunci saat ini, dibagi dalam beberapa pool dengan tanggal kedaluwarsa, plus rencana saat ini.

Permintaan

curl https://novamotions.com/api/v1/balance \
  -H "Authorization: Bearer $API_KEY"

Respons

JSON
{
  "object": "balance",
  "balance": 1175,
  "never_expiring": 375,
  "next_expiry": "2026-11-17T00:00:00.000Z",
  "pools": [
    {
      "source": "subscription",
      "remaining": 800,
      "granted": 2000,
      "expires_at": "2026-11-17T00:00:00.000Z"
    },
    {
      "source": "topup",
      "remaining": 375,
      "granted": 375,
      "expires_at": null
    }
  ],
  "plan": {
    "name": "Pro",
    "status": "active",
    "cycle": "monthly",
    "renews_or_ends_at": "2026-11-14T00:00:00.000Z"
  }
}

Buat video

POST/api/v1/videos

Teks ke video, gambar ke video (frame awal dan opsional frame akhir), atau referensi ke video (gambar, klip, dan audio yang mengarahkan hasil). Mode dipilih dari input jika tidak disertakan.

Parameter

  • modelstring
    WajibSlug model dari endpoint model.
  • promptstring
    WajibApa yang harus terjadi dalam klip. Opsional untuk gambar-ke-video, di mana frame awal memimpin.
  • modestring
    Opsionaltext-to-video, image-to-video, atau reference-to-video. Dipilih dari input Anda jika tidak disertakan.
  • durationinteger
    OpsionalDurasi klip dalam detik. Harus salah satu durasi model, jika tidak digunakan default model.
  • resolutionstring
    OpsionalResolusi output seperti 720p atau 1080p, dari daftar model.
  • aspect_ratiostring
    Opsional16:9, 9:16, 1:1, 4:3, 3:4 atau 21:9, dari daftar model. Defaultnya 16:9.
  • audioboolean
    OpsionalBuat soundtrack dengan dialog, efek, dan suasana pada model yang mendukungnya. Menambah 20 kredit. Defaultnya false.
  • image_urlstring (URL)
    OpsionalFrame awal untuk gambar-ke-video.
  • end_image_urlstring (URL)
    OpsionalFrame akhir, pada model yang mendukung frame pertama dan terakhir.
  • reference_image_urlsstring[]
    OpsionalGambar referensi untuk referensi-ke-video, hingga batas model.
  • reference_video_urlsstring[]
    OpsionalKlip referensi untuk referensi-ke-video, hingga batas model.
  • reference_audio_urlsstring[]
    OpsionalAudio yang mengarahkan soundtrack, hingga batas model.
  • countinteger
    OpsionalBerapa banyak video yang dibuat dari permintaan yang sama, 1 sampai 4. Masing-masing adalah tugas terpisah dan dikenai biaya terpisah.
  • seedinteger
    OpsionalSeed tetap untuk hasil yang dapat diulang. Setiap item tambahan dalam batch mendapat seed berikutnya.

Permintaan

curl -X POST https://novamotions.com/api/v1/videos \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-pro",
    "prompt": "Pengambilan gambar dolly lambat melewati jalan neon hujan di malam hari, pantulan di aspal basah, sinematik",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'

Respons

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 44,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 44,
  "balance": 1131
}

Buat gambar

POST/api/v1/images

Teks ke gambar, atau edit gambar yang sudah ada dengan prompt. Minta hingga empat gambar per permintaan, masing-masing adalah tugas tersendiri.

Parameter

  • modelstring
    WajibSlug model dari endpoint model.
  • promptstring
    WajibApa yang harus ditampilkan gambar, atau bagaimana mengubah gambar yang Anda berikan.
  • modestring
    Opsionaltext-to-image atau image-edit. Dipilih dari input Anda jika tidak diisi.
  • resolutionstring
    Opsional1K, 2K atau 4K, dari daftar model.
  • aspect_ratiostring
    OpsionalRasio aspek dari daftar model, termasuk Auto pada model yang mendukungnya.
  • image_urlstring (URL)
    OpsionalGambar yang akan diedit. Wajib untuk image-edit.
  • reference_image_urlsstring[]
    OpsionalGambar referensi tambahan untuk edit, hingga batas model.
  • countinteger
    OpsionalJumlah gambar per prompt, 1 sampai 4. Masing-masing adalah tugas terpisah.
  • seedinteger
    OpsionalSeed tetap untuk hasil yang dapat diulang. Setiap item tambahan dalam batch mendapat seed berikutnya.

Permintaan

curl -X POST https://novamotions.com/api/v1/images \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Foto produk studio dari cangkir kopi keramik di atas kayu oak, cahaya jendela lembut, kedalaman bidang dangkal",
    "resolution": "1K",
    "aspect_ratio": "1:1",
    "count": 1
  }'

Respons

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 3,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 3,
  "balance": 1172
}

Buat lagu

POST/api/v1/music

Lagu lengkap dari deskripsi, dengan lirik Anda sendiri atau sebagai instrumental.

Parameter

  • modelstring
    WajibSlug model dari endpoint model.
  • promptstring
    WajibGenre, suasana, instrumen, dan tempo lagu.
  • durationinteger
    OpsionalDurasi lagu dalam detik, dari durasi model.
  • lyricsstring
    OpsionalLirik Anda sendiri. Kosongkan agar model menulisnya.
  • instrumentalboolean
    OpsionalBuat lagu tanpa vokal. Defaultnya false.

Permintaan

curl -X POST https://novamotions.com/api/v1/music \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ai-music",
    "prompt": "Lo-fi hip hop hangat dengan piano lembut, suara vinyl berderak, dan groove santai larut malam",
    "duration": 60,
    "instrumental": false
  }'

Respons

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 11,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 11,
  "balance": 1164
}

Dapatkan tugas

GET/api/v1/tasks/{id}

Pantau tugas berdasarkan id-nya. Setelah status berhasil, output_url menunjuk ke file selesai. Pemantauan menggunakan batas baca, jadi tidak mengurangi anggaran pengiriman Anda.

Permintaan

curl https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2 \
  -H "Authorization: Bearer $API_KEY"

Respons

JSON
{
  "id": "cmtask8k2x0001ab7c9d0e1f2",
  "object": "task",
  "kind": "video",
  "model": "seedance-2-pro",
  "mode": "text-to-video",
  "status": "succeeded",
  "progress": 100,
  "prompt": "Pengambilan gambar dolly lambat melewati jalan neon hujan di malam hari, pantulan di aspal basah, sinematik",
  "params": {
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "audio": false,
    "seed": null
  },
  "output_url": "https://novamotions.com/uploads/videos/2026/10/example.mp4",
  "thumbnail_url": "https://novamotions.com/uploads/videos/2026/10/example.jpg",
  "width": 1280,
  "height": 720,
  "duration_seconds": 5,
  "credits": 44,
  "refunded": false,
  "error": null,
  "created_at": "2026-10-18T09:30:00.000Z",
  "completed_at": "2026-10-18T09:31:12.000Z"
}

Daftar tugas

GET/api/v1/tasks

Tugas yang Anda buat melalui API dalam 30 hari terakhir, terbaru di atas, dengan format yang sama seperti tugas tunggal. Kirim next_cursor sebagai cursor untuk memuat halaman berikutnya.

Parameter

  • limitinteger
    OpsionalHasil per halaman, 1 sampai 50. Defaultnya 20.
  • cursorstring
    OpsionalNilai next_cursor dari halaman sebelumnya.
  • statusstring
    OpsionalHanya tugas dengan status ini: queued, running, succeeded atau failed.

Permintaan

curl https://novamotions.com/api/v1/tasks?limit=20 \
  -H "Authorization: Bearer $API_KEY"

Respons

JSON
{
  "object": "list",
  "data": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "object": "task",
      "kind": "video",
      "model": "seedance-2-pro",
      "mode": "text-to-video",
      "status": "succeeded",
      "progress": 100,
      "prompt": "Pengambilan gambar dolly lambat melewati jalan neon hujan di malam hari, pantulan di aspal basah, sinematik",
      "params": {
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "16:9",
        "audio": false,
        "seed": null
      },
      "output_url": "https://novamotions.com/uploads/videos/2026/10/example.mp4",
      "thumbnail_url": "https://novamotions.com/uploads/videos/2026/10/example.jpg",
      "width": 1280,
      "height": 720,
      "duration_seconds": 5,
      "credits": 44,
      "refunded": false,
      "error": null,
      "created_at": "2026-10-18T09:30:00.000Z",
      "completed_at": "2026-10-18T09:31:12.000Z"
    }
  ],
  "next_cursor": null
}

Status tugas

Tugas bergerak dari queued ke running dan berakhir sebagai succeeded atau failed. Berhenti polling pada status akhir mana pun.

queued
Diterima dan menunggu slot render. Terus polling.
running
Sedang dirender. progres dari 0 sampai 99.
succeeded
Selesai. output_url dan thumbnail_url mengarah ke file jadi.
failed
Berakhir tanpa hasil. error menjelaskan alasannya dan refunded true, kredit dikembalikan ke saldo Anda.

Kode kesalahan

Setiap kesalahan memiliki bentuk yang sama. Cabang berdasarkan kode dan tampilkan pesan untuk pengguna. Tugas yang diterima bisa gagal kemudian, jadi periksa status saat polling.

Respon kesalahan
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonIsi bukan objek JSON.
  • 401unauthorizedTidak ada Bearer key di header Authorization.
  • 401invalid_api_keyKunci tidak ada atau salah format.
  • 401key_revokedKunci dicabut. Buat yang baru.
  • 402insufficient_creditsKredit tidak cukup untuk permintaan ini. Respon mencakup needed dan balance.
  • 403plan_limit_exceededPermintaan melebihi batas per-generasi dari paket. Kurangi durasi atau resolusi.
  • 403account_suspendedAkun pemilik kunci ditangguhkan.
  • 403api_disabledAPI dimatikan untuk saat ini.
  • 404not_foundTugas atau endpoint tidak ada di akun ini.
  • 404model_not_foundTidak ada model dengan slug ini. Periksa endpoint model.
  • 409too_many_runningAkun ini sudah memiliki 3 tugas yang berjalan. Tunggu salah satunya selesai.
  • 422invalid_requestAda field yang hilang atau tipe salah. details mencantumkan setiap masalah.
  • 422wrong_endpointModel milik endpoint lain, misalnya model gambar dikirim ke video.
  • 422invalid_modeMode tidak dikenal oleh endpoint ini.
  • 422mode_not_supportedModel tidak mendukung mode ini.
  • 422prompt_requiredMode ini membutuhkan prompt.
  • 422image_requiredMode ini membutuhkan image_url.
  • 429rate_limitedTerlalu banyak permintaan. Tunggu detik di Retry-After, lalu coba lagi.
  • 500internal_errorAda masalah di sisi kami. Coba lagi sebentar lagi.
  • 503service_busyKami sedang penuh kapasitas. Coba lagi beberapa menit lagi.

Kredit dan pengembalian

Dikenai biaya sekali, saat submit

Setiap tugas dikenai biaya sama seperti pengaturan yang sama di studio. Respon submit mengembalikan credits_charged dan saldo baru Anda. Audio pada video menambah 20 kredit.

Tugas gagal dikembalikan penuh

Jika tugas gagal karena alasan apa pun, semua kreditnya dikembalikan ke pool asal dan tugas menunjukkan refunded true. Tidak perlu klaim.

Batas paket berlaku

Batas per-generasi paket Anda juga berlaku untuk tugas API. Kredit yang akan kedaluwarsa lebih dulu digunakan terlebih dahulu, kredit isi ulang terakhir.

Batas kecepatan

Batas dihitung per kunci selama satu menit berjalan. Jika melebihi batas, Anda mendapat HTTP 429 dengan header Retry-After dalam detik. Setiap respon membawa header X-RateLimit agar Anda bisa memperlambat sebelum mencapai batas.

Kirim
30 per menit
Membuat video, gambar, dan lagu.
Baca
120 per menit
Tugas, saldo, dan model. Dihitung terpisah dari kiriman.
Berjalan sekaligus
3
Tugas per akun yang dirender bersamaan.
Header batas kecepatan
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Model

Model yang dapat Anda panggil hari ini dengan slug dan harga terendahnya. Endpoint model mengembalikan daftar yang sama dengan semua opsi.

  • Seedance 2.5seedance-2-545 credits
  • Seedance 2.0 Proseedance-2-pro35 credits
  • Seedance 2.0 Miniseedance-2-mini24 credits
  • Wan 3.0wan-346 credits
  • MiniMax H3minimax-h330 credits
  • Kling 3kling-330 credits
  • Seedance 1.5 Proseedance-1-5-pro31 credits
  • Seedance 1.0seedance-132 credits
  • Kling O3kling-o346 credits
  • Kling 2.6kling-2-641 credits
  • Wan 2.7wan-2-735 credits
  • Wanwan32 credits
  • Grokgrok-video47 credits
  • Veo 3veo-342 credits
  • GPT Image 2.5gpt-image-2-54 credits
  • GPT Image 2gpt-image-23 credits
  • Seedream 5 Proseedream-5-pro4 credits
  • Seedream 5seedream-53 credits
  • Nano Banana Pronano-banana-pro5 credits
  • Nano Banana 2nano-banana-23 credits
  • Nano Banana 2 Litenano-banana-2-lite2 credits
  • AI Musicai-music6 credits

Siap untuk mulai?

Buat kunci di akun Anda dan kirim permintaan pertama dalam satu menit.

Buat kunci API