New: AI voiceover + auto-captions - script to captioned video in one API call. Read the announcement

Render Preview

When a program writes the payload, nothing looks at the video

An agent, a Zap or a batch script fills a template and renders it. Nobody sees the result until it exists - and by then you have paid for it. POST /previews takes that same body and resolves it without rendering. No credits. No render job. You see which replacements actually landed, what the render would cost, and what is about to go wrong.

Making one video by hand? Use the editor - it previews as you type, and nothing here improves on that.

The editor is better - when someone is there to look

It previews every change as you type, for free, and no API will ever beat a canvas at that. So this endpoint is not a worse version of the editor. It is for the three cases where the person who would have been looking is not there.

An AI agent

It is writing a payload against a template it has never seen, guessing at variable names. Without a free check, every guess costs a credit and produces a video a person has to watch to validate.

A batch you start from code

Four hundred rows through one template on a schedule. You will look at the first video and trust the other 399, so the first one had better be right.

A hand-off you never see

A Zap, a webhook or a cron job filling a template from a spreadsheet somebody else maintains. The payload changes without you touching it.

In all three the video is produced by something that cannot look at it. The preview is the look.

A wrong render still returns 200

Replacements are matched by key against the overlays a template marks as dynamic. Nothing enforces that your keys exist. A key that matches nothing is ignored. The render succeeds, returns 200, charges the credit, and quietly uses the value the template was authored with.

The same goes for a font we cannot resolve, which becomes Roboto, and for text a little too wide for its box, where the overflow is hidden - so $1,250,000 can render as $1,250,00 and look deliberate.

None of that appears in a render response. All of it appears in a preview.

A typo you would not otherwise catch
{
  "replacements": {
    "venu_name": "Casa Mira"
  }
}

// resolved shows the authored default, not "Casa Mira".
// A render would have returned 200 and charged you.

resolved is the fastest way to find a misspelled key.

Preview response
{
  "previewUrl": "https://renderly.video/p/8fK2nQ7xM3vBpL0s",
  "expiresAt": "2026-08-30T12:00:00Z",
  "quote": { "credits": 1.5, "durationMinutes": 1.2 },
  "resolved": {
    "guest_name": "Rebecca",
    "venue_name": "Casa Mira"
  },
  "warnings": []
}

What comes back

resolved
The value that actually landed on each dynamic variable. Send venu_name and this still shows the authored default for venue_name.
warnings
Most severe first. Triage on severity rather than message text - clipped text, unresolvable fonts, keys that matched nothing.
quote
Credits and duration the render would consume, before you commit to it.
previewUrl
A shareable page showing the resolved video. Add ?mode=grid for a contact sheet of frames across the whole thing.

The loop an agent can actually close

An AI agent writing render payloads is guessing at variable names it has never seen. Without a free check, every guess costs a credit and produces a video someone has to watch to validate. The preview endpoint turns that into a loop the agent can close by itself.

  1. 01

    Ask what exists

    get_variables returns the template's dynamic variables and the field each one fills.

  2. 02

    Preview the payload

    preview_render resolves it. No credits, no job. You get resolved values, warnings and a credit quote.

  3. 03

    Look at the result

    Open the preview URL, or ?mode=grid for a contact sheet spanning the video.

  4. 04

    Then spend the credit

    create_render with a payload you have already confirmed produces the right video.

MCP tools, in order
renderly_get_variables    // what can I fill?
renderly_preview_render   // did it land? free
renderly_create_render    // now spend the credit

Because a preview URL renders as an image, the agent can look at its own output rather than parse a description of it - and ?mode=grid puts the whole video in a single fetch. It is the reason our MCP server can be trusted with a credit balance. See the agent setup guides.

Render preview questions

Why would I use this instead of the editor?
If you are making one video yourself, you would not - open it in the editor, which previews every change as you type, for free. The preview endpoint is for renders where no human is at the keyboard: an AI agent filling a template through the API or MCP, a batch job pushing hundreds of rows through one template, or a Zap or webhook that renders without you watching. In those cases the first time anyone sees the video is after it has been rendered and paid for. A preview moves that moment earlier.
I send replacements to the API by hand. Is this for me?
Yes. You are writing the payload rather than clicking through a canvas, so you hit the same problem an agent does: a misspelled key is silently ignored and the render still succeeds. Send the body to /previews first, read resolved and warnings, then change one word in the URL to render it. It is the same request either way.
Does previewing cost credits?
No. POST /previews costs no credits and creates no render job. It resolves the payload, reports what applied and what it would cost, and stops there.
How is a preview different from a render?
It takes exactly the same request body as POST /renders, so you change one word in the URL. Instead of an MP4 you get a shareable preview URL, a credit quote, the resolved values for every dynamic variable, and a list of warnings.
Why would a render silently produce the wrong video?
Replacements are matched by key against overlays marked dynamic. A key matching nothing is ignored, so the render succeeds, returns 200, charges credits and uses the value the template was authored with. An unresolvable font falls back to Roboto, and text slightly too wide for its box is clipped, so $1,250,000 can render as $1,250,00. None of that appears in a render response. All of it appears in a preview.
Can I see more than one frame?
Yes. Add ?mode=grid to the preview URL for a contact sheet of frames spanning the whole video, each labelled with its timestamp, or ?mode=grid&frames=0,45,120 for exactly the frames you name. That makes a preview readable by a screenshot tool or an agent in one fetch.
How long does a preview link last?
24 hours, after which the link 404s. Anyone holding the link can view it, so treat it like a share link. Only the account that created the preview can open it in the editor.
Can an AI agent use this?
That is the main reason it exists. An agent cannot open the editor, so without this it has no way to check its own work. The MCP server exposes renderly_preview_render alongside renderly_get_variables and renderly_create_render, and preview URLs render as an image, so the agent can look at the result rather than parse a description of it.

Stop paying for renders you have not checked

Start free - no credit card required.