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/MOV), Edit audio (1 MP4/MOV + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4/MOV picture-in-picture). Processing is asynchronous: submit files, then poll for the result.
Volledig werkproces
Elke integratie volgt dezelfde reeks van 4 stappen:
POST /api/v1/render.phpmultipart/form-data met uw Bearer-token. 1 JPG/PNG + 1 MP3 + mode=image_to_video → videogeneratie. 1 MP4/MOV + 1 MP3 → audiobewerking (mode=mix_audio voor overlay). Meerdere MP4/MOV → samenvoegen. De server geeft een unieke job_id terug. Of 1 afbeelding + options.text + options.voice: de stem wordt uit de tekst gegenereerd, zonder MP3.GET /api/v1/jobs.php?job_id=…queued → processing → ready (of error). Het antwoord bevat de wachtrijpositie en een geschatte resterende tijd.ready is, bevat het antwoord een gebruiksklaar veld download_url.GET /api/download.php?job_id=…410 Gone.Authenticatie
Elke aanvraag moet uw API-token bevatten. Twee formaten worden geaccepteerd:
Uw token is beschikbaar in uw ledenruimte — één token per account, automatisch aangemaakt bij registratie. Het wordt slechts eenmalig in leesbare vorm getoond — bewaar het veilig. Indien verloren, kunt u het opnieuw genereren vanuit uw ledenruimte.
Quotum
Elk ledenkonto heeft 20 aanvragen per dag, gedeeld tussen webinterface en API. Mislukte jobs verbruiken geen quotum. De teller reset om middernacht UTC.
POST-antwoorden bevatten quota_used en quota_remaining. Wanneer de limiet is overschreden, reageert de server met 429.
Wachtrij
Er wordt één job tegelijk verwerkt. Als meerdere jobs tegelijkertijd worden ingediend, worden ze in volgorde van binnenkomst verwerkt. Tijdens het wachten bevat het statusantwoord:
queue_position— positie van de job in de wachtrij (1 = volgende)queue_total— totaal aantal wachtende jobseta_minutes— geschatte tijd voor de verwerking begint
/api/v1/jobs.php accepteert maximaal 12 aanroepen per minuut per token. Daarboven reageert de server met 429 en een Retry-After: 5-header. Aanbeveling: 10 seconden tussen aanroepen. Beschikbare overgangen
Geef transition_type=none (standaard) voor direct samenvoegen, of een van de onderstaande typen voor een overgang tussen clips:
De duur (transition_duration) is tussen 0,2 en 2,0 seconden. Als een clip te kort is voor de overgang, wordt deze genegeerd.
Endpoints
Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):
| Gebruik | API-modus | Vereiste bestanden | Beschrijving |
|---|---|---|---|
| Video's samenvoegen | fusion |
2–20 MP4/MOV-bestanden | Clips worden aaneengesloten in de opgegeven volgorde. Optionele overgangen tussen clips. |
| Audio bewerken | add_audio of mix_audio |
1 MP4/MOV + 1 MP3 | Vervangt of verrijkt het audiospoor van een video. Het videospoor wordt nooit opnieuw gecodeerd (-c:v copy).add_audio — het originele geluid wordt verwijderd en volledig vervangen door de MP3.mix_audio — het originele geluid blijft behouden en de MP3 wordt erover gelegd (amix). |
| Video aanmaken | image_to_video |
1 JPG/PNG + 1 MP3 — of 1 JPG/PNG + een tekst (options.text + options.voice): de stem wordt gegenereerd |
Maakt een video van een stilstaande afbeelding en je MP3 — of van alleen een tekst (options.text) waarvan de stem wordt gegenereerd (options.voice). Tekstoverlay (vast, woord voor woord of karaoke), fades, resolutie en fps instelbaar via het veld options. |
| Overlay video | overlay_video |
2 MP4/MOV | Plaatst een tweede video over de hoofdvideo. Positie, grootte, doorzichtigheid en audio instelbaar via het veld options. |
| Tekst toevoegen | add_text |
1 MP4/MOV | Plaatst tekst over een bestaande video (resolutie, framerate en geluid blijven behouden). Dezelfde tekstinstellingen als image_to_video, plus het moment waarop de tekst verschijnt. options.text is verplicht. |
| Tekst naar MP3 | text_to_mp3 |
(alleen tekst) | Converteert tekst naar spraak en geeft een MP3-bestand terug. Geen bestand uploaden nodig — stuur mode=text_to_mp3, text en lang als formuliervelden. Ondersteunt alle 20 talen van de site. |
add_audio en mix_audio accepteren alleen 1 MP4/MOV + 1 MP3. image_to_video alleen 1 JPG/PNG + 1 MP3. MIME-typen worden gecontroleerd via magic bytes. Uitzondering: met options.text + options.voice accepteert image_to_video 1 afbeelding alleen — de stem wordt uit de tekst gegenereerd (zonder MP3).-c:v copy). Met options.voice duurt image_to_video zo lang als de uit de tekst gegenereerde stem (+0,6 s).Gemeenschappelijke parameters (multipart/form-data)
| Veld | Type | Ver. | Beschrijving |
|---|---|---|---|
| videos[] | File[] | JA | Te verwerken bestanden. Afhankelijk van modus: 2–20 MP4/MOV, of 1 MP4/MOV + 1 MP3, of 1 afbeelding (JPG/PNG) + 1 MP3. Max. 500 MB per bestand. |
| mode | string | * | image_to_video | add_audio | mix_audio | overlay_video | text_to_mp3. Verplicht voor deze niet-fusion modi. Het weglaten van mode met alleen MP4/MOV-bestanden activeert altijd fusion (stream-copy concat) — nooit overlay_video, zelfs met precies 2 MP4/MOV's. Voor audiobewerking: add_audio verwijdert het origineel, mix_audio behoudt het en overlayt. Als het veld mode is opgegeven, moeten geüploade bestanden exact overeenkomen — anders wordt het verzoek afgewezen. add_text wordt ook geaccepteerd: het is de enige modus met één enkel MP4/MOV-bestand en vereist options.text. |
| order | JSON | Alleen fusion-modus — JSON-array van indices voor de clipvolgorde. | |
| transition_type | string | Alleen fusion-modus. Standaard: none. Zie lijst met beschikbare overgangen. | |
| transition_duration | float | Alleen fusion-modus. Duur 0,2–2,0 sec. Standaard: 0.5. | |
| options | JSON | JSON-object met renderparameters voor image_to_video, add_text, mix_audio en overlay_video (zie de tabellen hieronder). | |
| timings | File / string | image_to_video / add_text: timingbestand voor karaoke (SRT of LRC, max. 200 KB) — als bestandsveld of platte tekst. De getoonde tekst komt uit het bestand; dwingt text_mode=karaoke af; niet te combineren met voice. | |
| callback_url | string | Openbare URL (http/https) die wordt aangeroepen bij voltooiing van de job. Het antwoord bevat een webhook_secret. |
Parameters options — image_to_video-modus
Alle optioneel. Niet opgegeven waarden → standaardwaarden van de worker.
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
| text | string | "" | Als overlay weergegeven tekst. Leeg = geen tekst. Max. 500 tekens. |
| font | string | "default" | Lettertype van de tekst, op id. Toegestane waarden: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย). default = standaardlettertype (emoji ondersteund); amiri = Naskh-lettertype, ideaal voor Arabische tekst. Elke andere waarde geeft de fout invalid_option terug. Emoji worden alleen weergegeven met default. |
| font_size | int | 60 | Lettergrootte in pixels. Bereik: 10–300. Aanbevolen: 36, 48, 60, 72, 96. |
| text_color | string | "white" | Tekstkleur (bijv. white, yellow, #ffffff). |
| text_position | string | "center" | Tekstpositie: center, top, bottom. |
| box | bool | true | Halftransparante achtergrond achter de tekst. |
| box_color | string | "black@0.4" | Kleur + dekking in FFmpeg-formaat: kleur@dekking. Dekking: 0,0–1,0 (bijv. black@0.4 = 40% zwart). |
| fade_duration | float | 0.5 | Duur van fade-in/out in seconden (0–2). 0 = geen fade. |
| width | int | 1080 | Videobreedte in pixels (64–3840, even getal). Standaard: 1080/1920/720/1280. |
| height | int | 1920 | Videohoogte in pixels (64–3840, even getal). |
| fps | int | 24 | Framesnelheid (1–60). |
| image_fit | string | "contain" | contain: Toon de volledige afbeelding of video en vul lege ruimte met de gekozen achtergrond. solid (standaard) of blur. Vervaging vereist image_fit=contain. De tekst blijft scherp. cover: De afbeelding wordt ingezoomd om het frame te vullen, gecentreerd — randen worden bijgesneden. |
| bg_color | string | "black" | background_mode=solid: Achtergrondkleur als de afbeelding de resolutie niet vult — alleen met image_fit=contain (bijv. black, white, #1a1a2e). |
| background_mode | string | "solid" | solid (standaard) of blur. Vervaging vereist image_fit=contain. De tekst blijft scherp. |
| blur_strength | number | 20 | Getal van 1 tot 50; standaard 20. Gaussiaanse vervaging alleen op de achtergrond. |
| enable_image_motion | bool | false | Activeert fotoanimatie. Bij false blijft de afbeelding statisch. Bij true wordt het effect van image_motion_effect toegepast via FFmpeg zoompan. |
| image_motion_effect | string | "ken_burns" | Animatie-effect. Waarden: 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. Standaard: ken_burns. |
| motion_intensity | float | 1.0 | Intensiteit fotoanimatie (0,25–2,0). Vermenigvuldigt zoomamplitude en pansnelheid. |
| text_effect | string | "none" | Tekstanimatie. Waarden: none, fade_in, slide_up, slide_down, slide_left, bounce. |
| text_effect_intensity | float | 1.0 | Intensiteit tekstanimatie (0,25–2,0). |
| text_border_width | int | 0 | Dikte van de zwarte omtrek in pixels (0 = uitgeschakeld, 1–10). Verbetert leesbaarheid. |
| text_border_color | string | "black" | Kleur van de rand rond de tekens (zelfde formaat als text_color, standaard "black"). Gebruikt als text_border_width > 0. |
| text_mode | string | "static" | Tekstweergavemodus. static (standaard): volledige tekst zichtbaar vanaf frame 1. word_by_word: woorden verschijnen één voor één op het tempo van word_reveal_speed. Sluit text_effect uit: bij text_mode=word_by_word wordt text_effect genegeerd. "karaoke": de tekst kleurt mee op het ritme van de audio, pagina voor pagina (tot 1.000 tekens). Woord voor woord gesynchroniseerd met voice, anders over de audio verdeeld naar woordlengte. |
| word_reveal_speed | float | 1.5 | Onthullingssnelheid in woorden per seconde (0,3–5,0, standaard 1,5). Alleen bij text_mode=word_by_word. Aanbevolen voor OpenAI TTS-synchronisatie: 2,0. |
| word_anim | string | "none" | Animatie bij het verschijnen van elk woord. none (standaard): directe weergave. fade: elk nieuw woord verschijnt met een fade van 0.2s en crossfade naar het vorige blok. Alleen bij text_mode=word_by_word. |
| karaoke_style | string | "fill" | Karaokestijl: fill (uitgesproken woorden krijgen de markeerkleur), sweep (elk woord vult zich geleidelijk; hele woorden bij schriften van rechts naar links) of highlight (alleen het huidige woord is gekleurd). |
| highlight_color | string | "#FFD200" | Kleur van de uitgesproken woorden / het huidige woord in karaokemodus (zelfde formaat als text_color). |
| karaoke_lines | int | 2 | Getoonde regels per pagina in karaokemodus (1–4). |
| voice | string | "" | Stem-ID (zelfde lijst als text_to_mp3, bv. nl-NL-ColetteNeural): de stem wordt in dezelfde job uit text gemaakt. image_to_video heeft dan alleen de afbeelding nodig (een extra meegestuurde MP3 wordt geweigerd). In karaokemodus is elk woord gesynchroniseerd met de stem. |
| voice_rate | int | 0 | Snelheid van de gegenereerde stem, in % (−50 tot +50). |
Karaoke met je eigen timings (SRT / LRC)
Stuur een SRT- of LRC-bestand in het veld timings: elke regel verschijnt op zijn eigen moment en vormt een karaokepagina (tot 500 regels, 5.000 tekens). SRT: een regel verdwijnt op zijn eindtijd. LRC: een regel blijft tot de volgende (een lege regel beëindigt hem); [offset:] en woordtimings van enhanced LRC <mm:ss.xx> worden ondersteund — anders wordt elke regel over zijn duur verdeeld. Bij add_text zijn de tijden relatief aan het begin van de video, verschoven met text_start.
Parameters options — modus overlay_video
Allemaal optioneel. De uploadvolgorde is belangrijk: het eerste bestand is de hoofdvideo (achtergrond), het tweede bestand is de overlay (voorgrond). Gebruik chroma_key om een groene achtergrond uit de overlay te verwijderen.
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
| position | string | "bottom-right" | Hoek waar de overlay wordt geplaatst: top-left, top-right, bottom-left, bottom-right, of center. |
| scale | float | 0.30 | Grootte van de overlay als fractie van de breedte van de hoofdvideo. 0.25 = 25% van de breedte. Bereik: 0.05–1.0. |
| opacity | float | 1.0 | Doorzichtigheid van de overlay. 1.0 = volledig zichtbaar, 0.0 = onzichtbaar. |
| margin | int | 10 | Afstand in pixels tussen de overlay en de beeldrand. Genegeerd bij position=center. Bereik: 0–200. |
| audio | string | "main" | Welk audio te behouden. main: alleen hoofdvideo-audio. overlay: alleen overlay-audio. mix: beide tracks gemengd. |
| chroma_key | bool | false | Stel in op true om de pure groene (#00FF00) achtergrond van de overlay te verwijderen — handig voor webcam of animaties op een greenscreen. |
| chroma_similarity | float | 0.20 | Greenscreen-tolerantie. Laag = strikte overeenkomst. Hoog = bredere verwijdering. Aanbevolen: 0.10–0.20 voor digitaal groen, 0.25–0.45 voor fysiek scherm. Bereik: 0.01–0.60. |
options-parameters — modus add_text
Tekst is verplicht. Standaard blijven formaat, beeldsnelheid en geluid behouden. output_format activeert aanpassing met image_fit, bg_color en background_mode. width, height, fps en fotobeweging blijven genegeerd. Maximale duur: 15 minuten.
{"text":"Hello","output_format":"portrait","image_fit":"contain","background_mode":"blur","blur_strength":20}
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
| text | string | JA | Te tonen tekst. Verplicht, 1–200 tekens. |
| text_start | float | 0 | Seconde waarop de tekst verschijnt (≥ 0). Moet vóór het einde van de video liggen. |
| text_duration | float | 0 | Hoe lang de tekst zichtbaar blijft, in seconden (0,1–3600). 0 = tot het einde van de video. |
| font | string | "default" | Lettertype van de tekst, op id. Toegestane waarden: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย). default = standaardlettertype (emoji ondersteund); amiri = Naskh-lettertype, ideaal voor Arabische tekst. Elke andere waarde geeft de fout invalid_option terug. Emoji worden alleen weergegeven met default. |
| font_size | int | 60 | Lettergrootte, opgegeven voor een video met een korte zijde van 1080 px en automatisch geschaald naar de echte resolutie — dezelfde waarde ziet er in 720p en 4K identiek uit. Bereik: 10–300. |
| fade_duration | float | 0.5 | Duur van het in-/uitfaden van de tekst (niet van de video), in seconden. Bereik: 0–2. |
| text_color, box, box_color, text_position, text_border_width, text_border_color, text_effect, text_effect_intensity, text_mode, word_reveal_speed, word_anim, karaoke_style, highlight_color, karaoke_lines, voice, voice_rate | — | — | Identiek aan image_to_video (zie de tabel hierboven). |
| original_volume | float | 0.3 | Met voice: volume van het originele geluid onder de stem (0–2, standaard 0.3; 0 = vervangen). De stem begint op text_start; de tekst blijft zichtbaar tot ze eindigt en loopt ze door na het einde van de video, dan blijft het laatste beeld staan. |
| background_mode | string | "solid" | solid (standaard) of blur. Vervaging vereist image_fit=contain. De tekst blijft scherp. |
| blur_strength | number | 20 | Getal van 1 tot 50; standaard 20. Gaussiaanse vervaging alleen op de achtergrond. |
| output_format | string | "original" | Alleen add_text: original (standaard), portrait (1080×1920), square (1080×1080), landscape (1920×1080). Vervaging vereist een ander formaat dan original. |
| image_fit | string | "contain" | contain: Toon de volledige afbeelding of video en vul lege ruimte met de gekozen achtergrond. solid (standaard) of blur. Vervaging vereist image_fit=contain. De tekst blijft scherp. cover: De afbeelding wordt ingezoomd om het frame te vullen, gecentreerd — randen worden bijgesneden. |
| bg_color | string | "black" | background_mode=solid: Achtergrondkleur als de afbeelding de resolutie niet vult — alleen met image_fit=contain (bijv. black, white, #1a1a2e). |
Parameters options — Audio bewerken (mix_audio)
Alleen beschikbaar met mode=mix_audio. Genegeerd voor add_audio.
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
| mp3_volume | float | 1.0 | Volume van de overlay-MP3 (0,0 = gedempt, 1,0 = origineel, 2,0 = dubbel). Waarden boven 1,0 kunnen overdriving veroorzaken. |
Modus text_to_mp3 — directe parameters (geen options-JSON)
In tegenstelling tot andere modi worden deze velden rechtstreeks als formuliervelden verzonden, niet binnen het options-JSON-object. Alleen text is verplicht.
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
| text | string | — | Om te zetten tekst naar spraak. Verplicht. Maximaal 5.000 tekens. |
| lang | string | "en" | Taalcode gebruikt om de standaardstem te kiezen wanneer voice ontbreekt of ongeldig is. Een van de 20 sitetalen (zie tabel hieronder). Valt terug op en indien onbekend. |
| voice | string | automatisch | edge-tts stem-ID (zie tabel hieronder). Indien weggelaten of ongeldig, wordt automatisch de eerste stem van lang gebruikt. |
| slow | bool | false | Stel in op true (of 1) om de spraaksnelheid met 25% te verlagen. Elke andere waarde wordt behandeld als false. |
text_to_mp3 geen videos[] nodig. Stuur mode=text_to_mp3 samen met text / lang / voice / slow als gewone formuliervelden.Beschikbare stemmen (edge-tts, Microsoft Neural), gegroepeerd per taalcode:
| Taal | Beschikbare stemmen |
|---|---|
en |
en-US-AvaNeural, en-US-AndrewNeural, en-GB-LibbyNeural, en-AU-NatashaNeural, en-AU-WilliamMultilingualNeural |
fr |
fr-FR-DeniseNeural, fr-FR-HenriNeural, fr-FR-EloiseNeural, fr-CA-SylvieNeural, fr-CA-ThierryNeural |
es |
es-ES-ElviraNeural, es-ES-AlvaroNeural, es-MX-DaliaNeural, es-AR-ElenaNeural, es-AR-TomasNeural |
ar |
ar-SA-ZariyahNeural, ar-SA-HamedNeural, ar-EG-SalmaNeural, ar-MA-MounaNeural, ar-MA-JamalNeural |
pt |
pt-BR-FranciscaNeural, pt-BR-AntonioNeural, pt-PT-RaquelNeural |
de |
de-DE-KatjaNeural, de-DE-ConradNeural, de-DE-AmalaNeural, de-AT-IngridNeural, de-AT-JonasNeural |
it |
it-IT-ElsaNeural, it-IT-DiegoNeural, it-IT-IsabellaNeural |
nl |
nl-NL-ColetteNeural, nl-NL-MaartenNeural, nl-BE-DenaNeural, nl-BE-ArnaudNeural |
ru |
ru-RU-SvetlanaNeural, ru-RU-DmitryNeural |
tr |
tr-TR-EmelNeural, tr-TR-AhmetNeural |
hi |
hi-IN-SwaraNeural, hi-IN-MadhurNeural |
bn |
bn-IN-TanishaaNeural, bn-IN-BashkarNeural, bn-BD-NabanitaNeural, bn-BD-PradeepNeural |
ur |
ur-PK-UzmaNeural, ur-PK-AsadNeural, ur-IN-GulNeural, ur-IN-SalmanNeural |
id |
id-ID-GadisNeural, id-ID-ArdiNeural |
ja |
ja-JP-NanamiNeural, ja-JP-KeitaNeural |
ko |
ko-KR-SunHiNeural, ko-KR-InJoonNeural |
zh-CN |
zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural, zh-CN-XiaoyiNeural |
zh-TW |
zh-TW-HsiaoChenNeural, zh-TW-YunJheNeural |
vi |
vi-VN-HoaiMyNeural, vi-VN-NamMinhNeural |
pl |
pl-PL-ZofiaNeural, pl-PL-MarekNeural |
Succesantwoord (HTTP 200)
text_to_mp3 bevat het antwoord geen file_count of transition (er is geen bestand geüpload) — de rest is identiek: job_id, quota_used, quota_remaining, status_url, webhook_secret.curl-voorbeeld — image_to_video-modus
Karaoketekst met gegenereerde stem (image_to_video, zonder MP3)
Karaoke met een SRT-bestand (image_to_video + je MP3)
curl-voorbeeld — Audio bewerken
curl-voorbeeld — modus overlay_video
curl-voorbeeld — modus add_text
curl-voorbeeld — Video's samenvoegen
curl-voorbeeld — modus text_to_mp3
De status bevat de werkelijke fase en verstreken tijd. Schattingen zijn indicatief; een clienttime-out betekent geen mislukking. Hervat het opvragen van dezelfde taak-ID. Bestanden verlopen twee uur na voltooiing.
Mogelijke statussen
| Status | Betekenis | Extra velden |
|---|---|---|
| queued | In wachtrij, nog niet verwerkt | queue_position, queue_total, eta_minutes |
| processing | FFmpeg-verwerking bezig | processing_stage, processing_elapsed_seconds, stage_elapsed_seconds, last_activity_at, processed_media_seconds, eta_overrun |
| ready | Voltooid — bestand beschikbaar | download_url, media_available, created_at, expires_at |
| error | Verwerking mislukt | error (message), quota_refund_status: pending | confirmed | not_required |
| cancelled | Geannuleerd | quota_refund_status: pending | confirmed | not_required |
Antwoorden per status
curl-voorbeeld
Gemeenschappelijke parameters (multipart/form-data)
| Parameter | Type | Standaard | Beschrijving |
|---|---|---|---|
page | integer | 1 | Paginanummer (begint bij 1) |
limit | integer | 20 | Resultaten per pagina (max. 50, standaard 20) |
Antwoorden per status
Streamt het definitieve bestand. Content-Type is video/mp4 voor videomodi, of audio/mpeg voor text_to_mp3. Vereist geen token. Beschikbaar alleen wanneer de status ready is.
Het bestand wordt 2 uur na voltooiing bewaard, daarna verwijderd. Download het zodra de status ready wordt.
Optionele parameters
| Parameter | Beschrijving |
|---|---|
| filename | Voorgestelde naam voor het gedownloade bestand (bijv. mijn-video.mp4) |
| preview | Zet op 1 voor inline afspelen (laat Content-Disposition: attachment weg) in plaats van een download te starten — gebruikt voor voorvertoning in de browser. |
curl-voorbeeld
Webhooks
Webhooks zijn een alternatief voor polling: in plaats van elke X seconden de status te controleren, geeft u een URL op en roept de server u automatisch op wanneer de job is voltooid.
Hoe het werkt
- Geef
callback_urlmee in de POST naar/api/v1/render.php - Het antwoord bevat een
webhook_secret— bewaar dit om handtekeningen te verifiëren - Wanneer de job
readyoferrorbereikt, stuurt de server een ondertekende JSON-POSTnaar uw URL - Verifieer de handtekening met
HMAC-SHA256(webhook_secret, raw_body)
callback_url moet een openbaar toegankelijke URL zijn. Privé- en loopback-IP-adressen zijn geblokkeerd. Timeout: 10 seconden. Ontvangen payload
Door de server verzonden headers
| Header | Waarde |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — HMAC-SHA256-handtekening van de raw body |
| X-RVM-Job-Id | De relevante job_id |
Handtekeningverificatie
Foutcodes
| HTTP | JSON-code | Oorzaak |
|---|---|---|
| 401 | unauthorized | Token ontbreekt, ongeldig of ingetrokken |
| 400 | missing_files | Geen bestanden ontvangen |
| 400 | too_few_files | Minder dan 2 bestanden verzonden |
| 400 | too_many_files | Meer dan 20 bestanden verzonden |
| 400 | invalid_mime | Niet-ondersteund bestand — alleen MP4, MP3 en JPG/PNG worden geaccepteerd (MIME gecontroleerd via magic bytes) |
| 400 | wrong_file_count | Aantal bestanden komt niet overeen met de gekozen modus |
| 400 | wrong_file_types | Bestandstypen komen niet overeen met de gekozen modus |
| 400 | invalid_file_combination | Bestandscombinatie zonder modus komt niet overeen met een ondersteunde modus |
| 400 | invalid_options | Het veld options is geen geldig JSON of bevat geen object |
| 400 | invalid_option | Een waarde in options is ongeldig (kleur, lettertype, positie…) |
| 400 | file_too_large | Een bestand overschrijdt 500 MB |
| 400 | text_required | Het veld options.text ontbreekt of is leeg (modus add_text) |
| 400 | video_too_long | Video langer dan 15 minuten (modus add_text) |
| 400 | text_start_out_of_range | text_start ligt na het einde van de video |
| 400 | invalid_voice | Onbekende voice-ID. |
| 400 | invalid_timings | Onleesbaar timingbestand (formaat niet herkend, geen regel met tijd, einde vóór begin, te lang…). |
| 400 | invalid_order | De order-array is geen geldige permutatie |
| 400 | invalid_job_id | Onjuist job_id-formaat (moet 32-cijferig hexadecimaal zijn) |
| 404 | job_not_found | Job niet gevonden — job_id onbekend of nooit bestaan |
| 410 | job_expired | Job verlopen — bestond maar het herstelvenster van 2 uur is verstreken |
| 429 | quota_exceeded | 20 succesvolle jobs/dag bereikt |
| 429 | rate_limited | Meer dan 12 aanroepen/min op /api/v1/jobs.php — wacht Retry-After seconden |
| 500 | server_error | Interne serverfout |
Integratievoorbeelden
Voorbeelden voor elke modus — installeer requests met pip install requests.
Gemeenschappelijke configuratie
image_to_video-modus — afbeelding + audio → video
Audio bewerken
Modus overlay_video — beeld-in-beeld
Modus add_text — tekst op een video
Video's samenvoegen
Modus text_to_mp3 — tekst naar spraak
Polling + download (gemeenschappelijk voor alle modi)
Twee benaderingen in n8n: polling (statuslus) of webhook (server roept n8n). De webhook is aanbevolen — overzichtelijker, geen onnodige belasting.
Benadering A — Webhook (aanbevolen)
Slechts 3 nodes, geen lus.
Node 1 — Webhook-trigger
Voeg een Webhook-node toe als workflow-invoer (methode POST). Noteer de gegenereerde URL, bijv. https://uw-n8n.com/webhook/rvm-callback.
Node 2 — Job aanmaken (HTTP Request)
| Methode | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| Authenticatie | Header Auth — Authorization: Bearer rvm_… |
| Body-inhoudstype | Form-Data Multipart |
| Body params | Binair veld videos[] voor elke clip + Tekstveld callback_url = webhook-node-URL |
Sla het webhook_secret uit het antwoord op in een workflowvariabele.
Node 3 — Resultaat verwerken (in de webhook-geactiveerde workflow)
Wanneer n8n de POST van de server ontvangt, is $json.status ready of error. Bij ready bevat $json.download_url de directe download-URL.
{{ $headers['x-rvm-signature'] }} vergelijken met sha256= + HMAC-SHA256 van de raw body. Code-node: crypto.createHmac('sha256', secret).update(body).digest('hex').Benadering B — Polling (zonder webhook)
5 nodes, statuslus elke 10 sec.
Node 1 — Job aanmaken — zelfde configuratie, zonder callback_url.
Node 2 — Wachten — 10 seconden.
Node 3 — Status opvragen (HTTP Request GET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| Queryparameters | job_id = {{ $('Node 1').item.json.job_id }} |
| Authenticatie | Header-authenticatie — zelfde token |
Node 4 — If: {{ $json.status }} === 'ready' → true: Node 5 / false: terug naar Node 2.
Node 5 — Download: HTTP Request GET op {{ $json.download_url }}, antwoordformaat File.
Stap 1 — Job aanmaken (kies een modus)
Stap 2 — Polling
Stap 3 — Download
Best practices
- Vraag dezelfde taak elke 5–10 seconden op. De duur hangt af van de modus en de invoergrootte.
- De status bevat de werkelijke fase en verstreken tijd. Schattingen zijn indicatief; een clienttime-out betekent geen mislukking. Hervat het opvragen van dezelfde taak-ID. Bestanden verlopen twee uur na voltooiing.
- Snel downloaden: zodra de status
readyis, download het bestand. Het wordt 2 uur na voltooiing verwijderd. - Quotumbeheer: controleer
quota_remainingin het POST-antwoord. Bij0wordt de volgende job geweigerd met429. - Netwerkfouten: bij een netwerkfout tijdens polling, wacht en probeer opnieuw — de job wordt server-side onafhankelijk uitgevoerd.
ready wordt.