Powerful REST API for programmatic video creation. Compose scenes, add text, images, videos, subtitles, transitions, and animations — all from a simple JSON payload.
// Create a video with one API call curl -X POST /api/v1/movies \ -H "X-API-Key: your_api_key" \ -H "Content-Type: application/json" \ -d '{ "resolution": "hd", "scenes": [{ "duration": 5, "elements": [{ "type": "text", "text": "Hello World!" }] }] }'
Text, images, videos, audio, subtitles — compose complex scenes with multiple overlapping elements.
Fade, slide, zoom, dissolve, wipe transitions. 8 element animations with 4 easing functions.
1080×1920 (Reels), 1920×1080 (YouTube), or any custom resolution up to 4K.
Full SRT parser with timed subtitles. Each line appears at the correct timestamp.
Get notified when your video is ready. No polling needed — we'll call your endpoint.
Save and reuse video templates with variable substitution. Render thousands of variations.
Everything you need to start creating videos programmatically.
All API requests require authentication via the X-API-Key header.
You receive an API key when you create an account.
curl -H "X-API-Key: j2v_abc123..." \ -H "Accept: application/json" \ http://168.231.108.200:2993/api/v1/movies
Submit a JSON payload to queue a video rendering job.
REQUEST BODY:{
"resolution": "hd", // sd, hd, full-hd, 2k, 4k, or custom
"width": 1080, // only with resolution: custom
"height": 1920, // only with resolution: custom
"quality": "high", // low, medium, high, ultra
"fps": 30, // 24, 25, 30, 60
"scenes": [
{
"comment": "My scene",
"duration": 5,
"background": "#000000",
"transition": { "type": "fade", "duration": 1 },
"elements": [ ... ]
}
]
}
RESPONSE
(202):
{
"job_id": "019cc532-251e-...",
"status": "queued",
"message": "Render job created"
}
{
"job_id": "019cc532-...",
"status": "done",
"progress": 100,
"url": "http://168.231.108.200:2993/storage/videos/019cc532.mp4",
"duration": 5.0,
"size_mb": 2.4
}
{
"type": "text",
"text": "Hello World!",
"font-size": 48,
"color": "#ffffff",
"background": "#000000", // optional bg color
"x": 100, "y": 200, // position (optional)
"start": 0, "duration": 5, // timing (optional)
"animation": { "type": "fade-in" } // optional
}
{
"type": "video",
"src": "https://example.com/clip.mp4",
"mute": true, // mute audio
"volume": 0.5, // volume (0-1)
"start": 0, "duration": 10,
"trim-start": 5, // trim from second 5
"trim-end": 15 // to second 15
}
Tip: Without explicit width/height, video auto-fits canvas keeping aspect ratio and centers itself.
{
"type": "image",
"src": "https://example.com/logo.png",
"width": 200, "height": 200,
"x": 50, "y": 50,
"start": 0, "duration": 5
}
// From SRT file (each line appears at its timestamp): { "type": "subtitles", "src": "https://example.com/subs.srt", "font-size": 32, "color": "#ffcc00" } // Or inline text: { "type": "subtitles", "text": "My subtitle text", "start": 2, "duration": 3 }
Add to a scene to transition from the previous scene:
"transition": { "type": "fade", // fade, slide-left, slide-right, slide-up, slide-down, zoom-in, zoom-out, dissolve, wipe "duration": 1 // seconds }
Add to any element for entrance/exit animations:
"animation": { "type": "fade-in", // fade-in, fade-out, slide-in-left, slide-in-right, slide-in-top, slide-in-bottom, zoom-in, bounce "duration": 0.5, // seconds "easing": "ease-out" // linear, ease-in, ease-out, ease-in-out }