HTML to PDF API for invoices, receipts and reports.
Send your HTML template, get a print-ready PDF from real Chromium. Page numbers in the footer, A4, Letter or an 80 mm receipt, and every alphabet renders. 25,000 PDFs for $15 a month, with screenshots and Markdown on the same key.
Free plan: 100 renders a month with every feature. No card needed.
Try it on any site
Your result appears here. Ads and cookie banners are removed in this demo.
Get this from your own code. The same request as an API call:
What you get
Your template, our browser
If it looks right in Chrome, it prints the same. No new layout language to learn.
Headers, footers, page numbers
Templates with pageNumber and totalPages fill in on every page.
Any page size
A4, Letter, A0–A6 or a custom width such as an 80 mm receipt.
Every alphabet
Turkish, Arabic, Hebrew, Chinese, Japanese, Korean, Thai, Devanagari and emoji fonts installed.
One request
The response body is the file. Errors come back as JSON with a code you can switch on.
curl https://rendersbolt.com/v1/pdf \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<h1>Invoice #1042</h1>","format":"A4","margin":"15mm",
"footer_template":"<div style=\"font-size:9px;width:100%;text-align:center\">Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>"}' \
-o invoice.pdf
const res = await fetch('https://rendersbolt.com/v1/pdf', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ html: renderInvoice(order), format: 'A4', margin: '15mm' }),
});
await storage.put(`invoices/${order.id}.pdf`, Buffer.from(await res.arrayBuffer()));
r = requests.post(
"https://rendersbolt.com/v1/pdf",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"html": render_invoice(order), "format": "A4", "margin": "15mm"},
)
storage.put(f"invoices/{order.id}.pdf", r.content)
What 1,000 renders cost
We run on our own hardware, so the price per render is a fraction of what most hosted APIs charge.
| Service | Plan | Per 1,000 | Per month | Included |
|---|---|---|---|---|
| render-bolt Starter | Starter | $0.60 | $15 | 25,000 renders |
| render-bolt Growth | Growth | $0.39 | $39 | 100,000 renders |
| Urlbox Hi-Fi | Hi-Fi | $9.80 | $49 | 5,000 renders |
| Urlbox Ultra | Ultra | $6.60 | $99 | 15,000 renders |
| PDFShift Startup | Startup | $18.00 | $9 | 500 credits |
| DocRaptor Basic | Basic | $120.00 | $15 | 125 documents |
List prices from each provider's public pages, checked October 2026: Urlbox, PDFShift, DocRaptor. All plans
Questions
Do I have to change my HTML?
Usually not. If the page looks right in Chrome, the PDF looks the same. Add @media print rules to hide navigation and control page breaks.
How do I add page numbers?
Send a footer_template with elements of class pageNumber and totalPages, and leave a bottom margin for it.
How large can a document be?
The HTML can be up to 5 MB. Long documents are fine: a 40-page report counts as one render.
Do you keep my invoices?
No. The PDF streams back in the response and is not stored, unless you ask for a 24-hour file link.
Read next
Render your first page in a minute
100 free renders every month. Upgrade only when you need more.