Generate images, PDFs and videos
from one template and one API call.
The BuildOnce Render API turns a template you design once into finished files: PNG, JPEG, PDF, MP4, WebM or GIF. Send POST /v1/templates/:id/render with the values that change — a headline, a price, a photo — and get the file back. Images and PDFs come back in the same call; videos render in the background.
Who uses Render API
Product teams
Certificates, invoices, share cards and personalised images generated per user, from your own backend.
Marketing and growth
Banners, social posts and ad variants made from one on-brand template instead of one file at a time.
Automations
n8n workflows and scripts that render a file whenever a row, order or event changes.
Agencies
Every client's templates in their own workspace, each with its own API key and brand kit.
Three steps
- 01
Design the template
Build it in the visual studio, or import it from Canva, Polotno, HTML, Templated, Bannerbear or Orshot.
- 02
Name the parts that change
Mark a text, image or video layer as a variable — headline, price, photo — and the API can fill it.
- 03
Call the API
Send the values in modifications. You get the file URL, its size and the credits charged in the response.
One request, one finished image
Every call is a new render request with its own renderId. Add allPages for a carousel or a multi-page PDF, or an idempotencyKey to make a retry free.
curl -X POST https://buildonce.app/v1/templates/tpl_123/render \
-H "Authorization: Bearer fl_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "png",
"modifications": { "headline": "50% off today" }
}'What Render API does
Six output formats
PNG and JPEG per page, PDF as one multi-page document, and MP4, WebM or GIF with every animation and page transition.
Render and post in one call
Add a publish block and the files go to your connected social accounts, now or at a scheduled time.
Render history and rerenders
GET /v1/renders lists every request; a rerender draws again from the exact design snapshot it was made from.
Webhooks
render.completed and ten other signed, retried events tell your server the moment something changes.
What to know before you build
- 1 credit per PNG or JPEG file, 1 per PDF page and 1 per started second of video, up to 60 seconds.
- Every request is charged, including identical ones; only a retry with the same idempotencyKey is free.
- Videos are asynchronous: the call answers 202 with a renderId to poll or a render.completed webhook to wait for.
- Video can be scaled up to 2160 px on the longest side; GIF runs at up to 15 fps.
- An API key is bound to one workspace and can never act on another.
- Requests per minute: Launch 60, Grow 120 and Scale 600.
Go deeper
Render API questions
Short answers to what people ask most. The documentation covers every endpoint, tool and limit.
PNG, JPEG, PDF, MP4, WebM and GIF. Images come back one file per page, a PDF is one multi-page document, and a video renders every page as one animated clip with its enter, exit and page-transition animations.
One render credit per PNG or JPEG file, one per PDF page and one per started second of video. A four-page PDF is four credits; a 15-second MP4 is 15. Credits come with your plan and refill every month on paid plans.
Only if it is a new request. Send the same idempotencyKey on a retry and you get the original render back without being charged again.
A video request answers 202 with a renderId straight away. Poll GET /v1/renders/:renderId until its status is succeeded or failed, or subscribe to the render.completed webhook.
Yes. Import from a public Canva link, a Polotno JSON export, raw HTML, or a saved web page from Templated, Bannerbear or Orshot. The result is an ordinary editable template with variables.
Yes. The n8n community node calls the same API, and AI agents render through the BuildOnce MCP server. All of them bill the same workspace credits and appear in the same render history.