Generate quotes & estimates from HTML, in one API call
quote PDF API
A quote is a sales document — it should look sharp and arrive instantly. Render an itemised estimate with line items, totals and a validity date from your CRM or app data in one call, and email a polished PDF before the lead cools.
No credit card · 25 free credits to start
OVERVIEW
What is the quote PDF API?
The quote PDF API is an HTTP endpoint that renders a branded estimate from HTML in one request. You POST the quote data as JSON to /v1/render — line items, totals, and a “valid until” date — and get a print-ready PDF back in about 400ms, polished enough to email to a prospect while the lead is still warm.
A quote is a sales document, not a back-office one. It is the first formal thing a prospect sees with your name and numbers on it, so it has to look sharp and arrive fast — ideally while the rep is still on the call. It also carries two things an invoice does not: a validity window (a “valid until” date that tells the buyer to decide before pricing changes) and the implicit promise that, once accepted, it becomes the order without anyone retyping the figures.
Generating quotes from HTML lets that document share a design language with the rest of your billing instead of drifting in a separate quote-builder. You design the quote once as HTML and CSS — line items, optional discounts, the total, and a clear “valid until” block — and let your CRM or app data fill it in. The line items are the only repeating part: the merge engine is loop-free, so you render the rows to HTML yourself and drop them in through one raw {{{ rowsHtml }}} placeholder, with the validity date and totals as ordinary {{ placeholders }}.
Because a render takes roughly 400 milliseconds and runs synchronously, a rep can generate and email a quote during the conversation — POST the data to /v1/render, get the PDF bytes back, and send before the lead cools. When the prospect accepts, reuse the same data shape against your invoice template to turn the quote straight into an invoice with a matching layout — no re-keying, no second design. Nothing is stored on our side; the quote bytes are streamed back and discarded.
THE PROBLEM
Generating quotes & estimates in-house is a two-week project you'll maintain forever
Turning HTML into a clean PDF yourself means running headless Chrome and everything around it. Here's the work you skip.
- Maintaining a separate quote-builder that drifts from your invoice layout.
- Formatting line items, discounts and a "valid until" block in a PDF library by hand.
- Running a browser cluster to render what is one templated sales document.
- Waiting on a background job when the rep wants to send the quote on the call.
THE SOLUTION
From your data to a finished quotes & estimate, in one request
Store your quotes & estimates layout once, then POST the values to /v1/render and get print-ready application/pdfbytes back in roughly 400ms. Merge is plain{{ }} /{{{ }}} and dotted keys — no template loops to learn, so repeating rows are rendered to HTML and dropped in through one raw placeholder.
- Polished and on-brand. Your HTML, your logo and colours — a quote that looks like it came from your design team, not a library default.
- Send it instantly. A ~400ms synchronous render lets a rep generate and email a quote during the conversation.
- Becomes the invoice. Reuse the same data shape to turn an accepted quote into an invoice with the matching layout.
curl https://api.pdfinvoiceapi.com/v1/render \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template": "tpl_quote",
"data": {
"quoteNo": "Q-2208",
"validUntil": "2026-07-15",
"prospect": { "name": "Northwind Traders" },
"rowsHtml": "<tr><td>Implementation</td><td>€4,000.00</td></tr><tr><td>Training (2 days)</td><td>€1,200.00</td></tr>",
"total": "€5,200.00"
},
"pdf": { "format": "A4", "margin": "18mm", "printBackground": true }
}' \
-o quote.pdfHOW TO
How to generate quotes & estimates from HTML
- 01
Design the quote in HTML
Build the estimate as plain HTML and CSS — quote number, prospect block, an itemised table, optional discounts, the total, and a “valid until” block. Mark the dynamic values with {{ placeholders }} and add your logo and colours.
- 02
Store it once as a template
Save the layout in the dashboard for a tpl_ id, ideally in the same family as your invoice template so an accepted quote converts cleanly. Every quote is then just data.
- 03
POST the quote data to /v1/render
Send the template id and a JSON data object with your API key. Render the line items to HTML rows and pass them through one raw {{{ rowsHtml }}} placeholder; the validity date and totals are plain {{ placeholders }}.
- 04
Stream the PDF back
The response body is the quote PDF. Email it to the prospect or return it from your endpoint as application/pdf — fast enough for a rep to send it during the call.
WHAT YOU GET
The features that matter for quotes & estimates
Polished and on-brand
Your HTML, your logo and colours — a quote that looks like it came from your design team, not a library default.
Send it instantly
A ~400ms synchronous render lets a rep generate and email a quote during the conversation.
Becomes the invoice
Reuse the same data shape to turn an accepted quote into an invoice with the matching layout.
FAQ
Quotes & estimates on PDFInvoiceAPI — common questions
- How do I generate a quote PDF from HTML?
- Design the quote as HTML/CSS with {{ placeholders }}, store it once as a template, then POST the template id and a JSON data object to /v1/render. You get application/pdf bytes back in one synchronous call — no SDK to install and no browser to run yourself.
- Can I include a “valid until” date and discounts on the quote?
- Yes — they render however your HTML lays them out. Pass the validity date and any discount or total as plain {{ placeholders }} in your data; the renderer reproduces them pixel-for-pixel, in any currency or glyph your CSS uses.
- Can an accepted quote become an invoice?
- Yes. Keep your quote and invoice templates in the same HTML/CSS family and drive both from the same data shape, so when a prospect accepts you POST the same line items to your invoice template and get a matching invoice PDF with no re-keying.
- Is it fast enough to send a quote during a sales call?
- Yes. A typical quote renders in roughly 400 milliseconds, synchronously, so a rep can generate and email a polished estimate while still on the call — no background job, no waiting.
- Can I use my own logo, fonts and brand colours?
- Always — the PDF is your own HTML/CSS, so the quote looks like it came from your design team. Drive the logo and accent colour from data, or save a brand kit and {{brand.logo}} / {{brand.color}} fill in automatically.
- Are my quotes stored on your servers?
- No. Each quote is streamed back in the response and discarded — the content is processed transiently and never persisted on our side.
RELATED
Same API, more documents
The render call that makes quotes & estimates makes these too — one endpoint for everything your product hands a customer.
Render your first quotes & estimate PDF in the next five minutes
One endpoint, real PDFs, 25 free credits to start. No credit card to begin.
Cancel anytime · no long-term contract