HTML in, PDF out.Nothing kept.
A PDF and screenshot API for developers. Send HTML, a URL or a template with JSON; the PDF comes back in the same response.
100 renders a month free. No card needed.
200 application/pdfpagenull-retention: none
- Rendered in memory
- Chromium gets your HTML and the PDF goes straight back in the response.
- Never written to disk
- No file, no database row, no log line with your content. A test fails if that ever changes.
- Signed on every response
- pagenull-retention: none and an Ed25519 receipt for the exact bytes you got back.
Paste HTML, get the PDF
The same Chromium as the API, in your browser. No sign-up; JavaScript and outside requests are off here.
3.0 of 100 KB
Edit anything and render again (Ctrl+Enter). JavaScript and outside requests are off here; Inter and Source Serif 4 are built in.
Your HTML goes to Chromium in memory and the PDF comes straight back. Neither is written to disk or logged.
What we store: nearly nothing, and never your documents
Invoices, contracts, medical letters and payslips go through PDF APIs. Ours is built so there is nothing to leak: what you send is rendered and forgotten.
Kept
Account data, to run the service- Your email address and a password hashTo log you in.
- API key hashes and a 12-character prefixTo check keys and let you tell them apart (pm_live_ plus 4). We can't show a key again.
- Monthly render counts per accountFor quotas and billing.
- Request metadata for 30 daysKey id, time, endpoint, status, size and duration. For your usage page and abuse limits.
- Templates you saveEncrypted at rest with AES-256-GCM. Delete them any time.
Never kept
Everything in your documents- The HTML you sendHeld in memory while Chromium renders, then dropped.
- URLs you renderNot logged, not stored.
- Template data (the JSON you merge in)Used once for the render, never written anywhere.
- The PDFs and images you get backStreamed to you, or uploaded to your own bucket. No copy kept, and no option to keep one.
- Request bodies in logsThe logger only accepts metadata fields. Content can't reach it.
The details, including sub-processors and how deletion works, are on privacy & security.
Save the layout once, send JSON for each document
Store a receipt or invoice template with {{variables}}, then render it with each order. The template is encrypted at rest; the order data is used once and dropped.
curl https://api.pagenull.dev/v1/templates/receipt/render \
-H "Authorization: Bearer $PAGENULL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"data": {
"shop": "Fieldnote Supply",
"receiptNo": "R-55821",
"total": "€42.00",
"items": [
{
"qty": 1,
"name": "Fineliner set",
"price": "€12.00"
}
]
}
}' \
-o receipt.pdfEvery option, on one sheet
The parts of a request you'll actually reach for. Pass them in the JSON body.
Source
- html
- string, up to 5 MB
- Render this HTML.
- url
- public http(s) URL
- Load a page instead. Private, loopback and metadata addresses are refused, after every redirect.
Page
- format
- A4 or Letter or Legal or A3 or A5 or Tabloid
- Paper size, or let a CSS @page rule decide.
- width, height
- "80mm" or "8.5in" or height "auto"
- Custom size. "auto" fits one page to the content, for receipts.
- margin
- { top, right, bottom, left }
- In mm, cm, in or px.
- pageNumbers
- true or "Page {page} of {pages}"
- Numbers every page.
- headerHtml, footerHtml
- HTML
- Repeated on every page.
Loading
- waitFor
- CSS selector
- Capture once your chart or script has marked itself ready.
- javascript, allowNetwork
- true or false
- Turn page scripts off, or block every outside request.
Output
- /v1/screenshot
- png or jpeg, up to 3× density
- Images of the same HTML or URL.
- /v1/invoices
- Factur-X / ZUGFeRD, PDF/A-3b
- EU e-invoices from JSON, with the EN 16931 XML embedded. Checked with Mustang and veraPDF in our tests.
- deliverTo
- presigned PUT URL
- Upload to your own bucket instead of the response. We keep no copy.
- test
- true
- Watermarked, free, not counted.
One render is one render
No seats, no template limits, no storage fees. Failed and test renders are free.
- Free
- €0
- 100 renders a month
- Starter
- €9
- 3,000 renders a month
- Growth
- €29
- 15,000 renders a month
- Scale
- €79
- 50,000 renders a month
- Volume
- €199
- 200,000 renders a month
Fair questions
Why not just run Puppeteer myself?
You can, and for a few trusted documents it's fine. The work is in what comes after: font packs for every script, Chromium memory and restarts, timeouts, and blocking pages from reaching your internal network. That's what you pay us to handle.
What if I need to store the PDF?
Store it yourself, where your other records live. Return it in the response, or pass deliverTo with a presigned URL and we upload it straight to your bucket. We keep no copy either way.
How do I debug if you keep nothing?
Each response carries a render id and a pagenull-warnings header that names problems such as missing glyphs, overflowing content or images that failed to load. Use test renders, which are free, while you work on a template.
Your first PDF is one curl command away
Get a free API key