API RapidVideoMaker
The REST API lets you process video files from any HTTP client — Python scripts, n8n workflows, third-party tools. Five modes available: Merge videos (multiple MP4), Edit audio (1 MP4 + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4 picture-in-picture). Processing is asynchronous: submit files, then poll for the result.
Alur kerja lengkap
Setiap integrasi mengikuti urutan 4 langkah yang sama:
POST /api/v1/render.phpmultipart/form-data dengan token Bearer. 1 gambar JPG/PNG + 1 MP3 + mode=image_to_video → pembuatan video. 1 MP4 + 1 MP3 → edit audio. Beberapa MP4 → gabungan. Server mengembalikan job_id yang unik.GET /api/v1/jobs.php?job_id=…queued → processing → ready (atau error).ready, respons berisi field download_url yang siap digunakan.GET /api/download.php?job_id=…Autentikasi
Setiap permintaan harus menyertakan token API Anda. Dua format diterima:
Token Anda tersedia di area anggota — satu token per akun, dibuat otomatis saat registrasi.
Kuota
Setiap akun anggota memiliki 20 permintaan per hari, dibagi antara antarmuka web dan API. Pekerjaan yang gagal tidak menggunakan kuota. Penghitung direset tengah malam UTC.
Respons POST menyertakan quota_used dan quota_remaining. Saat batas terlampaui, server merespons 429.
Antrian
Satu pekerjaan diproses dalam satu waktu. Jika beberapa pekerjaan dikirim secara bersamaan, mereka diantrekan dan diproses secara berurutan. Saat menunggu, respons status menyertakan:
queue_position— posisi pekerjaan dalam antrian (1 = berikutnya)queue_total— total pekerjaan yang menunggueta_minutes— perkiraan waktu sebelum pemrosesan dimulai
/api/v1/jobs.php menerima maksimal 12 panggilan per menit per token. Rekomendasi: 10 detik antar panggilan. Transisi yang tersedia
Sertakan transition_type=none (default) untuk penggabungan langsung, atau salah satu jenis di bawah ini untuk fade antar klip:
Durasi (transition_duration) antara 0.2 dan 2.0 detik.
Endpoint
Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):
| Penggunaan | Mode API | File yang diperlukan | Deskripsi |
|---|---|---|---|
| Gabungkan video | fusion |
2–20 file MP4 | Klip dirakit secara berurutan sesuai urutan yang diberikan. Transisi opsional antar klip. |
| Edit audio | add_audio atau mix_audio |
1 MP4 + 1 MP3 | Mengganti atau memperkaya trek audio video. Trek video tidak pernah di-re-encode.add_audio — audio asli dihapus dan diganti sepenuhnya oleh MP3.mix_audio — audio asli dipertahankan dan MP3 ditumpangkan. |
| Buat video | image_to_video |
1 JPG/PNG + 1 MP3 | Menghasilkan video dari gambar diam dan file audio. Overlay teks, fade, resolusi, dan fps dapat dikonfigurasi melalui field options. |
| Overlay video | overlay_video |
2 MP4 | Menempatkan video kedua di atas video utama. Posisi, ukuran, opasitas, dan audio dapat dikonfigurasi melalui kolom options. |
| Teks ke MP3 | text_to_mp3 |
(hanya teks) | Mengonversi teks menjadi suara dan mengembalikan file MP3. Tidak perlu unggah file — kirim mode=text_to_mp3, text dan lang sebagai field formulir. Mendukung semua 20 bahasa situs. |
add_audio dan mix_audio hanya menerima 1 MP4 + 1 MP3. image_to_video hanya menerima 1 JPG/PNG + 1 MP3.Parameter umum (multipart/form-data)
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| videos[] | File[] | YA | File yang akan diproses. Tergantung mode: 2–20 MP4, atau 1 MP4 + 1 MP3, atau 1 gambar (JPG/PNG) + 1 MP3. Maks 500 MB per file. |
| mode | string | * | image_to_video | add_audio | mix_audio. Wajib untuk ketiga mode ini. Diabaikan hanya jika semua file adalah MP4 (fusion). |
| order | JSON | Hanya mode fusion — array JSON indeks yang mendefinisikan urutan klip. | |
| transition_type | string | Hanya mode fusion. Default: none. | |
| transition_duration | float | Hanya mode fusion. Durasi 0.2–2.0 detik. Default: 0.5. | |
| options | JSON | Hanya mode image_to_video — objek JSON parameter render. | |
| callback_url | string | URL publik (http/https) yang dipanggil saat pekerjaan selesai. Respons menyertakan webhook_secret. |
Parameter options — mode image_to_video
Semua opsional. Nilai yang tidak disediakan → default yang diterapkan oleh worker.
| Kunci | Tipe | Default | Deskripsi |
|---|---|---|---|
| text | string | "" | Teks yang ditampilkan sebagai overlay. Kosong = tanpa teks. Maks 500 karakter. |
| font_size | int | 60 | Ukuran font dalam piksel. Rentang: 10–300. |
| text_color | string | "white" | Warna teks (mis. white, yellow, #ffffff). |
| text_position | string | "center" | Posisi teks: center, top, bottom. |
| box | bool | true | Latar belakang semi-transparan di belakang teks. |
| box_color | string | "black@0.4" | Warna + opasitas dalam format FFmpeg: color@opacity. |
| fade_duration | float | 0.5 | Durasi fade in/out dalam detik (0–2). 0 = tanpa efek. |
| width | int | 1080 | Lebar video dalam piksel (64–3840, dipaksa genap). |
| height | int | 1920 | Tinggi video dalam piksel (64–3840, dipaksa genap). |
| fps | int | 24 | Frame rate (1–60). |
| image_fit | string | "contain" | Mode pembingkaian: contain = gambar penuh terlihat; cover = diperbesar untuk mengisi seluruh bingkai. |
| bg_color | string | "black" | Warna latar belakang jika gambar tidak mengisi resolusi target. |
| enable_image_motion | bool | false | Mengaktifkan animasi foto. Jika false, gambar tetap statis. |
| image_motion_effect | string | "ken_burns" | Efek animasi. Nilai yang diterima: zoom_in, zoom_out, pan_left_to_right, pan_right_to_left, ken_burns, dll. |
| motion_intensity | float | 1.0 | Intensitas animasi foto (0.25–2.0). Mengalikan amplitudo zoom dan kecepatan pan. |
| text_effect | string | "none" | Animasi overlay teks. Nilai yang diterima: none, fade_in, slide_up, slide_down, slide_left, bounce. |
| text_effect_intensity | float | 1.0 | Intensitas animasi teks (0.25–2.0). Diabaikan jika text_effect adalah none. |
| text_border_width | int | 0 | Ketebalan garis hitam di sekitar karakter dalam piksel (0 = dinonaktifkan). |
| text_mode | string | "static" | Mode tampilan teks. static (default): teks penuh terlihat dari frame pertama. word_by_word: kata-kata muncul satu per satu dengan kecepatan word_reveal_speed. Tidak bisa digunakan dengan text_effect: jika text_mode=word_by_word, text_effect diabaikan. |
| word_reveal_speed | float | 1.5 | Kecepatan pengungkapan kata per detik (0.3–5.0, default 1.5). Hanya dengan text_mode=word_by_word. Nilai yang direkomendasikan untuk sinkronisasi OpenAI TTS: 2.0. |
| word_anim | string | "none" | Animasi kemunculan setiap kata. none (default): tampil langsung. fade: setiap kata baru muncul dengan fade 0.2s dan crossfade ke blok sebelumnya. Hanya dengan text_mode=word_by_word. |
Parameter options — mode overlay_video
Semua opsional. Urutan unggahan penting: file pertama adalah video utama (latar belakang), file kedua adalah overlay (latar depan). Gunakan chroma_key untuk menghapus latar hijau dari overlay.
| Kunci | Tipe | Default | Deskripsi |
|---|---|---|---|
| position | string | "bottom-right" | Sudut penempatan overlay: top-left, top-right, bottom-left, bottom-right, atau center. |
| scale | float | 0.30 | Ukuran overlay sebagai pecahan dari lebar video utama. 0.25 = 25% dari lebar. Rentang: 0.05–1.0. |
| opacity | float | 1.0 | Transparansi overlay. 1.0 = sepenuhnya terlihat, 0.0 = tak terlihat. |
| margin | int | 10 | Jarak dalam piksel antara overlay dan tepi bingkai. Diabaikan jika position=center. Rentang: 0–200. |
| audio | string | "main" | Audio yang dipertahankan. main: hanya audio video utama. overlay: hanya audio overlay. mix: kedua trek dicampur. |
| chroma_key | bool | false | Atur ke true untuk menghapus latar hijau murni (#00FF00) dari overlay — berguna untuk webcam atau animasi yang difilmkan di latar hijau. |
| chroma_similarity | float | 0.20 | Toleransi chroma key. Rendah = kecocokan ketat. Tinggi = penghapusan lebih luas. Disarankan: 0.10–0.20 untuk hijau digital, 0.25–0.45 untuk layar fisik. Rentang: 0.01–0.60. |
Parameter options — Edit audio (mix_audio)
Hanya tersedia dengan mode=mix_audio. Diabaikan untuk add_audio.
| Kunci | Tipe | Default | Deskripsi |
|---|---|---|---|
| mp3_volume | float | 1.0 | Volume MP3 yang ditumpangkan (0.0 = bisu, 1.0 = volume asli, 2.0 = ganda). |
Respons sukses (HTTP 200)
Contoh curl — mode image_to_video
Contoh curl — Edit audio
Contoh curl — mode overlay_video
Contoh curl — Gabungkan video
Status yang mungkin
| Status | Makna | Field tambahan |
|---|---|---|
| queued | Dalam antrian, belum diproses | queue_position, queue_total, eta_minutes |
| processing | Pemrosesan FFmpeg sedang berlangsung | — |
| ready | Selesai — file tersedia | download_url, created_at, expires_at |
| error | Pemrosesan gagal | error (message) |
Respons berdasarkan status
Contoh curl
Parameter umum (multipart/form-data)
| apidocs_th_param | Tipe | Default | apidocs_th_desc |
|---|---|---|---|
page | integer | 1 | Page number (starts at 1) |
limit | integer | 20 | Results per page (max 50, default 20) |
Respons berdasarkan status
Mempublikasikan job yang selesai (status=ready) ke satu atau lebih akun sosial. Token harus milik akun anggota (bukan token admin).
account_id setiap akun ditampilkan di sana.Parameter umum (multipart/form-data)
| apidocs_th_param | Tipe | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
job_id | string | apidocs_required | ID job (hex 32 karakter) dari video yang selesai |
publications | array | apidocs_required | Array objek publikasi (maks. 10) |
Objek publikasi
| apidocs_th_param | Tipe | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
account_id | integer | apidocs_required | ID akun sosial yang terhubung — temukan di halaman Publikasi area anggota |
title | string | — | Judul video (maks. 512 karakter) |
description | string | — | Deskripsi video (maks. 5 000 karakter) |
tags | string | — | Tag dipisahkan koma (maks. 1 024 karakter) |
visibility | string | — | public | private | unlisted — Default: public |
tiktok_mode | string | — | draft | direct — Hanya TikTok — default: direct |
tiktok_privacy | string | mode direct | Hanya TikTok — wajib di mode direct |
allow_comment | boolean | — | Hanya TikTok — izinkan komentar |
allow_duet | boolean | — | Hanya TikTok — izinkan duet |
allow_stitch | boolean | — | Hanya TikTok — izinkan stitch |
your_brand | boolean | — | Hanya TikTok — konten promosi organik ("Merek Anda"). |
branded_content | boolean | — | Hanya TikTok — pengungkapan konten bermerek |
tiktok_cover_ms | integer | — | Hanya TikTok — stempel waktu frame sampul dalam ms (0–60 000, default 1 000) |
Respons berdasarkan status
Kode kesalahan per publikasi
| apidocs_th_code | Makna |
|---|---|
job_not_ready | Job belum selesai |
mode_not_supported | Job text_to_mp3 tidak dapat dipublikasikan |
account_not_found | Akun tidak ditemukan atau terputus |
tiktok_privacy_required | Tingkat privasi diperlukan di mode direct |
publication_failed | Provider mengembalikan kesalahan saat upload |
Contoh cURL
Mengembalikan file MP4 akhir sebagai stream (Content-Type: video/mp4). Tidak memerlukan token. Hanya tersedia saat status ready.
File disimpan selama 2 jam setelah pekerjaan selesai, kemudian dihapus. Unduh segera saat status menjadi ready.
Parameter opsional
| Parameter | Deskripsi |
|---|---|
| filename | Nama yang disarankan untuk file yang diunduh (mis. video-saya.mp4) |
Contoh curl
Webhook
Webhook adalah alternatif dari polling: daripada memeriksa status setiap X detik, Anda menyediakan URL dan server memanggil Anda secara otomatis saat pekerjaan selesai.
Cara kerjanya
- Sertakan
callback_urldalam POST ke/api/v1/render.php - Respons berisi
webhook_secret— simpan untuk memverifikasi tanda tangan - Saat pekerjaan mencapai
readyatauerror, server mengirim JSONPOSTyang ditandatangani ke URL Anda - Verifikasi tanda tangan dengan
HMAC-SHA256(webhook_secret, raw_body)
callback_url harus URL yang dapat diakses publik (http atau https). Alamat IP pribadi, loopback, dan cadangan diblokir di sisi server. Batas waktu: 10 detik. Payload yang diterima
Header yang dikirim server
| Header | Nilai |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — tanda tangan HMAC-SHA256 dari body mentah |
| X-RVM-Job-Id | job_id yang relevan |
Verifikasi tanda tangan
Kode kesalahan
| HTTP | Kode JSON | Penyebab |
|---|---|---|
| 401 | unauthorized | Token hilang, tidak valid, atau dicabut |
| 400 | missing_files | Tidak ada file yang diterima |
| 400 | too_few_files | Kurang dari 2 file dikirim |
| 400 | too_many_files | Lebih dari 20 file dikirim |
| 400 | invalid_mime | File tidak didukung — hanya MP4, MP3, dan JPG/PNG yang diterima |
| 400 | wrong_file_count | Jumlah file tidak cocok dengan mode yang dipilih |
| 400 | wrong_file_types | Jenis file tidak cocok dengan mode yang dipilih |
| 400 | invalid_file_combination | Kombinasi file tanpa mode yang ditentukan tidak cocok dengan mode yang didukung |
| 400 | invalid_options | Field options bukan JSON yang valid |
| 400 | invalid_option | Nilai dalam options tidak valid |
| 400 | file_too_large | Sebuah file melebihi 500 MB |
| 400 | invalid_order | Array order bukan permutasi yang valid |
| 400 | invalid_job_id | Format job_id salah (harus 32 karakter hex) |
| 404 | job_not_found | Pekerjaan tidak ditemukan — job_id tidak dikenal atau tidak pernah ada |
| 410 | job_expired | Pekerjaan kedaluwarsa — ada tetapi jendela pemulihan 2 jam telah berlalu |
| 429 | quota_exceeded | 20 pekerjaan berhasil/hari tercapai |
| 429 | rate_limited | Lebih dari 12 panggilan/menit di /api/v1/jobs.php |
| 500 | server_error | Kesalahan server internal |
Contoh integrasi
Contoh untuk setiap mode — instal requests dengan pip install requests.
Konfigurasi umum
Mode image_to_video — gambar + audio → video
Edit audio
Mode overlay_video — gambar dalam gambar
Gabungkan video
Polling + unduhan (umum untuk semua mode)
Dua pendekatan di n8n: polling (loop status) atau webhook (server memanggil n8n). Webhook direkomendasikan.
Pendekatan A — Webhook (direkomendasikan)
Hanya 3 node, tanpa loop.
Node 1 — Pemicu Webhook
Tambahkan node Webhook sebagai input alur kerja (metode POST).
Node 2 — Buat pekerjaan (HTTP Request)
| Metode | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| Autentikasi | Header Auth — Authorization: Bearer rvm_… |
| Tipe Konten Body | Form-Data Multipart |
| Body params | Field biner videos[] untuk setiap klip + Field teks callback_url |
Simpan webhook_secret dari respons dalam variabel alur kerja untuk memverifikasi tanda tangan.
Node 3 — Proses hasil (dalam alur kerja yang dipicu webhook)
Saat n8n menerima POST server, $json.status adalah ready atau error.
{{ $headers['x-rvm-signature'] }} dengan HMAC-SHA256 dari webhook_secret Anda.Pendekatan B — Polling (tanpa webhook)
5 node, loop status setiap 10 detik.
Node 1 — Buat pekerjaan — konfigurasi yang sama tanpa callback_url.
Node 2 — Tunggu — 10 detik.
Node 3 — Poll status (HTTP Request GET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| Query params | job_id = {{ $('Node 1').item.json.job_id }} |
| Autentikasi | Header Auth — token yang sama |
Node 4 — If: {{ $json.status }} === 'ready' → true: Node 5 / false: kembali ke Node 2.
Node 5 — Unduh: HTTP Request GET pada {{ $json.download_url }}.
Langkah 1 — Buat pekerjaan (pilih mode)
Langkah 2 — Polling
Langkah 3 — Unduh
Praktik terbaik
- Frekuensi polling: endpoint
/api/v1/jobs.phpdibatasi 12 panggilan/menit per token. Tunggu setidaknya 5 detik antar panggilan. - Batas waktu: terapkan batas waktu sisi klien (mis. 10 menit).
- Unduh dengan cepat: segera unduh file saat status
ready. Dihapus 2 jam setelah pekerjaan selesai. - Manajemen kuota: periksa
quota_remainingdalam respons POST. - Kesalahan jaringan: saat terjadi kesalahan jaringan selama polling, tunggu dan coba lagi.