Documentation

Build personalized videos at scale with the Renderly API and visual editor — templates, overlays, webhooks, and a credit-based render pipeline.

Renderly turns a single template into thousands of personalized videos. You build the composition once — in the visual editor or directly via the API — then render variations by swapping in new text, images, video, or audio.

What you can do

  • Render via API — send overlays + media URLs, get back an MP4. Three modes: direct, template-based, or project-based.
  • Render via dashboard — drag together a video in the visual editor, then export.
  • Personalize at scale — mark any overlay as a template variable and replace its content per render.
  • Receive webhooks — subscribe to render.completed / render.failed instead of polling.

Pick a starting point

New here? Run through Getting Started — sign up, grab an API key, render your first video in ~5 minutes.

By role

By task

I want to…Go to
Authenticate API requestsAPI keys
Upload media filesUploading media
Create a video programmaticallyRendering
Generate personalized videos in bulkTemplates
Use text / image / video / audio / captions / effectsOverlays reference
Get notified when a render finishesWebhooks
See every endpoint and fieldAPI reference

Core concepts in 30 seconds

  • Compositionwidth × height × fps × durationInFrames defines the canvas. The whole video.
  • Overlay — one element on the timeline: text, image, video, sound, shape, sticker, caption, or effect. Each overlay has a position (top/left/width/height), timing (from/durationInFrames), and styles.
  • Render job — an async job that produces an MP4. You poll it or subscribe to a webhook.
  • Credits — 1 credit = 1 minute of finished video. Any resolution. Never expires.
  • Template variable — any overlay with isDynamic: true. Its value is swapped per render via the replacements object.

Quick example

A 3-second video with one line of text:

curl -X POST https://renderly.video/api/v1/renders \
  -H "Authorization: Bearer rnd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "inputProps": {
      "backgroundColor": "#0a0e27",
      "overlays": [{
        "id": 0, "type": "text", "content": "Hello, Renderly",
        "from": 0, "durationInFrames": 90,
        "row": 0, "top": 800, "left": 60, "width": 960, "height": 200,
        "styles": {
          "fontSize": "4rem", "fontWeight": "900",
          "color": "#FFFFFF", "textAlign": "center",
          "animation": { "enter": "fade", "exit": "fade", "enterDuration": 0.4 }
        }
      }],
      "durationInFrames": 90, "fps": 30,
      "width": 1080, "height": 1920
    }
  }'

You get back a jobId. Poll GET /renders/{jobId} until status: "COMPLETED", then grab the outputUrl.