Templates in. PDFs out.
PDF rendering API
Build your template once. Generate thousands of personalized PDFs — invoices, reports, certificates — via API, no infrastructure required.
Simple by design
Build your layout once. Add variable placeholders like {{ customer_name }} where your data should appear.
POST your data as JSON. tembuilder resolves every variable and renders the document instantly.
Receive a finished PDF — ready to download, store, or hand back to your users at any scale.
Built for
Turn every charge into a branded PDF invoice — line items, totals, tax — generated the moment it succeeds.
Welcome letters, offer letters, onboarding kits — personalized with a new hire's name, role, and start date.
Course completions and certifications — one template, resolved for every learner from your data.
Turn a JSON payload into a branded report — metrics, tables, commentary — ready to send on a schedule.
Print-ready books and manuals — mirrored inside/outside margins for binding, and pagination that holds up across hundreds of pages.
See it in action
Switch between a visual structure tree and raw HTML/CSS without losing your place. Every change reflects in the live preview instantly.
1<section>2 <h1>{{ customer_name }}</h1>3 <p>Total: {{ total_amount }}</p>4</section> Drag sections in the structure tree, or drop straight into HTML and CSS — both stay in sync.
Branch a template into variants and see exactly what changed, diffed against the base.
Define the JSON schema once — tembuilder generates the contract your integrations send data against.
Publish a version, then fire a real request from the built-in Playground with your API key. Copy the cURL and you're integrated.
Built for developers
Templates render synchronously on the server — no queues, no cold starts. Speed scales with what you build.
Invoices, reports, certificates, welcome letters, and more — one platform, every layout.
Design with {{ placeholders }}. tembuilder resolves every variable against your JSON at render time.
Every save is a version — branch any of them into a variant, diff it against the base, and publish only when it’s ready.
Keep-together control on every section, so tables and rows never split awkwardly across a page.
Logos, photos, and fonts live in folders and stay reusable across every template in the project.
Good to know
PDF. Build your layout in HTML and CSS, and every render comes back as a finished, downloadable PDF.
Yes — the live preview always reflects your current draft as you build, but the render API (and the in-editor Playground) runs against a published version, so you always know exactly which version an integration is hitting.
Drop {{ placeholders }} anywhere in your template, define the matching JSON schema once in Parameters, and tembuilder resolves every value against the payload you POST at render time.
Each section has page-break controls — keep-together and break before/after/both — so rows and tables never get split awkwardly across a page boundary.
Every save is a version you can go back to. You can also branch any version into a variant and diff it against the base before deciding what to publish.
In a project-level asset library, organized into folders, so the same logo or font is reusable across every template in the project — not re-uploaded each time.