RapidVideoMaker
खाता बनाएं

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.

अपना API टोकन मुफ़्त में पाएं
अपना API टोकन पाने के लिए खाता बनाएं — प्रति दिन 20 अनुरोध शामिल, इंटरफेस या API से उपयोग करने योग्य।
मुफ़्त खाता बनाएं पहले से खाता है? साइन इन करें

पूर्ण वर्कफ़्लो

हर इंटीग्रेशन इसी 4-चरण अनुक्रम का पालन करता है:

1
जॉब बनाएं — POST /api/v1/render.php
अपनी फ़ाइलें अपने Bearer टोकन के साथ multipart/form-data के रूप में भेजें। 1 JPG/PNG इमेज + 1 MP3 + mode=image_to_video → वीडियो जनरेशन। 1 MP4 + 1 MP3 → ऑडियो संपादन (mode=mix_audio जोड़ें ट्रैक ओवरले के लिए)। कई MP4 → मर्ज। सर्वर एक अनूठा job_id लौटाता है।
2
जॉब का इंतज़ार करें — GET /api/v1/jobs.php?job_id=…
इस एंडपॉइंट को नियमित रूप से पोल करें (हर 5–10 सेकंड)। जॉब queuedprocessingready (या error) से गुज़रती है। रिस्पॉन्स में कतार की स्थिति और अनुमानित शेष समय शामिल है।
3
डाउनलोड URL प्राप्त करें
जब स्थिति ready हो, तो रिस्पॉन्स में उपयोग के लिए तैयार download_url फ़ील्ड होती है।
4
फ़ाइल डाउनलोड करें — GET /api/download.php?job_id=…
अंतिम MP4 डाउनलोड करें। जॉब पूरी होने के 2 घंटे बाद तक फ़ाइल उपलब्ध रहती है, फिर स्वचालित रूप से हटा दी जाती है। समाप्ति के बाद, API 410 Gone से जवाब देती है।

प्रमाणीकरण

हर अनुरोध में आपका API टोकन होना चाहिए। दो फॉर्मेट स्वीकार किए जाते हैं:

# प्रमाणीकरण — हर अनुरोध में आपका API टोकन होना चाहिए। दो फॉर्मेट स्वीकार किए जाते हैं: Authorization: Bearer rvm_your_token_here # Alternative X-API-Key: rvm_your_token_here

आपका टोकन आपके सदस्य क्षेत्र में उपलब्ध है — प्रति खाता एक टोकन, पंजीकरण पर स्वचालित रूप से बनाया जाता है। इसे केवल एक बार स्पष्ट रूप से दिखाया जाता है — इसे सुरक्षित रखें।

कोटा

प्रत्येक सदस्य खाते में प्रतिदिन 20 अनुरोध होते हैं, वेब इंटरफ़ेस और API के बीच साझा। विफल जॉब कोटा नहीं लेती। काउंटर UTC मध्यरात्रि को रीसेट होता है।

POST रिस्पॉन्स में quota_used और quota_remaining शामिल हैं। सीमा पार होने पर सर्वर 429 से जवाब देता है।

इंटरफ़ेस + API = एक ही काउंटर। वेब इंटरफ़ेस और API अनुरोध दोनों एक ही दैनिक कोटा से 1-1 क्रेडिट लेते हैं।

कतार

एक समय में एक जॉब प्रोसेस होती है। कई जॉब एक साथ सबमिट करने पर वे कतार में जाती हैं और आगमन क्रम में प्रोसेस होती हैं। प्रतीक्षा के दौरान, स्टेटस रिस्पॉन्स में शामिल हैं:

रेट लिमिट लागू: /api/v1/jobs.php एंडपॉइंट प्रति टोकन 12 कॉल प्रति मिनट स्वीकार करता है। इससे अधिक पर सर्वर 429 के साथ Retry-After: 5 हेडर लौटाता है। सिफारिश: प्रत्येक कॉल के बीच 10 सेकंड।

उपलब्ध ट्रांज़िशन

सीधे मर्ज के लिए transition_type=none (डिफ़ॉल्ट) पास करें, या क्लिप के बीच फ़ेड के लिए नीचे दिए गए टाइप में से एक:

none fade fadeblack dissolve wipeleft wiperight slideleft slideright zoomin circleclose

अवधि (transition_duration) 0.2 से 2.0 सेकंड के बीच है। यदि क्लिप बहुत छोटी है तो ट्रांज़िशन अनदेखा कर दिया जाता है।

एंडपॉइंट

POST /api/v1/render.php एक वीडियो प्रोसेसिंग जॉब बनाता है

Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):

उपयोगAPI मोडआवश्यक फ़ाइलेंविवरण
वीडियो मर्ज करें fusion 2–20 MP4 फ़ाइलें क्लिप दिए गए क्रम में एंड-टू-एंड जोड़ी जाती हैं। क्लिप के बीच वैकल्पिक ट्रांज़िशन।
ऑडियो संपादित करें add_audio या mix_audio 1 MP4 + 1 MP3 वीडियो की ऑडियो ट्रैक को बदलता या समृद्ध करता है। वीडियो ट्रैक कभी री-एन्कोड नहीं होती (-c:v copy).

add_audio — मूल ऑडियो हटा दिया जाता है और MP3 से पूरी तरह बदल दिया जाता है।
mix_audio — मूल ऑडियो रखा जाता है और MP3 ओवरले होती है।
वीडियो बनाएं image_to_video 1 JPG/PNG + 1 MP3 एक स्थिर छवि और ऑडियो फ़ाइल से वीडियो जनरेट करता है। टेक्स्ट ओवरले, फ़ेड, रिज़ॉल्यूशन और FPS options फ़ील्ड के माध्यम से कॉन्फ़िगर करने योग्य।
Overlay video overlay_video 2 MP4 Overlays a second video on top of the main one. Position, size, opacity and audio configurable via the options field.
टेक्स्ट से MP3 text_to_mp3 (केवल टेक्स्ट) टेक्स्ट को वाणी में बदलता है और एक MP3 फ़ाइल देता है। कोई फ़ाइल अपलोड आवश्यक नहीं — mode=text_to_mp3, text और lang फ़ॉर्म फ़ील्ड के रूप में भेजें। साइट की सभी 20 भाषाओं को सपोर्ट करता है।
सख्त वैलिडेशन: प्रत्येक मोड के लिए फ़ाइलों की सटीक संख्या और प्रकार आवश्यक है। MIME टाइप मैजिक बाइट्स से वेरिफाई होते हैं, केवल एक्सटेंशन से नहीं।
अवधि नियम: ऑडियो और image_to_video मोड में, परिणाम की अवधि MP3 की अवधि पर लॉक रहती है।

सामान्य पैरामीटर (multipart/form-data)

फ़ील्डप्रकारआवश्यकविवरण
videos[]File[]हाँप्रोसेस करने की फ़ाइलें। मोड के अनुसार: 2–20 MP4, या 1 MP4 + 1 MP3, या 1 इमेज (JPG/PNG) + 1 MP3। प्रति फ़ाइल अधिकतम 500 MB।
modestring*image_to_video | add_audio | mix_audio। इन तीन मोड के लिए आवश्यक। केवल तब अनदेखा होता है जब सभी फ़ाइलें MP4 हों (fusion)।
orderJSONकेवल fusion मोड — क्लिप क्रम परिभाषित करने वाला JSON इंडेक्स एरे।
transition_typestringकेवल fusion मोड। डिफ़ॉल्ट: none। उपलब्ध ट्रांज़िशन की सूची देखें।
transition_durationfloatकेवल fusion मोड। अवधि 0.2–2.0 s। डिफ़ॉल्ट: 0.5
optionsJSONकेवल image_to_video मोड — रेंडर पैरामीटर का JSON ऑब्जेक्ट (नीचे देखें)।
callback_urlstringपब्लिक URL (http/https) जो जॉब पूरी होने पर कॉल होती है। रिस्पॉन्स में webhook_secret शामिल है।

options पैरामीटर — image_to_video मोड

सभी वैकल्पिक। न दिए गए मान → वर्कर द्वारा डिफ़ॉल्ट लागू होते हैं।

कीप्रकारडिफ़ॉल्टविवरण
textstring""ओवरले के रूप में दिखाया जाने वाला टेक्स्ट। खाली = कोई टेक्स्ट नहीं। अधिकतम 500 वर्ण।
font_sizeint60पिक्सल में फ़ॉन्ट आकार। रेंज: 10–300। अनुशंसित: 36, 48, 60, 72, 96।
text_colorstring"white"टेक्स्ट रंग (जैसे white, yellow, #ffffff)।
text_positionstring"center"टेक्स्ट स्थिति: center, top, bottom
boxbooltrueटेक्स्ट के पीछे अर्ध-पारदर्शी पृष्ठभूमि।
box_colorstring"black@0.4"FFmpeg फॉर्मेट में रंग + अपारदर्शिता: color@opacity। अपारदर्शिता: 0.0–1.0।
fade_durationfloat0.5सेकंड में फ़ेड इन/आउट अवधि (0–2)। 0 = कोई फ़ेड नहीं।
widthint1080पिक्सल में वीडियो चौड़ाई (64–3840, सम संख्या)। मानक: 1080/1920/720/1280।
heightint1920पिक्सल में वीडियो ऊँचाई (64–3840, सम संख्या)।
fpsint24फ्रेम दर (1–60)।
image_fitstring"contain"फ्रेमिंग मोड: contain = पूरी इमेज दिखती है, खाली क्षेत्र bg_color से भरे जाते हैं; cover = इमेज पूरे फ्रेम को भरने के लिए ज़ूम होती है।
bg_colorstring"black"पृष्ठभूमि रंग यदि इमेज लक्ष्य रिज़ॉल्यूशन नहीं भरती — केवल image_fit=contain के साथ प्रासंगिक।
enable_image_motionboolfalseफोटो एनिमेशन सक्षम करता है। false पर इमेज स्थिर रहती है।
image_motion_effectstring"ken_burns"एनिमेशन प्रभाव। स्वीकृत मान: zoom_in, zoom_out, pan_left_to_right, pan_right_to_left, pan_top_to_bottom, pan_bottom_to_top, zoom_pan_soft, ken_burns
motion_intensityfloat1.0फोटो एनिमेशन तीव्रता (0.25–2.0)। ज़ूम आयाम और पैन गति को गुणा करता है।
text_effectstring"none"टेक्स्ट ओवरले एनिमेशन। स्वीकृत मान: none, fade_in, slide_up, slide_down, slide_left, bounce
text_effect_intensityfloat1.0टेक्स्ट एनिमेशन तीव्रता (0.25–2.0)।
text_border_widthint0अक्षरों के चारों ओर काली आउटलाइन की मोटाई पिक्सल में (0 = अक्षम, 1–10)।
text_modestring"static"टेक्स्ट प्रकट करने का मोड। static (डिफ़ॉल्ट): पहले फ्रेम से पूरा टेक्स्ट दिखता है। word_by_word: word_reveal_speed की दर से शब्द एक-एक करके दिखाई देते हैं। text_effect के साथ अनन्य: text_mode=word_by_word होने पर text_effect अनदेखा किया जाता है।
word_reveal_speedfloat1.5प्रति सेकंड शब्दों में प्रकट करने की गति (0.3–5.0, डिफ़ॉल्ट 1.5)। केवल text_mode=word_by_word के साथ। OpenAI TTS सिंक के लिए अनुशंसित मान: 2.0।
word_animstring"none"प्रत्येक शब्द के प्रकट होने की एनिमेशन। none (डिफ़ॉल्ट): तत्काल प्रकटीकरण। fade: प्रत्येक नया शब्द 0.2s फेड के साथ प्रकट होता है। केवल text_mode=word_by_word के साथ।

options parameters — overlay_video mode

All optional. Upload order matters: the first file is the main video (background), the second file is the overlay (foreground). Use chroma_key to remove a green screen from the overlay.

कीप्रकारडिफ़ॉल्टविवरण
positionstring"bottom-right"Corner where the overlay is placed: top-left, top-right, bottom-left, bottom-right, or center.
scalefloat0.30Overlay size as a fraction of the main video width. 0.25 = 25% of the width. Range: 0.05–1.0.
opacityfloat1.0Overlay transparency. 1.0 = fully opaque, 0.0 = invisible.
marginint10Gap in pixels between the overlay and the frame edge. Ignored when position=center. Range: 0–200.
audiostring"main"Which audio to keep. main: main video audio only. overlay: overlay audio only. mix: both tracks blended at equal volume.
chroma_keyboolfalseSet to true to remove the pure green (#00FF00) background of the overlay — useful for webcam or animations filmed on a green screen.
chroma_similarityfloat0.20Green screen tolerance. Low = strict match (preserves subject edges). High = broader removal (handles uneven lighting). Recommended: 0.10–0.20 for a digital green, 0.25–0.45 for a physical screen. Range: 0.01–0.60.

options पैरामीटर — ऑडियो संपादन (mix_audio)

केवल mode=mix_audio के साथ उपलब्ध। add_audio के लिए अनदेखा।

कीप्रकारडिफ़ॉल्टविवरण
mp3_volumefloat1.0ओवरलेड MP3 की वॉल्यूम (0.0 = म्यूट, 1.0 = मूल वॉल्यूम, 2.0 = डबल)।

सफलता रिस्पॉन्स (HTTP 200)

{ "success": true, "job_id": "a3f1c8d2e5b09471...", "mode": "fusion", // "fusion" | "add_audio" | "mix_audio" | "image_to_video" | "overlay_video" "file_count": 2, "transition": null, "quota_used": 1, "quota_remaining": 9, "status_url": "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..." }

curl उदाहरण — image_to_video मोड

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_color":"white","text_position":"bottom","box":true,"box_color":"black@0.4","fade_duration":0.5,"width":1080,"height":1920,"image_fit":"contain","bg_color":"black","enable_image_motion":true,"image_motion_effect":"ken_burns","motion_intensity":1.0,"text_effect":"slide_up","text_effect_intensity":1.0}' # image_fit : "contain" | "cover" # bg_color : ignored if image_fit="cover" # enable_image_motion : true = animation on, false (default) = static image # image_motion_effect : zoom_in | zoom_out | pan_left_to_right | pan_right_to_left | pan_top_to_bottom | pan_bottom_to_top | zoom_pan_soft | ken_burns # motion_intensity : 0.25–2.0 — photo animation amplitude (default 1.0) # text_effect : none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) # text_effect_intensity : 0.25–2.0 — text animation intensity (default 1.0) # text_border_width : 0–10 px — black outline around characters (0 = disabled) # text_mode : "static" (default) | "word_by_word" — reveal words one by one # word_reveal_speed : 0.3–5.0 w/s — speed for word_by_word mode (default 1.5, ~2.0 for OpenAI TTS) # word_anim : "none" (default) | "fade" — fade-in crossfade on each word (word_by_word only)

curl उदाहरण — ऑडियो संपादन

# Replace audio (deletes original) curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=add_audio" # Keep original audio + overlay MP3 curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=mix_audio" \ -F 'options={"mp3_volume":0.7}' # mp3_volume : 0.0 (muted) → 1.0 (original volume, default) → 2.0 (amplified)

curl example — overlay_video mode

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@overlay_video.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-right","scale":0.25,"opacity":1.0,"margin":20,"audio":"main"}' # Green screen overlay curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@webcam_greenscreen.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-left","scale":0.35,"chroma_key":true,"chroma_similarity":0.15,"audio":"mix"}' # position : top-left | top-right | bottom-left | bottom-right | center (default: bottom-right) # scale : 0.05–1.0 — overlay width as fraction of main video (default 0.30) # opacity : 0.0–1.0 — overlay transparency (default 1.0) # margin : 0–200 px — gap from frame edge, ignored if center (default 10) # audio : main | overlay | mix — audio to keep (default: main) # chroma_key : true | false — remove green (#00FF00) background from overlay (default false) # chroma_similarity : 0.01–0.60 — green screen tolerance (default 0.20)

curl उदाहरण — वीडियो मर्ज

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" \ -F "videos[]=@clip2.mp4" \ -F "transition_type=fade" \ -F "transition_duration=0.5"
GET /api/v1/jobs.php?job_id=<hex32> जॉब स्टेटस

संभावित स्थितियाँ

स्थितिअर्थअतिरिक्त फ़ील्ड
queued कतार में, अभी प्रोसेस नहीं हुई queue_position, queue_total, eta_minutes
processing FFmpeg प्रोसेसिंग जारी है
ready पूर्ण — फ़ाइल उपलब्ध download_url, created_at, expires_at
error प्रोसेसिंग विफल error (message)

स्थिति के अनुसार रिस्पॉन्स

{ "job_id": "a3f1c8...", "status": "queued", "queue_position": 2, "queue_total": 3, "eta_minutes": 7 }
{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00" }

curl उदाहरण

curl -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..."
GET /api/v1/jobs.php List all jobs created with this token (paginated, sorted by date desc)

सामान्य पैरामीटर (multipart/form-data)

apidocs_th_paramप्रकारडिफ़ॉल्टapidocs_th_desc
pageinteger1Page number (starts at 1)
limitinteger20Results per page (max 50, default 20)

स्थिति के अनुसार रिस्पॉन्स

{ "success": true, "jobs": [ { "job_id": "a3f1c8...", "status": "ready", "mode": "fusion", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00", "download_url": "https://..." }, ... ], "total": 12, "page": 1, "limit": 20 }
POST /api/v1/publish.php YouTube या TikTok पर वीडियो प्रकाशित करें

एक या अधिक सामाजिक खातों पर एक पूर्ण job (status=ready) प्रकाशित करता है। टोकन एक सदस्य खाते का होना चाहिए (एडमिन टोकन नहीं)।

पूर्वापेक्षा: इस endpoint का उपयोग करने से पहले सोशल अकाउंट (YouTube, TikTok) को सदस्य क्षेत्र की प्रकाशन पृष्ठ पर OAuth के माध्यम से जोड़ना आवश्यक है। प्रत्येक अकाउंट का account_id वहीं दिखाई देता है।

सामान्य पैरामीटर (multipart/form-data)

apidocs_th_paramप्रकारapidocs_th_requiredapidocs_th_desc
job_idstringapidocs_requiredपूर्ण वीडियो का job ID (hex 32 अक्षर)
publicationsarrayapidocs_requiredप्रकाशन ऑब्जेक्ट की सरणी (अधिकतम 10)

प्रकाशन ऑब्जेक्ट

apidocs_th_paramप्रकारapidocs_th_requiredapidocs_th_desc
account_idintegerapidocs_requiredजुड़े सोशल अकाउंट की ID — सदस्य क्षेत्र की प्रकाशन पृष्ठ पर मिलती है
titlestringवीडियो शीर्षक (अधिकतम 512 अक्षर)
descriptionstringवीडियो विवरण (अधिकतम 5 000 अक्षर)
tagsstringकॉमा से अलग टैग (अधिकतम 1 024 अक्षर)
visibilitystringpublic | private | unlisted — डिफ़ॉल्ट: public
tiktok_modestringdraft | direct — केवल TikTok — डिफ़ॉल्ट: direct
tiktok_privacystringdirect मोडकेवल TikTok — direct मोड में आवश्यक
allow_commentbooleanकेवल TikTok — टिप्पणियों की अनुमति दें
allow_duetbooleanकेवल TikTok — डुएट की अनुमति दें
allow_stitchbooleanकेवल TikTok — स्टिच की अनुमति दें
your_brandbooleanकेवल TikTok — जैविक प्रचार सामग्री ("आपका ब्रांड").
branded_contentbooleanकेवल TikTok — ब्रांडेड कंटेंट प्रकटीकरण
tiktok_cover_msintegerकेवल TikTok — कवर फ्रेम टाइमस्टैम्प ms में (0–60 000, डिफ़ॉल्ट 1 000)

स्थिति के अनुसार रिस्पॉन्स

{ "success": true, "results": [ { "account_id": 12, "pub_id": 47, "status": "published", "provider": "youtube", "url": "https://youtu.be/abc123" } ] }

प्रति प्रकाशन त्रुटि कोड

apidocs_th_codeअर्थ
job_not_readyjob अभी पूर्ण नहीं हुआ
mode_not_supportedtext_to_mp3 job प्रकाशित नहीं किए जा सकते
account_not_foundखाता नहीं मिला या डिस्कनेक्ट हो गया
tiktok_privacy_requireddirect मोड में गोपनीयता स्तर आवश्यक है
publication_failedअपलोड के दौरान प्रदाता ने त्रुटि लौटाई

cURL उदाहरण

curl -X POST https://rapidvideomaker.com/api/v1/publish.php \ -H "Authorization: Bearer rvm_your_token" \ -H "Content-Type: application/json" \ -d '{ "job_id": "a3f1c8...", "publications": [ { "account_id": 12, "title": "My video", "description": "Created with RapidVideoMaker", "visibility": "public" } ] }'
GET /api/download.php?job_id=<hex32> अंतिम फ़ाइल डाउनलोड करें

अंतिम MP4 फ़ाइल स्ट्रीम के रूप में लौटाता है (Content-Type: video/mp4)। टोकन आवश्यक नहीं। केवल तब उपलब्ध जब स्थिति ready हो।

जॉब पूरी होने के 2 घंटे बाद फ़ाइल रखी जाती है, फिर हटा दी जाती है।

वैकल्पिक पैरामीटर

पैरामीटरविवरण
filenameडाउनलोड की गई फ़ाइल के लिए सुझाया गया नाम (जैसे mera-video.mp4)

curl उदाहरण

curl -o "output.mp4" \ "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...&filename=output.mp4"

वेबहुक

वेबहुक पोलिंग का विकल्प है: हर X सेकंड में स्टेटस जाँचने की बजाय, आप एक URL देते हैं और सर्वर जॉब पूरी होने पर आपको स्वचालित रूप से कॉल करता है।

यह कैसे काम करता है

  1. /api/v1/render.php को POST में callback_url पास करें
  2. रिस्पॉन्स में webhook_secret होता है — सिग्नेचर वेरिफाई करने के लिए इसे रखें
  3. जब जॉब ready या error पहुँचती है, सर्वर आपके URL पर साइन किया हुआ JSON POST भेजता है
  4. HMAC-SHA256(webhook_secret, raw_body) से सिग्नेचर वेरिफाई करें
सीमाएं: callback_url सार्वजनिक रूप से सुलभ URL होना चाहिए। निजी और लूपबैक IP पते ब्लॉक हैं। टाइमआउट: 10 सेकंड।

प्राप्त पेलोड

{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com /api/download.php?job_id=a3f1c8...", "timestamp": "2026-04-04T12:00:00+00:00" }
{ "job_id": "a3f1c8...", "status": "error", "error": "FFmpeg xfade failed:...", "timestamp": "2026-04-04T12:00:00+00:00" }

सर्वर द्वारा भेजे गए हेडर

हेडरमान
Content-Typeapplication/json
X-RVM-Signaturesha256=<hmac_hex> — raw body का HMAC-SHA256 सिग्नेचर
X-RVM-Job-Idसंबंधित job_id

सिग्नेचर वेरिफिकेशन

# Python import hmac, hashlib def verify_webhook(secret: str, body: bytes, signature_header: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature_header) # Flask/FastAPI endpoint: sig = request.headers.get("X-RVM-Signature", "") if not verify_webhook(WEBHOOK_SECRET, request.data, sig): return "Invalid signature", 403 data = request.get_json()

त्रुटि कोड

HTTPJSON कोडकारण
401unauthorizedटोकन गायब, अमान्य या रद्द
400missing_filesकोई फ़ाइल प्राप्त नहीं हुई
400too_few_files2 से कम फ़ाइलें भेजी गईं
400too_many_files20 से अधिक फ़ाइलें भेजी गईं
400invalid_mimeअसमर्थित फ़ाइल — केवल MP4, MP3 और JPG/PNG इमेज स्वीकार हैं (MIME मैजिक बाइट्स से वेरिफाइड)
400wrong_file_countफ़ाइलों की संख्या चुने हुए मोड से मेल नहीं खाती
400wrong_file_typesफ़ाइल प्रकार चुने हुए मोड से मेल नहीं खाते
400invalid_file_combinationबिना मोड के फ़ाइल संयोजन किसी समर्थित मोड से मेल नहीं खाता
400invalid_optionsoptions फ़ील्ड मान्य JSON नहीं है
400invalid_optionoptions में एक मान अमान्य है (रंग, फ़ॉन्ट नाम, स्थिति…)
400file_too_largeएक फ़ाइल 500 MB से अधिक है
400invalid_orderorder एरे एक मान्य क्रमपरिवर्तन नहीं है
400invalid_job_idगलत job_id फॉर्मेट (32-कैरेक्टर हेक्स होना चाहिए)
404job_not_foundजॉब नहीं मिली — job_id अज्ञात या कभी अस्तित्व में नहीं थी
410job_expiredजॉब समाप्त — मौजूद थी लेकिन 2 घंटे की रिकवरी विंडो बीत गई
429quota_exceededप्रति दिन 20 सफल जॉब पहुँची (सभी मोड मिलाकर)
429rate_limited/api/v1/jobs.php पर 12 से अधिक कॉल/मिनट — Retry-After सेकंड प्रतीक्षा करें
500server_errorआंतरिक सर्वर त्रुटि

इंटीग्रेशन उदाहरण

प्रत्येक मोड के लिए उदाहरण — pip install requests से requests इंस्टॉल करें।

सामान्य कॉन्फ़िगरेशन

import requests, time, sys, json API_BASE = "https://rapidvideomaker.com" API_TOKEN = "rvm_your_token_here" HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

image_to_video मोड — इमेज + ऑडियो → वीडियो

with open("scene.jpg", "rb") as fi, open("narration.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("scene.jpg", fi, "image/jpeg")), ("videos[]", ("narration.mp3", fa, "audio/mpeg")), ], data={ "mode": "image_to_video", "options": json.dumps({ "text": "Chapter 1", "font_size": 72, "text_color": "white", "text_position": "bottom", "box": True, "box_color": "black@0.4", "fade_duration": 0.5, "width": 1080, "height": 1920, "image_fit": "contain", # "contain" | "cover" "bg_color": "black", # ignored if image_fit="cover" "enable_image_motion": True, "image_motion_effect": "ken_burns", "motion_intensity": 1.0, # 0.25–2.0 — photo animation amplitude "text_effect": "slide_up", # none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) "text_effect_intensity": 1.0, # 0.25–2.0 — text animation intensity # word-by-word reveal (mutually exclusive with text_effect): # "text_mode": "word_by_word", "word_reveal_speed": 2.0, "word_anim": "fade" }), }, )

ऑडियो संपादन

# Replace audio (deletes original) — mode=add_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "add_audio"}, ) # Keep original audio + overlay MP3 — mode=mix_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "mix_audio", "options": json.dumps({"mp3_volume": 0.7})}, # mp3_volume : 0.0 = muted, 1.0 = original volume (default), 2.0 = amplified )

overlay_video mode — picture-in-picture

with open("main.mp4", "rb") as fm, open("overlay.mp4", "rb") as fo: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("main.mp4", fm, "video/mp4")), ("videos[]", ("overlay.mp4", fo, "video/mp4")), ], data={ "mode": "overlay_video", "options": json.dumps({ "position": "bottom-right", # top-left | top-right | bottom-left | bottom-right | center "scale": 0.25, # 0.05–1.0 — overlay width fraction "opacity": 1.0, # 0.0–1.0 — transparency "margin": 20, # 0–200 px — gap from frame edge "audio": "main", # main | overlay | mix # green screen: "chroma_key": True, "chroma_similarity": 0.15 }), }, )

वीडियो मर्ज

with open("clip1.mp4", "rb") as f1, open("clip2.mp4", "rb") as f2: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("clip1.mp4", f1, "video/mp4")), ("videos[]", ("clip2.mp4", f2, "video/mp4")), ], data={"transition_type": "fade", "transition_duration": "0.5"}, )

पोलिंग + डाउनलोड (सभी मोड के लिए सामान्य)

resp.raise_for_status() job_id = resp.json()["job_id"] print(f"Job created: {job_id}") for _ in range(120): # timeout 10 min (120 × 5s) r = requests.get( f"{API_BASE}/api/v1/jobs.php", headers=HEADERS, params={"job_id": job_id}, ) data = r.json() status = data["status"] if status == "queued": pos = data.get("queue_position", "?") eta = data.get("eta_minutes", "?") print(f"Queued — position {pos}, ETA ~{eta} min") elif status == "processing": print("Processing…") elif status == "ready": download_url = data["download_url"] break elif status == "error": sys.exit(f"Error: {data.get('error')}") time.sleep(5) else: sys.exit("Timeout: job not completed after 10 min") r = requests.get(download_url, stream=True) with open("output.mp4", "wb") as f: for chunk in r.iter_content(65536): f.write(chunk) print("Downloaded: output.mp4")

n8n में दो तरीके: पोलिंग (स्टेटस लूप) या वेबहुक (सर्वर n8n को कॉल करता है)। वेबहुक अनुशंसित है।

तरीका A — वेबहुक (अनुशंसित)

केवल 3 नोड, कोई लूप नहीं।

नोड 1 — वेबहुक ट्रिगर
वर्कफ़्लो इनपुट के रूप में Webhook नोड जोड़ें (मेथड POST)। जनरेट किया गया URL नोट करें।

नोड 2 — जॉब बनाएं (HTTP Request)

मेथडPOST
URLhttps://rapidvideomaker.com/api/v1/render.php
प्रमाणीकरणHeader Auth — Authorization: Bearer rvm_…
Body Content TypeForm-Data Multipart
Body paramsप्रत्येक क्लिप के लिए बाइनरी फ़ील्ड videos[] + टेक्स्ट फ़ील्ड callback_url = ऊपर वेबहुक नोड URL

सिग्नेचर वेरिफाई करने के लिए रिस्पॉन्स से webhook_secret वर्कफ़्लो वेरिएबल में सेव करें।

नोड 3 — परिणाम प्रोसेस करें (वेबहुक-ट्रिगर्ड वर्कफ़्लो में)
जब n8n सर्वर का POST प्राप्त करती है, $json.status ready या error होता है। ready पर $json.download_url में डाउनलोड URL होता है।

सिग्नेचर वेरिफाई करने के लिए: {{ $headers['x-rvm-signature'] }} को अपने webhook_secret से HMAC-SHA256 से तुलना करें।

तरीका B — पोलिंग (वेबहुक के बिना)

5 नोड, हर 10 s पर स्टेटस लूप।

नोड 1 — जॉब बनाएं — ऊपर जैसा कॉन्फ़िग, callback_url के बिना।

नोड 2 — प्रतीक्षा करें — 10 सेकंड।

नोड 3 — स्टेटस पोल करें (HTTP Request GET)

URLhttps://rapidvideomaker.com/api/v1/jobs.php
Query पैरामीटरjob_id = {{ $('नोड 1').item.json.job_id }}
प्रमाणीकरणHeader Auth — वही टोकन

नोड 4 — If: {{ $json.status }} === 'ready' → true: नोड 5 / false: नोड 2 पर वापस।

अनंत लूप से बचने के लिए Set नोड में 60 प्रयासों के बाद लूप तोड़ने वाला काउंटर जोड़ें।

नोड 5 — डाउनलोड: {{ $json.download_url }} पर HTTP Request GET, Response Format File

चरण 1 — जॉब बनाएं (मोड चुनें)

# fusion JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" -F "videos[]=@clip2.mp4") # add_audio (replace audio) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=add_audio") # mix_audio (overlay music at 70% volume) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=mix_audio" -F 'options={"mp3_volume":0.7}') # image_to_video JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_position":"bottom","fade_duration":0.5,"width":1080,"height":1920}') JOB_ID=$(echo $JOB | grep -o '"job_id":"[^"]*"' | cut -d'"' -f4) echo "Job ID: $JOB_ID"

चरण 2 — पोलिंग

while true; do STATUS=$(curl -s \ -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=$JOB_ID") STATE=$(echo $STATUS | grep -o '"status":"[^"]*"' | cut -d'"' -f4) echo "Status: $STATE" [ "$STATE" = "ready" ] && break [ "$STATE" = "error" ] && { echo "Error"; exit 1; } sleep 10 done

चरण 3 — डाउनलोड

DOWNLOAD_URL=$(echo $STATUS | grep -o '"download_url":"[^"]*"' | cut -d'"' -f4) curl -o output.mp4 "$DOWNLOAD_URL"

सर्वोत्तम अभ्यास

परिणाम फ़ाइलें जॉब पूरी होने के 2 घंटे बाद स्वचालित रूप से हटा दी जाती हैं। स्थिति ready होते ही वीडियो डाउनलोड करें।