White Label Video API in Your Customer's Brand
Use a white label video API to render videos in each customer's brand: one project per brand, your own storage and webhooks, and no vendor logo in the frame.

A white label video API renders each video in your customer's brand, with nothing of the vendor in the frame, the link or the notifications. Clone a template into one project per brand, send every brand field on every request, call the API only from your server, and copy each MP4 to your own storage. One 32-second video costs 1 credit.
The finished video
This guide uses Customer Milestone Celebration, a 32-second 1080x1920 account-anniversary video with eight dynamic fields: a greeting, a personal line, the milestone, the member-since date, an offer, a code, a team sign-off and a logo. A loyalty platform or a CRM can send it on behalf of each business that uses it, to each of that business's customers.
What you need
- A Renderly API key. Create one in the dashboard under Settings → API keys.
- Each customer's logo at a URL that serves the image file, and their brand colours and font.
- A storage bucket or CDN on your own domain.
Step 1 - Find every place the vendor can show
The results for this query are mostly video hosting players, editor SDKs to embed in an app, and AI video tools that agencies resell. Each one removes the vendor brand from a different surface. A render API has three:
| Surface | Where the vendor shows | Fix |
|---|---|---|
| The frame | A watermark, an end credit, a sample logo | Steps 2 and 3 |
| The messages | A dashboard, an email, a callback your customer sees | Step 4 |
| The file | A download link on the vendor's domain | Step 5 |
Renderly adds nothing to the frame of an API render. The video holds only the layers of the template or project you send. The risk is the template's own sample values, which step 3 covers.
Step 2 - Make one project per customer brand
A request changes only two things: the text of text and shape layers, and the
src of image, video and sound layers. Colours, fonts and layout come from the
template. One template therefore gives every customer the same cream, espresso
and coral palette.
Give each customer their own look in a project. Click Use this template on the template page, then in the editor:
- Change the colours and fonts to the customer's brand.
- Rewrite the fixed text that speaks for them. This template says "Our treat. No expiry, no catch." and "thank you for a whole year of you." in fixed layers, so a two-year milestone or an offer with an end date needs new copy.
- Keep the names of the dynamic layers, so one request shape fits every customer.
The project id is in the editor URL (/editor/{projectId}).
Store it with the customer record.
Step 3 - Send every brand field on every request
A field you leave out of replacements keeps the template's sample value.
In this template the sample brand_logo is the Renderly logo. A request
without it renders without an error, and your customer's video ends on our
logo. Send the logo and the sign-off every time.
Fit the copy to each box. GET /api/v1/projects/{projectId}/variables returns
maxCharacters for each text field. For this template the estimates are about
10 characters for first_name, 119 for personal_line, 11 for
years_label, 38 for offer_text and 28 for team_signature. A longer value
does not fail. The render succeeds and the tail is hidden. POST /api/v1/previews
takes the same body, costs nothing, and returns a TEXT_MAY_CLIP warning for a
field that is likely too long.
Step 4 - Keep the API on your server
Call Renderly from your backend only. Your customers use your screens and never need a Renderly account or key.
curl -X POST https://renderly.video/api/v1/renders \
-H "Authorization: Bearer $RENDERLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "PROJECT_ID_FOR_THIS_CUSTOMER",
"replacements": {
"first_name": "Hey Sam,",
"personal_line": "Two years of Saturday orders. We noticed, and we are grateful.",
"years_label": "Two Years",
"member_since": "October 2024",
"offer_text": "A free coffee\nwith your next order",
"offer_code": "SAM2YEARS",
"team_signature": "- The Northside Bakery team",
"brand_logo": "https://cdn.yourplatform.com/brands/northside/logo.png"
},
"webhookUrl": "https://api.yourplatform.com/hooks/renderly"
}'The response returns a jobId and creditsUsed: 1. Store the jobId with
the customer and the recipient. Set webhookUrl to your own endpoint, so the
completion event goes to your backend and not to a person.
Step 5 - Copy the file to your own storage
When the job is done, GET /api/v1/renders/{jobId} returns outputUrl, and a
render.completed event reaches your webhookUrl. That URL points to Renderly's
storage. Download the MP4 and upload it to your own bucket, then send your
customer a link on your own domain. Your link then stays the same if you change
vendors. The webhooks guide
covers the signature check before you trust the event.
What this costs at scale
Renderly bills 1 credit per minute of 1080p output, rounded up to the nearest half credit. A 32-second video rounds up to 1 credit. One account pays for all your customers' renders, and you set your own prices on top.
| Videos per month | Credits | Plan | Cost |
|---|---|---|---|
| 100 | 100 | Creator, $29/mo (200 credits) | included |
| 1,000 | 1,000 | Business, $99/mo (1,000 credits) | included |
The Business plan also allows an organization with up to 5 seats. Projects in the organization render against its shared credit pool.
Where to go next
For one look per client across an agency's accounts, see automated business metrics videos. To send a batch from a file, the CSV guide loops over the rows. To give each customer a vertical and a widescreen cut, see the multi format guide. To ship this as a feature inside your own app, with per-tenant quotas and webhook routing, see embedding video generation in your SaaS.
Frequently asked
Does Renderly add a watermark or a credit to API renders?
Can I change the colours or the font per customer in the request?
What happens if I forget to send brand_logo?
Can my customers call Renderly directly?
How do I pay for renders on behalf of many customers?
Related guides
Automated Business Metrics Video, One per Client
Render an automated business metrics video for every client from the numbers your reporting job already computes, with the same look each month.
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.
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.