Multi Format Video API: One Render per Format
Use a multi format video API the right way: one request per aspect ratio from the same data, so text stays inside each frame instead of being cropped.

A multi format video API should render each aspect ratio from your data, not crop one finished file. Send the same values to a 9:16 template and a 16:9 template with matching field names, one request each. Every text layer is laid out for its own frame, so nothing is cut off, and each pair of videos costs 1 credit.
The finished video
This guide renders one customer review in two formats. Customer Testimonial Spotlight is a 19-second 1080x1920 vertical video. Its widescreen sibling, Customer Testimonial Spotlight (Widescreen), is a 15-second 1920x1080 video. Both take the same six fields.
What you need
- A Renderly API key. Create one in the dashboard under Settings → API keys.
- A source of reviews: a review-platform webhook, a CSV export or a table.
- The reviewer photo, the review-platform logo and your logo at URLs that serve the image file directly.
Step 1 - Decide between cropping and rendering each format
Most tools that rank for this job reframe a finished video. They find the subject, follow it, and crop each frame to the new ratio. That works for footage of a person talking with nothing near the edges.
It fails on a video that carries text. A vertical video cropped to 16:9 keeps a band across the middle, and a widescreen video cropped to 9:16 keeps a strip down the centre. Headlines, logos and a call to action sit outside both. When the video is made of text and brand marks, render each format from the data instead. Each layout then puts every element inside its own frame.
Step 2 - Pick one template per aspect ratio with the same field names
The two testimonial templates share these field names:
| Field | What goes in it |
|---|---|
review_quote | The review text |
reviewer_name | The reviewer's name |
reviewer_company_or_role | A role and company, on one line |
reviewer_avatar | A photo URL |
platform_logo | The review platform's logo URL |
brand_logo | Your logo URL |
Because the names match, one replacements object fills both videos. Keep
this rule for any formats you add. A field that one template calls headline
and the other calls title breaks the shared object.
The closing line Join 2,000+ happy customers and the five stars are fixed
text in both templates. Click Use this template on each template page to
clone it into a project, and change that line to a claim that is true for you.
Do not use the width and height request fields to make a format. They
resize the canvas and leave each layer at its pixel position, so the part of
the design outside the new frame is cut off. The
ad variants post
shows a 4:5 render that lost its bottom third this way.
Step 3 - Fit the copy to the smallest box
The same field has a different box in each format. Call
GET /api/v1/templates/{templateId}/variables for each template and read
maxCharacters:
| Field | 9:16 | 16:9 |
|---|---|---|
review_quote | about 171 (6 lines) | about 99 (3 lines) |
reviewer_name | about 26 | about 25 |
reviewer_company_or_role | about 45 | about 50 |
Treat the lower number as a safe target, not a hard cutoff. It is a conservative estimate: the widescreen sample quote has 103 characters and still shows in full on three lines. A value well over the estimate does not fail. The render succeeds and the tail is hidden.
Preview first. POST /api/v1/previews takes the same body as a render, costs
nothing, and returns a previewUrl and a warnings array. A
TEXT_MAY_CLIP warning names the field that is likely too long. That warning,
and a look at the previewUrl, is the check to rely on.
Step 4 - Send one render request per format
for TEMPLATE in customer-testimonial-review-spotlight customer-testimonial-review-spotlight-v2; do
curl -X POST https://renderly.video/api/v1/renders \
-H "Authorization: Bearer $RENDERLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "'"$TEMPLATE"'",
"replacements": {
"review_quote": "Booking took two minutes and the team called back the same afternoon.",
"reviewer_name": "Priya Raman",
"reviewer_company_or_role": "Owner, Raman Dental",
"reviewer_avatar": "https://assets.example.com/reviews/priya-raman.jpg",
"platform_logo": "https://assets.example.com/logos/review-platform.png",
"brand_logo": "https://assets.example.com/logos/brand.png"
}
}'
doneEach response returns a jobId and creditsUsed: 0.5. If you cloned the
templates into projects in step 2, send projectId in place of templateId.
The project id is in the editor URL (/dashboard/projects/{projectId}/edit).
For a 1:1 or 4:5 feed cut, clone the vertical template into a project and pick
the ratio from the editor's aspect ratio menu. The editor scales each layer's
box by the change in width and height but keeps the font sizes, so from 9:16
to 1:1 every box is about 56% as tall and the text no longer fits. Rearrange the
layers by hand, keep their names, and add that projectId to the loop.
Step 5 - Collect each format and route it to its platform
Store each jobId with its format as the requests return. When a job is done,
GET /api/v1/renders/{jobId} returns its outputUrl. For volume, register
one webhook for render.completed instead of polling. The
webhooks guide covers the
signature check.
Send the vertical file to TikTok, Reels and Shorts, and the widescreen file to YouTube, LinkedIn and your site. YouTube's help page states that "the standard aspect ratio for YouTube on a computer is 16:9" (YouTube Help, 2026).
What this costs at scale
Renderly bills 1 credit per minute of 1080p output, rounded up to the nearest half credit. Each format is its own render. Both testimonial videos round up to 0.5 credits, so each review costs 1 credit for the pair.
| Reviews per month | Credits (2 formats) | Plan | Cost |
|---|---|---|---|
| 100 | 100 | Creator, $29/mo (200 credits) | included |
| 1,000 | 1,000 | Business, $99/mo (1,000 credits) | included |
A third format adds 0.5 credits per review for a clip under 30 seconds.
Where to go next
To send a batch of reviews from a file, the CSV guide loops over the rows. For a posting schedule on the vertical channels, see automate Instagram Reels and automate TikTok videos.
Frequently asked
Can I pass width and height to get a square cut of a vertical template?
Does each format cost a separate render?
Is there a square or 4:5 version of the testimonial template?
Why does the same quote fit in one format and not the other?
Can I change the closing line or the star rating?
Related guides
Automate Instagram Reels: One Template, One Row per Post
Run a Reels account off a spreadsheet. Lock one format, keep a row per post, and render the week in a single pass for half a credit a video.
Automate TikTok Videos: Render the Recurring Post on a Schedule
Automate the TikTok post you repeat, not the idea. Pull this week's data from the system that already holds it, render one vertical video on a cron, then post it.
Bulk Video from CSV: Generate One Video per Row
Turn a CSV export into finished videos. Map headers to template variables, send one render request per row from a resumable script, and collect every result.